如果尚未收集 omptest 的性能数据,必须进行收集,并打开第一个实验 omptest.1.er。相关说明,参见为 omptest 示例收集数据。
本练习将比较分别使用 PARALLEL SECTIONS 指令和 PARALLEL DO 指令的两个例程 psec_() 和 pdo_() 的性能。例程的性能以 CPU 数目的函数形式进行比较。
要比较四 CPU 运行和双 CPU 运行,您必须启动性能分析器的另一个实例,并将 omptest.2.er 载入其中。在终端窗口中,键入下列命令。
% analyzer omptest.2.er &
可以使用 [查找] 工具来查找此函数。请注意,还存在其它一些以 psec_ 开头的函数,这些函数已由编译器生成。
对于双 CPU 运行,挂钟时间与用户 CPU 时间或总 LWP 时间的比率约为 1 比 2,这表示相对有效的并行化。
对于四 CPU 运行,psec_() 所花费的挂钟时间与双 CPU 运行花费的挂钟时间大致相同,但用户 CPU 时间和总 LWP 时间更长。在 psec_() PARALLEL SECTION 构造内只有两段,因此只需要两个线程来执行它们,并且在任一给定时间仅使用四个可用 CPU 中的两个。其它两个线程将花费 CPU 时间等待工作。由于未提供其它工作,因此时间被浪费。
此时,pdo_() 的数据会显示在 [摘要] 标签中。
pdo_() 与 psec_() 的用户 CPU 时间大致相同。挂钟时间与用户 CPU 时间的比率在双 CPU 运行中约为 1 比 2,在四 CPU 运行中约为 1 比 4,这表明在适当地考虑可用的 CPU 数目及循环调度的情况下,pdo_() 并行化策略在多个 CPU 中调节地更为有效。