Как отладить программу MPI до плохого завершения? - PullRequest
0 голосов
/ 18 октября 2018

В настоящее время я занимаюсь разработкой программы, написанной на C ++, с парадигмой MPI + pthread.

Я добавляю некоторые функции в свою программу, однако у меня получилось сообщение об ошибке завершения одного процесса MPI, например:

===================================================================================
=   BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
=   PID 37805 RUNNING AT node165
=   EXIT CODE: 11
=   CLEANING UP REMAINING PROCESSES
=   YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
===================================================================================
[proxy:0:0@node162] HYD_pmcd_pmip_control_cmd_cb (pm/pmiserv/pmip_cb.c:887): assert (!closed) failed
[proxy:0:0@node162] HYDT_dmxu_poll_wait_for_event (tools/demux/demux_poll.c:76): callback returned error status
[proxy:0:2@node166] HYD_pmcd_pmip_control_cmd_cb (pm/pmiserv/pmip_cb.c:887): assert (!closed) failed
[proxy:0:2@node166] HYDT_dmxu_poll_wait_for_event (tools/demux/demux_poll.c:76): callback returned error status
[proxy:0:2@node166] main (pm/pmiserv/pmip.c:202): demux engine error waiting for event
srun: error: node162: task 0: Exited with exit code 7
[proxy:0:0@node162] main (pm/pmiserv/pmip.c:202): demux engine error waiting for event
srun: error: node166: task 2: Exited with exit code 7
[mpiexec@node162] HYDT_bscu_wait_for_completion (tools/bootstrap/utils/bscu_wait.c:76): one of the processes terminated badly; aborting
[mpiexec@node162] HYDT_bsci_wait_for_completion (tools/bootstrap/src/bsci_wait.c:23): launcher returned error waiting for completion
[mpiexec@node162] HYD_pmci_wait_for_completion (pm/pmiserv/pmiserv_pmci.c:218): launcher returned error waiting for completion
[mpiexec@node162] main (ui/mpich/mpiexec.c:340): process manager error waiting for completion

Моя проблема в том, что я понятия не имею, почему у меня такое сообщение и, следовательно, как его исправить.

Я использую только некоторые базовые функции из MPI и гарантирую, чтонет потоков, использующих вызовы MPI (такие функции могут вызывать только мои "главные процессы").

Я также проверил, что один процесс не отправляет сообщение самому себе и что место назначения процесса существует перед отправкой.сообщение.

У меня довольно простой вопрос: как узнать, из-за чего возникла проблема, и отладить мое приложение?

Большое спасибо.

1 Ответ

0 голосов
/ 19 октября 2018

В одном из ваших процессов произошла ошибка сегментации.Это означает чтение или запись в область памяти, к которой это не разрешено.

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

Лучшее решение - запустить параллельный отладчик, чтобы вы могли наблюдать за всеми процессами.Похоже, что вы используете правильную систему HPC, поэтому есть вероятность, что она установлена ​​в системе - наиболее популярными являются ddt или totalview.

Взгляните на Как отладитьПрограмма MPI

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