Dar*_*ght 2 java concurrency multithreading intel amd-processor
我有一个应用程序用于2个数据库之间的数据传输.此应用程序的大多数操作都是独立的并且同时运行.此应用程序早先在4核心intel机器上运行,现在这个应用程序需要移植到AMD quad(4)核心机器上.我对以下几点表示怀疑.
我发现AMD不支持超线程(HTT),这显然意味着应用程序性能(吞吐量)会降低.由于Context Switching会导致性能下降,如果是,那么同时运行的线程数会减少有帮助吗?
我是否需要更改代码以提高应用程序吞吐量.
而不是超线程,AMD采用了Bulldozer的替代路线(通过某些人称)聚类.
正如MinGW带来的链接所解释的那样,这意味着单个AMD内核现在可以支持2个整数"HW线程"(很像HT)+一个浮点专用.请注意,与HT共享HW线程之间的所有核心资源不同,在此方案中只共享前端(指令获取和解码).后端是重复的,这意味着如果你是后端绑定(执行大部分时间都是你),你应该能够获得比HT高2倍的资源BW,并且如果你是前端绑定,则与HT大致相同(对于例如,您有一个具有多个分支的复杂控制流程.
请注意以下引用说的几乎相同:
所有其他方面都相同,它应该比单个SMT(超线程)内核提供更多的线程性能,但不到两个专用内核
所以基本上每个硬件线程现在都不仅仅是一个英特尔硬件线程,而是一个完整的英特尔核心.您可以将其视为超级硬件线程或跛脚核心,具体取决于您的个人偏好.
然而,这是一个很大的"然而",AMD曾经在这里作弊 - 他们发布了基于这些"超级"线程的核心数,而不是实际的组合(新近被称为"模块").这意味着4核AMD机器实际上有2个模块,有4个超级线程,因此具有与2核Intel机器相同的硬件线程数(虽然具有更强的线程),但是4个线程的一半启用HT的核心Intel机器.您没有指定要使用的计算机,因此请确保核心计数具有正确的含义.
如上所述,性能可能会有所不同 - 对于执行密集型工作负载,您可能会看到4核AMD和4核Intel之间的类似结果,因为您拥有相同数量的并行流水线,并且HT可能对英特尔的帮助不大(尽管"可能")这里使用的是一个非常广泛的意义 - 更好的比较将考虑每台机器上不同缓冲区的大小,并行ALU和端口的数量,发布宽度等.).另一方面,在分支机构或内存密集型工作负载上,您往往会遇到大量等待数据/分支分辨率的问题 - 英特尔可以并行引入额外的4个HW线程,而无需任何上下文切换开销,从而完成更多工作.