我目前有一个程序可以从多线程中受益匪浅。它启动 n 线程,每个线程执行100M迭代。它们都使用共享内存,但根本没有同步。 它近似于一些方程解决方案,目前的基准是:
1 thread: precision 1 time: 150s
4 threads: precision 4 time: 150s
16 threads: precision 16 time: 150s
32 threads: precision 32 time: 210s
64 threads: precision 64 time: 420s
(精度越高越好)
我使用Amazon EC2'Cluster Compute Eight Extra Large Instance',其中包含2 x Intel Xeon E5-2670 据我所知,它有16个真正的内核,因此程序具有线性改进,最多16个内核。 它也有2倍的“超线程”,我的程序从中获益。使线程数超过32显然没有任何改进。
这些基准测试证明,访问RAM不是“瓶颈”。
此外,我在英特尔至强E5645上运行该程序,该程序具有12个真实核心。结果是:
1 thread: precision 1 time: 150s
4 threads: precision 4 time 150s
12 threads: precision 12 time 150s
24 threads: precision 24 time 220s
precision/(time*thread#)
与亚马逊计算机类似,对我来说并不清楚,因为根据cpu MHz(~1600 vs~2600),Xeon E5-2670中的每个核心都快〜1.5并且
http://www.cpubenchmark.net/cpu_list.php'Passmark CPU Mark'编号调整为
更新
Xeon5645上的13个线程需要196秒。
算法随机探索具有3500个节点的树。树的高度为7.每个节点包含250个双打,也可以随机访问。很可能几乎没有数据被缓存。
答案 0 :(得分:5)
您列出的两个Intel CPU的规格:
E5-2670 - 2.6ghz minimum [8 active cores] (3.3ghz turbo on a single core)
E5645 - 2.4ghz minimum [6 active cores] (2.8ghz turbo on a single core)
因此,至少有一个重要问题要问自己:
为什么你的应用程序不能作为单核更快? 更多 的速度从1核扩展到 E5-2670上的8个内核比E5645的速度降低。您不应该注意到从1到16个线程的线性进展,即使您的应用程序的线程间锁定为零 - 所有当前的CPU都会因为更多线程添加到其工作负载而降低时钟速率。
答案可能不是RAM,至少在基本意义上,但它可能是“L1 / L2缓存”。 L1 / L2缓存对于应用程序性能而言比RAM吞吐量更重要。现代英特尔CPU的设计理念是L1 / L2缓存命中率可能会很好(如果不是很好)。如果L1 / L2高速缓存通过一种在没有频繁重用模式的情况下通过兆字节内存进行搅拌的算法变得无用,那么CPU将基本上成为RAM 延迟 的瓶颈。
RAM延迟不是RAM吞吐量
虽然ram的吞吐量可能足以跟上所有线程的持续时间,但延迟并非如此。 RAM的延迟读取为80-120个周期,具体取决于CPU时钟倍频。相比之下,L1的延迟读数是3个周期,从L2 11-12个周期开始。因此,如果算法的某些部分总是导致从 RAM 获取,则该部分将始终需要很长时间才能执行,并且由于ram延迟将在不同的CPU上大致相同的时间差不多。 Xeon上的100个周期足够长,即使对RAM的单个停顿也可以成为算法中的主要热点(考虑到这些芯片每个周期平均3个指令)。
我不知道这是否是您应用程序的实际瓶颈,因为我不知道它在每次迭代时处理了多少数据,或者它使用了哪种访问ram模式。但这是在许多线程配置和不同Xeon CPU之间进行固定时间算法的唯一解释之一。
(编辑:这些Xeon芯片上还有一个共享的L3缓存,但其有用性非常有限.3L访问的延迟是50-60个周期 - 比RAM好,但不是很多。还有机会点击L3如果L1 / L2都已经无效,那么这个芯片的设计具有很高的L1 / L2命中率:L3高速缓存配置是为了补充来自L1 / L2的偶然失误,以及不能很好地将数据作为主缓存本身提供)
答案 1 :(得分:0)
两个tipps:
1)将线程数设置为num核心+ 1.
2)cpu速度告诉很少,它也是第一级和第二级cpu缓存的速度和大小。和记忆。 (我的Quadcore名义上比我的双核笔记本电脑快20%,但实际上使用单线程高CPU应用程序。它的速度提高了400-800%。(由更快的内存,CPU设计,缓存等引起)
服务器处理能力通常低于私人电脑的处理能力,因为它们的设计更具稳健性和24小时正常运行时间。