github链接
只需要在编译的时候加一个参数,就可以实现跨平台(多cpu、多加速器等平台)的可移植性。
1、下载kokkos的包
#设置全局变量 export KOKKOS_VERSION=5.1.0 #替换为你实际想要安装的版本号,题主这里选择5.1.0 export KOKKOS_DOWNLOAD_URL=https://github.com/kokkos/kokkos/releases/download/${KOKKOS_VERSION} #下载 curl -sLO ${KOKKOS_DOWNLOAD_URL}/kokkos-${KOKKOS_VERSION}.tar.gz curl -sLO ${KOKKOS_DOWNLOAD_URL}/kokkos-${KOKKOS_VERSION}-SHA-256.txt #校验 grep kokkos-${KOKKOS_VERSION}.tar.gz kokkos-${KOKKOS_VERSION}-SHA-256.txt | shasum -c #解压缩 tar -xzvf kokkos-${KOKKOS_VERSION}.tar.gz题主的执行过程如下:
2、配置kokkos
前提:我的电脑是intel cpu + nvidia gpu,所以我选择的是cuda编译器nvcc,例如:如果你是amd gpu,则需要hipcc,具体配置参考官网。
我电脑当前的nvidia驱动版本:580.126.09,可以支持cuda 13.0,先安装nvcc,该版本的kokkos要求的最低版本是nvcc 12.2.0。
#下载 CUDA 12.6(仅工具包,不含驱动),由于我总是遇到依赖缺失、源冲突的情况,所以我选择全量打包的离线运行安装程序,注意它会比较大。 wget https://developer.download.nvidia.com/compute/cuda/12.6.0/local_installers/cuda_12.6.0_560.28.03_linux.run #只装里面的toolkit sudo sh cuda_12.6.0_560.28.03_linux.run --toolkit --silent #让nvcc生效 echo 'export PATH=/usr/local/cuda-12.6/bin:$PATH' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.6/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc #立即生效当前终端 source ~/.bashrc #检查是否安装成功 nvcc --versionnvcc安装成功:
我的kokkos配置参数如下:
补充电脑信息:i9 + RTX 3060 + Ubuntu。
cmake -B builddir \ -DCMAKE_CXX_COMPILER=g++ \ -DCMAKE_BUILD_TYPE=Release \ -DKokkos_ENABLE_OPENMP=ON \ -DKokkos_ENABLE_CUDA=ON \ -DKokkos_ARCH_NATIVE=ON \ -DKokkos_ARCH_AMPERE86=ON \ -DCMAKE_CXX_FLAGS="-mno-amx-tile -mno-amx-int8 -mno-amx-bf16"解释:-DKokkos_ENABLE_OPENMP=ON #开启 CPU 多核并行
-DKokkos_ENABLE_CUDA=ON #开启 NVIDIA GPU 支持
-DKokkos_ARCH_NATIVE=ON #自动识别并优化 Intel i9 处理器
-DKokkos_ARCH_AMPERE86=ON #指定 RTX 3060 显卡架构(安培 Ampere)
-DKokkos_CXX_FLAGS="-mno-amx-int8 -mno-amx-bf16" #关闭AMX指令集
配置成功:
如果由于版本问题配置失败,解决后,记得执行如下指令,再重新进行配置。
rm -rf builddir3、构建kokkos
cmake --build builddir -j$(nproc)编译成功:
如果编译失败,解决完问题之后,记得清理之前的编译结果。
#清理上次的编译结果 cmake --build builddir --target clean安装头文件和库文件,我这里指定了目录,观者要记得更改为自己的。
cmake --install builddir --prefix ~/A_Waxeia/A_Myself/postgraduate/my/kokkos/headerfiles_libraries遇到的参考问题记录:
编译失败:
报错原因:GCC 13 + CUDA 12.6 不兼容!
- 我的 CPU 是 Intel i9(不支持 AMX 高级指令集)
- 但 NVCC(CUDA 编译器)不认识 GCC 13 的 AMX 内置函数
- 所以编译到 OpenMP 测试用例时直接炸了
解决方案:强制关闭 AMX 指令集,配置的时候给指令多加一条参数:-DCMAKE_CXX_FLAGS="-mno-amx-tile -mno-amx-int8 -mno-amx-bf16",重新编译即解决问题。