Я широко использовал MPI в больших кластерах с многоядерными узлами. Я не уверен, подходит ли это для одного многоядерного блока, но если вы ожидаете, что ваш код может однажды масштабироваться больше, чем один чип, вы можете рассмотреть возможность его реализации в MPI. Прямо сейчас, ничто не масштабируется больше, чем MPI. Я не уверен, откуда берутся постеры, в которых упоминаются неприемлемые накладные расходы, но я постарался дать обзор соответствующих компромиссов ниже. Читайте дальше.
MPI является стандартом де-факто для крупномасштабных научных вычислений, и он уже широко используется на многоядерных машинах. Это очень быстро. Посмотрите на последний список 500 лучших . Лучшие машины в этом списке имеют, в некоторых случаях, сотни тысяч процессоров с многоядерными двух- и четырехъядерными узлами. Многие из этих машин имеют очень быстрые пользовательские сети (Torus, Mesh, Tree и т. Д.) И оптимизированные реализации MPI, которые знают об оборудовании.
Если вы хотите использовать MPI с одноядерным многоядерным компьютером, он будет работать нормально. Фактически, последние версии Mac OS X поставляются с предустановленной OpenMPI , и вы можете безболезненно загрузить установочный OpenMPI на обычную многоядерную машину с Linux. OpenMPI используется в Лос-Аламос на большинстве их систем. Ливермор использует mvapich в своих кластерах Linux. Перед погружением стоит помнить, что MPI был разработан для решения крупномасштабных научных задач в системах с распределенной памятью . Многоядерные блоки, с которыми вы имеете дело, вероятно, имеют разделяемую память .
OpenMPI и другие реализации по умолчанию используют общую память для локальной передачи сообщений, поэтому вам не нужно беспокоиться о сетевых затратах при передаче сообщений локальным процессам. Это довольно прозрачно, и я не уверен, где другие плакаты получают свои опасения по поводу высоких накладных расходов. Предостережение заключается в том, что MPI - не самая легкая 1022 * вещь, которую вы могли бы использовать для получения параллелизма на одном многоядерном блоке. В MPI вся передача сообщений является явной. По этой причине он был назван "ассемблером" параллельного программирования. Явная связь между процессами не проста, если вы не опытный HPC человек, и есть другие парадигмы, более подходящие для общей памяти ( UPC , OpenMP и хорошие языки, такие как Erlang и другие), которые вы можете попробовать в первую очередь.
Мой совет - использовать MPI, если вы планируете написать параллельное приложение, для решения которого может потребоваться более одной машины. Вы сможете тестировать и нормально работать с обычным многоядерным процессором, и миграция в кластер будет довольно безболезненной, как только вы его там заработаете. Если вы пишете приложение, которое когда-либо будет нуждаться только в одной машине, попробуйте что-нибудь другое. Существуют более простые способы использования такого параллелизма.
Наконец, если вы чувствуете, что действительно любите приключения, попробуйте MPI в сочетании с потоками, OpenMP или какой-либо другой локальной парадигмой разделяемой памяти. Вы можете использовать MPI для распределенной передачи сообщений и что-то еще для параллелизма на узле. Вот куда идут большие машины; ожидается, что будущие машины с сотнями тысяч процессоров или более будут иметь реализации MPI, которые масштабируются до всех узлов , но не до всех ядер, и сотрудники HPC будут вынуждены создавать гибридные приложения. Это не для слабонервных, и предстоит проделать большую работу, прежде чем в этом пространстве будет принятая парадигма.