1 Star 1 Fork 0

于要杰/kokkos-gmres

Create your Gitee Account
Explore and code with more than 13.5 million developers,Free private repositories !:)
Sign up
This repository doesn't specify license. Please pay attention to the specific project description and its upstream code dependency when using it.
Clone or Download
contribute
Sync branch
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README

kokkos-GMRES项目简介

本项目的目的是使用Kokkos实现GMRES方法求解线性方程组Ax=b,并在CPU和GPU(CUDA)上运行。

GMRES算法

广义最小残差(Generalized Minimum RESidual, GMRES)是有Saad等人提出了一种求解大型线性方程组的Krylov子空间方法,GMRES在理论上和共轭梯度法等价,但它的适用范围更广,适用于非对称线性方程组的求解。此外,GMRES方法在计算开销和内存需求上均比CG方法有所降低。它的算法如下:

GMRES

如何编译?

1. 串行编译

# 切换的项目目录
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

2. OpenMP编译

# 切换的项目目录
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

3. CUDA编译

# 切换的项目目录
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.

3. HIP等

在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

Empty file

About

基于Kokkos并行编程模型实现GMRES算法。 expand collapse
C++ and 5 more languages
Cancel

Releases

No release

Contributors

All

Activities

can not load any more
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/yaojieyu/kokkos-gmres.git
git@gitee.com:yaojieyu/kokkos-gmres.git
yaojieyu
kokkos-gmres
kokkos-gmres
master

Search