为什么我们的 CPU 所有核心的速度都相同,而不是不同速度的组合?

为什么我们的 CPU 所有核心的速度都相同,而不是不同速度的组合?

一般来说,如果您要购买一台新电脑,您会根据预期的工作量来决定购买哪种处理器。游戏性能往往由单核速度决定,而视频编辑等应用程序则由核心数量决定。

就市场上现有的产品而言 - 所有 CPU 似乎都具有大致相同的速度,主要区别在于线程数或更多内核。

例如:

  • Intel Core i5-7600K,基本频率 3.80 GHz,4 核,4 线程
  • Intel Core i7-7700K,基本频率 4.20 GHz,4 核,8 线程
  • AMD Ryzen 5 1600X,基本频率 3.60 GHz,6 核,12 线程
  • AMD Ryzen 7 1800X,基本频率 3.60 GHz,8 核,16 线程

那么为什么我们会看到这种核心不断增加且所有核心都具有相同时钟速度的模式呢?

为什么我们没有不同时钟速度的变体?例如,两个“大”核心和许多小核心。

举个例子,假设不是 4.0 GHz 的四核(即 4x4 GHz ~ 最大 16 GHz),而是两核运行在 4.0 GHz 的 CPU 和四核运行在 2 GHz 的 CPU(即 2x4.0 GHz + 4x2.0 GHz ~ 最大 16 GHz)。第二种选择在单线程工作负载方面不是同样好,但在多线程工作负载方面可能更好吗?

我问这个问题是为了说明一个普遍问题 - 并不专门针对我上面列出的那些 CPU,也不针对任何特定的工作负载。我只是好奇为什么会出现这种模式。

答案1

这就是所谓的异构多处理氢化可的松) 并被移动设备广泛采用。在基于 ARM 的设备中,大小,处理器包含具有不同性能和功率分布的内核,例如,一些内核运行速度快但耗电量大(更快的架构和/或更高的时钟),而另一些内核节能但速度慢(更慢的架构和/或更低的时钟)。这很有用,因为一旦超过某个点,随着性能的提高,功耗往往会不成比例地增加。这里的想法是在需要时获得性能,在不需要时延长电池寿命。

在桌面平台上,功耗问题不大,因此这并不是真正必要的。大多数应用程序都希望每个核心具有相似的性能特征,而 HMP 系统的调度过程比传统 SMP 系统的调度过程复杂得多。(Windows 10 在技术上支持 HMP,但它主要用于使用 ARM big.LITTLE 的移动设备。)

此外,当今大多数台式机和笔记本电脑处理器不是由于热或电气限制,即使是短时间的突发,某些核心也需要比其他核心运行得更快。我们在制造单个核心的速度上基本上遇到了瓶颈,因此用较慢的核心替换一些核心不会让剩余的核心运行得更快。

虽然有些台式机处理器有一个或两个内核能够比其他内核运行得更快,但这种能力目前仅限于某些非常高端的英特尔处理器(如 Turbo Boost Max 技术 3.0),并且只会对运行速度更快的内核带来性能上的轻微提升。


虽然可以设计一个传统的 x86 处理器,既有大型、快速的内核,也有小型、较慢的内核,以针对高线程工作负载进行优化,但这会增加处理器设计的复杂性,应用程序不太可能正确支持它。

假设有一个处理器,有两个快速卡比湖(第七代酷睿)核心和八个慢速戈德蒙特(Atom)核心。总共有 10 个核心,针对这种处理器优化的重线程工作负载可能会比普通的四核处理器性能和效率更高卡比湖处理器。然而,不同类型的内核具有截然不同的性能水平,慢速内核甚至不支持快速内核支持的一些指令,例如AVX(ARM 通过要求大核和小核都支持相同的指令来避免这个问题。)

同样,大多数基于 Windows 的多线程应用程序都假设每个内核具有相同或几乎相同的性能水平,并且可以执行相同的指令,因此这种不对称可能会导致性能不理想,甚至在使用慢速内核不支持的指令时崩溃。虽然英特尔可以修改慢速内核以添加高级指令支持,以便所有内核都可以执行所有指令,但这无法解决异构处理器的软件支持问题。

另一种应用程序设计方法更接近于您在问题中想到的方法,即使用 GPU 来加速应用程序的高度并行部分。这可以使用以下 API 来实现OpenCL通用计算架构至于单芯片解决方案,AMD 在其 APU 中推广对 GPU 加速的硬件支持,将传统 CPU 和高性能集成 GPU 结合到同一芯片上,异构系统架构,尽管除了少数专门的应用之外,该技术尚未得到广泛的行业采用。

答案2

你要问的是为什么当前的系统使用 对称多处理 而不是 非对称多处理

过去,计算机规模巨大,并且分布在多个单元中,因此使用非对称多处理。

现代 CPU 被铸造成一个单元,位于一个芯片中,因此不同类型的 CPU 不会混合在一起,因为它们都共享相同的总线和 RAM,所以更加简单。

时钟也限制了 CPU 周期和 RAM 访问。当混合使用不同速度的 CPU 时,这种情况将变得不可能。无时钟的实验计算机确实存在,甚至速度相当快,但现代硬件的复杂性要求更简单的架构。

