Отладка приложений MPI в системах, настроенных таким способом, может быть затруднена, если у вас нет корневого доступа. Один из способов обойти это - использовать Valgrind , чтобы получить трассировки стека для ваших segfault (s). Это будет полезно только при условии, что ваше приложение завершится сбоем в течение разумного периода времени при замедлении через Valgrind, и что в этом случае оно по-прежнему не работает.
Обычно я запускаю приложения MPI под Valgrind так:
% mpiexec -n 5 valgrind -q /path/to/my_app
Это отправит все выходные данные Valgrind к стандартной ошибке. Но если я хочу, чтобы выходные данные были разделены на разные файлы, то вы можете немного поумнеть:
% mpiexec -n 5 valgrind -q --log-file='vg_out.%q{PMI_RANK}' /path/to/my_app
Это настройка для MPICH2. Я думаю, что для Open MPI вам нужно заменить PMI_RANK
на OMPI_MCA_ns_nds_vpid
, но если это не сработает для вас, вам нужно будет проконсультироваться с разработчиками Open MPI в их списке обсуждений. В любом случае это приведет к N файлам, где N - это размер MPI_COMM_WORLD
, каждый с именем vg_out.0
, vg_out.1
, ..., до vg_out.$(($N-1))
, каждый из которых соответствует рангу в MPI_COMM_WORLD
.