跳转至

小作业八:单机性能优化

负责助教:孙桢波 sunzb20@mails.tsinghua.edu.cn

背景

在课堂中,我们学习了包括循环优化、编译优化、向量指令、循环展开等单机优化技术。 在本次作业中你需要:

  1. 观察不同的编译参数对性能的影响。
  2. 观察向量指令和循环展开对性能的影响。

任务

实验文件在集群上的位置为 /home/course/hpc/assignments/2023/exp8

首先将实验文件 拷贝到自己的目录 ,并进入 exp8 目录:

cp -r /home/course/hpc/assignments/2023/exp8 ~/
cd ~/exp8/

加载环境并编译代码:

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 文件 提交至网络学堂。


最后更新: 2023年3月7日
作者: Harry Chen (30.77%), Bran Sun (65.38%), szb16 (3.85%)