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