0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

AI芯片设计DNN加速器buffer管理策略

冬至子 来源:嵌入式AI 作者:下冰雹 2023-10-17 17:23 次阅读

如前所述,数据缓存是创建高效DNN加速器的关键组件之一。因此,除了选择适当的数据流(控制数据缓存的位置和时间)外,DNN加速器还需要一个缓存方案,该方案应寻求实现以下目标:

l 以高效并及时的方式准确地传送数据的consumer需要的数据;

l 将未来所需数据的接收与当前正在使用的数据的使用重叠;

l 在不再需要数据时删除数据;

l 通过同步来完成上述所有操作。

一般来说,可以实现这些目标的称为实现良好的数据编排。[170]中对当前数据编排方法的分类如图5.29所示。在图中,buffer的用法沿着两个轴进行划分。在较高的层次上,沿一个轴的implicit/explicit区分是指利用工作负载来控制数据缓冲决策的程度,而在另一个轴上的coupled/decoupled是指内存响应和请求是往返(请求-响应)还是向前流(自动将数据推送给consumer)。

image.png

图5.29: 数据编排方法的分类。假设通信(带箭头的线)在硬件通道(通常是 NoC 链路)上传输。 (图来自[170])

5.8.1 隐式与显式编排

在通用计算中,cache是主要的缓冲机制,并且基于加载/存储操作。缓存有几个理想的属性,例如以不可见的方式组合成层次结构。内存级并行性(多个未完成的填充以及填充和访问当前内容之间的并发性)可以使用经过充分研究的附加硬件(通常称为无锁缓存结构)来实现。

Cache可以被描述为执行implicit式数据编排,因为加载请求发起者不直接控制缓存层次结构关于响应数据是否保留在存储层次结构的任何给定级别上的决策,也不直接控制何时删除响应数据。启发式替换策略在通用场景中是有利的,因为它们与工作负载无关。另一方面,对于DNN加速器来说,标签匹配和关联集等特征的面积和能量开销很高。

Cache的另一种替代方法是使用scratchpad,它为加载和存储了特定暂存缓冲区的地址范围,从而支持对数据编排的显式和精确控制 (在图5.29中,这是由管理本地和全局请求/响应的数据路径表示的)。GPU的共享scratchpad [171]是这种显式数据编排习惯用法的一个例子。scratchpad的大小和地址范围在体系结构上是公开的,数据进出scratchpad的传输是通过明确的指令进行管理的。虽然scratchpad避免了缓存的硬件开销,但提取内存并行性(跨填充和重叠填充和访问)既繁琐又容易出错,因此很难将它们组合成层次结构。

5.8.2 耦合和解耦编排

缓存和暂存区都使用加载/存储模式,其中请求的发起方也接收响应。这被称为数据的耦合分段,反映在图5.29的左列中。有了这种设置,数据需求和数据可用性之间的同步既高效又直观——当相应的响应返回时(load-use)会通知请求者。缺点是,由于单个requester/consumer必须在请求和使用响应之间交替,它使数据块的填充和访问重叠(例如,通过双缓冲)变得复杂。此外,传入数据tile的“landing zone”必须在整个往返加载延迟期间保留(因此是空闲的),这增加了内存资源的压力,否则内存资源可能会用于更大的瓦tile size。

另一种选择是将负载请求启动器与响应接收器解耦(在图5.29中,这由指向不同模块的请求/响应箭头表示)。在这种设置中,一个单独的硬件模块(例如DMA引擎或地址生成器(AGEN))负责将数据推入一个或多个功能单元的缓冲器。为了容忍延迟,这些缓冲器通常是双缓冲的,有时被称为ping-pong buffers [172, 173]。这种方法的主要优点是,请求者可以以自己的速率运行,并且可以将数据多播到多个同时使用的用户。此外,pipeline的前馈特性意味着只需要按层次结构相邻级别之间的延迟比例保留tile landing zone,而不是整个层次结构遍历往返,从而增加对同等大小内存的利用率。最后,这种方法通常可以传输大数据块(即批量传输,这比小请求更有效),这些数据块必须动态地重新合并对同一内存行的访问。

这种分离的producer/consumer方法类似于Smith[174]的通用计算架构的decoupled access execute (DAE)风格。在DAE组织中,两个处理器通过硬件队列连接。访问处理器负责执行所有地址计算和生成负载——类似于DMA引擎。负载响应被传递给执行处理器——类似于加速器的功能单元及其本地staging缓冲区。DAE提高了并行性,减少了指令的关键路径,同时允许两个处理器以其自然速率进行计算。然而经典的DAE并没有显式地控制数据编排缓冲区——关于暂存在数据的决策仍然由缓存层次管理,因此图5.29将DAE归类为隐式解耦。

5.8.3 显式解耦数据编排(EDDO)

