OpenMP + SSE没有加速

时间:2010-04-12 15:12:24

标签: openmp sse convolution

我的教授利用SSE和OpenMP找到了这个有趣的3D线性可分离核卷积实验,并给我一个基准来统计我们系统的统计数据。作者声称从串行方法中加速了18倍!可能并不总是如此,但我们期望在双核英特尔上运行至少2-4倍的速度。

http://software.intel.com/en-us/articles/16bit-3d-convolution-sse4openmp-implementation-on-penryn-cpu/#comment-41994

唉,我们确实找不到加速。无论是否使用OpenMP,串行代码总能更好地执行。

我正在使用Linux,并观察到某种趋势......当系统上没有其他进程正在运行时,一段时间后,loadavg开始增加,并且%CPU利用率下降。

我偶然遇到的另一个可能的误报......我启动了程序,然后立即暂停了它。然后我用bg在背景上运行它,并看到超过2的加速。这种情况一直在发生!

任何建议都会很棒。

谢谢, 萨扬

2 个答案:

答案 0 :(得分:2)

您确实需要对程序进行分析以确定瓶颈。您还需要以更“整体”的方式来看待优化。您的性能问题可能与设计不良,编码不良,内存带宽限制以及许多其他问题有关,这些问题都不会通过微优化来解决,例如使用SIMD而不是标量代码。

从个人资料开始(为此使用Zoom之类的工具)并从那里开始工作。

答案 1 :(得分:0)

好吧,我摸索了一下,然后尝试了以下内容:我使用-O0选项编译程序(没有优化),并且几乎所有XYZ值都获得了2的加速。我还可以看到我的双核上使用了2个线程(之前,它只使用了一个)。 但是现在,当我删除OpenMP pragma时,我看不到加速,这让我感到困扰,因为SSE应该能够大大加快速度。所以这个加速可以完全归功于OpenMP,必须找出SSE失败的原因。有人告诉我,如果操作是微不足道的(也许这个词提出的重量是有争议的,因为它因人而异),使用SSE不会加速。但我写了一个小程序,计算sqrt(i)/ i为i_max_size = 64000 .....并且SSE版本的加速比为3.5~4.0。 一旦找到根本原因,我会发布更多信息。