Я хочу знать, как использовать ltrace для получения вызовов функций библиотеки приложения mpi, но просто ltrace не работает, и мой mpirun не может быть успешным. Любая идея?Как использовать ltrace для программ mpi?
ответ
Вы должны быть в состоянии просто использовать:
$ mpiexec -n 4 -other_mpiexec_options ltrace ./executable
Но это создаст огромный беспорядок, так как выходы из различных рангов будут сливаться. Гораздо лучший вариант - перенаправить вывод ltrace
в отдельный файл для каждого ранга. Получение ранга легко с некоторыми реализациями MPI. Например, Open MPI экспортирует мировой ранг в переменную окружения OMPI_COMM_WORLD_RANK
. Следующий сценарий обертку поможет:
#!/bin/sh
ltrace --output trace.$OMPI_COMM_WORLD_RANK $*
Использование:
$ mpiexec -n 4 ... ltrace_wrapper ./executable
Это будет производить 4 файлов трассировки, по одному для каждого ранга: trace.0
, trace.1
, trace.2
и trace.3
.
Для MPICH и других реализаций MPI на основе этого и с использованием экспорта Hydra PM PMI_RANK
и приведенный выше сценарий должен быть изменен, а OMPI_COMM_WORLD_RANK
заменен на PMI_RANK
. Можно также написать универсальную оболочку, которая работает с обоими семействами реализации MPI.