或许是时候对 CPU 进行定制了

2017-06-21 电子创新网
分享到:

只需一点点改变,您就可以大大提高系统性能,或大幅降低系统能耗,或者显著提高系统安全性。所有这一切只需您稍稍改变一下习惯即可。

QQ截图20170620112917
如果您是汽车或自行车爱好者,您可能会关注定制汽车或定制自行车车架。那么为什么不考虑一下定制 CPU(见图 1)呢?从头开始设计 CPU 并提供所有必要的验证工具、软件开发套件和操作系统端口,这对于大部分设计团队而言都是不可能完成的任务。


即便苹果这样强大的企业也从 ARM* 架构许可证和基础设施开始入手。但适度修改现有 CPU 设计或许是一种切实可行的重要方法。
QQ截图20170620112908

图 1.像汽车一样,您不必使用标准的处理器


那么您如何评估这种方法?您将从何处入手,有哪些可行的定制选项,您又能实现什么?请阅读下文。


知识先行


在优化系统性能、功耗、能效或安全性之前,您需要一个准确、定量的系统模型。对于有些决策而言,准确意味着功能正确。对于其他决策而言,您需要一个周期准确的模型,对许多团队而言,这个模型就是工作原型。


您需要这种细节水平,因为您提问的问题与代码热点、缓存活动、内存性能以及多任务处理/多线程行为有关。您需要进行剖析,找到过度使用和未充分利用的资源。如果找到热点或冷点,您将如何处理它们?特别是您在未设计自己的系统芯片时?您能做的有很多。


您可以对现有 CPU 执行的定制涉及到许多剖析、困难、成本和成效问题。有些操作通常可以在标准产品 CPU 上进行,比如附加外部加速器或对未使用的功能块进行电源门控,即使小客户也是如此。显然,改变 CPU 芯片布局的其他方法(例如更改缓存大小)需要大量的前期付款或数量承诺,即使在技术上不具有挑战性也不例外。其他想法则需要较多的专业知识,例如在 ASIC 中实施可配置的处理器或修改 CPU 内核中的数据路径。


最终的决策取决于成本/效益分析,其中包含许多独立因素(具体是指您希望优化的对象),如您设计团队的技能、预算和时间表以及您可以为 CPU 供应商提供的业务案例等。


从性能开始入手


设计师以批判的眼光审视其处理器,一般都是出于系统性能方面的考虑。一般而言,现象与时间有关:未满足截止时间要求或缓冲区溢出。在某个位置,某个任务的执行速度不够快。在数据中心中,现象可能完全不同:工作负载在服务器中的停留时间可能比预期时间长。同样的问题。


如果出现这些现象,一般都会选择快速修复:首先让软件团队改进其代码,如果无法改进,则需要寻找一个速度更快的 CPU 或设法在更多内核中划分更多线程。不过,可能没有必要使用速度更快的芯片或更多数量的内核,并且这样做可能无法解决问题。选择 CPU 时,您首先需要认真地分析代码。如果您让软件团队负责,他们也很有可能从分析代码开始入手。


分析问题代码段通常会发现,绝大部分时间都用在一个或几个小代码内核中。如果您能加快这些代码内核的速度,问题就解决了。但除了加快指令执行之外,您还有一个更重要的问题需要考虑。这就是周期准确的模型发挥作用的地方。


问题很简单:考虑到您执行的指令数量,关键环路中花费的实际时间是否合理?若合理,则表明您存在执行限制。若不合理,如果您的 CPU 花费大量周期等待高速缓存或 DRAM,那么 CPU 内核可能根本不是问题。您可能在等待抖动缓存或存在瓶颈的 DRAM 端口。无论是 CPU 受限还是内存受限,最好的解决方案可能都是对 CPU 稍加修改。


加速指令


我们先来看看 CPU 受限的情况。目标很简单:分析显示您需要减少执行某一代码段的时间。从无创到困难,有多种方法供您选择。


如果您没有用最快的速度等级以最大频率运行,最简单的方法是提高 CPU 时钟频率。如果您使用的是现代高性能多核 CPU 芯片,还需要考虑一个变量。CPU 可能会对您所用内核上的时钟进行控制。您可能希望了解,在其他内核上暂停任务或增加冷却时间是否会提高实际时钟频率。


