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

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

3天内不再提示

如何处理cache miss问题以提高加速器效率呢?

FPGA之家 来源:AI加速 2023-11-16 16:36 次阅读

引言

带宽是影响FPGA加速器的重要因素,因为大量的并行计算对数据量要求很大。如果加速器对数据的访问是不规则的,那么cache miss就会大大影响加速器性能。这篇来自FPGA2019会议的报告,向我们展示了如何来更好的处理cache miss问题,提高对缓存的利用率以及提高加速器效率。

01

Cache miss的问题

假设DDR可以提供12.8GB/s的带宽,FPGA上的并行加速器的数据输入带宽为0.8GB/s,可以并列16个这种加速器。这些加速器通过arbiter来直接访问DDR。如果它们访问的数据是连续规则的,那么DDR的带宽可以被充分利用。但是这些加速器需要的数据在DDR中并不是规则排列的,如图1.1。这样就会造成频繁的访问DDR,这样DDR的带宽就不够用,造成的结果就是加速器会受到延迟,效率无法得到提升。就如同图1.1所示,实际上有效利用的DDR带宽只有0.8GB/s。

90b92460-8458-11ee-939d-92fbcf53809c.jpg

图1.1 不规则数据需要造成频繁访问DDR

一种解决问题的方法是使用blocking cache,将还没有用到的数据缓存起来以便之后使用。然而这样存在两个问题:一个是如果缓存中没有需要的数据,那么就需要从DDR中获取数据,这就会有很大延迟,因为对DDR的数据进行随机访问是非常耗时的;另一个是缓存的使用效率很低,内部大部分数据都不能被及时消耗,以便等待被利用到。

90cfb086-8458-11ee-939d-92fbcf53809c.jpg

图1.2 blocking cache的使用

另外一种解决的办法是non-blocking cache,这正是本文提出的方法。这种方法的关键是加速器可以允许一定数量的cache miss。Cache miss不会阻塞对后面数据的获取。这就要求前后的数据没有依赖关系,而且允许的cache miss数量足够多,能够允许在这些时间可以从DDR中获取miss的数据,否则一样会造成加速器等待喂数。

90e2e890-8458-11ee-939d-92fbcf53809c.jpg

图1.3 non-blocking cache

02

传统的Non-blocking cache结构

图2.1是一个基本的non-blocking cache结构,它主要由cache array以及MSHR组成。Cache array中含有tag和数据,tag用来表示加速器请求的数据的在外存中的地址。通过tag可以判定请求的数据在cache中是否存在。MSHR首先被Kroft使用,它含有数据未被命中需要去外存获取的具体信息:包括外存地址,用于判定加速器是否会再次命中相同的数据。还有cache的地址,用于决定从外存获取的数据存储到cache的位置,给哪个加速器使用。还有输入请求确认标志,表示这个缺失的数据是否从外存读取到。

基本操作是:当加速器第一次从cache中获取数据没有命中,那么就在MSHR中记录下相应的信息和状态,当第二次相同数据miss发生,除了在MSHR中记录信息外,则启动从外部存储器获取数据,并更新到cache中。取回来的数据会根据MSHR中的信息将需要的数据发送给加速器。所以一个包含n个表项的MSHR有n个比较器用于比较数据地址,是否属于同一个miss的数据等。使用non-blocking cache能够提高运算效率,减少等待时间,提高带宽利用率。但是这种传统的MSHR消耗很多逻辑资源,不利于规模扩展。

90f5d09a-8458-11ee-939d-92fbcf53809c.jpg

图2.1 non-blocking cache的基本结构和操作

90fe45fe-8458-11ee-939d-92fbcf53809c.jpg

图2.2 更新cache

91156c52-8458-11ee-939d-92fbcf53809c.png

图2.3 MSHR逻辑结构

03

对non-blocking cache的改进

为了能够有效扩展MSHR,可以使用多个MSHR,每个MSHR有n个表项,这样相比于使用一个MSHR能节省逻辑资源。但是这涉及到一个问题,如果一个配置MSHR的请求在多个MSHR表都有冲突,那么就造成配置MSHR表的等待。这样就导致了加速器运算的等待,不能够执行下一条指令。

912163ea-8458-11ee-939d-92fbcf53809c.png

图3.1 两个MSHR被请求表项都被占用

解决办法就是Cuckoo hashing算法。假设有两个MSHR表,T1和T2。每个r个表项。每个元素通过函数h1和h2来确定表项位置,即:T1[h1(x)],T2[h2(x)]。为了插入表项内容x,检查T1对应位置是否空,如果空,就插入。如果非空就检查T2,如果T2也非空,这就是冲突的情况,那么就插入到T2中,将原来的内容z替换。然后z再去查询T1表,如此循环进行。这样就不会造成阻塞。

9130364a-8458-11ee-939d-92fbcf53809c.png

9145f598-8458-11ee-939d-92fbcf53809c.png

9150e246-8458-11ee-939d-92fbcf53809c.png

图3.2 Cuckoo hashing

还有一个问题是,MSHR中的表项subentries大小是固定的,如果要扩展表项的subentries,那么所有的内容都是同等扩展,这样可能有一些内容并不需要那么大。所以为了能够有效利用存储资源,论文作者提出了动态可扩展subentries内容的方法。将tag和subentries分隔开分别存储,这样如果有更多加速器miss相同的数据,那么就可以在一个subentries表后再扩展需要的subentries。这样就是在需要级联的subentries中增加指针来级联到下一个subentries表。

91643206-8458-11ee-939d-92fbcf53809c.png

图3.3 可扩展subentries

