Мы используем кластер с Perceus (warewulf) для выполнения некоторых вычислений. В этом программном пакете имеется программа wwmpirun
(Perl-скрипт) для подготовки файла хоста и выполнения mpirun
:
# ...
system("$mpirun -hostfile $tmp_hostfile -np $mpirun_np @ARGV");
# ...
Мы используем этот скрипт для запуска математической программы (CODE) на нескольких узлах, и обычно предполагается, что CODE останавливается с помощью Ctrl + C, давая короткое меню с параметрами: status, stop и halt. Однако при работе с MPI нажатие Ctrl + C сильно убивает CODE с потерей данных.
Разработчики CODE предлагают обходной путь - программу можно остановить, создав файл с именем stop%s
, где %s
- имя файла задачи, выполняемого CODE. Это позволяет остановиться, но мы не можем получить статус расчета. Иногда это занимает очень много времени, и возвращение этой функции было бы очень полезно.
Как вы думаете - проблема в КОДЕ или mpirun
?
Можно ли найти способ связи с КОДОМ, выполняемым mpirun
?
Update1
В одиночном цикле можно получить статус расчета, нажав Ctrl + C и выбрав опцию status
в предоставленном меню, введя s
. CODE печатает информацию о состоянии в STDOUT и продолжает выполнять вычисления.