2015-09-08 4 views

ответ

32

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

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

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

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

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

+0

Вы можете делать то, что вы описываете очень легко, в общем или распределенном программировании памяти. То, что вы ищете, называется «сокращением», – NoseKnowsAll

8

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

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

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

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

Смежные вопросы