Skip to content
This repository was archived by the owner on Nov 17, 2025. It is now read-only.
/ gmres-gpu Public archive

GMRES for GPUs (Deprecated, code merged to lib usparse)

Notifications You must be signed in to change notification settings

hpcde/gmres-gpu

Repository files navigation

GMRES

GMRES implmentation in GPUs.

Build

The code is implementaed in HIP. Make sure you have following env:

  • HIP
  • CMake 3.21+
  • C/C++ compiler supporting C++11
export CC=hipcc CXX=hipcc
cmake -B ./build -S ./
cmake --build ./build

先导杯竞赛

1. 编译&运行

  • 编译和运行的命令已统一放到test.slurm文件中,修改test.slurm文件中变量MATRIX_DIR为真实的矩阵存储路径
  • 通过下列命令可直接完成编译运行
cd gmres-cpu
sbatch test.slurm

运行结果最后会保存在gmres_time.txt,其中的内容依次是矩阵名字、迭代次数、运行时间、最终残差

2. DCU移植说明

  • 对于移植后的DCU代码,可统一使用hipcc编译器编译,该编译器在DTK套件中,比赛指定使用DTK 25.04,可通过下列命令加载,并通过which命令确认编译器位置
module load compiler/dtk/25.04
which hipcc
  • 对于移植后的DCU代码,需要在slurm脚本中添加DCU相关的参数申请DCU计算资源,例如添加如下参数申请1块DCU卡
#SBATCH --gres=dcu:1

3. 重要说明

  • 请仔细阅读源代码中的所有注释,这些注释说明了可修改的范围
  • 本赛题限制使用单块DCU卡,不接受多卡加速方案
  • test.slurm文件中“SBATCH --cpus-per-task=3”,表示为当前任务申请3个CPU核心,需要注意此处申请多个核心仅是为了申请较大的内存空间,并非用于CPU多核并行,竞赛不允许使用任何面向CPU端的优化技术。
  • 禁止调用成熟线性代数库(包括不限于MAGMA、GINKGO等)的GMRES实现
  • 本赛题不考虑迭代算法预处理器/预条件子的优化(如Jacobi预处理器、块对角预处理器、ILU预处理器等),故禁止参赛队使用任何预处理器/预条件
  • 考虑到冷启动问题,本赛题允许选手在计时之前添加warmup代码,但该代码不得改变GMRES的输入和解向量x的初始值
  • 在DCU移植的过程中,允许参赛队调用hipBLAS和hipSPARSE中的线性算子或手工实现内核函数,不允许调用除此之外的其他库
  • 可在竞赛提供的Makefile文件中添加或修改与DCU相关的编译参数和库链接参数等,但不可添加与CPU优化相关的编译链接优化选项
  • 不要在Makefile和源代码中使用绝对目录,因为评测机和超算互联网的软件安装目录可能不一致
  • 禁止任何针对特定测例的投机性、针对性优化

About

GMRES for GPUs (Deprecated, code merged to lib usparse)

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 5

Languages