英特尔和AMD多线程的区别

3
我有一个用于在2个数据库之间传输数据的应用程序。这个应用程序的大部分操作是独立的,可以同时运行。以前,这个应用程序在4核英特尔机器上运行,现在需要将该应用程序移植到AMD四核机器上。我对以下几点存有疑虑。
  1. 我发现AMD不支持超线程(HTT),这显然意味着应用程序性能(吞吐量)会下降。如果存在上下文切换,性能是否会下降?如果是,减少并发运行的线程数量是否有帮助?

  2. 是否需要我进行代码更改以增加应用程序的吞吐量。

3个回答

6
与超线程不同,AMD在Bulldozer时代采用了一种另类的路线,被一些人称为“聚类”。正如MinGW所介绍的,这意味着单个AMD核心现在可以支持2个整数“硬件线程”(类似于HT)+一个浮点专用线程。需要注意的是,与HT共享所有核心资源不同,这种方案只共享前端(指令获取和解码)。后端是重复的,这意味着如果你处于后端限制(执行占据大部分时间),则应该能够获得比HT多2倍的资源带宽,并且如果你处于前端限制(例如,你有一个具有多个分支的复杂控制流),则大致相当于HT。
请注意以下引用中说的基本相同的内容:
“其他条件相同,它应该比单个SMT(超线程)内核提供更多的线程性能,但少于两个专用内核。”
因此,每个硬件线程现在比单个英特尔硬件线程更多,但比完整的英特尔内核少。您可以将其视为超级硬件线程或弱内核,具体取决于您的个人喜好。
然而,这是一个重要的“但是”,AMD在这里有点作弊-他们基于这些“超级”线程而不是实际组合(新被称为“模块”)发布核心计数。这意味着4核AMD机器实际上有2个模块,带有4个超级线程,并且因此具有与启用HT的2核英特尔机器相同的硬件线程计数(虽然线程更强),但是与启用HT的4核英特尔机器相比只有一半的线程。您没有指定要使用哪台机器,请确保核心计数具有正确的含义。
正如我上面所说的,性能可能会有所不同-对于执行密集型工作负载,您可能会看到4核AMD和4核英特尔之间类似的结果,因为您拥有相同数量的并行管道,并且HT可能不会对英特尔有太多帮助(虽然“可能”在这里使用非常广泛-更好的比较将考虑每台机器上不同缓冲区的大小,并行ALU和端口的数量,问题宽度等)。另一方面,在分支或内存密集型工作负载上,在那里你倾向于被卡住等待数据/分支分辨率时,英特尔可以并行地引入额外的4个硬件线程,而不需要任何上下文切换开销,从而完成更多工作。

显然有人没有定期检查SO - http://www.engadget.com/2015/11/07/amd-processor-core-class-action-lawsuit/ - Leeor

2

Java是为硬件无关性而设计的。

你不需要担心CPU提供了哪些功能。

顺便说一句,由于超线程技术的影响,大多数基准测试的性能提升始终非常有限(5-10%)。

请记住:并非每个制造商都拥有它,也并非每个处理器都拥有它。

就你的数据库性能而言:你应该考虑最大化并行性并最小化上下文切换。


你从哪里得出了5-10%的数字?英特尔声称在一般应用中更接近30% - http://software.intel.com/en-us/articles/performance-insights-to-intel-hyper-threading-technology。总的来说,忽略你运行的硬件不是一个好主意 - 如果你的程序可能在多种架构/模式下运行,你应该确保它们都能很好地工作(假设性能很重要)。 - Leeor
嗨@Leeor,我正在使用Intel(R) Core(TM) i5-2400 CPU的机器来运行我的应用程序,并通过使用4个线程获得了总共25-28%的加速。 (我尝试增加和减少线程数,并得出最佳数量)。但是,如果我在AMD FX(tm)-8350 Eight-Core Processor上运行相同的代码,则会获得缓慢的结果,最多达到15-20%,并且如果我增加线程数,则速度会变得更慢。我无法确定确切的原因,为什么会发生这种情况。我对硬件知识了解较少。如果您能提供一些关键字或可能的原因,我可以进行更多的研究。 - Vishwadeep Singh
@Leeor 在这里说,“AMD FX(tm)-8350 八核处理器的结果慢了多达15-20%”,意味着 AMD 花费的时间比原来更长。与加速相反,AMD 反而变慢了。如果 i5 在400秒内完成普通工作,那么使用线程它将在300秒内完成。但是对于 AMD,同样的工作、同样的代码,使用线程将需要470秒。 - Vishwadeep Singh
@Vishwadeep,i5 上的加速接近我所期望的,至于 AMD 的减速 - 请看下面的答案是否有帮助。 - Leeor

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接