小作业七:单机性能优化¶
负责助教:沈子韬 shenzt23@mails.tsinghua.edu.cn
背景¶
在课堂中,我们学习了包括循环优化、编译优化、向量指令、循环展开等单机优化技术。 在本次作业中你需要:
- 观察不同的编译参数对性能的影响。
- 观察向量指令和循环展开对性能的影响。
任务¶
实验文件在集群上的位置为 /home/course/hpc/assignments/2024/exp7
。
首先将实验文件 拷贝到自己的目录 ,并进入 exp7
目录:
cp -r /home/course/hpc/assignments/2024/exp7 ~/
cd ~/exp7/
加载环境并编译代码:
source /opt/intel/oneapi/setvars.sh
cd task0 # or task1
make
任务零¶
任务零是矩阵乘法的简单实现,我们会使用不同的编译器参数 (-O0
, -O1
, -O2
, -O3
, -fast
) 来编译该程序。
你需要测试不同编译参数下的程序性能,并汇报测试结果。
任务一¶
在任务一中,我们给出了一个矩阵乘法内核 (4 \times 8 \times k) 的向量化实现,并通过反复执行来测试该内核的性能峰值。
函数 matmul_4x8
中使用的预处理指令 unroll
表示循环展开,括号内的数表示循环展开的程度。
请测试函数 matmul_4x8
中循环展开的程度分别设置为 1, 2, 4, 8, 16 时,程序的性能。可以在编译时使用 make UNROLL_N=4
来设置该参数为 4。
在报告中汇报你的测量结果,并回答以下问题:
- 请参考 ICC 手册 并简述参数 (
-O0
,-O1
,-O2
,-O3
,-fast
) 分别进行了哪些编译优化。每种参数罗列几个优化技术即可。 - 请简述任务一中循环展开带来的好处。
实验提交¶
本实验仅需提交实验报告,请将报告的 PDF 文件 提交至网络学堂。
最后更新:
2024年3月25日
作者: