为什么更高的核心数会导致更高的 CPI?

Why does higher core count lead to higher CPI?

我正在查看一张图表,该图表显示,实际上,增加 CPI 的核心数量通常会导致大多数指令的 CPI 更高,而且通常会增加程序执行的指令总量.为什么会这样?

根据我的理解,CPI 只有在增加时钟频率时才会增加,所以 CPI 增加对我来说没有多大意义。

什么图表?在增加核心数量的同时,哪些因素保持不变?也许总晶体管预算,所以每个内核必须更简单才能拥有更多内核?

增大单个内核会减少 returns,但构建更多内核会线性 returns 对于令人尴尬的并行问题;因此 Xeon Phi 有很多简单的内核,GPU 是 非常 简单的管道。

但是同样关心单线程性能/延迟(而不仅仅是吞吐量)的 CPU 将推进那些递减的 returns 并构建更宽的内核。我们 运行 在 CPU 上遇到的许多问题对于并行化来说 不是 微不足道的,因此大量的弱核比更少的更快的核更糟糕。对于给定的问题大小,您拥有的线程越多,该线程与其他线程通信(并且可能等待来自它们的数据)的总时间就越多。


如果您 在添加更多内核时保持每个内核相同,那么当 运行 使用相同的代码时,它们的 CPI 通常保持不变。 例如SPECint_rate 与当前 Intel/AMD CPU 的内核数量几乎呈线性扩展(通过添加更多相同的内核来扩展)。

所以这一定不是您的图表所谈论的内容。 如果您想要更具体的答案,您需要澄清问题。

您无法获得完美的线性缩放,因为核心确实会相互竞争内存带宽,并且 space 在共享的最后一级缓存中。 (尽管大多数当前设计会随着内核数量增加末级缓存的大小。例如,AMD Zen 有 4 个内核集群,共享 8MiB 的 L3,这些内核专用于这些内核。英特尔使用大型共享 L3,其中有一片 L3每个内核,因此每个内核的 L3 大致相同。)

但更多的核心也意味着更复杂的互连,将它们连接在一起并连接到内存控制器。英特尔多核至强 CPU 的单线程带宽明显比相同微体系结构的四核 "client" 芯片差,即使两者的内核相同。