当前位置: 首页 > news >正文

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

相关阅读

数字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的具体实现

相关文章:

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

相关阅读 数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 引言 脉动结构(也称为脉动阵列)表示一种有节奏地计算并通过系统传输数据的处理单元(PEs)网络。这些处理单元有规律地泵入泵出数据以保持规则…...

对话 Project Astra 研究主管:打造通用 AI 助理,主动视频交互和全双工对话是未来重点

Project Astra 愿景之一:「系统不仅能在你说话时做出回应,还能在持续的过程中帮助你。」 近期,Google DeepMind 的 YouTube 频道采访了 Google DeepMind 研究主管格雷格韦恩 (Greg Wayne)。 格雷格韦恩的研究工作为 DeepMind 的诸多突破性成…...

NetApp 存储设备巡检作业指导书

NetApp 存储设备巡检作业指导书 一、目的 本指导书旨在指导管理员通过 SSH 或 Console 登录 NetApp FAS2552 存储系统,切换节点并进行日常管理操作。 二、适用范围 适用于基于 NetApp ONTAP 操作系统的 FAS2552 存储环境。 三、前提条件 网络和权限要求&#xff1…...

adb无法连接到安卓设备【解决方案】报错:adb server version (40) doesn‘t match this client (41);

下载老版本Platformtools​​​​​​​​​​​​​​https://dl.google.com/android/repository/platform-tools_r28.0.2-windows.zip?hlzh-cn 替换原来的platform-tools文件夹即可。 问题原因分析:电脑端adb client版本(41)和安卓端adb …...

每天五分钟机器学习:核函数

本文重点 在学习支持向量机算法之前,我们要继续学习一些数学基础,本文我们将学习核函数的概念。当数据线性不可分的时候,此时就需要核函数出场了,它可以将低维不可分的数据映射到高维可分数据,此时就可以完成数据分类了。 核函数的定义 核函数K(x, y)定义为两个数据点x…...

Word窗体联动Excel实现级联组合框

在Word中的使用用户窗体(UserForm)定制界面如下图所示,其中控件如下(忽略Label控件): CompanyName 组合框Attention 组合框CommandButton1 按钮 现在需要实现级联组合框效果,即用户在 CompanyN…...

RAG实战:构建基于本地大模型的智能问答系统

RAG实战:构建基于本地大模型的智能问答系统 引言 在当今AI快速发展的时代,如何构建一个既智能又可靠的问答系统是一个重要课题。本文将介绍如何使用RAG(检索增强生成)技术,结合本地大模型,构建一个高效的智…...

Docker 部署 plumelog 最新版本 实现日志采集

1.配置plumelog.yml version: 3 services:plumelog:#此镜像是基于plumelog-3.5.3版本image: registry.cn-hangzhou.aliyuncs.com/k8s-xiyan/plumelog:3.5.3container_name: plumelogports:- "8891:8891"environment:plumelog.model: redisplumelog.queue.redis.redi…...

TCP/IP 邮件

TCP/IP邮件是互联网通信中非常重要的应用之一。当我们发送电子邮件时,我们实际上并没有直接使用TCP/IP协议,而是通过电子邮件程序,例如微软的Outlook、莲花软件的Notes或Netscape Communicator等来实现。这些电子邮件程序背后使用了不同的TCP…...

FreeSql

官网 实体特性 Ado 它包括所有对 SQL 操作的封装,提供 ExecuteReader、ExecuteDataSet、ExecuteDataTable、ExecuteNonQuery、ExecuteScalar 等方法,使用起来和传统 SqlHelper 一样。 1、安装包 Install-Package FreeSql Install-Package FreeSql.Prov…...

记一次前端Vue项目国际化解决方案

背景 有一个vue项目,要实现国际化功能,能够切换中英文显示,因为该项目系统的用户包括了国内和国外用户。 需求 1、页面表单上的所有中文标签要国际化,包括表单属性标签、表格列头标签等, title“数量”;…...

JS进阶-手写Promise

一、什么是Promise 在Promise A规范中规定,Promise是一个有一个符合规范的then方法的对象或者函数。 1.关于then then接收onFulfilled和onRejected两个可选参数;then必须返回一个新的Promise对象;如果onFulfilled是一个函数 在状态切换为f…...

PCL点云库入门——PCL库点云滤波算法之直通滤波(PassThrough)和条件滤波(ConditionalRemoval)

0、滤波算法概述 PCL点云库中的滤波算法是处理点云数据不可或缺的一部分,它们能够有效地去除噪声、提取特征或进行数据降维。例如,使用体素网格滤波(VoxelGrid)可以减少点云数据量,同时保留重要的形状特征。此外&#…...

ioctl回顾

一、ioctl协议的命令组成 cmd本质为一个32位的数字,共分为四段: [31-30]:读写方向dir,分为无数据(_IO)、读数据(_IOR)、写数据(_IOW)、读写数据(_IOWR)四种模式; [29-16]:传递数据的大小size,一般利用其宏_IO、_IOR…...

jquery-validate在前端数据校验中的应用以及remote异步调用实践-以若依为例

目录 前言 一、关于Jquery Validate组件 1、validate是什么 2、内置验证方式及触发方式 3、自定义验证规则 二、基本验证实战以及Remote验证 1、基本验证实现 2、remote校验方式 三、总结 前言 随着技术的不断演进,在我们的日常开发过程中,大家一…...

