跳转至

小作业三:测量 OpenMP 并行 for 循环不同调度策略的性能

负责助教:杨浩宇 yanghy23@mails.tsinghua.edu.cn

背景

在课堂上,我们学习了 OpenMP 并行 for 循环的不同调度选择。请在本次作业中动手设置此调度,并比较不同调度之间的区别。

任务

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

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

cp -R /home/course/hpc/assignments/2024/exp3 ~/
cd ~/exp3/

请使用 OpenMP 并行 for 循环并行给定的程序,并测量不同调度选择带来的性能差异。只需要使用 make 进行编译,并使用 srun -N 1 ./omp_sched 提交即可。

程序完成的任务为:给定长度为 n 的数组 input,它被分为用数组 parts 表示的 nParts 个分段,其中第 i 段的范围为 [parts[i], parts[i + 1])。程序会将其复制到数组 output,并为每一段分别排序。

上述程序中各段的排序是相互独立的,故可以使用 OpenMP 并行处理。程序主体、输入输出及时间测量逻辑已在 omp_sched.cpp 中给出,你只需补充 OpenMP 制导语句,不需要修改其它部分。本作业中,你将并行两组测例:较多且为均匀长度的分段,和较少且为随机长度的分段。请为其分别选择调度。

请在这两个测例上应用 OpenMP 的 staticdynamicguided 三种调度模式(共 6 种组合),测量其运行时间。请在报告中汇报你的测量结果,并简要分析其原因。动态的调度会受实际系统环境影响,性能可能有波动。如性能与预期不相符,在确保程序正确并行的前提下,将所测结果及其波动情况如实报告并分析原因即可。

实验提交

本实验仅需提交实验报告,请将报告的 PDF 文件 提交至网络学堂。


最后更新: 2024年3月25日
作者: Harry Chen (33.33%), Shizhi Tang (56.67%), 翟明书 (6.67%), oliverYoung2001 (3.33%)