【问题标题】:How do the CPUs on different sockets communicate? [closed]不同插槽上的 CPU 是如何通信的? [关闭]
【发布时间】:2012-08-25 12:18:17
【问题描述】:

我正在调整我的并行 Java 程序的性能。我对建筑效果很好奇。

假设一台机器有两个 CPU 插槽,每个插槽都有一个四核 Intel Xeon CPU,那么:

  • 两个 CPU 如何通信,它们的通信速度有多快?
  • 同一芯片上的两个内核的通信速度有多快?
  • 同一芯片上的四个内核在通信或内存访问方面是否等效?

【问题讨论】:

  • 您是否传递了大量数据?数据如何传递(例如使用 0MQ)?

标签: networking cpu-architecture multicore motherboard


【解决方案1】:

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

现代 CPU 具有集成内存控制器,现代多插槽系统具有分布式内存。这叫

Non-Uniform Memory Access (NUMA)

在现代多插槽英特尔处理器中,插槽之间的通信是通过 QPI 完成的

QuickPath Interconnect (QPI)

QPI 是指定其工作方式的英特尔架构。 AMD 的等价物是 HyperTransport。您可以在此处了解有关各种架构的更多信息:

System Architecture

在 1 级数据缓存中未命中的内存访问可能由 2 级数据缓存(在同一个套接字中)提供服务,也可能由英特尔所谓的“最后一级缓存 (LLC)”提供服务,这将位于具有该内存地址的内存控制器的套接字中。在另一个插槽中访问 LLC 可能需要几十个处理器周期,但仍然比访问 DRAM 快得多(超过一百个处理器周期)。

【讨论】:

  • 非常好的总结。 “系统架构”看起来也是一个很好的资源。
【解决方案2】:

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

大多数时候,它们通过内存或最近的共享内存层次结构级别进行通信。 (SMP 和 NUMA 上的系统内存都被视为共享级别;即使在 NUMA 中它是通过另一个芯片的内存控制器访问。这只是 Non-Uniform=较慢的访问)

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

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

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

情况 1 的通信延迟将是数百个 CPU 滴答声,而情况 2 将是几十个。

3) 同一芯片上的四个内核在通信或内存访问方面是否等效?

同一芯片的所有四个内核通常与 RAM 的距离相等。这取决于芯片架构和实现;对于一些较旧的英特尔,例如多核芯片实际上是将两个芯片封装在一个封装中。

【讨论】:

  • 那么当将两个线程分配给两个内核时,一对二芯片可能比一对一芯片慢几十倍,对吧?
  • 线程之间的交互是什么?他们在交互之间会做多少工作?他们是在发送大量数据还是只是在处理共享数据结构?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-17
  • 1970-01-01
  • 1970-01-01
  • 2021-07-11
  • 2018-03-06
  • 1970-01-01
相关资源
最近更新 更多