中文 英语

如何优化处理器

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

受欢迎程度

优化任何系统都是一个多层次的问题,但当它涉及处理器时,至少有三个层次需要考虑。架构师必须能够跨越这些边界进行思考,因为每个层的角色都必须被理解和平衡。

潜在优化的第一个层次是系统层次。例如,数据如何进出处理核心?下一层是处理核心本身的体系结构。这可能涉及采用现有处理器,或向可扩展核心添加指令。优化的最后一个层次是微架构层次。这就是定义实现管道的地方。

当系统由预定义的组件创建时,选择的自由受到限制。但是当要部署定制硅时,很容易被大量的灵活性所淹没,并在合适之前深入细节。必须保持自上而下的纪律。

“我们的任务是优化一个任务或一组任务的执行,”技术人员Gajinder Panesar说西门子EDA.“这与处理器无关。这是关于你试图优化的过程,因此你必须考虑将实现任务的系统。在你开始考虑选择CPU和决定是否需要定制它之前,如何构建和划分系统设计是一个关键问题。”

任务划分和系统架构是一个挑战。一旦确定了a处理器,则该处理器需要针对给定的任务或任务组进行优化和定制。

处理器可以根据各种原因进行优化,包括吞吐量、延迟和功率的组合。“处理器的专门化基本上就是并行化的引入,”at的ASIP工具高级主管Gert Goossens说Synopsys对此.“它可以是指令级并行,也可以是数据级并行。处理向量可以是任务级并行,也可以部署多核架构。第二个技巧是专业化。你要确保处理器的功能单元可以在一个周期内执行一些在传统处理器上需要数百个周期的任务。”

通常性能和功率是紧密耦合的。“经典的例子是通过增加计算资源来加速某些任务,”微软Tensilica Extensa处理器IP组的产品营销总监乔治·沃尔(George Wall)说节奏.“我们的目标通常是降低能耗。能量是能量乘以时间。如果你定制处理器,通常会有一个小的功率增加,希望被循环时间的显著减少所抵消,总体上在能源方面取得了净胜利。”

系统级优化
在理想的情况下,处理器总是忙于进行生产性工作,而不必等待数据可用。然而,这种情况很少发生。处理器每一个周期都处于空闲状态,或者执行一个未使用的推测任务,都会导致时间和功率的浪费。

“你有一个处理器,他们需要有人来养活他们,”微软的研究员和系统架构师迈克尔·弗兰克(Michael Frank)说Arteris IP.“他们需要缓存。它们需要像中断控制器这样的外围设备来提供矢量。当您遇到中断时,它们需要SMMUs进行虚拟化。处理器周围需要存在一个完整的生态系统。它不会自己运作。然后你需要为处理器提供缓存基础设施,因为你的处理器已经变得很快了。你不能让它们与远程内存对话。”

在多处理器系统中,每个处理器都需要被编排。“加速器将如何管理?Expedera公司的首席科学家沙拉德·科尔(Sharad Chole)问道。“工作负载编排将发生在哪里?加速器需要什么样的带宽?在工作负载级别需要多少DDR访问或多少共享内存?当我们与客户讨论解决方案时,通常是一个硬件/软件协同设计问题。您需要分析工作负载,并定义工作负载对整个SoC的影响。不要错过这一点很重要。我们不是在优化单个CPU核心。 If you optimize one CPU core in isolation, you end up with a multi-core architecture that is not deterministic, and the performance is dependent on compilation. How good is the compiler?”

图1:处理器优化的关键要素。来源:Brian Bailey/Semiconductor Engineering

图1:处理器优化的关键要素。来源:Brian Bailey/Semiconductor Engineering

优化发生在多个层面上。公司创始人兼首席执行官西蒙•大卫曼表示:“需要对系统进行分析,以确保沟通正常进行,并找到任何瓶颈治之软件.“许多系统采用复杂的通信,可以是同步的,也可以是异步的。这就像一个楼层规划挑战,以确保数据在流经系统时不会出现瓶颈。”

通常,这些交流涉及软件。“你必须考虑设备上运行的固件和软件,因为这决定了产品的性能,”西门子的Panesar说。“我们可以通过考虑可以提供的各种可见性来说明这一点。以cpu为中心的观点认为,跟踪指令执行就足够了,但是如果不能看到系统中其他地方发生了什么,这是一个非常生硬的工具。片上网络(NoC)的尺寸和配置是否正确?内存带宽和延迟是否会影响性能?如果没有对这些因素的系统级观点,世界上所有的CPU定制都无法提供一个成功的产品。”

其中一些决定受到处理器核心类型的影响。Imagination Technologies技术创新副总裁Kristof Beets表示:“cpu和gpu可以执行随机数据访问,但人工智能处理核心不同,它们的设计目的是执行一组有限的算法,这些算法具有非常特定和众所周知的数据流。”“这使得流处理成为可能,允许更小的逻辑和更少的本地缓存。支持的操作和数据流比GPU更有限,特别是与CPU支持的相比非常有限。”

对于许多处理器,总线接口可能被视为一个限制器。Cadence’s Wall说道:“在创造高效设计方面,界面在某些情况下与ISA同等重要,甚至更重要。“传统处理器通常有一个总线接口,例如基于AMBA协议的接口,用于连接SoC上的其他元素,用于连接主内存存储,以及用于连接各种I/O设备。基于竞争这些设备的元素数量,这样的界面可以扩展的范围有限。如今,嵌入式设计过程的一部分是考虑通过系统总线将处理器连接到特定设备是否有意义。或者,是否有另一种方法来连接它?这是扩展处理器的另一种方式——创建像队列接口或查找接口这样的接口,在这些接口中,其他设备可以更直接地连接到处理器。”

