中文 英语

特定领域的记忆

重新思考内存的基本方法可能会对性能产生巨大影响。

受欢迎程度

特定于领域的计算可能正在流行,但它回避了真正的问题。

更大的问题是内存,它限制了处理器的性能,消耗了更多的能量,占用了最多的芯片面积。内存需要打破现有软件偏爱的刚性结构。当算法和内存一起设计时,性能的提高是显著的,并且可以优化处理。

2018年,John Hennessy和David Patterson的图灵讲座“计算机架构的新黄金时代”普及了特定领域的处理。但是处理器几十年来一直受到内存的限制。在不重新考虑内存和内存层次结构的情况下改变处理过程,忽略了阿姆达尔定律(Amdahl’s Law),该定律提供了系统在某些部分得到改进时可能的加速之间的数学关系。它基本上是说,如果你只关注系统的一个部分,而不是关注整个系统,你的回报会递减。

所以为什么不专注于瓶颈呢?的产品营销总监Prasad Saggurti说:“领域特定内存只是一个新术语,但架构师们已经做了很长时间的这种优化Synopsys对此.“如果他们没有,他们就错过了一个机会,因为大多数人都在这么做。”

其他人也同意。“还记得视频存储器——内置移位寄存器的DRAM吗?的研究员和系统架构师Michael Frank问道Arteris IP.“也许是GDDR[1-5],特殊的缓存标签内存,或者TTL时代的联想内存?其中很多都没有保存下来,因为它们的功能太具体了。他们瞄准了一个独特的设备。你需要一个足够大的域,你正在与当今DRAM的低成本作斗争,它具有大批量和大规模制造的好处。”

有时它比这更深。Synopsys的Saggurti说:“你可能会把某些东西硬连接到ROM中。“我们现在看到的是越来越多的人在微调记忆。例如,对于傅里叶变换,或者Z变换,人们会以这样的方式来编写代码你可以以特定的顺序存储系数。当你在做矩阵乘法的时候,你可以把系数按一定的顺序存储这样读出来就会更快。您可能不会将数据存储在一个内存中,而是将数据存储在三个或四个不同的内存中,这样您就可以通过多个数据路径读取数据。这类事情最近一直在发生。”

改变很难。“挑战在于,在过去,人们有一个很好的、抽象的模型来思考计算系统,”Steven Woo说Rambus.“他们从来没有真正考虑过记忆。它是免费的,编程模型使得当你引用内存时,它就会发生。你从来不需要明确你在做什么。”

一般记忆性能正在取得进展。Arteris的Frank说:“今天的内存控制器和先进的接口标准极大地改善了你从先进的硅技术中提取的东西。“这启用了深度队列和高级调度器。先进的存储技术,如高带宽内存(HBM),以及堆叠芯片支持带宽,这在十年前我们还认为是不可能实现的。然而,这并不便宜。sub - 10nm技术也可以实现大型缓存,所以也许我们可以称其为穷人的领域特定内存。”

但这些都是小的增量变化的例子。微软高级首席研究工程师Matt Horsnell说:“构建内存子系统时,计算主要遵循数据,而不是相反,需要对架构师已经习惯的许多规则进行重大反思。手臂的研发组。“这是一个增强编程抽象的机会,从今天对数据的典型操作列表,到封装并发性和计算单元和数据项之间相对距离概念的扩展形式。当算法快速发展时,这样的抽象可以使必要的转换更优化地针对特定领域的内存。”

数据中心占据主导地位
数据中心是当今许多技术趋势的驱动力。“增长最快的计算应用之一是在数据中心,软件应用程序需要更大的内存容量和更低延迟的带宽,”该公司首席执行官Ravi Thummarukudy说Mobiveil.“随着最新行业标准的出现,计算快通(CXL),系统架构师可以在DDRn内存中的主内存和基于CXL的DDRn或更新的持久内存之间分层所需的内存。这些存储层的延迟和经济特征是不同的,这让建筑师可以选择混合和匹配内存来满足他们的需求。”

这是遗留内存架构的延续。“许多原始设备制造商和系统公司正在设计自己的soc,根据特定的工作负载定制硅。Synopsys对此.“提高性能和功率的最大机会是内存层次结构的专门化以及支持的互连架构。

考虑权力。Untether AI首席执行官Arun Iyengar表示:“在目前的架构中,人工智能工作负载的90%的能量都被数据移动消耗了,在外部内存、芯片缓存之间传输权重和激活,最后传输到计算元素本身(见图1)。”“只有专注于推理加速和最大限度地提高电源效率,我们才能提供前所未有的计算性能。”

