如何优化处理器?

文摘   2024-11-18 07:00   上海  
处理器设计至少有三个架构层,每个层都发挥着重要作用。如果你想就这个问题讨论更多,欢迎添加微信 machinewarevp 交流。请备注公司姓名和职位。
优化任何系统都是一个多层次的问题,但当涉及到处理器时,至少有三个层次需要考虑。架构师必须能够跨越这些界限思考,因为必须理解和平衡每个层的作用。
潜在优化的第一个层次是系统级。例如,数据如何进出处理核心?下一个层次是处理核心本身的架构。这可能涉及采用现有处理器,或向可扩展核心添加指令。优化的最后一个层次是微架构层。这是定义实现管道的地方。
当系统由预定义组件创建时,选择的自由受到限制。但是,当要部署定制硅片时,很容易被灵活性所淹没,并在合适之前轻易的深入研究细节。因此必须保持自上而下的纪律。
“我们的使命是优化一项或一组任务的执行,”西门子 EDA 技术研究员 Gajinder Panesar 说道。“这与处理器无关。它与你试图优化的流程有关,因此你必须考虑将要完成任务的系统。在你开始考虑选择 CPU 并确定是否需要对其进行自定义之前,如何设计和划分系统设计是一个关键问题。”
任务划分和系统架构是一项挑战。一旦确定要使用处理器,就需要针对给定任务或任务组对该处理器进行优化和潜在自定义。
处理器可以出于多种原因进行优化,包括吞吐量、延迟和功率的组合。“处理器的专业化基本上是并行性的引入,”Synopsys ASIP 工具高级总监 Gert Goossens 说道。“它可以是指令级并行性,也可以是数据级并行性。处理向量可以是任务级并行,或者您可以部署多核架构。第二种技术是专业化。您要确保处理器的功能单元可以在一个周期内执行传统处理器需要数百个周期才能完成的任务。”
通常,性能和功率是紧密耦合的。“典型的例子是通过添加计算资源来加速某些任务,”Cadence Tensilica Extensa 处理器 IP 组产品营销总监 George Wall 说道。“目标通常是实现更低的能耗。能耗是功率乘以时间。如果您定制处理器,通常功率会略有增加,但希望通过显著缩短周期来抵消这一增加,从而总体上实现能耗方面的净收益。”