如果这样无法解决,您可以尝试一下外部硬件加速器(图 2)。这样的加速器通常是 FPGA,除非您拥有足够的时间、专业知识和容量来证明 ASIC 设计。如果您正在加速的功能是标准化功能,可使用现成的 IP,那么设计加速器可能比较容易。如果不是标准化功能,则需要花费一些时间分析代码。一旦掌握代码的工作原理,您便可以将循环展开为并行结构,并行执行操作序列,将多指令序列压缩为单个时钟周期,并将独立运算分离为并行路径。凭借这些转变的结果,以及消除 CPU 必须执行的指令获取、加载和存储,您可以显著提升性能。

.QQ截图20170620112903
图 2.将加速器连接到 CPU 有三个选项。


将加速器连接到 CPU 也需要一些思考。您从加速中获取的性能提升,可能很容易就会耗费在通信环节中。再次提醒,您必须了解代码。如果您的功能负责传输数据,或者如果它占用一个数据块,在很少引用其他数据的情况下对其进行集中处理,然后返回结果,那么使用通过 PCI Express* (PCIe*) 连接的松散耦合的加速器就足够了。数据传输时间不应抵消您的加速增益。然而,如果加速器上的操作牵扯到仍在 CPU 内核上运行的代码,则可能需要连接到 CPU 缓存总线。一些高端 CPU 提供与外部引脚的连接,但协议可能公开,也可能不公开。


紧密耦合的基本原则是修改 CPU 内核本身,以添加各种指令,如更改调度、解码和渠道硬件。这允许您使用单个指令替换频繁出现的指令序列,从而可能消除许多提取和注册或缓存事务,无需与外部加速器进行通信的任何开销。如果您使用的是现成的 CPU,则无法支持这种定制水平。在修改数据块内的关键逻辑时,即使允许大客户在芯片上添加或删除主要数据块的厂商也可能犹豫不决。他们不会进行必要的逻辑验证、回归测试、重新布局、物理和时序验证以及规则检查等。最接近的方式是购买 ARM 架构许可证并部署自己的内核。


除此之外,还有其他好办法。如果您正在设计 ASIC,那么 Cadence 和 Synopsys 都可提供可配置的 RISC 核心平台:分别为 Tensilica 和 ARC 产品。这些不仅仅是 RTL 的库,而是定制的 CPU 生成器。您将自己的需求告诉平台,工具集便会生成内核所需的 RTL、仿真模型、测试台和软件开发工具,且包含您的定制。对于音频信号处理或视频分析等任务,您甚至可以对现成的预配置内核进行授权。


如果您没有使用 ASIC,也可以使用 FPGA。大多数 ARM 内核、ARC 和 Tensilica 设计都不适合 FPGA 实施。但英特尔和 Xilinx 提供针对其 FPGA 进行优化的紧凑、可配置的 RISC 内核。最近,开源 RISC V 内核开始普及。这些内核非常紧凑,可在小型 FPGA 产品家族中实施,从而生成用户可定义的微控制器。它们也可以组合在多核阵列中,以创建相当强大的处理系统。但这些内核也是可配置的,可以从非常简单的内核扩展为相当复杂的大型内核,并轻松地在 RTL 代码中添加加速器。


内存是问题吗?


如果分析器显示您的 CPU 并未过度使用,而处于闲置状态,您将如何处理?您仍有选择。您可以重组或扩大 L1 或 L2 数据缓存,以便能够容纳问题循环的整个工作集。或者,您也可以仅锁定缓存的一部分,或者添加紧密耦合的本地 RAM,以确保代码块或数据永久驻留。任何上述操作都可以减少缓存抖动,并缓解 DRAM 通道的压力。


如果您在缓存优化之后仍然难以满足 DRAM 带宽需求,则可能需要使用一个更先进的 DRAM 控制器,即可以对多个客户端的 DRAM 请求进行分组、重新排序和优先排序以最大限度减少页面错误的 DRAM 控制器。这样的技术可以将 DRAM 有效带宽提升 10 倍或更多。如果这样不起作用,您可以添加更多 DRAM 通道,插入页面或为一个问题数据集提供一个专用的 DRAM 池和控制器。


