我正在调优并行Java程序的性能。我对建筑效果很好奇。
给出一台具有两个CPU套接字的机器,每个插槽都有一个四核Intel Xeon CPU,那么:
发布于 2012-08-30 17:55:16
( 1)两个CPU如何通信,通信速度如何?
大多数情况下,它们通过内存或最近的共享内存层次级别进行通信。( SMP和NUMA上的系统内存都被视为共享级别;即使在NUMA中,也是通过另一个芯片的内存控制器访问的。这只是不统一的=较慢的访问)
2)同一芯片上的两个核心通信速度如何?
同一芯片上的核心通常共享L2或L3缓存。不同芯片上的核心通过内存或使用缓存一致性协议与高速缓存之间的交互进行通信。
因此,在第1种情况下(不同的芯片),CPU之间的内存传输速度(带宽)将接近普通内存读写。在第二种情况下(相同的芯片),这个速度可以更大,直到缓存读/写速度。
通信的延迟在第一种情况下将是几百个CPU时钟,在第二种情况下将是几十个。
( 3)在通信或内存访问方面,同一芯片上的四个核心是否等效?
同一芯片的所有四个核心通常与RAM的距离相等。这取决于芯片的结构和实现;对于一些较老的Intels来说,例如多核芯片实际上是两个封装在单个包中的芯片。
发布于 2012-08-30 18:35:16
如何将线程调度到内核以使其接近最佳内存性能取决于内存的访问模式,而且通常不值得麻烦。如果您的程序是用Java编写的,那么您可能无法获得达到最佳性能所需的控制级别。
现代CPU采用集成内存控制器,现代多套接字系统采用分布式存储器.这叫做
Non-Uniform Memory Access (NUMA)
在现代多套接字处理器中,套接字之间的通信是用QPI实现的。
QuickPath Interconnect (QPI)
QPI是Intel的体系结构,它指定了这是如何工作的。AMD的等价物是HyperTransport。您可以在这里了解更多有关各种体系结构的信息:
System Architecture
对1级数据缓存中丢失的内存的访问可能由2级数据缓存(在同一套接字中)提供服务,也可能由Intel称为“LLC”的套接字提供服务,该套接字具有该内存地址的内存控制器。在另一个套接字中插入LLC可能需要几十个处理器周期,但仍比访问DRAM (超过100个处理器周期)要快得多。
https://stackoverflow.com/questions/12202488
复制相似问题