小作业三:测量 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 的 static
、dynamic
和 guided
三种调度模式(共 6 种组合),测量其运行时间。请在报告中汇报你使用的线程数,补全的指导语句以及测量结果,并简要分析其原因。动态的调度会受实际系统环境影响,性能可能有波动。如性能与预期不相符,在确保程序正确并行的前提下,将所测结果及其波动情况如实报告并分析原因即可。
实验提交¶
本实验仅需提交实验报告,请将报告的 PDF 文件 提交至网络学堂。