我正在调整并行Java程序的性能。我对建筑效果感到好奇。
鉴于一台带有两个CPU插槽的机器,每个都有一个四核Intel Xeon CPU,那么:
答案 0 :(得分:8)
如何将线程调度到核心以获得接近最佳的内存性能取决于对内存的访问模式,并且通常不值得麻烦。如果你的程序是用Java编写的,那么你可能不会达到接近最佳性能所需的控制级别。
现代CPU集成了内存控制器,现代多插槽系统具有分布式内存。这称为
Non-Uniform Memory Access (NUMA)
在现代多插槽英特尔处理器中,套接字之间的通信是通过QPI完成的
QPI是英特尔架构,用于指定其工作原理。 AMD相当于HyperTransport。您可以在此处了解有关各种体系结构的更多信息:
对Level 1数据缓存中未命中的内存的访问可能由Level 2数据缓存(在同一个套接字中)提供服务,或者它可能由Intel称之为“Last Level Cache(LLC)”的服务提供服务。在具有该内存地址的内存控制器的套接字中。在另一个插槽中使用LLC可能需要几十个处理器周期,但仍然比访问DRAM(超过一百个处理器周期)快得多。
答案 1 :(得分:3)
1)两个CPU如何通信,它们通信的速度有多快?
大部分时间他们通过内存或最近的共享内存层次结构进行通信。 (SMP和NUMA上的系统内存都被认为是共享级别;即使在NUMA中,也是通过另一个芯片的内存控制器访问。这只是非统一=访问速度较慢)
2)同一芯片上的两个内核通信的速度有多快?
同一芯片上的内核通常共享L2或L3缓存。不同芯片上的核心通过内存或使用缓存一致性协议与缓存到缓存交互进行通信。
因此,在情况1(不同芯片)CPU之间传递的内存速度(带宽)将接近普通存储器读/写。在情况2(相同的芯片)中,这个速度可以更大,直到缓存读/写速度。
通信延迟将在案例1中为数百个CPU时钟,在案例2中为几十个。
3)在通信或内存访问方面,同一芯片上的四个内核是否相同?
同一芯片的所有四个核通常与RAM具有相同的距离。这取决于芯片架构和实现;一些较旧的英特尔,例如多核芯片实际上是两个芯片组装成单个封装。