我试图计算大矩阵中所有元素的总和。以下是测试用例:
在所有情况下,CPU时钟固定为3.0 GHz(由cpufreq-info声称):
current policy: frequency should be within 1.60 GHz and 3.40 GHz.
The governor "userspace" may decide which speed to use
within this range.
current CPU frequency is 3.00 GHz.
矩阵有25000000个double
类型的元素,值为1.0。并且总和在循环中重复计算4096次。没有AVX,使用MT时的速度提升为2.6。 AVX只有1.3。运行MT时,矩阵分为4个块,每个线程一个。如果我降低CPU频率,AVX的MT改进会更大,因此也可能存在缓存未命中的问题,但这无法解释(4)/(2)和(3)/(1)之间的差异。 AVX和MT是否以某种方式相互竞争?芯片是i3570K。
答案 0 :(得分:3)
很可能您的基准性能受到执行延迟的限制,但是任何一种并行化形式(MT或矢量化)都可以让您打破并达到下一个瓶颈,即CPU的内存BW。
检查你的CPU可达到的峰值BW并与你的数据进行比较,看起来你只需要以20.5GB / s的速度饱和(25000000个元素* 4096个循环* 8Bytes,假设你的系统使用的是双倍/ ~40秒) ,这似乎有点低,因为这link说它应该达到25GB / s,但是在同一个球场周围所以可能是由于其他低效率,如DDR类型,其他应用程序/操作系统在后台工作,频率由CPU完成缩放以节省电力/减少热量等。
您还可以尝试运行一些内存基准测试(lmbench,sandra,..),看看它们是否在相同的环境下做得更好。
答案 1 :(得分:0)