Как отладить программу MPI? - PullRequest
116 голосов
/ 30 ноября 2008

У меня есть программа MPI, которая компилируется и запускается, но я хотел бы пройтись по ней, чтобы убедиться, что ничего странного не происходит. В идеале я хотел бы простой способ присоединить GDB к любому конкретному процессу, но я не совсем уверен, возможно ли это или как это сделать. Альтернативой может быть вывод каждого процесса отладочной записи в отдельный файл журнала, но на самом деле это не дает той же свободы, что и отладчик.

Есть ли лучшие подходы? Как вы отлаживаете программы MPI?

Ответы [ 16 ]

2 голосов
/ 09 мая 2009

Я использую этот маленький метод homebrewn, чтобы присоединить отладчик к процессам MPI - вызовите следующую функцию, DebugWait (), сразу после MPI_Init () в вашем коде. Теперь, пока процессы ждут ввода с клавиатуры, у вас есть все время, чтобы присоединить к ним отладчик и добавить точки останова. Когда вы закончите, введите один символ, и вы готовы к работе.

static void DebugWait(int rank) {
    char    a;

    if(rank == 0) {
        scanf("%c", &a);
        printf("%d: Starting now\n", rank);
    } 

    MPI_Bcast(&a, 1, MPI_BYTE, 0, MPI_COMM_WORLD);
    printf("%d: Starting now\n", rank);
}

Конечно, вы захотите скомпилировать эту функцию только для отладочных сборок.

1 голос
/ 04 сентября 2018

Довольно простой способ отладки программы MPI.

В функции main () добавить сон (some_seconds)

Запустите программу как обычно

$ mpirun -np <num_of_proc> <prog> <prog_args>

Программа запустится и перейдет в спящий режим.

Так что у вас будет несколько секунд, чтобы найти ваши процессы с помощью ps, запустить gdb и присоединиться к ним.

Если вы используете какой-либо редактор, например QtCreator, вы можете использовать

Отладка-> Начать отладку-> Присоединить к запущенному приложению

и найду там процессы.

1 голос
/ 01 июня 2012
1 голос
/ 28 февраля 2011

Команда для присоединения GDB к процессу MPI неполная, она должна быть

mpirun -np <NP> xterm -e gdb ./program 

Краткое обсуждение mpi и gdb можно найти здесь

1 голос
/ 04 июня 2009

Я выполняю некоторую отладку, связанную с MPI, с трассировкой журнала, но вы также можете запустить gdb, если используете mpich2: MPICH2 и gdb . В целом, эта методика является хорошей практикой, когда вы имеете дело с процессом, который сложно запустить из отладчика.

0 голосов
/ 31 октября 2015

Другое решение - запустить ваш код в SMPI, симулированном MPI. Это проект с открытым исходным кодом, в котором я участвую. Каждый ранг MPI будет преобразован в потоки одного и того же процесса UNIX. Затем вы можете легко использовать gdb для повышения ранга MPI.

SMPI предлагает другие преимущества для изучения приложений MPI: ясновидение (вы можете наблюдать за всеми частями системы), воспроизводимость (несколько прогонов приводят к одинаковому поведению, если вы не укажете это), отсутствие гейзенгов (как моделируемая платформа отличается от хоста) и т. д.

Для получения дополнительной информации см. эту презентацию или этот связанный ответ .

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