【问题标题】:MVAPICH2-GDR has segmentation fault errorMVAPICH2-GDR 有分段错误错误
【发布时间】:2016-11-29 07:54:02
【问题描述】:

我正在尝试将 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 吗?

【问题讨论】:

  • 您有多次调用 MPI 函数。他们通常会返回某种状态,当他们这样做时,检查然后而不是盲目地希望他们工作。插入一些printf 语句(确保它们以newline 结束以刷新输出)来判断这些调用中的哪一个返回是很容易的。你试过MPI_Init(&amp;argc, &amp;argv);吗?

标签: c gpu mvapich2


【解决方案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

【讨论】:

  • 我确实遵循了该用户指南中的所有步骤。即使我设置了 MV2_USE_GPUDIRECT_GDRCOPY=0,它仍然有分段错误错误。我检查了每个 MPI 调用的状态,错误发生在第一条语句 MPI_Init(NULL, NULL);提供的 MVAPICH2-GDR OSU 适用于 MLNX-OFED 3.2,但我安装了最新的驱动程序版本 MLNX-OFED 3.3。不确定这是否导致了问题,但 Mellanox 网站上不再提供 3.2。
猜你喜欢
  • 1970-01-01
  • 2017-08-01
  • 2014-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多