Fetch the repository succeeded.
本项目的目的是使用Kokkos实现GMRES方法求解线性方程组Ax=b,并在CPU和GPU(CUDA)上运行。
广义最小残差(Generalized Minimum RESidual, GMRES)是有Saad等人提出了一种求解大型线性方程组的Krylov子空间方法,GMRES在理论上和共轭梯度法等价,但它的适用范围更广,适用于非对称线性方程组的求解。此外,GMRES方法在计算开销和内存需求上均比CG方法有所降低。它的算法如下:
# 切换的项目目录
cd kokkos-gmres
# 建立串行的build_serial文件
mkdir build_serial && cd build_serial
# 编译
cmake .. && make -j4
# 切换到项目路径下的bin文件夹
cd ../bin
# 在bin中建立gmres.serial的链接
ln -s ../build/src/gmres.serial gmres.serial
# 开始计算,默认的输入矩阵为gr_30_30.mtx
./gmres.serial
# 切换的项目目录
cd kokkos-gmres
# 建立串行的build_openmp文件
mkdir build_openmp && cd build_openmp
# 编译
cmake -DKokkos_ENABLE_OPENMP=ON .. && make -j4
# 切换到项目路径下的bin文件夹
cd ../bin
# 在bin中建立gmres.serial的链接
ln -s ../build_openmp/src/gmres.openmp gmres.openmp
# 开始计算,默认的输入矩阵为gr_30_30.mtx
./gmres.openmp --kokkos-threads=2
# 切换的项目目录
cd kokkos-gmres
# 建立串行的build_openmp文件
mkdir build_cuda && cd build_cuda
# 此处替换成kokkos的路径
export CXX=/path/to/kokkos-kokkos/external/kokkos/bin/nvcc_wrapper
# 编译(注意将-DKokkos_ARCH_MAXWELL50=ON替换成相应GPU的架构)
cmake -DKokkos_ENABLE_CUDA=ON -DKokkos_ENABLE_CUDA_LAMBDA=ON -DKokkos_ARCH_MAXWELL50=ON ..
# 切换到项目路径下的bin文件夹
cd ../bin
# 在bin中建立gmres.serial的链接
ln -s ../build_cuda/src/gmres.cuda gmres.cuda
# 开始计算,默认的输入矩阵为gr_30_30.mtx
./gmres.cuda gr_30_30.mtx
GPU的编译比较复杂,容易出错。如果编译未通过,请使用ccmake进入可视化图形操作。需要kokkos能够找到CUDA的路径, 例如: /usr/local/cuda-9.0.
在AMD的GPU编译和运行方式如下:
# 切换的项目目录
cd kokkos-gmres
# 建立串行的build_openmp文件
mkdir build_hip && cd build_hip
# 编译(此处的clang是rocm文件夹的clang)
export CXX=/public/software/compiler/rocm/rocm-4.0.1/bin/hipcc
cmake -DKokkos_ENABLE_HIP=ON -DKokkos_ARCH_VEGA906=ON ..
# 切换到项目路径下的bin文件夹
cd ../bin
# 在bin中建立软链接
ln -s ../build_cuda/src/gmres.hip gmres.hip
# 开始运行
./gmres.hip gr_30_30.mtx
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。