Свяжитесь между отдельными MPI-программами

У меня есть следующая проблема:

Программа 1 имеет огромный объем данных, скажите 10 ГБ. Рассматриваемые данные состоят из большого целого числа - и двойные массивы. Программа 2 имеет 1.. n MPI процессы, которые используют мозаики этих данных для вычислений результатов.

Как я могу отправить данные от программы 1 до Процессов MPI?

Используя Файловый ввод-вывод исключено. Вычислить узел имеет достаточную RAM.

5
задан Jonathan Leffler 23 May 2010 в 15:05
поделиться

3 ответа

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

 mpirun -n 1 big_program : -n 20 little_program

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

5
ответ дан 14 December 2019 в 08:44
поделиться

Один из вариантов ответа - разместить две программы на разных коммуникаторах; один исполняемый файл может запускать оба набора приложений, используя динамическое управление процессами MPI-2, а программа-производитель обменивается данными через MPI_COMM_WORLD с приложением-«потребителем». Впоследствии весь IPC для потребительского приложения должен был бы выполняться внутри субкоммуникатора, который исключал часть производителя. Однако это означало бы переписывание, чтобы избежать прямых вызовов MPI_COMM_WORLD.

1
ответ дан 14 December 2019 в 08:44
поделиться

На основании вашего описания «Программа 1» не является приложением MPI, а «Программа 2» - приложением MPI. Кратчайший путь к решению, вероятно, приведет к открытию сокета между двумя программами и отправке данных таким образом. Это не требует, чтобы «Программа 1» была преобразована в программу MPI. Я бы начал с гнезда между «Программой 1» и «Программой 2: Ранг 0», с Рангом 0, распределяющим данные между оставшимися рангами.

Несколько предложений до сих пор включали запуск разнородного набора исполняемых файлов в качестве одного из возможных решений. Не требуется, чтобы все ранги в одном задании MPI были одним и тем же исполняемым файлом. Для этого требуется, чтобы оба исполняемых файла были «программами MPI» (например, включали как минимум вызовы MPI_Init и MPI_Finalize). Уровень модификации, требуемый для «Программы 1», и невозможность запустить ее вне среды MPI могут сделать эту опцию непривлекательной.

Я бы порекомендовал вам избегать подхода «динамического процесса», если вы не используете коммерческую реализацию, которая предлагает поддержку. Поддержка подключения / принятия в реализациях MPI с открытым исходным кодом имеет тенденцию быть неоднозначной. Это может «просто работать», но получение технической помощи, если это не так, может быть открытой проблемой.

1
ответ дан 14 December 2019 в 08:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: