中文 英语

定制的处理器

处理器的定制程度取决于许多因素,但选择合适的工具链可能是正确的起点。

受欢迎程度

处理器的设计、验证和实现是一些公司的核心竞争力,但另一些公司只想尽可能快速和廉价地制造出一个小型处理器。有什么工具和选择?

处理器的范围从非常小的、简单的、深深嵌入产品的内核,到在数据中心以尽可能高的时钟速度和吞吐量运行的处理器。在某些情况下,他们可能会使用相同的指令集体系结构(ISA),只区分了微架构。其他时候,处理器架构针对单个应用程序进行了高度调优,或者针对非常特定的条件进行了优化。虽然可能的处理器有无限多,但设计和实现它们的方法却很少。

“在服务器上,你必须以非常高的速度运行任意应用程序,这与便携式SoC是不同的游戏。Synopsys对此.“你可能有一个类似的ISA,但实现将在很大程度上依赖于你能负担得起的过程技术,以及你想要实现的时钟频率。这些元素是由您的产品或设计驱动的,这些元素决定了您想要拥有哪些微架构实现。挑战在于进行权衡分析,找出最适合你的应用领域。”

一刀切是一个常见的设计陷阱。安培的首席产品官Jeff Wittich说:“例如,不能指望创建一个由客户端工作负载驱动的核心来适应云原生工作负载,也不能指望创建一个专注于HPC的核心来适应云原生工作负载。”“另一个原因是低估了实现性能和效率领先所需的核心架构的微调量。这需要一个极其熟练和经验丰富的设计团队来创建一个世界级的处理器,在硅前和硅后阶段都得到充分验证,以实现其预期的用途。”

对于其他应用,现成的产品可能就足够了。Tensilica Xtensa处理器IP at产品营销总监George Wall表示:“如果现有的IP块满足您的PPA和性能目标,这是风险最小的路径。节奏.“一旦你超越了这一点,当现有的产品无法满足要求时,客户就会开始考虑如何定制处理器。这些标准将包括性能要求、数据吞吐量要求以及将在处理器上运行哪种算法。处理器上还会运行其他什么软件,比如rtos和其他类似的组件?对于我自己的开发目的以及终端用户的开发目的,需要什么样的工具支持?它们为您提供了需要映射到的需求,然后是您能够多快地探索各种实现的问题。对我来说改变管道深度有多容易?对我来说,选择或取消选择常见指令(如乘法或除法或浮点运算)有多容易?对我来说,向处理器添加资源是多么容易,无论是指令、寄存器,还是接口。我能多快做到这一点,我的软件会受到怎样的影响?”

架构与微架构
通常,您可以通过并行化或专门化来获得性能。您主要从体系结构获得专门化,而您主要从微体系结构获得并行化。那么如何平衡这两者呢?人们应该先着眼于改变架构还是微观架构?

专业化长期以来一直是一个争论的话题。“早在80年代初,就有RISC与CISC的争论,”微软的首席架构师迈克尔•弗兰克(Michael Frank)说Arteris IP.“当时,戴夫·帕特森(Dave Patterson)站在了RISC一边,整个行业也纷纷效仿。当我们提高时钟速度时,事情变得更加困难,我们开始碰到内存墙。今天,CISC又有了一个优势,因为你可以在一条指令中把更多的工作带入处理器的核心。”

对于大多数人来说,改变架构意味着改变指令集。“这对大多数人来说容易得多,”特朗普首席营销官鲁珀特•贝恩斯(Rupert Baines)表示Codasip.“你得到了大部分的好处,因为你可以得到巨大的加速度。而且验证起来简单多了。一旦开始研究微架构,就必须考虑如何验证它。如果您坚持ISA更改,那么您将拥有一个能够理解新指令的模拟器。它是在工具中设计的,所以它可以为该指令生成变体、UVM等等。”

微架构的变化可能是混乱的。Cadence’s Wall说:“改变潜在的微观架构可能充满危险。“除非你完全了解这些微架构的变化将如何影响软件工具,如调试器,以及更高级别的软件,如我们的操作系统,否则这不是你想做的事情。位于每个嵌入式处理器之上、应用程序和核心之间的基本管道软件对微体系结构非常敏感,操作系统、编译器和调试器也是如此。如果客户想要改变微架构,他们真的需要了解这些影响,这就是权衡的类型。”

