В чем разница между MPI и OpenMP?
Я хотел бы узнать (в нескольких словах), каковы основные различия между OpenMP и MPI.
Ответы
Ответ 1
OpenMP - это способ программирования на устройствах общей памяти. Это означает, что parallelism происходит там, где каждый параллельный поток имеет доступ ко всем вашим данным.
Вы можете думать об этом как: parallelism может произойти во время выполнения определенного цикла for
путем разделения цикла между различными потоками.
MPI - это способ программирования на устройствах с распределенной памятью. Это означает, что parallelism происходит там, где каждый параллельный процесс работает в своем собственном пространстве памяти в отрыве от других.
Вы можете думать об этом как о: каждый бит написанного вами кода выполняется независимо каждым процессом. parallelism происходит потому, что вы сообщаете каждому процессу, в какой части глобальной проблемы они должны работать, основываясь исключительно на их идентификаторе процесса.
То, как вы пишете программу OpenMP и MPI, конечно, тоже очень отличается.
Ответ 2
MPI означает интерфейс передачи сообщений. Это набор объявлений API при передаче сообщений (таких как передача, получение, трансляция и т.д.), И какое поведение следует ожидать от реализаций.
Идея "передачи сообщений" довольно абстрактна. Это может означать передачу сообщений между локальными процессами или процессами, распределенными по сетевым узлам и т.д. Современные реализации очень стараются быть универсальными и абстрактными из нескольких основных механизмов (доступ к общей памяти, сетевой ввод-вывод и т.д.).
OpenMP - это API, который позволяет сделать это (по-видимому) проще для написания программ обработки множественной обработки с разделяемой памятью. Нет понятия передавать сообщения. Вместо этого, с набором стандартных функций и директив компилятора, вы пишете программы, которые выполняют локальные потоки параллельно, и вы контролируете поведение этих потоков (на какой ресурс они должны иметь доступ, как они синхронизируются и т.д.). OpenMP требует поддержки компилятора, поэтому вы также можете рассматривать его как расширение поддерживаемых языков.
И это не редкость, что приложение может использовать как MPI, так и OpenMP.