我的办公室电脑有 8 个核心。我最近将系统从 4GB RAM(两个模块)升级到 24GB RAM(六个模块),并注意到当多个核心处于活动状态时性能有显著提升。特别是当所有(或几乎所有)核心都处于活动状态并且运行的程序需要的内存超过每个核心的缓存(8MB)所提供的内存时。
新旧 RAM 的速度相同 (FSB 1333MHz)。因此我怀疑情况并非如此。
如果核心使用的内存“相距足够远”,那么(某些?)PC 架构是否可能允许核心同时访问系统 RAM?我不确定“相距足够远”是什么意思,但也许有一个核心可以读取/写入卡 1(或卡 1 上的芯片 3),而另一个核心可以同时读取/写入卡 2(或卡 1 上的芯片 1)?PC 架构(也许还有操作系统)有这么智能吗?
答案1
假设主板支持三通道操作,那么性能的提升至少部分归因于从双通道转移到三通道。
答案2
是的NUMA。使用时,每个核心都会分配一块 RAM。这样,您所描述的情况就发生了。一个处理器将使用分配给它的 RAM 工作,另一个处理器将使用 RAM 的不同部分工作。除非有足够的 CPU 来使用所有 RAM,否则某些主板甚至不会检测到 RAM。我不知道这里提到的计算机是否也是如此,但如果是工作站级计算机,那么这是可能的。
另一个选择是内存交叉存取。如果内存“分散”,某些计算机可以更快地访问内存。其原理是,当一个模块正在执行写入操作时,另一个模块可以接受命令,因此无需等待一个模块中的写入操作完成后再在另一个模块中开始。
想象一下一个数字数组。每个数字代表一个内存位置。假设在这个例子中每个位置的大小为一个字节。因此,如果处理器需要写入 4 个字节,它将数据写入前 4 个内存位置。通常,它们位于同一个内存模块上,可能位于同一个内存芯片上。计算机需要等待每个写入操作完成后才能将下一个数据发送到内存中。如果使用交错,则地址映射不同。如果我们的计算机有 4 个内存插槽,地址 1 将在第一个插槽上,2 在第二个插槽上,3 在第三个插槽上,4 在第四个插槽上。这样,当处理器需要写入 4 个字节时,它会将它们发送到前 4 个内存地址,但由于它们位于不同的模块上,因此它不需要等待每个写入操作完成。相反,它会将数据发送到第一个位置,然后发送到第二个位置,依此类推。这样,当第一个写入操作结束时,其他 3 个也接近尾声,因此数据可以更快地写入内存。