为了控制这些验证风险,一些行业组织正在考虑使用一个基础处理器和一个可以通过接口访问的加速器。“我们的客户希望从RISC-V架构开始,但他们也需要更广泛的指令词,”Synopsys的Goossens说。“它们通常朝着VLIW架构的方向发展,但你的VLIW中可能有一个标量槽,基本上是完整的RISC-V架构。然后你有额外的并行发行槽,在那里你可以进行更多的并行操作。你可以继续大量使用RISC-V生态系统,但对于高性能应用程序,你可以从并行扩展中获得性能提升。”

定制程度
自定义有许多层次,从选择一个预先设计的IP到完全自定义设计。其中包括:

  • 已存在的IP块
  • 允许一定数量的自定义的IP块
  • 基于模板的工具配置和定制
  • 允许在体系结构和微体系结构级别描述任意处理器的工具
  • 全定制设计。

在这些类别中,存在各种不同的风格,并由许多公司和工具支持。

“为了设计一个高性能的处理器核心,必须同时使用手工设计和合成工具,”安培的Wittich说。“任何自动生成的处理器都不太可能满足云原生工作负载的需求,这些工作负载具有独特的特征,并且对延迟和吞吐量有严格的要求。如果你这样做了,就总是会有性能和效率的问题。核心的每个方面,如TLB的大小或分支预测算法,都可能对实际工作负载性能产生重大影响,必须针对特定的产品使用进行仔细优化。”

高性能处理器倾向于使用所有可能的方法进行优化,然后这些方法可以作为IP块提供。“基于性能目标,支持投机执行等技术的基线功能有相当不同的实现,因为这种结构不会永远扩展,需要根据其大小不同的形式,”弗雷德·皮里(Fred pory)说手臂.以投机执行为例。试图解决一个20个周期的乱序窗口,对于一个两个范围的CPU来说,需要一个完全不同于能够在600条或更多指令上执行的CPU的微架构。为了覆盖所有可能的性能点,单一的、可配置的CPU是不可持续的,这就是为什么Arm构建了不同的微架构,覆盖多种需求。”

任何技术都是有限度的。Arteris IP的工程副总裁Hunglin Hsu表示:“投资回报率正在下降。你只有几个架构寄存器,所以在一天结束的时候,寄存器依赖会阻止你收回和你发送的指令一样多的指令。当你建造越来越大的前端调度机器时,你的时钟频率开始下降。我更喜欢多核,而不是构建一个巨大的宽超标量核心。说到多核,有两件事是最重要的。一个是操作系统中的线程调度。它需要知道CPU的亲和性。它需要将一个线程分配给一个接近内存的内核。另一件重要的事情是连贯的结构。”

在这个优化级别上,许多事情变得相互关联。Arm的皮里表示:“像投机执行或多重发行等功能都是联系在一起的,每个性能点都没有单一的设计选择。“例如,增加执行并行度而不增加CPU投机性执行指令的能力会适得其反。流水线级的数量决定了CPU将达到的最大时钟频率,而频率对性能有直接影响。管道阶段的数量直接影响分支错误预测导致的性能损失。管道越长,错误预测的代价就越高。因此,CPU架构师需要了解其设计中可能的时序关键结构,然后在频率、面积和功率之间找到最佳折衷方案。因此,管道阶段需要提前定义,否则可配置性将变得复杂。”

从基地开始建造
介绍RISC-V在处理器设计方面,ISA激起了人们对中间立场的兴趣。“RISC-V当然有很多好处,有一个公共的指令集基础和定义一个公共的架构,”Wall说。“它定义了一套基本规则,这样IP供应商和大学生就不必重新发明轮子了。他们不需要创建指令集或内存管理模型,或RISC-V世界中的其他伟大的东西。但就处理器的外观而言,它可以像一个微小的两级微控制器或一个巨大的高性能核心一样简单。RISC-V ISA可用于其中任何一种。它在设计时就考虑到了这种可扩展性。”

