Подтвердить что ты не робот

Это параллельное программирование == многопоточное программирование?

Это параллельное программирование == многопоточное программирование?

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

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

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