- 编译和运行的命令已统一放到test.slurm文件中,修改test.slurm文件中变量MATRIX_DIR为真实的矩阵存储路径
- 通过下列命令可直接完成编译运行
cd gmres-cpu-final-competition
sbatch test.slurm运行结果最后会保存在gmres_time.txt,其中的内容依次是矩阵名字、迭代次数、运行时间、最终残差
以下重要说明以及基准代码中的相关注释,与比赛技术方案有同等约束作用,任何违背以下说明和基准代码中注释说明的提交代码都视为违规
- 请仔细阅读源代码中的所有注释,这些注释说明了可修改的范围
- 不可修改main.cpp文件,且该文件中所调用的函数除gmres外均不可修改
- 不可修改gmres.cpp文件中明确标注了禁止修改的代码
- Makefile中面向CPU端的编译和链接选项仅允许使用-O2 -std=c++14,不可修改、增加、删除host端编译和链接选项
- 在gmres.cpp文件的gmres函数中,不得修改host端double类型的A_d和_b,且在计算得到最终解后,需要将其传回到host端的x_d向量中,以用于后续的精度评测
- GMRES涉及的中间向量在CPU或DCU的内存申请和释放均可放在计时范围外,稀疏矩阵A(double类型、CSR格式)、右端向量b(double类型)、最终解x(double类型)的数据传输开销可放在计时范围外,其余所有操作均需包含在计时范围内,包括但不限于:高精度数据和低精度数据间的转换、SpMV预处理开销、稀疏矩阵预处理开销、中间计算涉及的内存拷贝开销、参数配置开销等,若要采用其他的稀疏矩阵压缩格式,需从DCU端的CSR矩阵开始转换,且格式转换的代码必须包含到计时范围内
- 如果在gmres的实现中使用了stream,需注意关联hip event计时事件和相应的stream,保证计时准确
- 本赛题限制使用单块DCU卡,不接受多卡加速方案
- 本赛题不允许使用任何面向CPU端的优化技术。
- 本赛题不考虑迭代算法预处理器/预条件子的优化(如Jacobi预处理器、块对角预处理器、ILU预处理器等),故禁止参赛队使用任何预处理器/预条件子
- 考虑到冷启动问题,本赛题允许选手在计时之前添加warmup代码,但该代码不得改变GMRES的输入(稀疏矩阵A和右端向量b)和解向量x的初始值,且必须用注释的方式清晰标注warmup开始、warmup结束
- 代码优化过程中,仅允许参赛队调用hipBLAS和hipSPARSE库接口,不允许调用除此之外的其他库(如rocBLAS、rocSPARSE等库不允许在代码中调用)
- 不要在Makefile和源代码中使用绝对目录,因为评测机和超算互联网的软件安装目录可能不一致
- DTK版本必须是25.04,GCC版本必须是12.2.0
- 禁止任何针对特定测例的投机性、针对性优化
- 本赛题主要聚焦于面向DCU的GMRES优化,除了初赛提到的MGS和CGS之外,禁止其他针对GMRES算法层面的优化
- 决赛允许对外迭代SpMV的计算精度和存储精度进行修改
- 本赛题不允许修改基准代码中提供的源程序文件的名字(如Makefile、src/main.cpp、src/gmres.cpp、inc/sparseMatrix.hpp、inc/gmres.hpp)和Makefile编译得到的可执行文件的名字(gmres)