DNN加速器中最常见的缓冲方法是显式解耦数据编排(EDDO)。硬件FIFO[175,176]是一种传统的可重用EDDO分段缓冲结构。其优点是FIFO通过头指针和尾指针清晰地封装了同步,并且易于分层组合。然而在实践中FIFO不够灵活,无法满足DNN加速器的需求,因为DNN加速器经常在一个窗口内重复访问(例如,在执行卷积时)。此外,对于部分和之类的数据类型,分级数据必须在清除之前进行多次修改。这在没有昂贵的再循环的单写端口FIFO中是不可能的。

一些深度神经网络加速器[142, 152, 159, 177, 178]已经将显式解耦数据编排(EDDO)方案作为定制缓冲机制纳入其中,并提出了其他特定的EDDO缓冲方案,如DESC[179]。然而,为了说明典型的EDDO方案将描述buffets[170],它是Eyeriss[101]中数据编排方案的概括。

从本质上讲,buffet的操作就像FIFO一样,值从输入NoC链路(即硬件通信通道)填充到由头和尾指针控制的圆形缓冲区中。只有当填充发生时,值才会从填充NoC链接中删除。对缓冲区中的数据的访问是由读取命令提供的,但是与只能在其头部读取的FIFO不同,buffet读取增加了一个地址,这被解释为头部的偏移量。在buffet中保留一组值并多次读取它们可以重用数据块。与填充类似,read命令只在读取值可以在读取值NoC链路上发送时才会执行(即,NoC链路没有阻塞)。

Buffets还支持在其缓冲区中更新值。只允许更新之前读过的值,并使用read+update命令读取位置的值。这使得buffet支持存储和更新partial sum。

最后,buffet提供了一个shrink操作,从缓冲区的头部删除指定数量的项。shrink可以让人轻松地释放tile占用的空间。为了避免在切换tile时发生延迟,可以定义一个比buffet尺寸小的tile。因此,在处理前一个tile片时,可以开始填充下一个tile。然而,额外的空间只需要足够大,就避免在下一个tile上开始工作之前的启动瞬态。这通常比双缓冲所需的空间要小得多。

shrink不需要移除整个tile。只移除tile的一部分(例如,只移除一个值),然后从零偏移开始按顺序再次读取,这样buffets就可以支持滑动窗口。

图5.30给出了buffet的框图。当操作(命令或填充)所需的所有输入NoC链接上都有值,并且输出NoC链接中有空间(仅用于读取)时,就会发生操作。图中所示的活动如下。

image.png

图5.30: buffet框图: 主要的输入是一个fill value; a read address and read value; an update address, and update value; 以及一个command,可以指定是执行读取、读取+更新还是shrink。唯一的输出是一个read value。head、tail和date单元在内部提供了同步,通过暂停操作来保持正确的顺序。

l 正在调用read命令(r),该read命令将读取地址(1)作为从head的偏移量来产生read value(d)

l Update address (3)处的更新正在将update value(f’)写入buffet。请注意,这是允许的,因为较早的命令必须是偏移量3处的read+update

l Fill value(k)即将写入buffet的尾部tail

上述所有活动都是在buffet内部通过head、tail和最新状态进行协调的,这保证了正确的ordering。例如,一个read操作必须等待数据filled and updated (如果之前有一个read+update)。fill必须等到缓冲区有空间。

这里没有说明shrink命令,它只是在等待未完成的更新后调整头部指针,从buffet头部删除给定数量的值。

图5.31展示了一个简单的示例,演示了buffet是如何自然组合的,并可以用来处理滑动窗口和更新。L1输入buffet与L0输入buffet的自然组合允许外部无同步填充,因为填充由每个buffet的内部排序控件控制。在L0 Input Buffet中的1个shrink会创建一个输入滑动窗口,因此输入的相对序列将是0, 1, 2, 1, 2, 3, 2, 3, 4......内部同步还控制partial sum的更新。

image.png

图5.31: buffet示例——一个类似于Eyeriss的全局缓冲区和使用buffet构建的PE的示例。对L1输入buffet的读取填充L0 buffet,L0 buffet执行读取,将输入滑动窗口传递给乘法器。L0输出缓冲区执行一系列read+update命令来生成partial sum。Weight buffet没有显示。

总之,在DNN加速器设计中需要有效的数据编排,并且通常由管理数据移动的机制(如buffet)提供。这通常在设计中表现为明确的控制,其中数据在存储层次结构中被确定地推送,避免了昂贵的往返通信,并最大限度地减少了“landing space”存储需求。通过解耦的活动还可以提高效率,其中硬件提供所需值的本地确定和本地同步控制。显然,并非每个存储缓冲区都需要buffet的完整语义,因此可以采用这些语义子集的优化实现或其他提供类似好处的自定义设计。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 加速器
    +关注

    关注

    2

    文章

    743

    浏览量

    36600
  • 缓冲器
    +关注

    关注

    6

    文章

    1566

    浏览量

    44878
  • FIFO存储
    +关注

    关注

    0

    文章

    102

    浏览量

    5894
  • AI芯片
    +关注

    关注

    17

    文章

    1652

    浏览量

    34380
