处理器架构,走向尽头?
- 2025-07-17 18:32:22

多年来,处理器一直专注于性能,而性能几乎无需对其他任何因素负责。性能仍然重要,但现在它必须对功耗负责。
如果性能的小幅提升导致功耗不成比例地增加,设计人员可能需要放弃这些改进,转而采用更具能效的方案。尽管当前的架构在性能和功耗方面持续稳步改进,但进一步的提升正变得越来越困难。
Cadence Tensilica 音频/语音 DSP 产品营销总监 Prakash Madhvapathy 表示:“每个人都在重新设计他们的微架构,看看如何改进它们以控制功耗。”
许多旨在提高计算吞吐量的处理器功能,例如乱序执行,增加了复杂的电路,从而提高了功耗和电路面积。由于功耗成本,类似的改进在今天可能不会被接受。那么,我们当前的处理器架构还有哪些机会呢?
高效实现还不够好
许多提高效率的努力都涉及对现有架构的更好设计,并且在这方面仍然可以取得一些进展。Ansys 产品营销总监 Marc Swinnen 表示:“在实现方面,有很多节能技术。”
一种非常基本的方法是利用工艺改进,以更少的功耗完成更多工作。“摩尔定律并未消亡,”Swinnen 说,“我们仍在获得更小的工艺技术,这始终是降低功耗的首要方法。它很快就会耗尽,但还没有完全耗尽。”
这也可以推动工艺决策。“当你选择某个工艺节点时,你也需要考虑能效,”Madhvapathy 说,“22纳米基本上是28纳米,但能耗特性好得多。”他指出,12纳米是另一个用于高效设计的流行节点。
3D-IC 提供了一个新的功耗点,介于单片芯片和 PCB 级组件之间。“3D-IC 的功耗将高于单片芯片,但 3D-IC 的功耗更低、速度更高,比通过传统 PCB 走线连接的多个芯片实现方案要好得多,”Swinnen 指出。
共封装光学器件(CPO)使光学器件更接近硅片,这也可以降低功耗,但这已经酝酿了很长时间。“CPO 已经存在很长时间了,但从经济上很难证明其技术复杂性是合理的,而且最终的权衡不一定有利,”Swinnen 解释说,“这种情况似乎正在转变。部分原因是技术变得更好,部分原因是高速数字通信的需求变得如此强烈,以至于人们愿意为此支付更多费用。”
并非所有技术都实用
有些实现技术听起来很有趣,但也带来了自己的挑战。异步设计就是其中之一。“从好的方面来说,每个寄存器都尽可能快地与下一个寄存器通信,”Swinnen 解释道,“没有中央时钟,所以整个时钟架构消失了。你没有松弛时间,即一个数据路径等待另一个数据路径。它已经存在了几十年,但除了在特定情况下,它未能突破,因为性能是不可预测的。猜测时序会是怎样的,而且由于工艺变化,每个芯片都可能略有不同。”
最终它是否真的能节省功耗也尚不清楚。“自定时握手意味着触发器必须复杂得多,”Swinnen 说,“当你把所有这些都算进去时,所有触发器都消耗更多的电量。还有一个问题是:‘所有这些复杂性和不可预测性最终真的能为你节省多少电量吗?’总而言之,它并没有真正成为一种设计方法。”
还可以通过数据和时钟门控来抑制杂散功耗或毛刺功耗以降低功耗。“这会增加面积,但对杂散功耗的影响可能相当大,”Madhvapathy 说。
这需要分析来确定主要贡献者。Swinnen 指出:“它不仅可以测量毛刺功耗,还可以识别导致此毛刺的原因。”
最终,在实现层面上的影响是有限的。Swinnen 说:“在 RTL 层面你能走多远是有限制的,这很讽刺,因为大部分的功耗节约机会都在 RTL 层面。”“最大的好处实际上是在架构层面。”
昂贵的功能
人工智能 (AI) 计算已将设计团队推向内存墙,因此,鉴于业界对 AI 训练和推理的关注,大量精力都集中在如何在不“烧毁房子”的情况下,将数万亿个参数在需要时放置在需要的位置。但处理器本身也会消耗能量,而其他工作负载将呈现出执行功耗和数据移动功耗之间的不同平衡。
尽管时钟频率继续逐渐攀升,但这些变化对性能提升的推动作用已不如从前。改进的真正目标一直是努力使处理器尽可能多地保持忙碌。三个架构特性可以说明为实现这些增益所做的复杂改变——**推测执行(也称为分支预测)**、**乱序执行**和**有限并行性**。
推测执行的目的是避免在进入分支指令后必须等待结果才能决定遵循哪个分支的情况。等到那时再决定会延迟结果,直到系统从 DRAM 获取分支结果所指示的指令为止。相反,它会推测性地遵循一个分支——希望能是最有可能的分支。通常,分支决策的完成会验证该决策,但有时不会。此时,必须回溯推测性计算并重新启动另一个分支(包括从 DRAM 获取潜在指令)。
分支预测通常伴随着乱序执行,这是一种允许某些指令以与程序中出现顺序不同的顺序执行的特性。其思想是,当一个指令可能因等待数据而停滞时,另一个后续指令现在已准备好。请注意,后一个指令不能依赖于前一个指令,但串行编程范式的主要限制之一是指令必须按顺序排列,即使它们之间没有依赖关系。因此,乱序执行是一个复杂的系统,可以提前启动多个指令,确保遵守原始程序语义。
面积 vs. 性能
这些系统并不简单,而且它们的成本可能与其效益不成比例,具体取决于它们的构建方式。西门子 EDA 高级综合部门项目总监 Russ Klein 表示:“例如,分支预测器会保留一份已执行分支的列表。”“就像缓存一样,该列表通常使用分支目标的最低 N 位作为哈希键,指向已执行分支的列表。因此,N 可以是 4 或 16 或更多,列表中的条目数可以是 1 或 2 或 32。你可以存储完整的目标分支地址,或者可能只存储最低 12 或 16 位。一个更大、更详细的已执行分支内存会带来更好的性能,但显然会占用更多空间(和功耗)。”
由此产生的效益也会相应变化。Klein 解释说:“一个小型简单的分支预测器可以使处理器提速 15%,而一个大型复杂的预测器可以使性能提升 30%。但它可能比小型简单的预测器大 10 倍(或更多)。”“就面积而言,谁会在乎,但对于功耗来说,这确实是一个大问题。”
Cadence 通过重构一些编解码器来提高它们的性能,生成了分支较少的代码。Madhvapathy 表示:“我们看到性能提升了大约 5% 到 15%。”“编解码器中的分支数量少于 5%,在内部执行循环中几乎没有,我们使用了 ZOL(零开销循环)。”
更普遍地,该公司发现在典型程序中存在更多分支。“实际代码中约有 20% 的指令是分支,”Madhvapathy 说,“这些都代表了推测执行的机会。性能提升可达 30% 或更高,因为每周期平均执行的指令数显著增加——即使其中一半预测成功。总开销 [分支预测和乱序执行] 可能在 20% 到 30% 之间。”
Klein 回忆起 Tilera 的创始人 Anant Agarwal 讨论的“杀戮法则”。他说:“杀戮法则指出,如果你要将一个功能添加到你的 CPU 中,它会增加面积,如果增加的面积大于你获得的性能提升,那么你就不要添加这个功能。”
并行计算是“简单”的答案
并行性显然是提高性能的另一种方法,但当前处理器中可用的并行性是有限的。当今主流处理器提供并行性的方式有两种——通过实例化多个核心,以及通过核心内的多个功能单元。
功能单元是过去简单的算术逻辑单元 (ALU)。它执行实际指令。一个给定的功能单元通常能够执行一些超出简单数学的指令。它们还可能包括乘法器、除法器、地址生成,甚至分支。通过提供多个这样的单元,当一个单元忙碌时,另一个单元可能可以处理不同的指令,这可能是乱序的。
不同的处理器有不同数量的功能单元,代码分析有助于确定其中指令支持的组合和分布。这有助于在可能的情况下并行化指令执行,但处理器开销——例如指令获取——是串行发生的。
真正并行化计算是提高性能的最佳机会之一,而且对于一个不那么复杂的处理器来说,它可能更省电。但这样的解决方案并非新鲜事。多核处理器在十多年前就已经商业化,但未能获得成功。
很少有算法是完全可并行化的。那些可并行化的通常被称为“令人尴尬的并行”。其他所有算法都混合了可并行化代码和必须串行运行的段。阿姆达尔定律将这些串行部分确定为最终限制因素。有些程序可以高度并行化,有些则不能。但即使算法看起来不并行,也可能存在其他机会。
分形就是一个例子。“你的 f(x) 是 f(x-1),”Klein 解释说,“每个像素都通过一个长的串行链单独计算。但如果你正在处理一张图像,你有 1024 x 1024,或者无论图像大小是多少,因此你有很多并行机会 [通过同时计算多个像素]。”
如今,数据中心服务器的处理器拥有多达约 100 个核心。但与以前的多核处理器不同,它们不用于单个程序。它们允许为需要云计算的不同用户执行多个程序。
并行化的问题
即使它们可以并行化,问题是处理器必须并行编程。这通常意味着显式管理代码的并行性,例如通过调用 pThreads。这比典型的编程要麻烦得多,需要了解数据依赖性以确保满足按顺序执行的语义。尽管已经存在一些帮助此操作的工具,但没有一个进入主流软件开发领域。
此外,手动管理并行性可能需要针对不同处理器编写不同的程序。如果所需的线程数多于给定处理器在硬件中可以管理的线程数,程序可能会运行但可能不理想。转而使用软件并行性可能会由于上下文切换开销而损害性能。
最大的问题是软件开发者对显式并行编程不屑一顾。人们强烈希望任何新事物都可以使用当前的编程方法进行编程。“软件人员已经彻底拒绝了 100 核处理器的概念,除了我们开始看到它渗透进来的一个领域——GPU 和 TPU,”Klein 观察到。
这就是为什么多核处理器在商业上失败的原因。即便如此,并行化主要还是为了性能。降低功耗需要一个适度的核心和激进的降功耗策略,以便空闲的核心不会消耗能量。并行化还有助于恢复可能因使核心更高效而损失的整体性能。
“我的论点是,一个由大量非常简单的 CPU 组成的阵列是可行之路,但这确实需要改变编程方法,”他说,“我对此发生的唯一希望是 AI 能够创建并行编译器,这是我们作为一个行业从未能够做到的。”
我们今天处理通用处理器上出现瓶颈的算法的实用方法是采用加速器作为非阻塞卸载,这样加速器可以有效地处理其任务,而 CPU 则做其他事情(或休眠)。
加速器可以宽泛也可以狭窄
各种类型的加速器已经存在了几十年。今天,人们对那些能够加速训练和推理的加速器投入了大量关注,因为它们需要非常特定的密集计算。但这类加速器并非新生事物。
“异构计算结合了处理核心,以提供优化的功耗和性能,”Expedera 营销副总裁 Paul Karazuba 说,“这显然包括 NPU。NPU 解决了所有 AI 处理,避免了效率较低的 CPU 和 GPU。然而,并非所有 NPU 都生而平等——不仅在方法上,而且在架构和利用率上也是如此。”
这是因为加速器可能高度特定——甚至是定制的——而另一些则保持更通用。Karazuba 继续说:“如果 AI 工作负载众所周知且稳定,定制 NPU 可以显著提高功耗和成本效率。”“如果你需要灵活性以支持多个模型或未来的 AI 趋势,通用 NPU 更具适应性,并且更容易与现有软件生态系统集成。”
定制加速器将使其更具体地适应其工作负载,这种努力应该会提高能效。
Karazuba 说:“提高处理器子系统效率(特别是 NPU)的一种方法是创建更侧重于应用的 NPU,而不是采用更通用的 NPU。”“定制 NPU 通常使用专门的 MAC 阵列和执行管道,这些管道可能针对特定数据类型和模型结构进行调整。通用 NPU 包含可配置的计算单元,支持多种数据类型,并且通常处理更广泛的层和运算符。”
舍弃给定任务不必要的功能可以产生显著的效果。Expedera 在实际应用中通常会发现,部署定制 NPU 后,处理器效率(以 TOPS/W 衡量)提高了约 3 到 4 倍,利用率(定义为实际吞吐量/理论最大吞吐量)提高了 2 倍以上。
当我们黔驴技穷时会发生什么?
显然,在提高处理器和处理子系统的效率方面,仍有一些机会。但在不远的将来,我们可能会面临创意枯竭的风险。那时会发生什么?
这时,新的处理器架构可能就会派上用场。然而,鉴于当前架构所依赖的庞大生态系统,这种改变并非易事。幸运的是,有一些新的架构理念,以及放弃部分通用性的可能性。
参考链接
https://semiengineering.com/can-todays-processor-architectures-be-made-more-efficient/
点这里👆加关注,锁定更多原创内容
*免责声明:文章内容系作者个人观点,半导体芯闻转载仅为了传达一种不同的观点,不代表半导体芯闻对该观点赞同或支持,如果有任何异议,欢迎联系我们。

推荐阅读


喜欢我们的内容就点“在看”分享给小伙伴哦~

- 点赞 0
-
分享
微信扫一扫
-
加入群聊
扫码加入群聊