Распределенный массив в MPI для параллельных чисел - PullRequest
1 голос
/ 13 марта 2011

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

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

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

Ответы [ 2 ]

3 голосов
/ 14 марта 2011

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

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

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

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

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

  • Используйте модель PGAS для работы с вашими данными. Затем вы можете использовать библиотеки, такие как Global Arrays (интерфейсы для C, C ++, Fortran, Python) или языки, поддерживающие PGAS, такие как UPC или Co-Array Fortran (скоро будет включен в стандарты Фортрана). Существуют также языки, разработанные специально для этой формы параллелизма, т.е. Крепость , Часовня , X10
  • Бросай свои. Например, я работал над библиотекой, которая использует MPI для выполнения всей грязной работы, но скрывает сложность, предоставляя создание пользовательских типов данных для домена приложения и предоставляя такие API-интерфейсы, как:
    • X_Create(MODE, t_X): создать экземпляр массива, вызываемого всеми процессами, с указанием MODE, указывающим, будет ли текущий процесс требовать доступа READ-WRITE или READ-ONLY
    • X_Sync_start(t_X): неблокирующий вызов для инициирования синхронизации в фоновом режиме.
    • X_Sync_complete(t_X): данные необходимы. Блокировка, если синхронизация не завершена.
    • ... и другие вызовы для удаления данных, а также для выполнения специфических для домена задач, которые могут потребовать вызовов MPI.

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

2 голосов
/ 10 декабря 2014

Для плотных массивов см. Глобальные массивы и Элементаль (Google найдет их для вас).

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

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

...