0

我正在做一个项目,我们被要求编写一个简单的 OpenMP 代码来并行化一个使用微分方程的程序。我们还被要求测试代码在有和没有编译器优化的情况下的性能。我正在使用 Sun CC 编译器,因此对于优化版本,我使用了选项

-xopenmp -fast

对于非优化

-xopenmp=noopt

毫不奇怪,编译器优化的运行时间远低于其他情况。令我惊讶的是,非优化版本的缩放性能要好得多。在这里,我所说的性能是指加速系数,即程序运行在 M 个处理器上的运行时间与程序运行在 1 个处理器上的运行时间之比。

有人暗示这可能取决于优化版本受内存限制,而非优化版本受 CPU 限制的事实。我不确定“边界”如何影响我的代码的扩展能力。你有什么建议吗?

4

1 回答 1

0

在大多数多处理器系统上,多个 CPU 内核共享一条通往内存的路径。每个线程给定的输出二进制文件将具有一定的固有计算强度(每访问字节的计算量)。当您运行代码的内核数量超过运行速率时,它超过了支持它所需的内存带宽,它将停止使用额外的内核进行扩展。要更好地了解如何推理此类问题,请查看“屋顶线模型”。

我希望通过启用优化看到两个变化。其中之一是计算强度应该有所增加,如果优化提供任何类型的循环阻塞以减少内存访问。另一个是原始操作率应该随着更好地识别向量化机会以及随后的指令选择和调度而增加。这两件事应该对扩展效率产生相反的影响,但在您的情况下,后者显然占主导地位。

于 2013-01-17T21:43:22.273 回答