例如,Sandy Bridge 和 Ivy Bridge 内核不能同时以不同的速度运行,因为 L3 缓存总线以与内核相同的时钟速度运行,因此为了防止出现同步问题,它们都必须以该速度运行或处于停止/关闭状态(链接:英特尔 Sandy Bridge 架构曝光) (在下面针对 Skylake 的评论中也进行了验证。)

[编辑] 有些人误解了我的回答,以为混合 CPU 是不可能的。为了他们的利益,我声明:混合不同的 CPU 并不超出当今的技术,但目前还做不到——问题是“为什么不行”。正如上文所回答的,这在技术上很复杂,因此成本较高,而且经济效益太低或没有,所以制造商不感兴趣。

以下是对一些评论的回答:

Turbo Boost 可以改变 CPU 速度,因此被改变

Turbo Boost 是通过加快时钟速度和更改某些倍频来实现的,这正是人们在超频时所做的,只不过硬件为我们做了这件事。时钟在同一 CPU 上的内核之间共享,因此这会均匀地加速整个 CPU 及其所有内核。

有些手机有多个不同速度的 CPU

此类手机通常具有与每个 CPU 关联的自定义固件和软件堆栈,更像是两个独立的 CPU(或类似 CPU 和 GPU),并且它们缺乏系统内存的单一视图。这种复杂性很难编程,因此非对称多处理留在了移动领域,因为它需要低级的接近硬件的软件开发,而通用桌面操作系统则避开了这一点。这就是在 PC 中找不到此类配置的原因(如果我们将定义扩展到足够大,则 CPU/GPU 除外)。

我的服务器配备 2x Xeon E5-2670 v3(12 核,带 HT),目前核心速度为 1.3 GHz、1.5 GHz、1.6 GHz、2.2 GHz、2.5 GHz、2.7 GHz、2.8 GHz、2.9 GHz 以及许多其他速度。

核心要么处于活动状态,要么处于空闲状态。所有同时处于活动状态的核心都以相同的频率运行。您所看到的只是计时或平均的产物。我自己也注意到,Windows 不会长时间停放核心,而是以比资源监视器的刷新率快得多的速度分别停放/取消停放所有核心,但我不知道这种行为的原因,这可能是上述评论背后的原因。

英特尔 Haswell 处理器具有集成电压调节器,可为每个核心提供单独的电压和频率

各个电压调节器与时钟速度不同。并非所有核心都相同 - 有些核心速度更快。较快的核心获得的功率略低,从而为较弱核心提供提升功率的空间。核心电压调节器将设置为尽可能低,以保持当前时钟速度。CPU 上的电源控制单元调节电压,并在必要时覆盖操作系统对质量不同的核心的请求。摘要:各个调节器用于使所有核心以相同的时钟速度经济地运行,而不是用于设置各个核心速度

答案3

为什么我们没有不同时钟速度的变体?即 2 个“大”核心和许多小核心。

你口袋里的手机可能就采用了这种设计——ARM big.LITTLE工作原理与您描述的完全一样。这甚至不只是时钟速度的差异,它们可以是完全不同的核心类型 - 通常,时钟速度较慢的核心甚至“更笨”(没有无序执行和其他 CPU 优化)。

这本质上是一个节省电池的好主意,但也有其自身的缺点;在不同 CPU 之间移动东西的簿记更加复杂,与其他外围设备的通信更加复杂,最重要的是,为了有效地使用这些核心,任务调度程序必须非常智能(并且通常能够“猜对”)。

理想的安排是在​​“小”核上运行非时间关键的后台任务或相对较小的交互任务,并仅在进行大型、长时间计算(在小核上花费的额外时间最终会消耗更多的电池)或中型交互任务时唤醒“大”核,在这种情况下用户会感觉到小核的运行迟缓。

但是,调度程序对于每个任务可能运行的工作类型的信息有限,因此必须借助一些启发式方法(或外部信息,例如对给定任务强制使用某种亲和性掩码)来决定将它们调度到何处。如果调度程序出错,您最终可能会浪费大量时间/电力在慢速核心上运行任务,从而带来糟糕的用户体验,或者将“大”核心用于低优先级任务,从而浪费电力/从需要它们的任务中窃取电力。

此外,在非对称多处理系统上,将任务迁移到不同的核心通常比在 SMP 系统上成本更高,因此调度程序通常必须做出一个很好的初步猜测,而不是尝试在随机空闲的核心上运行并在稍后移动它。


英特尔在此选择的是使用数量较少的相同智能快速内核,但频率调整幅度非常大。当 CPU 繁忙时,它会迅速升至最大时钟速度,以最快的速度完成工作,然后降低频率以返回最低功耗模式。这不会给调度程序带来特别的负担,并避免了上述不良情况。当然,即使在低时钟模式下,这些内核也是“智能”内核,因此它们可能比低时钟“愚蠢”的 big.LITTLE 内核消耗更多电量。

答案4

为什么我们没有不同时钟速度的变体?例如,两个“大”核心和许多小核心。

除非我们非常关心功耗,否则接受与额外内核相关的所有成本而不尽可能地发挥该内核的性能是没有意义的。最大时钟速度主要由制造工艺决定,整个芯片都是由同一工艺制造的。那么,让某些内核的速度比制造工艺支持的要慢有什么好处呢?

我们已经拥有可以降低速度以节省电量的内核。限制它们的峰值性能有什么意义呢?

相关内容