如果Xeon X5355上的线程数超过2,则性能会下降

时间:2010-02-15 07:57:28

标签: multicore

我有一个奇怪的问题,但对你们中的某些人来说可能并不那么奇怪。

我正在编写一个使用boost线程并使用boost barrier来同步线程的应用程序。我有两台机器来测试应用程序。

机器1是core2 duo(T8300)cpu机器(Windows XP专业版 - 4GB RAM),我得到以下性能数据:

主题数:1,TPS:21

线程数:2,TPS:35(改善66%)

线程数量的进一步增加会降低TPS,但这是可以理解的,因为机器只有两个核心。

机器2是一个2四核(Xeon X5355)cpu机器(带有4GB RAM的Windows 2003服务器),有8个有效内核。

主题数:1,TPS:21

线程数:2,TPS:27(改善28%)

主题数:4,TPS:25

线程数:8,TPS:24

正如您所看到的,2个线程后性能下降(尽管它有8个内核)。如果程序有一些瓶颈,那么2线程也应该降级。

有什么想法吗? ,解释? ,OS是否在性能方面有一定作用? - 看起来Core2duo(2.4GHz)比Xeon X5355(2.66GHz)更好,但它具有更好的时钟速度。

谢谢

-Zoolii

3 个答案:

答案 0 :(得分:2)

时钟速度和操作系统与编写代码的方式没有太多关系。要检查的事项可能包括:

  • 你实际上是在同时旋转两个以上的线程吗?
  • 您的代码中是否有不必要的同步工件?
  • 您是否在适当的位置同步代码?
  • 您的可分享资源是多少?有多少资源?如果您的每个事务都依赖于单个代码段,本机库,文件,数据库等等,那么无论您有多少CPU都无关紧要。

在分析软件瓶颈时,您可以使用的一个工具是简单的线程转储。在执行软件的整个生命周期中进行一些转储应该会暴露软件中的瓶颈。您可以获取该输出并使用它来重新评估您的代码。

答案 1 :(得分:0)

添加更多CPU并不总是等同于更好的性能,锁定和争用会严重降低性能。需要考虑的因素是:

  • 您的算法适合并行化吗?
  • 代码的任何固有连续部分?
  • 你可以将工作划分为粗粒度的“块”吗? Corase通常比细粒度好......
  • 您可以更改代码以减少锁定吗?
  • 通过确保工作块大小相似,通常可以减少同步开销。

答案 2 :(得分:0)

根据经验,英特尔政策可能是2个线程或仅在该处理器上进行双重处理,只有pthread可以与该版本的操作系统一起使用,这两个处理器的设计符合不同的法律规定不同的规定或允许,不允许自己的线程进程,处理器正在退出超过n个线程,并且报告此错误消息的处理会降低两个核心的吞吐量,并可能导致核心停用3和4。