Параллельное программирование == программирование мультипотока?

Параллельное программирование == программирование мультипотока?

44
задан JRL 19 February 2010 в 10:53
поделиться

3 ответа

Многопоточное программирование является параллельным, но параллельное программирование не обязательно является многопоточным.

Если многопоточность не выполняется на одном ядре, в этом случае она только параллельна.

30
ответ дан 26 November 2019 в 22:04
поделиться

Не обязательно . Вы можете распределять задания между несколькими процессами и даже несколькими машинами - я бы не стал классифицировать это как «многопоточное» программирование, поскольку каждый процесс может использовать только один поток, но это, безусловно, параллельное программирование. По общему признанию, вы могли бы тогда возразить, что с несколькими процессами в системе в целом есть несколько потоков ...

В конечном итоге, подобные определения полезны только в контексте. В вашем конкретном случае какая разница? Или это просто ради интереса?

28
ответ дан 26 November 2019 в 22:04
поделиться

Нет. Многопоточное программирование означает, что у вас есть один процесс, и этот процесс генерирует группу потоков. Все потоки выполняются одновременно, но все они находятся в одном пространстве процессов: они могут обращаться к одной и той же памяти, иметь одинаковые дескрипторы открытых файлов и т. д.

Параллельно программирование - это более «общее» определение.в MPI вы выполняете параллельное программирование, выполняя один и тот же процесс несколько раз, с той разницей, что каждый процесс получает свой «идентификатор», поэтому при желании вы можете различать каждый процесс, но это не обязательно. Кроме того, эти процессы независимы друг от друга, и они должны взаимодействовать через каналы или сетевые / unix-сокеты. Библиотеки MPI предоставляют определенные функции для перемещения данных между узлами в синхронном или асинхронном стиле.

В отличие от этого, OpenMP обеспечивает распараллеливание с помощью многопоточности и разделяемой памяти. Вы указываете компилятору специальные директивы, и он автоматически выполняет параллельное выполнение за вас.

Преимущество OpenMP в том, что он очень прозрачен. Есть цикл для распараллеливания? просто добавьте пару директив, и компилятор разбивает ее на части и назначает каждую часть цикла другому процессору. К сожалению, для этого вам нужна архитектура с общей памятью. Кластеры с узловой архитектурой не могут использовать OpenMP на уровне кластера. MPI позволяет вам работать с архитектурой на основе узлов, но вы должны расплачиваться за более сложное и непрозрачное использование.

26
ответ дан 26 November 2019 в 22:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: