为什么现代处理器使用很少的高级内核而不是许多简单的内核或两者的某种混合组合?

电器工程 集成电路 中央处理器 多核
2022-01-20 13:18:21

我知道内存是现代计算机系统的一大瓶颈,但是对于某些任务来说,拥有许多简单内核的系统难道不能比拥有个位数高级内核的系统更高效吗?

据我了解,GPU 是一个极端版本,但是对于某些需要介于两个极端之间的密度/复杂性的任务,难道没有中间立场吗?

4个回答
  1. 并行编程很困难,因此大多数事情主要是按顺序完成的,这需要更复杂的处理器。时钟限制防止处理器变得更加复杂,因此我们有几个复杂的处理器,主要允许同时运行独立任务或允许将单个任务拆分为几个同时执行的线程,这是非常明显和简单的所以。

  2. 因为并行性编程很困难,所以您可以相当准确地预测何时将大量并行性的额外工作投入到编程方面(即实际需要的地方)。这可以很容易地准确定位谁实际上会打扰使用许多简单内核进行并行工作,这就是为什么您最终会使用具有较少复杂内核的通用 CPU 和具有大量简单内核的专用 GPU。

  3. 开发成本很高,因此您需要一个足够大的市场来支持混合或中等复杂度的多核处理器的开发。

据我了解,GPU 是一个极端版本,但是对于某些需要介于两个极端之间的密度/复杂性的任务,难道没有中间立场吗?

现代 GPU就是这个中间地带。早期的 GPU 非常简单,“一条指令,不同的数据,每个人都等到最慢的完成,下一条指令”只有非常有限的指令集,而现代 GPU 的计算单元更加通用和独立。

之前有多次(如果不是很多)尝试这样做 - 除了小众使用之外,所有这些尝试都失败了,因为既没有落入独立高性能 CPU 的最佳位置,也没有落入廉价、低功耗的大规模并行简单化着色器单元。基本上,您需要在 CPU 时间和内存带宽方面保持高效,这意味着您要么需要少量但高性能的内核共享主内存但具有大量的本地缓存,要么需要许多但集中协调的更简单的内核。它表明你真的不能轻易地同时拥有这两者——这就是(我的解释)为什么世界需要这么长时间才能到达现代 GPU,以及为什么只有两家公司非常明确地主导着 GPGPU 市场,并且有一个明确的领导者。

这些商业失败的例子包括:

  • 英特尔万亿级
  • 英特尔拉拉比¹
  • 蒂莱拉 tile64
  • IBM 千核

¹ Larrabee 在众核处理器中使用了性能非常低下的 x86 内核,因此处于中间立场且无用,一方面被 GPU 接管,另一方面被经典的工作站/服务器 CPU 接管,尽管有人可能会争辩说,它的继任者 Xeon Phi 已经更好的命运,但这些确实更像是在单个芯片上包含许多强大的 x86-64,包括 AVX-512,所以这不是您希望的中间立场。该系列去年停产,主要是因为需求不足——一方面是 GPU,另一方面是经典的 x86-64 更有用,计算/瓦特更好。

我想比这里的其他答案更进一步地接受框架挑战。直到 20 世纪末,并行计算都是专业服务器和超级计算机的领域;通用消费类计算机基于以越来越快的时钟速度运行的单个处理器内核。从那时起,多核处理器成为常态,包含的核心数量也慢慢增加。

现代架构可能包括(甚至在单个芯片上):

  • 低功耗 CPU 内核
  • 不使用时可关闭的高功率 CPU 内核
  • 并行计算单元排列在 GPU 中

尽管如此,很多软件只能使用单个内核,因此通用 CPU 内核不太可能很快消失。这是因为您只能在某些特定情况下使用多个内核:

  • 你有很多数据要以类似的方式处理。这就是 GPU 的优化目标,因为图形任务通常有很多元素需要相同的相对简单的处理。它已被证明在机器学习中很有用。
  • 您有多个任务,这些任务在很大程度上相互独立。在桌面操作系统上运行多个程序听起来就属于这一类,但大多数程序无论如何都要花费大量时间等待外部输入,因此可以简单地在同一个处理器上共享时间。在单个程序中,识别哪些指令可以并行(或乱序)执行以及安全地同步任务通常非常复杂。

有些任务适合并行,有些则不适合。从广义上讲,可以将那些在循环中花费大量时间的重复性任务划分为较小的子任务,由主机编组。具有大量分支的“棘手”任务并不容易分解。

图形和 AI 是可以分解为并行任务的示例。TCP/IP,没那么多。

重点是,两者都有一席之地。