在许多情况下,处理器生成器基于用户指定的基准处理器设计自定义自动生成处理器的功能实现。发电机的供应商将设计一些基本的微架构,客户可以从有限的定制选项中进行选择,例如管道级的数量或缓存的大小。

“当可用的基本模型能够满足目标应用程序通常中等或较低的性能和电源效率要求时,这种方法工作得很好,”Wittich说。“在开发成本和缺乏专门的处理器设计专业知识是关键限制的情况下,也就是说,用户没有专业知识、时间或预算来构建真正优化的处理器,它们也很有吸引力。”

很多时候,这些基本模型针对特定的应用程序空间。Codasip的贝恩斯说:“你从一些合理的、相当常见的东西开始,但定制可能会把它带向一个非常不同的方向。”“你可以添加新的指令,这些新指令将是完全独特的。没有人能做到这一点。你可以改变微观架构,你可以用非常基本的方式来做。但你必须保持在起点的范围内。”

这些工具允许进行探索。Goossens说:“它们允许你进行权衡分析,在处理器上编译真实的应用程序代码,在模拟器中执行生成的代码,然后可以对其进行分析。”“你可以真正看到你的应用程序的权衡。这些工具,因为自动生成的编译和分析,允许你进行分析,而不仅仅是猜测,而是基于真实的数据。这就是为什么我们强烈提倡使用处理器设计工具。”

虽然每个工具都基于不同的语言,但它们都共享类似的流程,如图1所示。

图1:使用生成工具的处理器的设计和验证流程。来源:Synopsys对此

图1:使用生成工具的处理器的设计和验证流程。来源:Synopsys对此

虽然有些工具可能只允许从列表中选择特性,但其他工具具有更通用的处理器描述语言,允许开发更大范围的处理器。例如,nML语言有一系列优化可能性,如图2所示。

图2:nML语言中可访问的特性。来源:Synopsys对此

图2:nML语言中可访问的特性。来源:Synopsys对此

这个工具链的一个重要部分是编译器的生成。“当你有两个具有相同ISA但实现不同的处理器时,理论上你可以为它们使用相同的编译器,”Arteris的Frank说。“回想一下AMD和英特尔之战。使用英特尔编译器编译的程序在该机器上比在AMD机器上运行得更好。这主要是由于编译器被调优到特定的处理器。偶尔,它会对另一个处理器做一些不好的事情,因为它不知道管道。如果有内在的知识,那肯定是一种优势。”

处理器语言包含体系结构和微体系结构信息,可以用来生成高效的编译器。贝恩斯说:“我们的工具从LLVM开始。它生成了一个定制的LLVM版本,实际上是编译器的编译器。你编写你的变体,它生成编译器、调试器和分析器。它们都是自动输出的,它们理解您所做的更改。我们能这样做的原因是我们的语言只适用于处理器。这不是一个新的RTL。它不是一种通用语言。”

这不同于高级合成这是更一般的。“高级合成是一种相当耗费精力的处理器设计方法,”Wittich说。“在这里,用户需要有深厚的专业知识,能够在高级语言(如C或c++)中指定目标算法或功能。然后,合成工具可以生成功能实现。除了需要洞察力和专业知识外,目前的HLS功能只支持有限范围和范围的算法的合成(如信号、图像和视频处理)。生成的实现虽然在功能上是正确的,而且生成得很快,但通常没有很好地优化性能、功率和面积。这种方法还没有在高性能处理器上成功演示。”

结论
处理器的创建可以是毫不费力(购买一个现成的IP),也可以是完全自定义设计(通常最终成为一个IP)。对于那些需要更适合他们需要的东西的人,有一些处理器生成工具可以指导用户完成这个过程,只要他们遵守一组限制和规则。这是在优化级别、可以提供的时间和精力,以及它转化为产品的附加优势之间的权衡。哪种工具最适合您的下一个处理器设计,这取决于您希望在多大程度上突破界限。

相关的
如何优化处理器
处理器设计至少有三个体系结构层,每一个都起着重要的作用。



1评论

JC Bouzigues, Menta 说:

自定义和增加处理器多功能性的一种方法是添加一个逻辑块来充当处理器扩展……如果您可以使用嵌入式FPGA (eFPGA)对该逻辑块进行编程,那就更好了。

留下回复


(注:此名称将公开显示)

Baidu