转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn]
如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~
编译这个库真的是非常艰难,官方给的教程实在简单,实际中遇到很多问题。
我已爬坑,下面的代码只需要挨个复制即可,已测试通过。
我的环境:
- gcc、g++:8.4
- cuda:11.7
- cmake:3.29
开始编译
1、先下载仓库。
cd ~
git clone --recursive https://github.com/gunrock/gunrock.git
cd gunrock
mkdir build && cd build
2、升级cmake,太低版本会报错。
# 进入临时目录
cd /tmp
# 下载最新版 CMake(或改成你想要的版本)
wget https://github.com/Kitware/CMake/releases/download/v3.29.2/cmake-3.29.2-linux-x86_64.sh
# 添加执行权限
chmod +x cmake-3.29.2-linux-x86_64.sh
# 安装(比如安装到 /opt/cmake)
sudo mkdir -p /opt/cmake
sudo ./cmake-3.29.2-linux-x86_64.sh --prefix=/opt/cmake --skip-license
# 添加到环境变量(临时生效)
export PATH=/opt/cmake/bin:$PATH
# 查看版本确认
cmake --version
cd ~/gunrock/build
3、更新gcc、g++版本为8.x,太高的会报错。
# 添加 gcc/g++ 版本到 alternatives 系统
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 80
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 80
# 选择默认 gcc
sudo update-alternatives --config gcc
# 选择默认 g++
sudo update-alternatives --config g++
# 验证版本
gcc --version
g++ --version
4、手动下载cub,默认缺失的。
cd ~/gunrock/externals
git clone https://github.com/NVIDIA/cub.git
5、手动下载libcudacxx,默认缺失的。
cd ~/gunrock/externals
git clone https://github.com/NVIDIA/libcudacxx.git
6、手动替换par_nosync,cuda11.7已经改了,不然会报错。
cd ~/gunrock/build
find ../include ../examples -type f -name "*.cuh" -o -name "*.cu" -o -name "*.hxx" | xargs sed -i 's/thrust::cuda::par_nosync/thrust::cuda::par/g'
7、现在终于可以编译了。
cd ~/gunrock/build
rm -rf *
cmake .. \
-DCMAKE_C_COMPILER=gcc-8 \
-DCMAKE_CXX_COMPILER=g++-8 \
-DCMAKE_CUDA_STANDARD=17 \
-DCMAKE_CXX_STANDARD=17 \
-DCMAKE_CUDA_FLAGS="--expt-extended-lambda \
-I${PWD}/../externals/cub \
-I${PWD}/../externals/libcudacxx/include"
make sssp
# 如果要编译所有的例子:
# make -j$(nproc)
8、测试运行示例。注意要加个参数-m,官方示例没加。
bin/sssp -m ../datasets/chesapeake/chesapeake.mtx