Як запустити MPI-3.0 в режимі спільної пам'яті, наприклад OpenMP


14

Я паралелізую код, щоб чисельно вирішити 5-мірну модель балансу населення. В даний час у мене дуже хороший паралелізований код 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 у спільній системі пам'яті. Однак спосіб, який він фактично запрограмований, буде ідентичним. Ваш код повинен бути однаковим як для спільної, так і для розподіленої системи пам'яті. Те, як це запускається - єдина різниця.
NoseKnowsВсі

Крім того, хоча я цього не перевіряв, я вважаю, що ви повинні мати змогу запустити свій код, використовуючи команду, mpiexec -n 8 /path/to/applicationщоб підробити ваш комп'ютер на думку, що він має 8 різних вузлів.
NoseKnowsВсі

Я вже запустив його в загальній системі пам'яті, але я хочу, щоб обчислювальні ядра ділилися оперативною пам’яттю, як у OpenMP. Деякі мої масиви мають 6 Гб, тому мені потрібні всі ядра кожного вузла для роботи в режимі спільної пам'яті.
Франклін Беттен

2
Ну це для дослідницького проекту. Тому мені потрібно масштабувати розмір проблеми. У мене вже є робочий код, тому єдине, що запобігає збільшенню масштабів, - це необхідна пам'ять. Я зіткнувся з деякими документами та пунктами живлення з конференцій MPI, які передбачають, що MPI-3.0 може обмінюватися пам’яттю з новими функціями виклику, доданими в категорію однобічної комунікації. Такі функції, як MPI_WIN_ALLOCATE_SHARE
Franklin Betten

2
www.eurompi2014.org/tutorials/hoefler-advanced-mpi-eurompi14.pdf cs.utexas.edu/users/flame/BLISRetreat2014/slides/…
Франклін

Відповіді:


0

Я також знайшов це посилання на стеку Overflow. Клянусь, я шукав такі питання, як моє, назавжди, але, здається, найкращий спосіб пошуку питання щодо переповнення стека - це почати запитання, і це запропонує подібні повідомлення.

У будь-якому випадку, тут є посилання, яке насправді говорить про те, що ви можете запускати MPI3.0 + у режимі спільної пам'яті, як openmp. Я знайшов і інші джерела, які також підказують, і деякі з них можна стверджувати, але не пояснюють, як або дають ресурси, щоб це зрозуміти.

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

Дотримуючись порад, наведених тут у цьому посиланні, я зіткнувся з проблемами з тим, що USE 'mpi_f08' поставив у верхній частині свого коду. Я використовую gfortran-4.8, який, очевидно, наразі не має достатньої підтримки FORTRAN2008 для використання USE 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 вже багато років.
Джефф
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.