我想爲簡單的hello世界程序使用MVAPICH2-GDR。儘管它可以成功編譯代碼,但它在運行時會出現分段錯誤錯誤。我的平臺有Redhat 6.5和CUDA 7.5。所以我下載了rpm文件mvapich2-gdr-cuda7.5-intel-2.2-0.3.rc1.el6.x86_64.rpm。MVAPICH2-GDR有分段錯誤錯誤
的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?
您可以調用多個MPI函數。他們通常會返回某種狀態,然後檢查,而不是盲目地希望他們工作。插入一些'printf'語句(確保它們以'newline'結束以刷新輸出結果),以告訴哪些回調函數完全是一個小問題。你有沒有嘗試'MPI_Init(&argc,&argv);'? –