Как запустить MPI-3.0 в режиме совместной памяти, например, OpenMP

14

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

У меня есть доступ к кластеру с 15 узлами, где каждый узел имеет два 8-ядерных процессора и 128 ГБ оперативной памяти. Я хочу написать запустить программу с MPI-3.0 в режиме общей памяти, чтобы каждый процесс не генерировал свою собственную копию каждого массива.

Прежде чем я смогу запустить что-либо в кластере, я должен проверить это на рабочем столе под управлением Ubuntu. По сути, это один из блейдов кластера, который имеет два 8-ядерных процессора и 128 ГБ оперативной памяти. Я буду писать и тестировать свой код на нем, поэтому, пожалуйста, направьте ваши ответы на запуск программ на компьютере с Ubuntu.

Я читал, что есть способ запустить MPI-3.0 в режиме с общей памятью, например OpenMP, вместо режима по умолчанию с распределенной памятью.

Вопросов:

  1. Как мне придется изменить свой код? Нужно ли добавлять вызовы в другие функции MPI, как MPI_WIN_ALLOCATE?

  2. Как мне скомпилировать мой код для запуска MPI-3.0 в режиме совместной памяти? Будет ли это по-другому, если это более чем на нескольких узлах?

Пожалуйста, дайте примеры сценариев компиляции, если можете. У меня также есть только компиляторы GNU. Кластер, который я использую, не поддерживает компиляторы Intel.

Франклин Беттен
источник
1
Да, вы должны иметь возможность запускать MPI в системе с общей памятью. Однако способ, которым это фактически запрограммировано, будет идентичным. Ваш код должен быть одинаковым для систем с общей и распределенной памятью. Как это работает, единственная разница.
NoseKnowsAll
Кроме того, хотя я не проверял это, я считаю, что вы сможете запустить свой код, используя команду, mpiexec -n 8 /path/to/applicationчтобы подделать ваш компьютер, думая, что он имеет 8 различных узлов.
NoseKnowsAll
Я уже запустил его в системе с общей памятью, но я хочу, чтобы вычислительные ядра разделяли оперативную память, как в OpenMP. Некоторые из моих массивов занимают 6 ГБ, поэтому мне нужно, чтобы все ядра на каждом узле работали в режиме совместной памяти.
Франклин Беттен
2
Ну, это для исследовательского проекта. Поэтому мне нужно увеличить размер проблемы. У меня уже есть рабочий код, поэтому единственное, что мешает масштабированию - это необходимая память. Я сталкивался с некоторыми документами и точками питания с конференций MPI, которые предполагают, что MPI-3.0 может совместно использовать память с новыми функциями вызовов, которые были добавлены в категории односторонней связи. Такие функции, как MPI_WIN_ALLOCATE_SHARE
Франклин Беттен
2
www.eurompi2014.org/tutorials/hoefler-advanced-mpi-eurompi14.pdf cs.utexas.edu/users/flame/BLISRetreat2014/slides/…
Франклин

Ответы:

0

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

В любом случае, здесь есть ссылка, которая фактически говорит о том, что вы можете запустить MPI3.0 + в режиме совместной памяти, например, openmp. Я нашел другие источники, которые также предлагают, и некоторые, в которых говорится, что вы можете, но не объясняете, как или предоставлять ресурсы, чтобы это выяснить.

/programming/24797298/mpi-fortran-code-how-to-share-data-on-node-via-openmp

Следуя совету, приведенному здесь в этой ссылке, я столкнулся с проблемами при размещении USE 'mpi_f08' в верхней части моего кода. Я использую gfortran-4.8, который, по-видимому, в настоящее время не имеет достаточной поддержки FORTRAN2008 для использования mpi_f08. Там человек по этой ссылке, вероятно, использовал компилятор Intel Fortran 2008. Вы можете использовать USE mpi, который достаточно хорошо подходит для Fortran2003. Однако я не думаю, что Fortran 2003 имеет функции Type (), которые необходимы для использования функций удаленного доступа к памяти, таких как MPI_WIN_ALLOCATE_SHARED, поэтому вы не можете использовать их без FORTRAN2008. Но у меня действительно нет достаточно ресурсов, чтобы определенно сказать это, но то, что я обнаружил, говорит об этом.

Франклин Беттен
источник
1
Вы можете использовать MPI_Win_allocate_shared со всеми тремя интерфейсами Fortran. Кроме того, вы можете написать свой собственный с Fortran 2003 ISO_C_BINDING и интерфейсом C.
Джефф
Скажите, пожалуйста, зачем нужен Type (), чтобы использовать RMA из Fortran? Я не знаю такого ограничения. RMA использовался с F77 много лет.
Джефф