数字IC前端学习笔记:脉动阵列的设计方法学(四)

news2024/12/26 6:21:46

相关阅读

数字IC前端icon-default.png?t=O83Ahttps://blog.csdn.net/weixin_45791458/category_12173698.html?spm=1001.2014.3001.5482


引言

        脉动结构(也称为脉动阵列)表示一种有节奏地计算并通过系统传输数据的处理单元(PEs)网络。这些处理单元有规律地泵入泵出数据以保持规则的数据流。因此,脉动阵列的特征是模块化和规则化,这对于VLSI设计来说是一个重要的性质。脉动阵列可以作为与主机配合的协处理器,从主机接收数据进行计算并将最终结果返回主机。这个操作类似心脏的血液流动,因此被称为“脉动”。

        典型情况下,脉动阵列的所有处理单元是相同的,且全流水的(即PE包含寄存器等延时单元),通常只包含局部互联。然而,为了增加脉动阵列的实用性,一些设计也存在放宽。这些放宽包括:不仅使用局部互连,还使用邻近(接近,但不是最近的)互连,使用数据广播操作,以及在系统中使用不同的处理单元,特别是在边界处。通过这些放宽措施,可以为数字信号处理(DSP)应用设计一系列模块化、规则和高效的数据驱动阵列架构。

        本文以串行FIR滤波器为例介绍了脉动阵列设计方法学,其中可以使用线性映射或投影技术为任何给定的规则迭代算法设计多种流线架构。

脉动阵列设计方法学

        流线架构是通过在规则依赖图上使用线性映射技术来设计的。依赖图中的边表示前置约束。一个依赖图(DG)如果在任何节点中某个方向上的边的存在,意味着在依赖图中的所有节点在同一方向上都有相应的边,那么该依赖图被称为规则依赖图。

        作为一个例子,考虑如下所示的3抽头FIR滤波器的依赖图,如图1所示。

y(n) = \omega _{0}x(n) + \omega _{1}x(n - 1) + \omega _{2}x(n - 2)

 图1 FIR滤波器的依赖图(空间表示)

        这个依赖图有3个基本的边(用\boldsymbol{e}表示):输入用向上的边用向量表示为(0, 1),系数用向右的边用向量表示为(1, 0),输出用下右下角移动的边用向量表示为(1, -1)。由于依赖图中的所有节点都包含这3种边,因此该依赖图是规则的。

        该依赖图对应于一个空间表示,因为其中没有为任何计算分配时间不。映射技术将空间表示转换为空间-时间表示,在空间-时间表示中,每个节点被映射到某个处理单元,并且被调度到某个时间步。

        脉动阵列设计方法学将一个N维的依赖图映射到一个低维的脉动阵列。在本文中,只考虑一级映射,即将一个N维的依赖图映射到一个(N-1)维的脉动阵列(对于FIR滤波器而言是将2维依赖图映射到1维脉动阵列)。

        下面定义脉动阵列设计中的基本向量:

  • 投影向量(也称迭代向量):\boldsymbol{d} = (d_{1}, d_{2}),如果两个节点间的距离为投影向量的整数倍,则他们由同一个处理单元计算。
  • 处理器空间向量:\boldsymbol{p} = (p_{1}, p_{2}),任何坐标为\boldsymbol{I} = (i, j)的节点由处理单元\boldsymbol{p} \cdot \boldsymbol{I}计算。
  • 调度向量:\boldsymbol{s} = (s_{1}, s_{2}),任何坐标为\boldsymbol{I} = (i, j)的节点在时间步\boldsymbol{s} \cdot \boldsymbol{I}计算。
  • 硬件利用率:\boldsymbol{HUE} = 1 / ( \boldsymbol{s} \cdot \boldsymbol{d}),这是因为同一个处理单元的两次计算相隔\boldsymbol{s} \cdot \boldsymbol{d}

        对于给定的问题,可以通过选择不同的投影向量、处理器空间向量和调度向量来设计多种脉动阵列,但这些向量必须满足以下推导出的两个可行性约束。

        1、处理器空间向量和投影向量必须彼此正交(内积为0)。如果节点A和B间的距离等于投影向量的整数倍,即\boldsymbol{I_{A}} - \boldsymbol{I_{B}} = n\boldsymbol{d},则这两个节点由同一个处理单元计算,所以\boldsymbol{p} \cdot \boldsymbol{I_{A}} = \boldsymbol{p} \cdot \boldsymbol{I_{B}},即\boldsymbol{p} \cdot (\boldsymbol{I_{A}} - \boldsymbol{I_{B}}) = 0 \rightarrow n\boldsymbol{p} \cdot \boldsymbol{d} = 0

        2、如果节点A和B被映射到同一个处理器,那么其不能同时计算,所以\boldsymbol{s} \cdot \boldsymbol{I_{A}} \neq \boldsymbol{s} \cdot \boldsymbol{I_{B}},即\boldsymbol{s} \cdot (\boldsymbol{I_{A}} - \boldsymbol{I_{B}}) \neq 0 \rightarrow n\boldsymbol{s} \cdot \boldsymbol{d} \neq 0

        另外,将空间表示转换为空间-时间表示时,引入处理器轴\boldsymbol{j^{'} }= \boldsymbol{p} \cdot \boldsymbol{I},时间步轴\boldsymbol{t^{'}} = \boldsymbol{s} \cdot \boldsymbol{I}。 将依赖图映射到脉动阵列时,每个依赖图中的边\boldsymbol{e}对应脉动阵列中的一个延时边,方向\boldsymbol{p} \cdot \boldsymbol{e},延时值为\boldsymbol{s} \cdot \boldsymbol{e}