收藏 人收藏

    评论

    相关推荐

    一个模型带你了解#回旋加速器原理

    加速器DIY
    jf_49445761
    发布于 :2022年08月28日 08:57:57

    #硬声创作季 电子制作:磁性加速器

    加速器DIY
    Mr_haohao
    发布于 :2022年10月19日 00:19:38

    【我是电子发烧友】如何加速DNN运算?

    和吞吐量的方法,对于DNNAI系统中更广泛的应用是至关重要的。研究人员目前已经更多的将关注点放在针对DNN计算开发专用的加速方法。  近日,一篇名为《Efficient Proces
    发表于 06-14 21:01

    关于长整加速器的工作步骤:

    关于长整加速器的工作步骤:1. 系统置位后,CPU向加速器的源地址寄存发送当前长整计算的源操作数地址(位于Memory中)2. 接着,CPU向加速器的目标地址寄存
    发表于 03-17 10:53

    请问66ak系列芯片加密加速器的调用?在程序设计中如何调用此加速器

    本帖最后由 一只耳朵怪 于 2018-6-19 10:42 编辑 请问,在66ak系列有加密加速器,现在的项目需要此功能,请问,在程序设计中如何调用此加速器?采用pdk平台,openmpacc开发。
    发表于 06-19 05:53

    使用AMD-Xilinx FPGA设计一个AI加速器通道

    介绍使用 AMD-Xilinx FPGA设计一个全连接DNN核心现在比较容易(Vitis AI),但是利用这个核心在 DNN 计算中使用它是另一回事。本项目主要是设计AI
    发表于 02-21 15:01

    【书籍评测活动NO.18】 AI加速器架构设计与实现

    创新的芯片架构设计,这正面临新的挑战。本书从神经网络的分析出发,总结和提炼了AI加速器架构设计中常见的难点,以及解决这些难点的技术、方法和思想,是AI软硬件架构师、设计师非常宝贵的参考
    发表于 07-28 10:50

    AI加速器架构设计与实现》+第2章的阅读概括

    首先感谢电子发烧友论坛提供的书籍和阅读评测的机会。 拿到书,先看一下封面介绍。这本书的中文名是《AI加速器架构设计与实现》,英文名是Accelerator Based on CNN Design
    发表于 09-17 16:39

    21489的IIR加速器滤波参数设置如何对应加速器的滤波参数?

    目前在用21489内部的IIR加速器去做一个低通滤波,在例程的基础上修改参数。通过平板的fda 工具工具去设计参数,但是设计出来的参数不知道如何对应加速器的滤波参数,手册里也看得不是很明白。 设计的参数如下: 请问
    发表于 11-30 08:11

    UIUC推出最新DNN/FPGA协同方案 助力物联网终端设备AI应用

    UIUC、IBM 和 Inspirit IoT, Inc(英睿物联网)的研究人员提出 DNN 和 FPGA 加速器的协同设计方案(DNN/FPGA co-design),通过首创的「Auto-
    发表于 06-10 14:39 1069次阅读
    UIUC推出最新<b class='flag-5'>DNN</b>/FPGA协同方案 助力物联网终端设备<b class='flag-5'>AI</b>应用

    借助 NVIDIA 融合加速器开发套件加速数据中心 AI

    安全和自主管理式数据中心的唯一出路。 NVIDIA 融合加速器在业界率先推出 AI 增强型 DPU。它将 GPU 的强大计算能力与 DPU 的网络加速和安全优势相结合,为
    的头像 发表于 11-16 16:12 1789次阅读

    什么是AI加速器 如何确需要AI加速器

    AI加速器是一类专门的硬件加速器或计算机系统旨在加速人工智能的应用,主要应用于人工智能、人工神经网络、机器视觉和机器学习。
    发表于 02-06 12:47 3754次阅读

    使用AXI CDMA制作FPGA AI加速器通道

    使用 AMD-Xilinx FPGA设计一个全连接DNN核心现在比较容易(Vitis AI),但是利用这个核心在 DNN 计算中使用它是另一回事。本项目主要是设计AI
    的头像 发表于 02-08 09:33 1173次阅读

    使用赛灵思Alveo加速器加速DNN

    电子发烧友网站提供《使用赛灵思Alveo加速器加速DNN.pdf》资料免费下载
    发表于 09-18 09:27 0次下载
    使用赛灵思Alveo<b class='flag-5'>加速器</b>卡<b class='flag-5'>加速</b><b class='flag-5'>DNN</b>

    PCIe在AI加速器中的作用

    从线上购物时的“猜你喜欢”、到高等级自动驾驶汽车上的实时交通信息接收,再到在线视频游戏,所有的这些都离不开人工智能(AI加速器AI加速器是一种高性能的并行计算设备,旨在高效处理神经
    的头像 发表于 11-18 10:36 1227次阅读
    PCIe在<b class='flag-5'>AI</b><b class='flag-5'>加速器</b>中的作用