忽略这些类型的问题可能会导致不是最优的解决方案。“数据移动是至关重要的,”曼努埃尔·乌姆(Manuel Uhm)说AMD.“I/O、内存瓶颈都必须考虑在内。实际上,我们将板载紧密耦合的内存(基本上是程序内存)增加了一倍,连接到每个核心上。我们还添加了一些叫做mem tiles的东西,它基本上构建了支持这些核心的缓冲区。它们实际上不是核心本身的一部分,不像紧密耦合的程序内存,但它们是自己的瓷砖,支持所有这些。我们学习,但学习并不全是关于计算。它是关于如何移动数据,如何管理内存,如何将所有数据都带入。I/O是这个问题的很大一部分。”

一些最近的工作负载甚至不适合使用冯·诺依曼类似处理器架构。Expedera的Chole说:“我们一开始并没有假设我们需要一个处理器。“我们并没有从冯·诺伊曼架构开始。我们从神经网络中使用的操作的构建块开始——例如,矩阵乘法、卷积、激活函数、池化层。我们从定义如何做到最好开始。我们研究了这样做的成本,以及如何确保每个计算块总是忙碌的。问题在于,当需要进行计算时,要确保所有操作数都可用。然后我们建立了一个没有任何背压的架构,完全是确定的。”

处理器架构优化
直到最近,处理器架构优化的机会还很有限,除非您正在构建一个完全自定义的处理器。“处理器架构有两个部分,”zdenk picikryl说Codasip.“首先是指令集体系结构(ISA),其次是微架构。这就是体系结构的实现。在私有ISA的情况下,您很少被允许更改ISA,因此您只能更改微架构。你可以认为这些变化是渐进的,而不是革命性的。另一方面,如果你从一个开放的ISA开始,它会给你一个很好的起点,你可以专注于创新和关键差异化。这就是你的秘方。您可以添加新的指令来帮助提高性能,它可以减少内存占用等等。在这种情况下,它可以被描述为革命而不是进化。”

一些isa包含很大的灵活性。“它具有可配置性和可扩展性,”Synopsys的产品营销总监里奇·柯林斯(Rich Collins)说。“很多标准实现都可以根据总线宽度和内存大小进行配置。所有这些东西都是可配置的,而不需要进行任何定制。可能存在预定义的可扩展性形式,例如提供一组条件代码、一组辅助寄存器或扩展的指令集,甚至是附加的硬件加速器。您不必只添加自定义指令。如果你有自己定制的秘密加速器,那么你就可以把它连接到处理器上。”

采用基线处理器或固定架构处理器确实有好处。Synopsys的Goossens说:“人们可以重用现有的基础处理器生态系统,比如Arm、RISC-V或ARC。“这个生态系统可以扩展到外设、与处理器接口的单元,以及现有的软件库。事实上,你可以重用这些元素是很重要的,这就是为什么人们可能更喜欢有一个RISC-V基线,或ARC基线,并从那里开始。”

虽然一些业内人士谴责缺少处理器架构,但这只是暂时的问题。他说:“随着RISC-V的兴起,涵盖处理器设计的计算机工程课程越来越多,因此在未来几年,这个行业将会有更多人加入。”“我不认为缺少知道如何构建处理器的人。它需要几个人作为结晶点,他们聚集周围的团队开始构建处理器。构建处理器不需要特殊的技能。它只是另一个IP,但打造一个好的处理器并不容易。”

它确实需要一个良好的流程来分析架构变更。“你需要软件工具,尤其是编译器,”Goossens说。“你不希望用低级汇编代码编写扩展程序,然后进行内联汇编并将其与编译器生成的代码链接起来。编译器必须能够利用您添加的所有专门化。然后,您可以通过使用真实的应用程序代码获得关于体系结构质量的即时反馈。如果你不具备这一点,那么你就只能靠猜测来进行扩展。”

有两种方法可以处理这个问题。Codasip的pickikryl说道:“传统的方法是让一个软件工程师团队致力于软件开发工具包(SDK),然后一个团队致力于RTL,另一个团队致力于验证。“这种方法没有错,但它需要很多工程师,你需要在他们之间同步,以确保他们是一致的。另一种方法是使用自动化大部分工作的工具。用高级语言描述处理器,包括它的ISA和微体系结构。在Codasip中,我们称之为CodAL(一种类c语言)。由此,它生成SDK、RTL和验证工具。”

Micro-architectural优化
既然现在已经定义了处理器体系结构,就必须实现它。Arteris的Frank说:“微架构定义了你执行指令集的效果。“当人们坚持商定的指令集架构时,你是在榨取柠檬,即微架构,以提供更多性能。”

处理器的实现通常被认为是一个标准的RTL设计过程。然而,这并不意味着它在任何方面都是微不足道的,特别是如果它利用了乱序并行、推测、分支预测器或许多其他技术之一。

结论
处理器的设计、创建和优化涉及许多方面,这些方面都可以执行已定义的任务或一组任务,而且这些方面都紧密相连。过分关注一个人而忽视其他人会产生问题。与大多数系统一样,从顶层开始会带来最大的收益。

AMD的Uhm说:“现在是2020年。“如果你不把一些东西投入市场,你就无法从中学习,变得更好。你可以在今天的许多人工智能公司看到这一点。那些在购买第一款设备后就没钱了的人现在都破产了。那些在某种程度上取得成功的人正在开发下一个芯片,他们从中学习,并在此基础上进行改进。你需要一个持续的反馈循环,告诉你哪里做得对,哪里出了问题。”



留下回复


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

Baidu