图1所示。神经网络中记忆所消耗的能量。来源:Untether AI。
图1所示。神经网络中记忆所消耗的能量。来源:Untether AI。

内存优化是一个系统级问题,涉及设计的所有方面——硬件、软件和工具。Kogel补充道:“优化内存的策略是多种多样的,并且依赖于应用领域。“最好的策略是完全避免芯片外内存访问。对于特定于领域的体系结构,这通常可以通过增加可用的片上内存来实现,可以是缓存的形式,也可以是应用程序管理的内存。

许多设计都希望能走得更远。Arm的Horsnell说:“空间计算领域正在探索特定领域的内存概念。“例如,dsp倾向于提供一个分布式内存池,通常直接在软件中管理,这比传统的共享内存系统更适合带宽要求和专门应用程序的访问模式。为了弥补与固定功能asic之间的效率差距,这些处理器通常通过直接支持特定的访问模式(如n -缓冲、fifo、行缓冲区、压缩等)来提供某种形式的内存专门化。在这些系统中编排的一个关键方面(也是设计它们的一个挑战)是确定数据访问的正确粒度,这可以最小化通信和同步开销,同时最大化并发性。其他挑战依然存在,包括编程、一致性、同步和翻译,这些都会增加软件的复杂性。然而,一种可能的前进路线是依赖于领域特定语言(dsl),通过使应用程序的数据流更加显式,可以使编译器识别专门的内存访问模式,并更有效地将它们映射到硬件上。”

仔细观察记忆本身也是有好处的。Synopsys的产品营销总监阿南德•特鲁文加达姆表示:“在记忆方面,超级定制是我们看到的趋势。“这意味着为不同的终端应用程序专门建造的内存。甚至在一个特定的终端应用程序中人工智能对内存有不同的需求,比如训练或推理,在服务器中推理,或者在远端推理。每个应用程序都有不同的需求,这意味着您必须自定义内存。这种定制意味着你不能再把内存视为商品或现成的产品。您必须为特定的应用程序构建它。这就是秘方发挥作用的地方。”

在许多情况下,内存和互连是紧密耦合的。“当涉及到结合内存和互连技术以满足应用程序工作负载的数据访问需求时,任何方法都可以采用——例如,将处理与本地内存结合在一起的多层集群,以利用数据流应用程序中的局部性,或者用于缓冲特征映射的巨大的多银行/多端口片上sram美国有线电视新闻网加速器,以及具有复杂一致性协议的深层缓存层次结构,以减轻数据中心工作负载的不温不火的工作集。”

小的改变可以产生大的结果。弗兰克说:“看看苹果在M1上创造的小奇迹就知道了。“他们想出了如何设计一个内存子系统,使用智能缓存策略和一个巨大的、多层次的缓存层次结构,很好地服务于多个异构主机。”

通常情况下,软件是惯性锚。Saggurti说:“通常情况是有一个算法,我们看到了一种优化它的方法,优化内存,这样算法就能更好地实现。”“另一方面,我们有不同类型的记忆。你能改变你的算法来利用这些新的记忆吗?在过去,使用tcam主要是用于查找IP地址的网络域构造。最近,训练引擎开始使用tcam,这是一种非常不同的方法。这需要软件或固件根据可用的内存类型进行更改。但大多数情况下,软件保持不变,内存会发生变化,从而使最终的实现效果更好。”

吞吐量的意识
如今,人工智能领域投入了大量的时间和金钱。定制芯片受到吞吐量的限制,这使得内存和互连成为人们关注的焦点。

“从历史上看,内存和互连架构都是基于静态电子表格或简单的分析模型(如屋顶性能模型)设计的,”Kogel说。“对于最先进的应用程序来说,这变得相当复杂。例如,预测CNN中每一层的内存需求需要考虑编译器优化,如平铺和层融合。对于具有不同IP子系统和动态应用场景的soc级工作负载的预测和优化,这些静态方法变得不合理地复杂和不准确。另一方面,在硬件模拟或原型系统上运行应用程序在开发过程中太晚了,无法对内存设计进行任何重大更改或重大优化。”

这将重点放在预期的工作负载上。“高效内存子系统的关键是了解您的工作负载,”Frank说。“理解它的行为,甚至可能以一种使它更符合你的内存层次结构限制的方式塑造它,这是架构面临挑战的地方。特定领域的加速器需要调优的内存系统,而构建“阻抗”匹配大规模生产、页面组织、快速访问DRAM和引擎访问模式的转换引擎的艺术需要洞察系统行为、建模工具和大量的工作负载。有时需要改变工作负载处理数据的方式才能改进整个系统。一个很好的例子就是gpu中从‘直接’渲染到基于贴图的处理的转变。”

