我的教授发现了这个使用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,观察到某个trend...when没有其他进程在系统上运行,过了一段时间,loadavg开始增加,%CPU利用率下降。
我意外地遇到了另一个可能的误报……我启动了程序,然后立即暂停。然后我用bg在后台运行它,发现它的加速比超过2,这种情况时有发生!
任何建议都是很棒的。
谢谢,Sayan
发布于 2010-04-13 00:44:33
您确实需要对您的程序进行概要分析,以确定瓶颈。你还需要以一种更“整体”的方式来看待优化。您的性能问题可能与糟糕的设计、糟糕的编码、内存带宽限制以及许多其他问题有关,这些问题都不能通过微优化解决,例如使用SIMD而不是标量代码。
从一个配置文件开始(使用像Zoom这样的工具),然后从那里开始。
发布于 2010-04-15 01:19:12
我摸索了一下,然后尝试了以下方法:我使用-O0选项(无优化)编译了程序,几乎所有XYZ值的加速比都达到了2。我还可以看到在我的双核上使用了两个线程(以前,它只使用一个)。但是现在,当我删除OpenMP编译指示时,我看不到任何加速,这让我很困扰,因为SSE应该能够显著提高速度。因此,这种加速完全可以归功于OpenMP,必须找出上交所失败的原因。有人告诉我,如果操作是琐碎的(也许这个词提出的权重是有争议的,因为它因人而异),使用SSE不会获得加速。但我写了一个小程序,计算i_max_size = 64000.....and的sqrt(i)/i。SSE版本的加速比为3.5 ~ 4.0。一旦我找到根本原因,我会发布更多。
https://stackoverflow.com/questions/2623089
复制相似问题