段错误几乎肯定是由于当 MPI 需要主机指针时将设备指针传递给 MPI 造成的。只有正确构建的 CUDA 感知 MPI 才能接受设备指针。仅仅拥有 OpenMPI 1.8.2 还不够。您必须拥有使用 CUDA 感知设置显式构建的 OpenMPI 版本。
对于 OpenMPI,
Start here http://www.open-mpi.org/faq/?category=building#build-cuda
摘录:
- 如何构建具有 CUDA 感知支持的 Open MPI?
CUDA 感知支持意味着 MPI 库可以直接发送和接收 GPU 缓冲区。 Open MPI 1.7 系列及更高版本中存在此功能。支持不断更新,因此不同版本中存在不同级别的支持。
配置开放 MPI 1.7、MPI 1.7.1 和 1.7.2
--with-cuda(=DIR) Build cuda support, optionally adding DIR/include,
DIR/lib, and DIR/lib64
--with-cuda-libdir=DIR Search for cuda libraries in DIR
以下是启用 CUDA 支持的配置命令的一些示例。
-
在默认位置搜索。在 /usr/local/cuda/include 中查找 cuda.h,在 /usr/lib64 中查找 libcuda.so。
./configure --with-cuda
-
在 /usr/local/cuda-v4.0/cuda/include 中搜索 cuda.h,在默认位置 /usr/lib64 中搜索 libcuda.so。
./configure --with-cuda=/usr/local/cuda-v4.0/cuda
-
在 /usr/local/cuda-v4.0/cuda/include 中搜索 cuda.h,在 /usr/lib64 中搜索 libcuda.so。 (与上一篇相同)
./configure --with-cuda=/usr/local/cuda-v4.0/cuda --with-cuda-libdir=/usr/lib64
如果找不到 cuda.h 或 libcuda.so 文件,则配置将中止。
注意:Open MPI 1.7.2 中存在一个错误,如果您使用 --enable-static 配置库,则会收到错误消息。要解决此错误,请将以下内容添加到配置行并重新配置。这会禁用 PML BFO 的构建,无论如何,该 PML BFO 基本上都未使用。此错误在 Open MPI 1.7.3 中已修复。
--enable-mca-no-build=pml-bfo
配置 Open MPI 1.7.3 及更高版本
在 Open MPI 1.7.3 及更高版本中,libcuda.so 库是动态加载的,因此无需在配置时指定它的路径。因此,您所需要的只是 cuda.h 头文件的路径。
-
在默认位置搜索。在 /usr/local/cuda/include 中查找 cuda.h。
./configure --with-cuda
-
在 /usr/local/cuda-v5.0/cuda/include 中搜索 cuda.h。
./configure --with-cuda=/usr/local/cuda-v5.0/cuda
请注意,您不能配置--disable-dlopen
因为这将破坏 Open MPI 库动态加载 libcuda.so 的能力。
See
此常见问题解答条目 http://www.open-mpi.org/faq/?category=running#mpi-cuda-support有关如何使用 CUDA 支持的详细信息。
请注意,这些说明假定您对构建 OpenMPI 有一定的了解。仅仅跑步是不够的./configure ...
之后是 make 和 make install 步骤。但上述配置命令是 CUDA 感知的 OpenMPI 构建与普通构建的区别。