这一切都归结于建模和仿真。我们建议使用虚拟样机Kogel说:“应用程序负载建模工具,以及互连和内存架构的精确事务级模型。”“这种定量的‘架构优先’方法允许早期的权衡分析,从而产生可靠的实现规范。以额外的建模和仿真工作为代价,好处是降低了未能达到性能和功耗目标的风险,或者降低了为了安全起见而过度设计硬件的成本。在摩尔定律收益递减的时代,我们有机会推出更优化、更差异化的产品。”

这使得算法变化的影响也可以被看到。“有必要重新设计算法,”Thiruvengadam说。“它们可以针对传统的遗留内存架构进行重新设计,也可以针对新的架构、新的内存风格、新的内存口味进行重新设计。不断地推动性能扩展、成本扩展,以及能够平衡不同应用程序的权衡。这就是为什么你能看到持续的发展mram和FeRAMs。他们试图为至少几个变量找到一个最佳点,如果不是所有变量。重新设计算法和内存架构的需求当然变得越来越重要。”

平衡是必要的。“你需要考虑计算强度的概念和所涉及的操作类型,”Frank说。“某些算法对带宽有无法满足的需求,而其他算法只移动相对少量的数据,但要对其进行数千次操作。内存中操作可能适用于simd类型的处理,其中指令带宽相对于数据带宽较小,并且使用相同的方法处理许多元素。但一旦数据流或不规则数据流中存在顺序依赖,特定领域内存的好处就会减少。”

自定义内存
虽然架构更改可能产生较大的结果,但优化内存也可能带来收益。Horsnell说:“当今加速器的很大一部分功率和面积都用于内存。”“因此,新存储技术实现的任何延迟/密度/能量改进都可能产生巨大影响。”

定制存储器正在成为一项大生意。“你开始看到这样的事情内存计算near-memory计算Saggurti说:“这种特殊的内存可能是‘写全零’的内存,这种内存是为某些类型的操作而优化的。”我们看到很多客户向我们询问MRAM,甚至更多的sram、tcam的定制,以及对tcam的某些调整。”

然而,困难依然存在。“我有很多关于自定义内存设计的讨论,其中内存芯片上的处理将是一个'理想'的架构,”Frank说。“它将提供高带宽、低延迟等。一切都是正确的,除了内存过程限制了可以集成的逻辑——三到四层金属层,低功率,但速度慢的晶体管。这意味着计算引擎效率低下。牺牲时钟速度和电路复杂性突然使计算引擎的集成不再是一个好的选择。”

但其中一些改变将是必要的。Saggurti说:“人们希望将闪存芯片上,并使其成为嵌入式闪存。”“那么问题就变成了,‘这可能吗?在28纳米工艺下,你或许可以做嵌入式闪存,但人们开始考虑22纳米工艺下的MRAM之类的东西。”

不过,还有其他方法来看待这个问题。Saggurti补充说:“晶圆和整个晶圆的工艺变化,甚至随着时间的推移,都会限制内存设计。”“当你设计一个内存,一个简单的SRAM时,你倾向于设计比特单元往一个方向走——慢——而外围往另一个方向走——快。如果你为此而设计,如果你的大部分芯片都是典型的,那么你就会留下很多性能和功耗。如果您了解您在流程范围内的位置,并使芯片设计人员能够根据该信息采取行动,那么您就可以相应地调整时间。你的设计可以更优化,你不必为最坏的情况而设计。”

结论
虽然内存一直是一种设计权衡,但它从未像处理那样受到同等程度的关注,即使它在带宽、功率和面积方面是性能限制因素。人工智能促使人们出于必要重新思考内存架构,但有了这些额外的关注,设计团队可能也会重新考虑一些为传统内存系统优化的软件和算法。在一个每18个月就能获得业绩提升的世界里,更极端的措施正成为阻止产品成为大宗商品的唯一方法。



2的评论

m 1 说:

我认为内存在历史上比处理器更受关注,过度饱和导致大多数内存公司倒闭。

凯文·卡梅隆 说:

内存和处理器已经分别开发了几十年,通常是因为它们在不同的(硅)进程上。然而,90%的电力预算将用于数据移动,即使只是在一个芯片堆栈中,也会将它们作为内存计算驱动在一起。
这通常是失败的,因为没有人知道如何让他们的代码在NUMA机器上运行(这是一个可修复的问题)。

留下回复


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

Baidu