设计4(输入移动、权重反向移动、输出保持)

\boldsymbol{d} = (1, -1)\, \, \, \, \, \boldsymbol{p} = (1, 1)\, \, \, \, \, \boldsymbol{s} = (1, -1)

        可以很容易地验证,这些向量满足提到的两个可行性约束,并且可得到:

  • 任何坐标为\boldsymbol{I} = (i, j)的节点由处理单元\boldsymbol{p} \cdot \boldsymbol{I} = i+j计算。
  • 任何坐标为\boldsymbol{I} = (i, j)的节点在时间步\boldsymbol{s} \cdot \boldsymbol{I} = i-j计算。
  • 硬件利用率为\boldsymbol{HUE} = 1 / ( \boldsymbol{s} \cdot \boldsymbol{d}) = 1/2

        在空间-时间表示中,处理器轴\boldsymbol{j^{'} }= \boldsymbol{p} \cdot \boldsymbol{I}对应空间表示中的\boldsymbol{i} + \boldsymbol{j}轴,时间步轴\boldsymbol{t^{'}} = \boldsymbol{s} \cdot \boldsymbol{I}对应空间表示中的\boldsymbol{i} - \boldsymbol{j}轴。

        将依赖图映射到脉动阵列时,边映射的情况如表1所示。

 表1 设计1的边映射情况

\boldsymbol{e}\boldsymbol{p}\boldsymbol{s}\boldsymbol{p} \cdot \boldsymbol{e}(方向)\boldsymbol{s} \cdot \boldsymbol{e}(延迟)
输入: (0, -1)(1, 1)(1, -1)-11
权重: (1, 0)11
输出: (1, -1)02

        表1中需要注意的是,输入边选择用(0, -1)向量表示而不是(0, 1)向量表示,这是为了避免出现负的延迟,这种向量反转在输入边上不存在优先级约束时是可行的。

        如数字IC前端学习笔记:脉动阵列的设计方法学(二)-CSDN博客一文所说,不能将处理器轴上的每一个值都对应一个单独的处理单元,在输出后,应该还能计算其他输出。根据不同的处理单元复用策略,有以下三种情况。

情况1

        图2给出了设计4的一种空间-时间表示。其中红线表示处于同一时间步的计算,而蓝线表示处于同一处理单元的计算。

图2 情况1的FIR滤波器的空间-时间表示

        可以看出,总共需要使用5个PE在时间步0输出后,继续在时间步1计算x_{3}\omega _{2}(这本应该是PE_{5}的任务),时间步3计算x_{4}\omega_{1},并最终在时间步5输出y_{5},对于其他PE,情况也是如此。

        对于权重,PE_{4}的权重输出连接到PE_{0}的权重输入。

        对于输入,由于每个输入只会被3个PE使用,因此在某个PE在进行任务切换时不会使用其他PE传来的输入,而是由输入端口获取输入,例如对于PE_{1},其在输出y_{1}后的下一个时间步,不会使用PE_{2}传递来的输入,而是从输入端口获得输入x_{4}

        最后需要注意的是,PE的累加计算是每隔2个或1个时间步进行的(对于单个任务时是2个时间步,对于任务切换时是1个时间步),这种情况下,硬件利用率应略高于前面分析的1/2。整体的脉动阵列每个时间步都会有一个有效结果输出。

        图3给出了情况1的脉动阵列框图,其中D代表有延时单元(如寄存器)的边,2D表示两倍延迟。

