Функция подтверждения для программ MPI - PullRequest
0 голосов
/ 25 мая 2018

Я должен проверить состояние некоторых данных в программе MPI.Программа будет работать на суперкомпьютере с системой распределенной памяти.Быстрое исследование функции assert в C Standard показало, что assert внутренне использует функцию abort () для завершения программы.Я не нашел много информации о том, как abort () работает в многопроцессорной программе, особенно в контексте MPI - она ​​сильно отличается от среды POSIX.Останавливает ли abort () только процесс, в котором он вызывается, или же он может завершить все процессы?

И, наконец, как мне действительно завершить все процессы MPI-программы при сбое условия?Есть ли встроенный assert в библиотеке MPI?

1 Ответ

0 голосов
/ 25 мая 2018

abort() только завершает задачу MPI, которая ее вызывает.

Весьма вероятно, что она будет обнаружена mpirun и / или менеджером ресурсов и уничтожит все задания MPI (например, всеЗадачи MPI на всех узлах) после этого.

При этом, это зависит от библиотеки / системы, и вам следует сначала проверить это дважды.

Правильный способ прекратить работу MPI - это

MPI_Abort(MPI_COMM_WORLD, errorcode)

errorcode является int и обычно присваивается строго положительное значение.

...