Распределенный массив в MPI для параллельных чисел

во многих распределенных вычислительных приложениях вы поддерживаете распределенный массив объектов. Каждый процесс управляет набором объектов, которые он может читать и записывать исключительно, и, кроме того, набором объектов, которые могут только читать (содержимое которых создано и часто получено от других процессов).

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

В идеале он должен быть написан на C(++) и подражать официальному стандартному стилю интерфейса MPI. Кто-нибудь знает что-нибудь подобное? Спасибо.


person shuhalo    schedule 12.03.2011    source источник


Ответы (2)


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

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

В приложениях HPC довольно часто выполняется декомпозиция данных так, как вы упомянули, при этом MPI используется для синхронизации общих данных с другими процессами. Однако каждое приложение имеет разные шаблоны и требования к совместному использованию (некоторые могут захотеть обмениваться областями ореола только с соседними узлами и, возможно, использовать неблокирующие вызовы для перекрытия связи с другими вычислениями), чтобы повысить производительность за счет использования знания проблемной области.

Дело в том, что использовать MPI для синхронизации данных между процессами просто, но над ним реализуется уровень для обработки синхронизации распределенного массива общего назначения, который прост в использовании, но достаточно гибок для обработки различных вариантов использования< /em> может быть довольно хитро.

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

  • Используйте модель PGAS для работы с вашими данными. Затем вы можете использовать такие библиотеки, как Global Arrays (интерфейсы для C, C++, Fortran, Python) или языки которые поддерживают PGAS, такие как UPC или Co-Array Fortran (скоро будет включен в стандарты Fortran). Существуют также языки, разработанные специально для этой формы параллелизма, т.е. Крепость, Часовня, X10
  • Roll your own. For example, I've worked on a library that uses MPI to do all the dirty work but hides the complexity by providing creating custom data types for the application domain, and exposing APIs such as:
    • X_Create(MODE, t_X) : instantiate the array, called by all processes with the MODE indicating if the current process will require READ-WRITE or READ-ONLY access
    • X_Sync_start(t_X) : неблокирующий вызов для запуска синхронизации в фоновом режиме.
    • X_Sync_complete(t_X) : требуются данные. Блокировать, если синхронизация не завершена.
    • ... и другие вызовы для удаления данных, а также выполнения специфичных для предметной области задач, для которых могут потребоваться вызовы MPI.

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

person Shawn Chin    schedule 14.03.2011

Чтобы узнать о плотных массивах, см. Global Arrays и Elemental (Google найдет их для вас).

Для разреженных массивов см. PETSc.

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

person Jeff Hammond    schedule 10.12.2014