图3 情况1的脉动阵列框图

        情况1的具体实现如图4所示,其中标出了一种权重的可能情况,可以发现有些权重之间存在0数据(比如\omega_{1}\omega_{2}),这是因为PE在单个任务中累加计算是每隔2个时间步进行,而有些权重之间则是连续的(比如\omega_{2}\omega_{0}),这是因为PE在任务切换时的计算是隔1个时间步进行,而任务切换发生在\omega_{0}的相关运算完成后。

图4 情况1的具体实现

        情况1中,PE需要设计为能在2个时间步累加和1个时间步累加之间切换,这可能会导致PE更加复杂,如果不想如此该怎么做?很简单,只要每个PE在任务切换时多等待一个时间步即可,如情况2所示。

情况2

        图5给出了设计4的一种空间-时间表示。其中红线表示处于同一时间步的计算,而蓝线表示处于同一处理单元的计算。

图5 情况2的FIR滤波器的空间-时间表示

        可以看出,与情况1相比不同之处在于总共需要6个PEPE_{0}在时间步0输出后,继续在时间步2计算x_{4}\omega _{2}(这本应该是PE_{6}的任务),时间步4计算x_{5}\omega_{1},并最终在时间步6输出y_{6},对于其他PE,情况也是如此。

        对于权重,PE_{5}的权重输出连接到PE_{0}的权重输入。

        对于输入,由于每个输入只会被3个PE使用,因此在某个PE在进行任务切换时不会使用其他PE传来的输入,而是由输入端口获取输入,例如对于PE_{1},其在输出y_{1}后的2个时间步时,不会使用PE_{2}传递来的输入,而是从输入端口获得输入x_{5}

        最后需要注意的是,PE的累加计算是每隔2个时间步进行的,这种情况下,硬件利用率为1/2。整体的脉动阵列每个时间步都会有一个有效结果输出。

        图6给出了情况2的脉动阵列框图,其中D代表有延时单元(如寄存器)的边,2D表示两倍延迟。

图6 情况2的脉动阵列框图

        情况2的具体实现如图7所示,其中标出了一种权重的可能情况,可以发现权重之间存在0数据,这是因为PE的累加计算是每隔2个时间步进行的。

图7 情况2的具体实现

        情况1和情况2不仅使用了5个PE和6个PE,还需要输入序列从不同的端口进入,有没有什么情况能使设计4与之前的设计1、2、3那样只使用3个PE且无需多个输入端口呢?情况3就展示了这种情况。

情况3

        图8展示了情况3的空间-时间表示,其中由PE_{0}完成PE_{3}的任务,PE_{1}完成PE_{4}的任务,以此类推。可以看出其中并没有用红线表示处于同一时间步的计算,这是因为由于此时只有3个PE,在时间步-1时PE_{0}不能开始y_{3}的任务,因为它需要在时间步0先完成y_{0}的任务;在时间步0时PE_{1}不能开始y_{4}的任务,因为它正在完成y_{1}的任务。不能用时间步轴代表所有在同一时间步的计算,需要更为巧妙的计算安排。

图8 情况3的FIR滤波器的空间-时间表示

        根据表1,输入由PE_{2}进入,进而传递给PE_{1},最后传递给PE_{0},而权重由PE_{0}进入,进而传递给PE_{1},最后传递给PE_{2}。由于输入在PE间的延迟为D,某个输入在3个PE中的3次计算必须在连续的3个时间步进行,且由于输出的累加计算是每隔2个时间步进行的,有效的输入和权重每隔2个时间步进入PE

        综上所述,给出了图9所示的FIR滤波器的空间-时间表示,其中用红色标注出了每个计算的时间步。

