В чем разница между MPI и OpenMP?

Я хотел бы узнать (в нескольких словах), каковы основные различия между OpenMP и MPI.

Ответы

Ответ 1

OpenMP - это способ программирования на устройствах общей памяти. Это означает, что parallelism происходит там, где каждый параллельный поток имеет доступ ко всем вашим данным.

Вы можете думать об этом как: parallelism может произойти во время выполнения определенного цикла for путем разделения цикла между различными потоками.

MPI - это способ программирования на устройствах с распределенной памятью. Это означает, что parallelism происходит там, где каждый параллельный процесс работает в своем собственном пространстве памяти в отрыве от других.

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

То, как вы пишете программу OpenMP и MPI, конечно, тоже очень отличается.

Ответ 2

MPI означает интерфейс передачи сообщений. Это набор объявлений API при передаче сообщений (таких как передача, получение, трансляция и т.д.), И какое поведение следует ожидать от реализаций.

Идея "передачи сообщений" довольно абстрактна. Это может означать передачу сообщений между локальными процессами или процессами, распределенными по сетевым узлам и т.д. Современные реализации очень стараются быть универсальными и абстрактными из нескольких основных механизмов (доступ к общей памяти, сетевой ввод-вывод и т.д.).

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

И это не редкость, что приложение может использовать как MPI, так и OpenMP.