Я распараллеливаю код для численного решения пятимерной модели баланса населения. В настоящее время у меня есть очень хороший параллельный код MPICH2 в FORTRAN, но когда мы увеличиваем значения параметров, массивы становятся слишком большими, чтобы работать в режиме распределенной памяти.
У меня есть доступ к кластеру с 15 узлами, где каждый узел имеет два 8-ядерных процессора и 128 ГБ оперативной памяти. Я хочу написать запустить программу с MPI-3.0 в режиме общей памяти, чтобы каждый процесс не генерировал свою собственную копию каждого массива.
Прежде чем я смогу запустить что-либо в кластере, я должен проверить это на рабочем столе под управлением Ubuntu. По сути, это один из блейдов кластера, который имеет два 8-ядерных процессора и 128 ГБ оперативной памяти. Я буду писать и тестировать свой код на нем, поэтому, пожалуйста, направьте ваши ответы на запуск программ на компьютере с Ubuntu.
Я читал, что есть способ запустить MPI-3.0 в режиме с общей памятью, например OpenMP, вместо режима по умолчанию с распределенной памятью.
Вопросов:
Как мне придется изменить свой код? Нужно ли добавлять вызовы в другие функции MPI, как
MPI_WIN_ALLOCATE
?Как мне скомпилировать мой код для запуска MPI-3.0 в режиме совместной памяти? Будет ли это по-другому, если это более чем на нескольких узлах?
Пожалуйста, дайте примеры сценариев компиляции, если можете. У меня также есть только компиляторы GNU. Кластер, который я использую, не поддерживает компиляторы Intel.
mpiexec -n 8 /path/to/application
чтобы подделать ваш компьютер, думая, что он имеет 8 различных узлов.Ответы:
Я также нашел эту ссылку на переполнение стека. Клянусь, я искал вопросы, подобные моему, навсегда, но, похоже, лучший способ поиска вопроса о переполнении стека - это начать составлять вопрос и предлагать похожие посты.
В любом случае, здесь есть ссылка, которая фактически говорит о том, что вы можете запустить 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. Но у меня действительно нет достаточно ресурсов, чтобы определенно сказать это, но то, что я обнаружил, говорит об этом.
источник