916f1248-8458-11ee-939d-92fbcf53809c.png

图3.4 表项扩展

917711be-8458-11ee-939d-92fbcf53809c.jpg

图3.5 整体结构

结论

本文主要总结了non-blocking cache的设计框架,以及在FPGA上如何使用。介绍比较简略,更详细的资料还需要了解CPU体系中non-blocking cache的具体结构。






审核编辑:刘清

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

    关注

    38

    文章

    7423

    浏览量

    163490
  • 加速器
    +关注

    关注

    2

    文章

    789

    浏览量

    37655
  • 比较器
    +关注

    关注

    14

    文章

    1628

    浏览量

    107036
  • DDR
    DDR
    +关注

    关注

    11

    文章

    703

    浏览量

    65154
  • Cache
    +关注

    关注

    0

    文章

    129

    浏览量

    28269

原文标题:一文告诉你怎么解决cache miss的问题

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    在FPGA上如何使用non-blocking cache设计框架

    们展示了如何来更好的处理cache miss问题,提高对缓存的利用率以及提高加速器
    的头像 发表于 11-11 17:28 4636次阅读
    在FPGA上如何使用non-blocking <b class='flag-5'>cache</b>设计框架

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

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

    基于Fast Model的加速器软件开发

    非常惊艳的加速器,在实际使用中体验却不尽如人意的原因。人工智能加速器为例,其中基本的硬件加速单元就是乘加的组合,但如何让这些乘加
    发表于 07-29 15:38

    在0.13.0这个sdk版本中,如何实现在启动时将代码从flash中加载到ILM提高cache miss时的程序运行速度?

    在0.13.0这个sdk版本中,flash_xip工程模板的ILM只用于存放中断向量表,个人感觉这样是比较浪费的,因此我希望启动时将代码从flash中加载到ILM提高cache miss
    发表于 05-26 08:05

    英特尔媒体加速器参考软件Linux版用户指南

    英特尔媒体加速器参考软件是用于数字标志、交互式白板(IWBs)和亭位使用模型的参考媒体播放应用软件,它利用固定功能硬件加速提高媒体流速、改进工作量平衡和资源利用,以及定制的图形
    发表于 08-04 06:34

    Intel媒体加速器参考软件用户指南

    英特尔媒体加速器参考软件是用于数字标志、交互式白板(IWBs)和亭位使用模型的参考媒体播放应用软件,它利用固定功能硬件加速提高媒体流速、改进工作量平衡和资源利用,以及定制的图形
    发表于 08-04 07:07

    利用硬件加速器提高处理器的性能

    处理器内部集成的硬件加速器可以实现三种广泛使用的信号处理操作:FIR(有限冲激响应)、IIR(无限冲激响应)和FFT(快速傅里叶变换)。硬件加速器减轻了核
    发表于 12-04 15:22 1280次阅读

    使用协处理器加速器的方法介绍

    了解协处理的价值,Zynq-7000加速器一致性端口,使用协处理器加速器的方法以及协处理器设计实例的概述。
    的头像 发表于 11-30 06:15 4223次阅读

    基于RISC-V处理器和卷积加速器的SoC系统

    提高卷积神经网络(CNN)的计算效率和能效,8bit定点数据作为输入,设计一个支持激活、批标准化以及池化等CNN网络中常见计算类型的卷积加速器,优化循环计算顺序并将其与数据复用技术
    发表于 06-02 15:08 29次下载

    Linux 6.2将引入计算加速器子系统

    而在今年的 LPC 大会中,上游开发人员终于对如何处理加速器子系统达成了共识:鉴于各种人工智能加速器和 GPU 之间有很多共同点,这个新的 “accel” 内核计算加速器子系统将利用直
    的头像 发表于 11-23 14:47 711次阅读

    硬件加速器提升下一代SHARC处理器的性能

    SHARC ADSP-2146x处理器集成了硬件加速器,可实现三种广泛使用的信号处理操作:FIR(有限脉冲响应)、IIR(无限脉冲响应)和FFT(快速傅里叶变换)。加速器卸载了核心
    的头像 发表于 03-03 14:46 1195次阅读
    硬件<b class='flag-5'>加速器</b>提升下一代SHARC<b class='flag-5'>处理器</b>的性能

    基于FPGA的深度学习CNN加速器设计方案

    因为CNN的特有计算模式,通用处理器对于CNN实现效率并不高,不能满足性能要求。 因此,近来已经提出了基于FPGA,GPU甚至ASIC设计的各种加速器提高CNN设计的性能。
    发表于 06-14 16:03 2216次阅读
    基于FPGA的深度学习CNN<b class='flag-5'>加速器</b>设计方案

    CTAccel图像处理(CIP)加速器

    电子发烧友网站提供《CTAccel图像处理(CIP)加速器.pdf》资料免费下载
    发表于 09-15 14:21 0次下载
    CTAccel图像<b class='flag-5'>处理</b>(CIP)<b class='flag-5'>加速器</b>

    粒子加速器加速原理是啥

    粒子加速器加速原理是啥? 粒子加速器是一种重要的实验设备,用于研究粒子物理学、核物理学等领域。其主要原理是通过电场和磁场的作用,对带电粒子进行
    的头像 发表于 12-18 13:52 1927次阅读

    什么是神经网络加速器?它有哪些特点?

    神经网络加速器是一种专门设计用于提高神经网络计算效率的硬件设备。随着深度学习技术的快速发展和广泛应用,神经网络模型的复杂度和计算量急剧增加,对计算性能的要求也越来越高。传统的通用处理器
    的头像 发表于 07-11 10:40 389次阅读