openMPI 1.7之后的版本才支持CUDA
1.对于1.7~2.0的版本, 配置和编译、安装如下:
1 | sudo ./configure --prefix=<用户指定的openMPI的安装目录> --with-cuda=<cuda的include目录> --with-cuda-libdir=<cuda的lib64目录> |
2.openmpi-2.0以及以上版本
建议安装ucx+gdrcopy来获取新的mpi功能和更好的性能
首先安装gdrcopy,这里建议安装gdrcopy-1.3版本。因为2.0版本会出现如下错误:
安装gdrcopy需要四个依赖:check,check-devel,subunit,subunit-devel,注意下载可执行文件,而不是源码;下载源——RPM,遇到的问题见博客 《linux rpm 错误》
- 编译gdrcopy
执行如下命令这里不需要指定CUDA=XXX,因为makefile里的路径本身是正确的,指定了反而出现找不见cuda.h的错误。1
2make PREFIX=/public/home/asc02/yangxf/local/gdrcopy-1.3 all install
./insmod.sh #root参考gdrcopy1
2
3
4
5
6
7
8
9
10
11
12
13
14
15PREFIX ?= /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 - 编译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 - 编译openmpi
这里用的是openmpi-3.0
执行命令编译安装完成,在生成的lib目录下可以看到多了关于cuda的库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
把相关路径添加到环境变量就可。
注: 对于多机运行的程序,需要将mpi环境变量添加到.bashrc中,否则在其他机器上确实mpi的环境变量。
最后更新: 2020年05月03日 22:05
原始链接: https://yang-xiaofeng1101.github.io/2020/03/30/openmpi-with-cuda/