2012-08-30 22 views
7

我在调整并行Java程序的性能。我对建筑效果感到好奇。不同套接字上的CPU如何通信?

鉴于有两个CPU插槽的机器,每一个与四核英特尔至强CPU,则:

  • 如何将两个CPU沟通,如何快速将他们沟通?
  • 同一芯片上两个内核的通信速度有多快?
  • 同一芯片上的四个内核在通信或内存访问方面是否相同?
+0

你传递了​​很多数据吗?数据如何传递(例如,使用0MQ)? – osgx

回答

3

1)两个CPU如何通信,它们的通信速度有多快?

他们大多数时间通过内存或最近的共享内存层次进行通信。 (系统存储器两者上SMP和NUMA被认为是共享的水平;即使在NUMA它是经由另一芯片的存储器控​​制器访问这只是非均匀=较慢存取)

2)的速度有多快将2同一芯片上的内核通信?

同一芯片上的内核通常共享L2或L3缓存。不同芯片上的内核使用缓存一致性协议通过内存或与缓存到缓存的交互进行通信。

因此,在CPU之间传递的内存的1(不同芯片)速度(带宽)将接近普通内存读取/写入。而在情况2(相同芯片)下,这个速度可以更大,达到缓存读写速度。

时延通信将是几百CPU的蜱在壳体1和几十在壳体2

3)同一芯片上等效于通信或访问存储器中的术语的四个核?

同一芯片的所有四个核心通常具有与RAM等效的距离。它取决于芯片架构和实现;对于一些较老的Intels例如多核芯片真的是两个芯片打包成单个封装。

+0

因此,当将两个线程分配给两个内核时,两个芯片上的一个线程可能比一个芯片上的线程慢数十倍,对吧? – JackWM

+0

线程之间的交互是什么?他们在互动之间会做多少工作?他们发送大量数据还是只处理共享数据结构? – osgx

8

如何将线程调度到内核以接近最佳内存性能取决于对内存的访问模式,通常不值得这样做。如果您的程序使用Java,那么您可能无法达到接近最佳性能所需的控制级别。

现代CPU具有集成内存控制器,而现代多插槽系统具有分布式内存。这就是所谓的

Non-Uniform Memory Access (NUMA)

在插座之间的现代化多功能插座英特尔处理器通信与QPI

QuickPath Interconnect (QPI)

QPI是英特尔架构,指定是如何工作的完成。 AMD相当于HyperTransport。您可以详细了解各种架构这里:

System Architecture

内存的访问,在1级数据缓存缺失可能是由二级数据缓存提供服务(在同一个插座),也可能是由英特尔称之为“Last Level Cache(LLC)”的服务,该端口位于具有该内存地址的内存控制器的套接字中。在另一个插槽中打入LLC可能会有几十个处理器周期,但仍然比访问DRAM(超过一百个处理器周期)快得多。

+1

非常好的总结。 “系统架构”看起来也是一个很好的资源。 –