如何重新设置VSCode的密钥环密码?

故障现象: 忘记了Vscode的这个密码: Enter password to unlock An application wants access to the keyring “Default ke... Password: The unlock password was incorrect Cancel Unlock 解决办法: 1.任意terminal下,输入如下…...

Android--java实现手机亮度控制

文章目录 1、开发需求2、运行环境3、主要文件4、布局文件信息5、手机界面控制代码6、debug 1、开发需求 需求:开发一个Android apk实现手机亮度控制 2、运行环境 Android studio最新版本 3、主要文件 app\src\main\AndroidManifest.xml app\src\main\res\layou…...

原点安全再次入选信通院 2024 大数据“星河”案例

近日,中国信息通信研究院和中国通信标准化协会大数据技术标准推进委员会(CCSA TC601)共同组织开展的 2024 大数据“星河(Galaxy)”案例征集活动结果正式公布。由工银瑞信基金管理有限公司、北京原点数安科技有限公司联…...

torch.nn.init 模块介绍

PyTorch 的 torch.nn.init 模块提供了一组用于初始化张量或模型参数的函数。这些初始化方法对深度学习模型的训练收敛速度和性能有显著影响,正确选择初始化方法可以避免梯度消失或爆炸等问题。 模块功能 torch.nn.init 提供了一系列函数,用于对张量(如权重或偏置)进行初始…...

人工智能与物联网:从智慧家居到智能城市的未来蓝图

引言:未来已来,智能化的世界 想象一下,一个早晨,智能闹钟根据你的睡眠状态自动调整叫醒时间,咖啡机早已备好热腾腾的咖啡,窗帘缓缓拉开,迎接清晨的阳光。这不是科幻小说中的场景,而是…...

python魔法函数

Python 中的魔法方法(Magic Methods),也称为特殊方法(Special Methods)或双下方法(Dunder Methods),是以双下划线 __ 开头和结尾的方法。它们用于定义类的行为,例如运算符…...

《Spring Cloud Gateway 快速入门:从路由到自定义 Filter 的完整教程》​

1.网关介绍 在前面的学习中,我们通过Eureka和Nacos解决了辅助注册,使用Spring Cloud LoadBalance解决了负载均衡的问题,使用OpenFeign解决了远程调用的问题。 但是当前的所有微服务的接口都是直接对外暴露的,外部是可以直接访问…...

【排序算法】快速排序详解--附详细流程代码

快速排序算法 介绍 快速排序(Quick Sort)是一种高效的分治排序算法,由英国计算机科学家 Tony Hoare 于 1960 年提出。它是实际应用中最常用的排序算法之一。快速排序的基本思想是:选择一个"基准"(pivot&am…...

Ubuntu 22.04 系统下 Docker 安装与配置全指南

Ubuntu 22.04 系统下 Docker 安装与配置全指南 一、前言 Docker 作为现代开发中不可或缺的容器化工具,能极大提升应用部署和环境管理的效率。本文将详细介绍在 Ubuntu 22.04 系统上安装与配置 Docker 的完整流程,包括环境准备、安装步骤、权限配置及镜…...

Vue 核心技术与实战day07

1. vuex概述 2. 构建 vuex [多组件数据共享] 环境 <template><div id"app"><h1>根组件- {{ title }}- {{ count }}</h1><input :value"count" input"handleInput" type"text"><Son1></Son1>…...

Python打卡训练营-Day13-不平衡数据的处理

浙大疏锦行 知识点&#xff1a; 不平衡数据集的处理策略&#xff1a;过采样、修改权重、修改阈值交叉验证代码 过采样 过采样一般包含2种做法&#xff1a;随机采样和SMOTE 过采样是把少的类别补充和多的类别一样多&#xff0c;欠采样是把多的类别减少和少的类别一样 一般都是缺…...

【专题】神经网络期末复习资料(题库)

神经网络期末复习资料&#xff08;题库&#xff09; 链接&#xff1a;https://blog.csdn.net/Pqf18064375973/article/details/148332887?sharetypeblogdetail&sharerId148332887&sharereferPC&sharesourcePqf18064375973&sharefrommp_from_link 【测试】 Th…...

2.qml使用c++

目录 1.概述2.注册方式3. 分类①枚举类②工具类③数据类④资源类②视图类 1.概述 qml是用来干嘛的&#xff1f; 当然是提高UI开发效率的 为什么要混合C&#xff1f; 因为qml无法处理密集型数据逻辑 而加入c则兼顾了性能 达到11>2 总结就是 qml 开发UI, C 实现逻辑 而js的用…...

【Unity笔记】Unity WASD+QE 控制角色移动与转向(含 Shift 加速)实现教程

摘要&#xff1a; 在 Unity 游戏开发中&#xff0c;键盘控制角色的移动与转向是基础功能之一。本文详细讲解如何使用 C# 实现基于 WASD 移动、QE 转向 与 Shift 加速奔跑 的角色控制器&#xff0c;适用于第一人称、第三人称、自由漫游等场景。通过直观的 Transform 控制方法与可…...

LeetCode Hot100(矩阵)

73. 矩阵置零 这边提供nm的做法以及更少的思路&#xff0c;对于nm的做法&#xff0c;我们只需要开辟标记当前行是否存在0以及当前列是否存在0即可&#xff0c;做法如下 class Solution {public void setZeroes(int[][] matrix) {int arr[]new int[matrix.length];int brr[]ne…...