小作业八:性能分析实践¶
负责助教:吴成彰 wcz19@mails.tsinghua.edu.cn
任务¶
服务器环境配置¶
将实验文件 /home/course/hpc/assignments/2024/exp8
拷贝到自己的目录 ,并进入 exp8
目录:
cp -r /home/course/hpc/assignments/2024/exp8 ~/
cd ~/exp8/
本次实验依赖 Intel MPI 并推荐使用 vTune 进行性能分析,因此需要加载对应的环境:
source /opt/intel/oneapi/setvars.sh
vTune GUI 环境配置¶
实验中需要使用vTune GUI读取性能数据。
方法一(推荐):本地安装 vTune¶
- 下载 vTune 并安装。
- 将采集到的性能数据文件夹复制到本地,启动 vTune 读取数据。
方法二:本地安装 X11 服务器,将远程图形界面利用 X11 转发到本地¶
- Windows 或者 macOS 用户需要在本地安装X11服务器:Xming X Server for Windows 或 XQuartz for MacOS。
- 在本地开启 X11 服务器。
- 使用带 X11 转发的ssh连接到 conv0(ssh 时加上
-X
选项),使用vtune-gui
命令启动vTune图形界面,读取数据。
任务零:基于 IPM 的轻量级 MPI 性能分析¶
运行 ./run.sh <你的学号>
,如 ./run.sh 202012345
你将得到如下输出:
Success 202012345
在运行成功后,使用 IPM 对该 MPI 程序进行性能分析。在实验集群中可使用如下命令:
LD_PRELOAD=~/exp8/ipm/lib/libipm.so ./run.sh <你的学号>
根据IPM输出,MPI函数中的热点函数为_____。
任务一:负载均衡分析¶
对同一程序,使用 vTune 进行性能分析。参考 vTune文档 :
srun -n <进程数> vtune -collect <采集模式> -trace-mpi -result-dir <结果保存目录> -- <应用执行命令>
# 实验中需要的采集模式有 hotspots 和 uarch-exploration
使用 vTune 的 Hotspots 分析功能,可发现任务零中检测到的热点由一个进程导致。导致出现该现象的进程 MPI rank 是_____。
提示:
- 在 vTune Hotspots 的 Bottom-up 界面中,选择显示 Process,可以看到进程的 MPI rank。
- 通过 Filter in/out 进程或函数,可查看各进程不同函数各自的运行时间。
- 在 vTune 的图形界面中,点击 Open Result 打开结果保存目录中的
*.vtune
文件即可查看结果。结果的加载需要一定时间,如果无法正常加载需要检查结果目录是否完整。 - 在使用vTune uarch分析时,建议 不要强制结束任务 。因为部分同学反映运行时出现
vtune: Error: PMU resource(s) currently being used by another profiling tool or process: another PMU collection session may be running
或vtune: Error: This analysis requires one of these actions: a) Install Intel Sampling Dreivers b) ...
问题,该问题可能由强制结束进程时vTune kernel module bug导致。通过srun -w <NodeName> ...
可指定其他正常节点来完成实验。实验集群设置了每两小时执行一次的自动修复脚本。如果发现所有机器都出现问题,或确定复现方法,可向助教报告。
任务二:负载类型分析¶
对于同一程序,同样以自己的学号作为输入运行。使用 vTune 的 Microarchitecture exploration 分析功能,可以看到程序运行过程产生的 PMU 数据。根据 PMU 数据,可以推断该程序中 lipsum
函数 最可能 是_____(填写选项编号)。
- 浮点数稠密矩阵乘
- 整数稀疏矩阵乘
提示:观察 Memory bound
的占比或 vTune 图形界面 Event count
中的 FP_ARITH_INST_RETIRED
类事件(如 FP_ARITH_INST_RETIRED.SCALAR_DOUBLE
)的计数。
实验提交¶
本实验需以 JSON 文件形式提交实验结果。请将上述两个任务的答案填入以下文本,并以 单个 JSON 文件 形式提交至网络学堂,文件名为 学号.json
。
ID
后填写自己的学号(一个整数),其他项后填写答案(函数名或一个整数)。
{
"ID": 2020000000,
"Task0": "FunctionName",
"Task1": -1,
"Task2": -1
}
请保证提交结果是合法的 JSON 文件。作业将采用评分程序自动给分。