图9 情况3的FIR滤波器的空间-时间表示(标注时间步)

        可以看出,与情况1和情况2相比不同之处在于只需要3个PEPE_{0}在时间步2输出后,继续在时间步4计算x_{1}\omega _{2}(这本应该是PE_{3}的任务),时间步6计算x_{2}\omega_{1},并最终在时间步8输出y_{3},对于其他PE,情况也是如此。

        对于权重,PE_{2}的权重输出连接到PE_{0}的权重输入,且反馈回路上需要有一个延时边3D,这么做的理由可以从图11中找到。

        最后需要注意的是,PE的累加计算是每隔2个时间步进行的,这种情况下,硬件利用率为1/2。整体的脉动阵列并不是每个时间步都会有一个有效结果输出。

        图10给出了情况3的脉动阵列框图,其中D代表有延时单元(如寄存器)的边,3D表示两倍延迟。

图10 情况3的脉动阵列框图

        情况3的具体实现如图11所示,其中标出了一种权重的可能情况,可以发现权重之间存在0数据,这是因为PE的累加计算是每隔2个时间步进行的。

图11 情况3的具体实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2265668.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件工程-【软件项目管理】--期末复习题汇总

一、单项选择题 (1)赶工一个任务时,你应该关注( C ) A. 尽可能多的任务 B. 非关键任务 C. 加速执行关键路径上的任务 D. 通过成本最低化加速执行任务 (2)下列哪个不是项目管理计划的一部分&…

【Git学习】windows系统下git init后没有看到生成的.git文件夹

[问题] git init 命令后看不到.git文件夹 [原因] 文件夹设置隐藏 [解决办法] Win11 win10

《Posterior Collapse and Latent Variable Non-identifiability》

看起来像一篇很有用的paper,而且还是23年的 没看完 后边看不懂了 Abstract 现有的解释通常将后验崩塌归因于由于变分近似而使用神经网络或优化问题。 而本文认为后验崩塌是潜在变量不可识别性的问题(a problem of latent variable non-identifiability) 本文证明了…

申请腾讯混元的API Key并且使用LobeChat调用混元AI

申请腾讯混元的API Key并且使用LobeChat调用混元AI 之前星哥写了一篇文章《手把手教拥有你自己的大模型ChatGPT和Gemini等应用-开源lobe-chat》搭建的开源项目,今天这篇文章教大家如何添加腾讯云的混元模型,并且使用LobeChat调用腾讯混元AI。 申请腾讯混…

Navicat通过ssh连接mysql

navicat 通过ssh连接mysql 对搭建完的mysql连接时,通过ssh连接的方法 需要确保mysql默认端口3306没有被防火墙阻拦 第一步 第二步 35027448270)] 需要注意的是乌班图系列的默认root的ssh是禁止的,应该用别的账户登录

【NACOS插件】使用官网插件更换NACOS数据库

说明 nacos 2.3.1默认支持mysql和derby数据库,如果想要支持其他数据库,可以通过使用插件方式实现。对于该插件的使用,官方说明文档较为粗略(不过也没问题,实际上整个过程就是很简单,只是使用者想复杂了),网…

mysql基础(jdbc)

1.Java连接数据库步骤 1.注册驱动 Class<?> driverManagerClass.forName("com.mysql.cj.jdbc.Driver"); 2.获取连接 Connection conDriverManager.getConnection("jdbc:mysql://localhost:3306/studymysql","root","123456"); …

ROM修改进阶教程------修改刷机包init.rc 自启用户自定义脚本的一些基本操作 代码格式与注意事项

在很多定制化固件中。我们需要修改系统的rc文件来启动自己的一些脚本。但有时候修改会不起作用,其具体原因在于权限与代码格式的问题。博文将系统的解析代码操作编写的注意事项与各种权限分别。了解以上. 轻松编写自定义启动脚本. 通过博文了解💝💝💝 1-------💝💝…

硬件模块常使用的外部中断

对于STM32来说&#xff0c;想要获取的信号是外部驱动的很快的突发信号 例1&#xff1a;旋转编码器的输出信号&#xff1a; 可能很久都不会拧它&#xff0c;不需要STM32做任何事情但是一拧它&#xff0c;就会有很多脉冲波形需要STM32接收信号是突发的&#xff0c;STM32不知道什…

3D布展平台主要有哪些功能?有什么特点?