好消息是,如果您的预期数量很高,即使在标准产品 CPU 和 ASSP 上,也可以对缓存架构或 DRAM 通道进行修改。没有供应商会公开披露这一意愿,但他们有时会针对特定的数据中心或嵌入式工作负载重新调整标准芯片,这是一个公开的秘密。如果您正在设计自己的 ASIC 或 FPGA,高速缓存和 DRAM 通道优化只是其中的部分工作。


功耗如何?


将 CPU 定制视为一种系统节能或节电的方式似乎很奇怪。但这一类别中有两个重要策略:关灯和将任务从软件转移到硬件。


第一个策略很简单:如果您不需要某个数据块,不要添加它,或者至少将其断开。正如供应商有时被诱导添加内核或调整缓存大小一样,他们有时也会受到丢弃数据块或缩小高速缓存的诱导。也许您只需要三个内核,无需四个。或者根据您分配任务的方式,只有一个内核需要矢量单元。或者您正在处理流数据,根本不需要数据缓存。如果您了解自己的工作负载并可以向芯片提供商提供业务案例,则可以使用所需的数据块获取自定义布局。或者您也许能够断开不需要的电路,从而消除其静态和动态功耗。当然,如果您正在使用 FPGA 或 ASIC,这些选项只是设计工作的一部分而已。


通过添加硬件来节省能耗或功耗,这种想法不太直观。如果您通过计算了解能量的走向,那么这种想法将变得清晰一些。


考虑一种简单的整数加法。您从 L1 i-cache 获取指令,并进行排队、解码和调度。指令会生成一两个读寄存器,可能需要地址转换来处理寄存器重命名,穿过算术单元并写入写缓冲器、通用寄存器和条件代码寄存器,并且可能需要更多的地址转换。如今的 CPU 通常为投机、无序的多线程 CPU,这里列举的仅是一个简单的示例。重点在于,在算数逻辑单元 (ALU) 中,两位数相加操作所消耗的能耗其实非常少,其余均为开销。


相比之下,定制的加速器不需要提取和解码指令。它通过管道传递中间结果,而不是将其写回到通用寄存器。它不会带来缓存管理、多线程、无序执行或猜测方面的开销。简言之,加速器可以更加高效,因为占用的开销太少了。


加速器的另一个潜在优势来自于能源和电力之间的差异。在某些应用中,尤其是物联网 (IoT) 端点设备中,占空比可能相当低,而积极的休眠模式可以在节点休眠时消除几乎所有的能量消耗。因此,总能耗主要取决于占空比,而不是瞬时功耗。如果您可以使用加速器快速处理积累的数据块,以便端点可以唤醒、处理数据块、传输结果并快速返回休眠,那么功耗较高的加速器可以显著节省能源消耗,甚至可以优化清扫能力。


秘密


有些设计团队充分利用了定制处理器的另一个优势。如果您开发一个专有加速器或通过添加硬件来扩展 CPU 指令集,则会混淆您的算法及其实现(有时完全隐藏)。这是一种保护商业秘密的有用策略。不过,这种方法对于保护系统免受有经验的持续攻击至关重要。


这就引出了最后一点。标准 CPU 通常缺少确保系统安全性所必需的硬件特性。随着网络攻击变得更加大胆且更具破坏性,关键任务操作越来越需要物理上不可克隆的功能 (PUF)、硬件安全密钥存储、正式验证的原子操作、篡改检测和无法检测的加密引擎。作为芯片级硬件安全模块 (HSM) 的外部 FPGA 或 ASIC(图 3)可能是最佳的临时解决方案。

QQ截图20170620112856
图 3.硬件安全模块


我们已经看到,无论是优化性能,降低能耗或功耗,还是提升安全性,定制处理器都可能是一个重要的替代方案。即使您没有亚马逊或 Facebook 的影响力,适当的 ASIC 加速器、自定义 CPU 生成平台和 FPGA 都提供了很好的选择。您不会局限于标准化产品,而可以有更多选择。


×
官方微信