系统级优化
在理想情况下,处理器总是忙于生产工作,永远不必等待数据可用。然而,这种情况很少发生。处理器在每个周期都处于空闲状态,或者执行未使用的推测任务,这会导致时间和电力的浪费。
“你有一个处理器,它们需要有人来为它们提供数据,”Arteris IP 的研究员兼系统架构师 Michael Frank 说。“它们需要缓存。它们需要提供向量的中断控制器等外设。当你收到中断时,它们需要 SMMU 进行虚拟化。处理器周围需要有一个完整的生态系统。它不能独立运行。然后你需要为处理器提供数据的缓存基础设施,因为你的处理器已经变得很快。你不能让它们与远程内存对话。”
在多处理器系统中,每个处理器都需要进行协调。“如何管理加速器?”Expedera 首席科学家 Sharad Chole 问道。“工作负载协调将在哪里发生?加速器需要什么样的带宽?在工作负载级别需要多少 DDR 访问或多少共享内存?当我们与客户讨论解决方案时,这通常是一个硬件/软件协同设计问题。您需要分析工作负载,并且需要定义工作负载对整个 SoC 的影响。重要的是不要忽略这一点。我们不是在优化单个 CPU 内核。如果您单独优化一个 CPU 内核,最终会得到一个不确定的多核架构,并且性能取决于编译。编译器有多好?”
图 1:处理器优化的关键要素。来源:半导体工程
优化发生在多个层面。“需要分析系统以确保通信正常工作并找出任何瓶颈,”MachineWare 联合创始人 Rainer Leupers 说。“许多系统都采用复杂的通信,可以是同步的,也可以是异步的。这就像一个平面规划挑战,要确保数据在流经系统时不会出现瓶颈。”
通常,这些通信涉及软件。“你必须考虑设备上运行的固件和软件,因为这决定了产品的性能,”西门子的 Panesar 说。“我们可以通过思考可以提供的各种类型的可见性来说明这一点。以 CPU 为中心的观点认为跟踪指令执行应该足够了,但如果不了解系统其他地方的情况,它就是一种非常迟钝的工具。片上网络 (NoC) 的尺寸和配置是否正确?内存带宽和延迟是否影响性能?如果没有系统级的因素视角,世界上所有的 CPU 定制都无法提供成功的产品。”
其中一些决策受到处理器核心类型的影响。 Imagination Technologies 技术创新副总裁 Kristof Beets 表示:“CPU 和 GPU 可以执行随机数据访问,但 AI 处理核心的不同之处在于,它们被设计用于执行一组有限的算法,这些算法具有非常具体和众所周知的数据流。这可以实现流式处理,并允许更小的逻辑和更少的本地缓存。支持的操作和数据流比 GPU 更有限,尤其是与 CPU 支持的相比非常有限。”
对于许多处理器来说,总线接口可能被视为一种限制因素。Cadence 的 Wall 表示:“在某些情况下,在创建高效设计方面,接口与实际 ISA 同等重要,甚至更重要。传统处理器通常具有总线接口,例如基于 AMBA 协议的接口,用于与 SoC 上的其他元素接口、与主存储器接口以及与各种 I/O 设备接口。根据争夺这些设备的元素数量,这种接口的可扩展性是有限的。如今,嵌入式设计过程的一部分是考虑通过系统总线将处理器与特定设备接口是否合理。或者,是否有其他方式对其进行接口?这是扩展处理器的另一种方法——创建队列接口或查找接口等接口,使这些其他设备可以更直接地与处理器接口。”
忽略这些类型的问题可能会导致解决方案不够理想。 “数据移动至关重要,”AMD Versal 营销总监 Manuel Uhm 说道。“I/O、内存瓶颈都必须仔细考虑。我们实际上将板载紧密耦合内存(基本上是程序内存)增加了一倍,连接到每个核心。我们还添加了一种称为内存块的东西,它基本上构建了支持这些核心的缓冲区。与紧密耦合的程序内存不同,它们实际上不是核心本身的一部分,但它们是支持所有这些的自己的块。我们学到了,而且学到的并不全是关于计算的。它涉及如何移动数据,如何管理内存,如何将所有数据引入。I/O 是这个问题的重要组成部分。
一些较新的工作负载甚至可能不适合使用冯·诺依曼式的处理器架构。“我们一开始并没有假设我们需要处理器,”Expedera 的 Chole 说道。“我们一开始并不是从冯·诺依曼架构开始的。我们首先从神经网络中使用的操作构建块开始 — — 例如矩阵乘法、卷积、激活函数、池化层。我们首先定义如何才能做到最好。我们研究了这样做的成本,以及如何确保每个计算块始终处于繁忙状态。问题是确保在需要进行计算时所有操作数都可用。然后,我们构建了一个没有任何背压且完全确定性的架构。”

