如果尚未收集 omptest 的性能数据,必须进行收集,并打开第一个实验 omptest.1.er。相关说明,参见为 omptest 示例收集数据。
本部分比较两个例程 critsec_() 和 reduc_() 的性能,在这两个例程中将使用 CRITICAL SECTIONS 指令和 REDUCTION 指令。在本例中,并行化策略处理在一对 do 循环中嵌入的同一赋值语句。其目的是求三个二维数组的内容之和
t = (a(j,i)+b(j,i)+c(j,i))/k sum = sum+t
critsum_() 的相容用户 CPU 时间非常长,因为 critsum_() 使用临界段并行化策略。虽然求和运算遍布于全部四个 CPU,但一次只允许一个 CPU 将其 t 值加到 sum 中。对于此类编码构造,这并非是一种非常有效的并行化策略。
redsum_() 的相容用户 CPU 时间远远少于 critsum_() 的对应时间。这是因为 redsum_() 使用约简策略来求和。在此策略中,在每个处理器上以并行方式累计部分的和,然后将部分的和按顺序累加到 sum 中。此策略能更有效地利用可用的 CPU,因为它从最大程度上减少了对 sum 的按序访问。