0. 购买amd显卡,安装rocm
1, 编译 rocHPL
下载源码:
$ git clone --recursive https://github.com/ROCm/rocHPL.git
编译:
$ cd rocHPL/
$ ./install.sh --prefix=${PWD}/../local/
会自动 git clone blit,ucx,opempi,
$ ./mpirun_rochpl -P 1 -Q 1 -N 8092 --NB 128
2, 解析 rocHPL 构建系统
2.1 整体项目编译框架解析
rocHPL 是使用一个 bash 脚本驱动整个编译过程的
install.sh
1,检查是否安装 getopt
2, 检查rocHPL 是否支持当前系统
检查 /etc/os-release 文件是否存在,install.sh 脚本依赖本文件中定义的变量: ID=ubuntu
执行 $ source /etc/os-release, 设置其中定义的变量
rocHPL 支持的 Linux 发行版有如下几种: ubuntu|centos|rhel|fedora|sles
通过函数 supported_distro() 来检查本机系统是否在被支持的列表中。
3, 定义了一堆编译链接相关的变量,
指定安装目录、指定构建类型、指定rocm的安装目录、mpi的安装目录、rocblas的安装目录、blis的安装目录、3个编译信息指示开关:
install_prefix=rocHPL
build_release=true
with_rocm=/opt/rocm
with_mpi=tpl/openmpi
with_rocblas=/opt/rocm/rocblas
with_cpublas=tpl/blis/lib
verbose_print=true
progress_report=true
detailed_timing=true
4, 解析 install.sh 被执行时的命令选项
根据 install.sh 的命令选项,设置脚本内部变量的值。
build_release: 编译类型
install_prefix: 安装目录
with_rocm: rocm的安装目录
with_mpi: mpi 的安装目录
with_rocblas: rocblas 的安装目录
with_cpublas: blis 的安装目录
verbose_print: 编译信息输出
progress_repot: 编译进展报告
detailed_timing: 详细的编译时间统计
5, 设定编译文件目录: build_dir,
每次重新执行 install.sh 的时候,都会先删除这个文件夹(rm -rf ),然后重新创建(mkdir ...)。
6, 将 rocm/bin 设置进入 PATH 中去,并将当前目录压入目录栈中。
7, 编译安装 blas,项目中使用的时blis,作为gpu计算结果正确性的测试工具。
git clone https://github.com/amd/blis --branch 4.2
./configure --prefix=${PWD} --enable-cblas --disable-sup-handling auto;
make -j
make install -j
8, 基于 ucx 编译安装 mpi,项目中使用的是 openmpi,作为集群通行工具,并基于知名通信库 ucx
8.1 编译安装 ucx
git clone --branch v1.16.0 https://github.com/openucx/ucx.git ucx
./autogen.sh; ./autogen.sh
mkdir build; cd build
../contrib/configure-opt --prefix=${PWD}/../ --with-rocm=${with_rocm} --without-knem --without-cuda --without-java
make -j
make install
检查 ucx 是否编译安装成功
8.2 编译安装 openmpi
git clone --branch v5.0.3 --recursive https://github.com/open-mpi/ompi.git openmpi
cd openmpi; ./autogen.pl;
mkdir build; cd build
../configure --prefix=${PWD}/../ --with-ucx=${PWD}/../../ucx --without-verbs
make -j
make install
9, 设置 cmake 的选项
-DCMAKE_INSTALL_PREFIX=
-DHPL_BLAS_DIR=
-DHPL_MPI_DIR=
-DROCM_PATH=
-DROCBLAS_PATH=
-DCMAKE_BUILD_TYPE=
通过运行 shopt -s nocasematch,告诉 Bash shell 在执行字符串匹配时不区分大小写,在解析下列三个选项的设置。
-DHPL_VERBOSE_PRINT=
-DHPL_PROGRESS_REPORT=
-DHPL_DETAILED_TIMING=
通过运行 shopt -u nocasematch,告诉 Bash shell 在执行字符串匹配时不区分大小写,在解析下列三个选项的设置。
10, 配置 rocHPL
mkdir -p build/
cd build/
cmake + 9中设置的选项值;
11, 编译 rocHPL
make -j
2.2 rocHPL CMakeLists.txt 解析
未完待续...