MVAPICH2-GDR имеет ошибку ошибки сегментации

Я пытаюсь использовать MVAPICH2-GDR для простой программы hello world. Хотя он может успешно скомпилировать код, во время выполнения возникает ошибка ошибки сегментации. Моя платформа имеет Redhat 6.5 и CUDA 7.5. Итак, я скачал rpm-файл mvapich2-gdr-cuda7.5-intel-2.2-0.3.rc1.el6.x86_64.rpm.

Код MPI представляет собой простую программу hello world:

1 #include <mpi.h>
2 #include <stdio.h>
3
4 int main(int argc, char** argv) {
5     // Initialize the MPI environment
6     MPI_Init(NULL, NULL);
7     // Get the number of processes
8     int world_size;
9     MPI_Comm_size(MPI_COMM_WORLD, &world_size);
10
11     // Get the rank of the process
12     int world_rank;
13     MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
14
15     // Print off a hello world message
16     printf("Hello world from %d out of %d\n", world_rank, world_size);
17
18     // Finalize the MPI environment.
19     MPI_Finalize();
20 }

Для компиляции программы я использовал следующую команду:

mpicc hello.c -o hello

Чтобы запустить программу:

mpirun -np 2 ./hello

Сообщение об ошибке выглядит следующим образом:

[localhost.localdomain:mpi_rank_1][error_sighandler] Caught error: Segmentation fault (signal 11)
[localhost.localdomain:mpi_rank_0][error_sighandler] Caught error: Segmentation fault (signal 11)                
=   BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
=   PID 188057 RUNNING AT localhost.localdomain
=   EXIT CODE: 139
=   CLEANING UP REMAINING PROCESSES
=   YOU CAN IGNORE THE BELOW CLEANUP MESSAGES 

YOUR APPLICATION TERMINATED WITH THE EXIT STRING: Segmentation fault (signal 11)

Поскольку MVAPICH2-GDR не открывал исходный код, я действительно не знаю, откуда берется ошибка. Кто-нибудь успешно использовал MVAPICH2-GDR?


person silence_lamb    schedule 25.07.2016    source источник
comment
У вас есть несколько вызовов функций MPI. Обычно они возвращают какой-то статус, когда они это делают, проверяйте их, а не слепо надеясь, что они сработали. И было бы несложно вставить несколько операторов printf (убедившись, что они заканчиваются на newline для сброса вывода), чтобы определить, какой из этих вызовов вообще возвращается. А вы пробовали MPI_Init(&argc, &argv);?   -  person Weather Vane    schedule 25.07.2016


Ответы (1)


для повышения производительности связи GPU-GPU MVAPICH2-GDR использует новый модуль GDRCOPY. Вам необходимо явно указать MVAPICH2-GDR на библиотеку или явно отключить использование этой функции, установив MV2_USE_GPUDIRECT_GDRCOPY=0.

Как видите, отключив эту функцию, я могу запустить ваш код. Для получения дополнительной информации см. руководство пользователя: http://mvapich.cse.ohio-state.edu/userguide/gdr/2.2rc1/

[hamidouc@ivy1 mvapich2]$ export MV2_USE_GPUDIRECT_GDRCOPY=0 [hamidouc@ivy1 mvapich2]$ ./install/bin/mpirun -np 2 ./a.out Привет, мир от 0 из 2 Привет, мир от 1 из 2

person user6640932    schedule 26.07.2016
comment
Я выполнил все шаги в этом руководстве пользователя. Несмотря на то, что я установил MV2_USE_GPUDIRECT_GDRCOPY=0, ошибка сегментации по-прежнему возникает. Я проверил статус каждого вызова MPI, ошибка произошла в первом выражении MPI_Init(NULL, NULL); Предоставленный OSU MVAPICH2-GDR работал для MLNX-OFED 3.2, но я установил последнюю версию драйвера MLNX-OFED 3.3. Не уверен, что это вызвало проблему, но версия 3.2 больше не доступна на веб-сайте Mellanox. - person silence_lamb; 26.07.2016