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