3D布展平台是一种利用3D技术和虚拟现实&#xff08;VR&#xff09;技术&#xff0c;为用户提供线上虚拟展览和展示服务的平台。这些平台通常允许用户创建、设计和发布3D虚拟展厅&#xff0c;从而提供沉浸式的展览体验。以下是对3D布展平台的详细介绍&#xff1a; 一、主要功能 …

大恒相机开发(2)—Python软触发调用采集图像

大恒相机开发&#xff08;2&#xff09;—Python软触发调用采集图像 完整代码详细解读和功能说明扩展学习 这段代码是一个Python程序&#xff0c;用于从大恒相机采集图像&#xff0c;通过软件触发来采集图像。 完整代码 咱们直接上python的完整代码&#xff1a; # version:…

VTK知识学习(27)- 图像基本操作(二)

1、图像类型转换 1&#xff09;vtkImageCast 图像数据类型转换在数字图像处理中会频繁用到。一些常用的图像算子(例如梯度算子)在计算时出于精度的考虑&#xff0c;会将结果存储为float或double类型&#xff0c;但在图像显示时&#xff0c;一般要求图像为 unsigned char 类型,…

在跨平台开发环境中构建高效的C++项目:从基础到最佳实践20241225

在跨平台开发环境中构建高效的C项目&#xff1a;从基础到最佳实践 引言 在现代软件开发中&#xff0c;跨平台兼容性和高效开发流程是每个工程师追求的目标。尤其是对于 C 开发者&#xff0c;管理代码的跨平台构建以及调试流程可能成为一项棘手的挑战。在本文中&#xff0c;我…

网络协议入门

一、概述 1、模型 为了减少协议设计的复杂性&#xff0c;大多数网络模型均采用分层的方式来组织。每一层都有自己的功能&#xff0c;就像建筑物一样&#xff0c;每一层都靠下一层支持。每一层利用下一层提供的服务来为上一层提供服务&#xff0c;本层服务的实现细节对上层屏蔽…

集成RabbitMQ+MQ常用操作

文章目录 1.环境搭建1.Docker安装RabbitMQ1.拉取镜像2.安装命令3.开启5672和15672端口4.登录控制台 2.整合Spring AMQP1.sun-common模块下创建新模块2.引入amqp依赖和fastjson 3.新建一个mq-demo的模块1.在sun-frame下创建mq-demo2.然后在mq-demo下创建生产者和消费者子模块3.查…

sentinel笔记10- 限流规则持久化(下)

上一篇整理过单向的持久化&#xff0c;sentinel笔记9- 限流规则持久化&#xff08;上&#xff09;-CSDN博客 本篇进行sentinel 改造&#xff0c;实现双向同步。 1 下载Sentinel源码 https://github.com/alibaba/Sentinel 2 dashboard 改造 2.1修改dashboard项目的pom.xml &…

微服务篇-深入了解 XXL-JOB 分布式任务调度的具体使用(XXL-JOB 的工作流程、框架搭建)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 XXL-JOB 调度中心概述 1.2 XXL-JOB 工作流程 1.3 Cron 表达式调度 2.0 XXL-JOB 框架搭建 2.1 XXL-JOB 调度中心的搭建 2.2 XXL-JOB 执行器的搭建 2.3 使用调度中心…

【jenkins插件】

1) 2) 3) 4) 5) 6) 参考: 知识库/运维/Jenkins/01-安装/13-插件.md zfoo/java-developer-document - 码云 - 开源中国

孔雀鱼和斑马鱼能一起养吗?

在观赏鱼的世界里&#xff0c;孔雀鱼和斑马鱼都是备受鱼友喜爱的热门品种。它们独特的外形和相对容易的饲养条件&#xff0c;使得不少养鱼新手跃跃欲试将它们混养在一起&#xff0c;但这其中实则有诸多因素需要考量。 从生存环境来看&#xff0c;孔雀鱼和斑马鱼有一定的兼容性…

踏踏实实练SQLday1

踏踏实实练SQLday1 1连续登录1.1查询连续登录3天以上的用户第一步去重第二步-开窗rownumber&#xff0c;用date减一下&#xff0c;对结果进行分组 -- over()开窗函数知识图谱第三步 1.2查询连续登录最大天数用户1.3某个用户连续登录天数注意先where一下这个用户的数据过滤出来.…