openMPI 1.7之后的版本才支持CUDA

1.对于1.7~2.0的版本, 配置和编译、安装如下:

1
2
3
sudo ./configure --prefix=<用户指定的openMPI的安装目录>  --with-cuda=<cuda的include目录> --with-cuda-libdir=<cuda的lib64目录>

sudo make all install

2.openmpi-2.0以及以上版本

建议安装ucx+gdrcopy来获取新的mpi功能和更好的性能

首先安装gdrcopy,这里建议安装gdrcopy-1.3版本。因为2.0版本会出现如下错误:
TIM图片20200330170544.png
安装gdrcopy需要四个依赖:check,check-devel,subunit,subunit-devel,注意下载可执行文件,而不是源码;下载源——RPM,遇到的问题见博客 《linux rpm 错误

  1. 编译gdrcopy
    执行如下命令
    1
    2
    make PREFIX=/public/home/asc02/yangxf/local/gdrcopy-1.3  all install
    ./insmod.sh #root
    这里不需要指定CUDA=XXX,因为makefile里的路径本身是正确的,指定了反而出现找不见cuda.h的错误。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    PREFIX ?= /usr/local
    DESTLIB ?= $(PREFIX)/lib64
    CUDA ?= /usr/local/cuda

    GDRAPI_ARCH := $(shell ./config_arch)

    CUDA_LIB := -L $(CUDA)/lib64 -L $(CUDA)/lib -L /usr/lib64/nvidia -L /usr/lib/nvidia
    CUDA_INC += -I $(CUDA)/include

    CPPFLAGS := $(CUDA_INC) -I gdrdrv/ -I $(CUDA)/include -D GDRAPI_ARCH=$(GDRAPI_ARCH)
    LDFLAGS := $(CUDA_LIB) -L $(CUDA)/lib64
    COMMONCFLAGS := -O2
    CFLAGS += $(COMMONCFLAGS)
    CXXFLAGS += $(COMMONCFLAGS)
    LIBS := -lcudart -lcuda -lpthread -ldl
    参考gdrcopy
  2. 编译ucx ucx
    执行命令
    1
    2
    3
    4
    ./autogen.sh
    ./configure --prefix=/public/home/asc02/yangxf/local/ucx --with-cuda=/usr/local/cuda --with-gdrcopy=/public/home/asc02/yangxf/local/gdrcopy-1.3 --with-mlx5-dv --with-avx --with-sse41 --with-sse42
    make -j8
    make install
  3. 编译openmpi
    这里用的是openmpi-3.0
    执行命令
    1
    2
    3
    ./configure --prefix=/public/home/asc02/yangxf/local/openmpi-3.0.0 --with-cuda=/usr/local/cuda --with-ucx=/public/home/asc02/yangxf/local/ucx --enable-mpi-cxx
    make -j8
    make install
    编译安装完成,在生成的lib目录下可以看到多了关于cuda的库
    cudalib.PNG
    把相关路径添加到环境变量就可。

注: 对于多机运行的程序,需要将mpi环境变量添加到.bashrc中,否则在其他机器上确实mpi的环境变量。

最后更新: 2020年05月03日 22:05

原始链接: https://yang-xiaofeng1101.github.io/2020/03/30/openmpi-with-cuda/

× 请我吃糖~
打赏二维码