处理器架构优化
直到最近,除非您正在构建完全定制的处理器,否则处理器架构优化的机会仍然有限。“处理器架构有两个部分,”Codasip 首席技术官 Zdeněk Přikryl 说。“首先是指令集架构 (ISA),其次是微架构。这是架构的实现。对于专有 ISA,您很少被允许更改 ISA,因此您只能进行微架构更改。您可以认为这些变化是渐进式的,而不是革命性的。另一方面,如果你从开放的 ISA 开始,它将为你提供一个非常好的起点,你可以专注于创新和关键的差异化。这将成为你的秘密武器。你可以添加有助于提高性能的新指令,它可以减少内存占用等。在这种情况下,它可以被描述为革命性的,而不是进化性的。”
一些 ISA 包含大量灵活性。“它具有可配置性和可扩展性,”Synopsys 产品营销总监 Rich Collins 说。“许多标准实现在总线宽度和内存大小方面都是可配置的。所有这些都是可配置的,无需进行任何定制。可能有预定义的可扩展性形式,例如提供一组条件代码、一组辅助寄存器或扩展的指令集,甚至是附加的硬件加速器。你不必只添加自定义指令。如果你有自己的定制秘密武器加速器,那么你可以将其与处理器连接。”
采用基线处理器或固定架构处理器确实有好处。“人们可以重复使用已经存在的基线处理器生态系统,如 Arm、RISC-V ,”Synopsys 的 Goossens 说。“该生态系统可以扩展到外围设备、用于与处理器交互的单元以及现有的软件库。你可以重复使用这些元素这一事实很重要,这就是人们可能更喜欢拥有 RISC-V 基线并从那里开始的原因。”

虽然业内有些人谴责缺乏处理器架构师,但这只是暂时的问题。“随着 RISC-V 的兴起,涉及处理器设计的计算机工程课程越来越多,因此未来几年行业将有更多的人才加入,”他说。“我认为不缺少知道如何构建处理器的人。它需要几个人作为结晶点,然后他们召集周围的团队开始构建处理器。构建处理器不需要特殊技能。它只是另一个 IP,但构建一个好的处理器并不容易。”
它确实需要一个良好的流程来分析架构变化。“你需要软件工具,尤其是编译器,”Goossens 说。“你不想用低级汇编代码编写扩展,然后进行内联汇编并将其与编译器生成的代码链接起来。编译器必须能够利用你添加的所有专业化。然后,你可以通过使用实际的应用程序代码立即获得有关架构质量的反馈。如果你没有这些,那么你只能靠猜测来制作扩展。”
有两种方法可以解决这个问题。Codasip 的 Přikryl 说:“传统的方法是让一个软件工程师团队开发软件开发工具包 (SDK),然后一个团队开发 RTL,另一个团队开发验证。这种方法没有错,但它需要很多工程师,你需要在他们之间进行同步,以确保他们保持一致。另一种方法是使用一种工具来自动化大部分工作。你用高级语言描述处理器,包括它的 ISA 和微架构。在 Codasip 中,我们称之为 CodAL(一种类似 C 的语言)。从中,它可以生成 SDK、RTL 和验证工具。”

微架构优化
既然现在已经定义了处理器架构,就必须实现它。Arteris 的 Frank 说:“微架构决定了你执行指令集的效果。” “当人们坚持使用商定的指令集架构时,你就是在利用微架构来提供更高的性能。”
处理器的实现通常被认为是标准的 RTL 设计过程。然而,这并不意味着它在任何方面都是微不足道的,特别是如果它利用了无序并行、推测、分支预测器或许多其他技术之一。

结论
处理器的设计、创建和优化涉及许多方面,这些方面可以执行定义的任务或一组任务,并且这些方面都紧密相连。过于关注一个方面而忽略其他方面可能会产生问题。与大多数系统一样,从顶部开始会带来最大的收益。
“事后看来是 2020 年,”AMD 的 Uhm 说。“如果你不把某样东西推向市场,你就无法从中吸取教训来变得更好。你可以在当今的许多 AI 公司中看到这一点。每个在购买第一台设备后就没钱的人都破产了。取得一定成功的人开始着手开发下一代芯片,他们从中吸取了教训,并对其进行了改进。你需要不断反馈,了解哪些地方做对了,哪些地方做错了。”

软硬件协同设计 HW-SW Co-Design
欢迎后台留言,AI 客服全天在线。脱离物理硬件,开发测试和调试软件。基于虚拟原型的软硬件协同设计,提前一年实现产品上市创收,降低一半开发时间。
 最新文章