ic进阶|性能篇02:一文带你了解一种特殊的并行技术-展开!

在这里插入图片描述
本期文章让我们聊聊一种数字ic设计技术——展开,展开用于产生一个一次迭代就相当于原有结构的多次迭代的新电路结构。其相当于之前聊过的折叠技术的反向操作,折叠使用一个功能单元通过多次迭代来完成原有电路结构一次迭代的操作,相对于通过时间换取面积,而展开则是使用多个功能单元,一次迭代就相当于原有电路结构的多次迭代,相当于通过面积换取时间。

下面让我们开始了解展开这一技术~

一、展开算法

1.1 J倍降速

首先普及一个基础概念,我们将一个能够在一次迭代内,完成原有程序J次迭代的展开过程,其中的J称为展开因子。

当我们对一个程序进行展开时,原有程序路径中的延迟会按照展开因子进行J倍降速(J-slow), 这里的J倍降速指的是:我们原程序进行了J倍的展开,因此在展开后的程序中一个周期的迭代,就相当于原程序的J个周期的迭代,因此如果展开后的路径中有1个延迟单元,假设第k次迭代的输入信号为x(kj+m),其中的m是展开后的节点的编号。那么此时这个延迟单元的输出信号应该是上一次k-1次迭代的结果,即x(j(k-1)+m)=x(kj+m-1*j),也就是说对于展开后的结构来说,它的一个延迟单位的效果相当于原程序J个延迟单元的效果,这就是所谓的J倍降速。

利用J倍降速可以得到展开后的电路结构,举个例子说明一下,假设有以下电路:
在这里插入图片描述
该电路可以使用以下方程进行描述:
在这里插入图片描述
我们对其进行2阶展开,用2k来代替n,因此可以得到以下方程:

在这里插入图片描述
上面两个式子分别是展开后m=0,1的路径方程,结合J倍降速的概念,我们可以发现m=1这条路径上有2个延迟单元,m=0这条路径上有1个延迟单元,于是展开后的电路结构为:
在这里插入图片描述
以上就是利用J倍降速的方式得到展开后的电路结构的流程介绍,不过这种方法还是比较麻烦的,特别是面对较大的J,下面我们再介绍一种更为简单的展开方法。

1.2 图形化的展开方法

我们可以依照下面的步骤利用图形化的方式快速的构建一个展开结构:

对原始结构的每一个节点U,画出J个节点U0,U1,U2,U3…Uj-1。

对原始结构中的每一条带有延迟w的边U->V,画J条带有延迟floor((i+w)/J)的边,这些边从节点Ui指向V(i+w)%J,其中i=0,1,2…J-1。

对于没有延迟的边,可以简化为从节点Ui指向Vi。

接下来,我们通过一个例子来展示上述方法的使用效果:

首先,我们给出上一节中的电路结构的数据流图,如下所示,其中的节点A代表输入,节点B代表加法,节点C代表乘法,节点D代表输出:
在这里插入图片描述
我们采用2倍展开,J=2,因此上述数据流图中的每个节点复制两份,我们主要关注有延迟的边,即节点B到节点C的这条边,使用步骤2,得出它对应的展开:

B0->C1,  延迟为1B1->C0,  延迟为2

于是展开后的数据流图为:
在这里插入图片描述
可见,这种图形化的展开方法得到的电路结构和上一节中的使用J倍降速得到的电路结构是一致的,我们使用时选取其中一种即可。

二、展开的属性

接下来,让我们了解一下展开的属性,这对我们理解展开技术具有很大的帮助:

对一个电路结构使用展开,不会改变其中的延迟单元(寄存器)数量。

上面的示例就显示了这点,展开前后,电路中的延迟单元数量始终是3个。

对原始电路结构中延迟为w0的环路l进行J阶展开,展开后的电路结构会有gcd(w0,J)(该式表示w0和J的最大公约数)个环路,这些环路中的每个环路都包含了w0/gcd(w0,J)个延迟,以及环路l中出现的每个节点的J/gcd(w0,J)个拷贝。

以展开因子J展开一个迭代边界为T的原始电路结构,会得到一个迭代边界为J*T的J阶展开结构。

因为J阶展开的结构代表了原始结构的J次迭代,那么展开后的系统迭代边界也会扩大J倍,但是由于新的系统可以并行的处理J个样本点,所以采样边界仍然为T,也就是说展开不改变系统的极限吞吐率。

对于原始结构中延迟为w的路径,当w<J时,展开后会得到(J-w)个无延迟的路径,和w个延迟为1的路径。

这个很好理解,从图形化的展开算法中的计算延迟的方法——floor((i+w)/J),即可看出当i<J-w时延迟为0,当J-w<=i<J-1时延迟为1.

由于当w<J时,展开后会得到(J-w)个无延迟的路径,因为没有延迟单元打拍,这些路径的时序可能较差,甚至成为关键路径,因此需要限制J<=w。

任何通过重定时J阶展开的结构的GJ所能得到的可行时钟周期,都可以通过之间对于原始结构的G重定时和以J为展开因子的展开来得到。

这一点是说明展开和重定时之间的顺序不重要,如果可以通过先展开再重定时得到一个电路结构,那么必然也可以通过先重定时再展开得到同样的一个电路结构。

三、展开的应用

通过对展开的属性的理解,不难得到如下的展开应用。

3.1 采样周期的缩短

首先,让我们来讨论展开对系统采样频率提高,缩短采样周期的应用。迭代周期是一个DSP程序的迭代周期的下限,我们无法将DSP程序的迭代周期小于迭代边界。但是我们可以通过展开的应用,将系统的采样周期缩短至迭代边界。

有以下几种情况会使得原始DSP程序的采样周期达不到迭代边界:

  1. 在数据流图中,某个节点的计算时间大于迭代边界时(这里假设该节点不能拆分为两个计算时间更少的子节点)。

  2. 迭代周期不为整数的情况。

  3. 以上两种情况合一,即某些节点的计算时间大于迭代边界,且迭代周期不为整数。

针对以上几种情况,我们可以使用不同展开因子的展开, 通过展开提升采样周期到迭代边界。

首先是针对第一种情况,由于节点的计算时间大于迭代边界,会使得原始结构的采样周期无法等于迭代边界,因此我们可以利用上一节中的展开属性3,即通过展开提升迭代边界T为JT,这样就可以解决节点的计算时间大于迭代边界的限制了。

具体方法是,假设某节点U的计算时间tU大于迭代边界T,那么可以使用展开因子为ceil(tU/T)的展开。

举个例子说明一下:例如下图中原始结构的迭代周期为T=3,其中节点S和T的计算时间为4u.t.,对其进行割集重定时后,最小采样周期为4u.t.,可见采样周期大于迭代边界,因此使用展开因子ceil(tU/T)=ceil(4/3)=2的展开,展开后的结构如右图所示,它的关键路径周期为6u.t.,而迭代边界为JT=6,可见通过展开能够使得DSP程序的采样周期达到迭代边界:

在这里插入图片描述
针对第二种情况,首先需要假设节点的计算时间为整数,由于迭代边界为带小数的单位时间,因此在原始的DSP程序中,不能通过重定时之类的方法使得采样时间等于迭代周期,因此还是利用上一节的属性3,对系统进行展开,即:将迭代边界写成t/w的形式,其中t和w互为素数,接着进行展开因子为w的展开即可。以下是一个例子:
在这里插入图片描述
针对第三种情况,最小的展开因子是能使得迭代边界T,乘上展开因子J后,JT成为整数时的J的最小值。

3.2 并行处理

展开变换的一个直接应用就是从串行处理架构中设计出并行处理架构。在这里我们介绍两种情况——字级和位级并行处理架构。

3.2.1 字级并行处理

首先是字级并行处理架构,我们可以使用展开变换从字串行处理架构设计出字并行处理架构。所谓的字级指的是dsp程序以一个完整的数据(字)为处理单位,每个周期N个数据。

接下来,我们以下面的2阶fir滤波器作为展示:

在这里插入图片描述
上述的fir滤波器每个周期处理一个输入数据x(n),并输出一个输出数据y(n),这就是一个字串行架构。接下来我们以展开因子J=3,产生一个能每个周期并行处理3个数据的字并行架构,按照前面的展开算法所述,我们只需要注意有延迟的边的情况,即:

A0->D1, 延迟为0

A1->D2, 延迟为0

A2->D0, 延迟为1

D0->E1, 延迟为0

D1->E2, 延迟为0

D2->E0, 延迟为1

除了上述的边外,其他的边直接相连,可以得到以下的3阶fir并行结构,该结构能每个周期处理3个输入数据,从而大大提升了采样周期:
在这里插入图片描述

3.2.2 位级并行处理

位级处理结构就是以位为标准处理单位,每个周期处理N个位。利用展开算法,我们可以从位级串行结构中,得到位并行和数字串行架构,这些架构的定义如下所述,首先假设W为数据的字长。

  • 位串行处理:一个时钟周期处理一位数据,一个完整的字在W个周期内处理完成。

  • 位并行处理:一个W位的字在一个时钟周期内处理完成。

  • 数字串行处理:一个时钟周期处理N位,一个字在W/N个时钟周期倍处理完成。参数N称为数字尺寸。

  • 在这里插入图片描述
    于串行数据来说,由于不能在一个周期内处理完,我们需要考虑数据的进位处理,即我们需要使用开关(选择器)来对输入数据进行选择,例如:对于加法器来说,可以在bit0时无需进位,在其他位时需要进位,所以对于位级串行结构的展开来说,重点是开关(选择器)的展开,这一过程如下所示:

首先,我们做出如下两个假设:

  • 字长W是展开因子J的倍数,即W=W’J。

  • 所有进出开关的边都不含延迟。

其实如果包含了延迟单元也没关系,我们可以假设在这条边的延迟单元和选择器之间有个虚节点,在完成展开后,再消除这些虚节点即可。

接下来,我们按照以下两步对节点进行展开:

  1. 将开关的闭合写为:

在这里插入图片描述
这里的l为迭代次数,u=0,1,2,3…W-1,也就是一次迭代的子周期数。

  1. 在展开后的图中,结合上式,从节点Uu%J到节点Vu%J画一条不带延迟的边,它在W’l + floor(u/J)时刻闭合。

此外,我们还需要注意一点,展开包含开关的电路将不再保留延迟。

下面通过一个例子说明上述算法,假设有字长W=4的串行加法器:
在这里插入图片描述
首先,我们可以观察到,该串行加法器会在迭代的子周期u=0选择进位为0,其他时候选择进位为延迟单元的输出,我们以展开因子为2进行展开,所以有W’=2,设加法器的输入节点为A和B,输出为S,加法器为节点X,并且在延迟单元和开关之间设置一个虚节点D,0处的输入节点设为Z,a,首先还是按照展开算法,画出加法器节点X到虚节点D之间的关系:

X0->D1, 延迟为0

                               X1->D0,  延迟为1                                   

然后,画出开关的关系式:

4l+0=2(2l+floor(0/2))+(0%2)=2(2l+0)+0

4l+1=2(2l+floor(1/2))+(1%2)=2(2l+0)+1

4l+2=2(2l+floor(2/2))+(2%2) =2(2l+1)+0

4l+3=2(2l+floor(3/2))+(3%2)=2(2l+1)+1

于是可知:

Z0->X0, 在2l+0时刻闭合

D1->X1, 在2l+0时刻闭合

D0->X0, 在2l+1时刻闭合

D1->X1, 在2l+1时刻闭合

由于迭代周期为2,因此可知D1到X1之间始终闭合,因此可以去除选择器,于是有以下的并行展开结构:

在这里插入图片描述
最后,我们去掉虚节点和死节点,可以得到如下的加法器电路:

在这里插入图片描述
以上就是位级串行处理结构展开为数字尺寸为2的数字串行处理结构的例子。接下来让我们再举一个位级串行处理结构展开为位级并行结构的例子,还是上述的加法器,区别在于本次将展开因子设置为4,于是有以下的展开结构:

在这里插入图片描述
观察一下可以发现D0是虚节点也是死节点,因此延迟会被一起去掉,所以最终的电路没有延迟了,即:
在这里插入图片描述
四、总结

以上就是对展开技术的介绍了,利用展开,我们可以对存在环路的电路进行并行化,这对提升电路效率,缩短采样周期有很大的帮助。

以下是往期的内容链接,欢迎阅读哟~

ic进阶|性能篇01:ic设计中的重定时到底是什么?一文带你了解重定时的原理!(qq.com)

ic进阶|面积篇01:改善面积的神器–折叠技术!以fir滤波器为例带你了解折叠技术!(qq.com)

ic基础|时钟篇05:芯片中buffer到底是干嘛的?一文带你了解buffer的作用 (qq.com)

ic基础|存储器篇02:cache的写机制-Write-through与Write-back是什么 (qq.com)

ic基础|存储器篇01-芯片中的信息存储单元有哪些?一文带你了解芯片中的存储器!(qq.com)

如果你喜欢这篇文章的话,请关注我的公众号-熊熊的ic车间,里面还有ic设计和ic验证的学习资料和书籍等着你呢~欢迎您的关注!

在这里插入图片描述

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

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

相关文章

中电金信:云原生时代IT基础设施管理利器——基础设施即代码(IaC)

在数字化转型、零售业务快速发展、信创建设驱动下&#xff0c;应用架构、技术架构、基础架构都已向云原生快速演进&#xff0c;银行业IT基础设施管理产生了非常大的变化&#xff0c;当前银行业&#xff0c;正在开展新一轮的核心应用系统重构、基础平台统一建设等重点任务&#…

Playwright 的使用

Playwright 的特点 支持当前所有主流浏览器&#xff0c;包括 Chrome 和 Edge &#xff08;基于 Chromiuns&#xff09;, Firefox , Safari 支持移动端页面测试&#xff0c;使用设备模拟技术&#xff0c;可以让我们在移动Web 浏览器中测试响应式的 Web 应用程序 支持所有浏览…

x264编解码库 -介绍和使用示例

目录 1&#xff1a;X264简单介绍 1.1&#xff1a;编译x264 1.2&#xff1a;x264简单介绍 1.3&#xff1a;x264的优势 1.4&#xff1a;x264与FFmpeg的关系 1.5&#xff1a;x264 编解码原理 1.6 进一步学习资源 2&#xff1a;demo效果 3&#xff1a;完整代码 4&#xff1a;附件…

6 网络

6 网络 1、概念2 IP地址3、套接字4、TCP协议4.1 TCP协议的基本特征4.2 建立连接4.4 终止连接4.5 编程模型 5、UDP协议5.1 UDP协议的基本特性5.2 常用函数5.3 UDP通信模型 6、域名解析 1、概念 计算机网络是实现资源共享和信息传递的计算机系统 ISO/OSI网络协议模型 TCP/IP协…

C语言进阶 10. 字符串

C语言进阶 10. 字符串 文章目录 C语言进阶 10. 字符串10.1. 字符串10.2. 字符串变量10.3. 字符串输入输出10.4. 字符串数组10.5. 单字符输入输出10.6. 字符串函数strlen()10.7. 字符串函数strc()10.8. 字符串函数strcpy()10.9. 字符串搜索函数10.10. PAT10-0. 说反话 (20)10-1.…

idea中导入外部依赖并打包到jar包中

前言&#xff1a; 很多时候在我们写项目对接三方的时候都需要导入三方jar包&#xff0c;而这时候我们用平常的pom里面写依赖发现导入不了&#xff08;直接把jar包放在本地导入的话打包的话也不会将该依赖打包进我们项目的jar包&#xff09;&#xff0c;我在网上找了几种方法 …

Linux网络-ss命令

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注我&#xff0c;我尽量把自己会的都分享给大家&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux服务器作为一个常用的网络服务器&#xff0c;主要的作用就是向客户端提供网络…

【C++】C++11中R字符串的作用

在 C11 中添加了定义原始字符串的字面量 1.定义和基本使用 定义方式为&#xff1a; R"xxx(原始字符串)xxx"其中 () 两边的字符串可以省略&#xff0c;R只会处理括号中的字符串。 原始字面量 R 可以直接表示字符串的实际含义&#xff0c;而不需要额外对字符串做转义…

谷歌团队新技术Alchemist:使用扩散模型对材料属性进行参数控制

Alchemist是由谷歌团队和麻省理工学院联合研发的一项创新技术&#xff0c;它利用扩散模型对材料属性进行精细的参数控制。这项技术的核心在于能够对真实图像中的物体材料属性进行调整&#xff0c;包括粗糙度、金属感、反照率和透明度等。Alchemist的实现依赖于先进的文本到图像…

【时时三省】(C语言基础)循环语句while(2)

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ——csdn时时三省 getchar和scanf的作用 示例: int main ( ) &#xff5b; char password[20] ( 0 ) ; printf ( "请输入密码&#xff1a;> " )&#xff1b; scanf ( " &#xff05;s…

Sping项目只能勾选17和21 (已解决) 导致的后续Invalid bound statement (not found):

问题发现 今天创建项目的时候发现 idea初始化spring的时候选择不了Java8 解决方案:替换URL为 https://start.aliyun.com/ 将IDEA页面创建Spring项目&#xff0c;其实是访问spring initializr去创建项目。故我们可以通过阿里云国服去间接创建Spring项目。 将https://start.spr…

使用 VMware vCenter Server(vSphere Client)迁移 ESXi 虚拟机

我需要将虚拟机 k8s-dev-node4从 ESXi 主机 192.168.1.161 迁移到 ESXi 主机 192.168.1.162 上&#xff0c;使用 VMware vCenter Server&#xff08;vSphere Client&#xff09;在浏览器上可视化操作&#xff0c;将这个需求变的非常简单。 1、选中需要迁移的虚拟机&#xff0c…

【AI落地应用实战】Amazon Bedrock +Amazon Step Functions实现链式提示(Prompt Chaining)

一、链式提示 Prompt Chaining架构 Prompt Chaining 是一种在生成式人工智能&#xff08;如大型语言模型&#xff09;中广泛使用的技术&#xff0c;它允许用户通过一系列精心设计的提示&#xff08;Prompts&#xff09;来引导模型生成更加精确、丰富且符合特定需求的内容。 P…

获取手机当前信号强度(dbm/asu值)解决 getGsmSignalStrength()总是返回99问题

能看到这篇文章说明网上哪些获取 &#xff08;dbm/asu值&#xff09;不适合你&#xff0c;不是他们的代码不正确&#xff0c;而是不符合你的情况 比如安卓6获取android手机信号强度 可以看这篇文章 https://blog.csdn.net/sinat_31057219/article/details/81134030 当然如果你…

Javaweb项目|springboot医院管理系统

收藏点赞不迷路 关注作者有好处 文末获取源码 一、系统展示 二、万字文档展示 基于springboot医院管理系统 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringSpringMVCMyBatisVue 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 编号&#xff1a;…

Source insight 配置代码格式化

代码格式化工具&#xff1a;Artistic Style Files Download 配置 Source Insight 添加 Astyle 命令 Tools --> Custom Commands -->Add 在 Run 栏填入格式化命令&#xff1a; "D:\Program Files\astyle-3.5.2-x64\astyle.exe" -A3 -t -xV -w -Y -m0 -p -H …

【Vulnhub系列】Vulnhub_Raven2靶场渗透(原创)

【Vulnhub系列靶场】Vulnhub_Raven2 渗透 原文转载已经过授权 原文链接&#xff1a;Lusen的小窝 - 学无止尽&#xff0c;不进则退 (lusensec.github.io) 一、环境准备 从网盘下载该靶机&#xff0c;在vm中选择【打开】 然后设置好存储路径&#xff0c;开机后检查靶机的网络连…

Redis缓存数据库进阶——Redis缓存数据同步问题(8)

Redis缓存使用问题 数据一致性 只要使用到缓存&#xff0c;无论是本地内存做缓存还是使用 redis 做缓存&#xff0c;那么就会存在数据同步的问题。 我以 Tomcat 向 MySQL 中写入和删改数据为例&#xff0c;来给你解释一下&#xff0c;数据的增删改操作具体是如何进行的。 我…

从入门到精通:电商设计师的职业发展指南

在当今数字时代&#xff0c;电商设计师的作用越来越重要。从电子商务网站的整体造型设计到产品页面的具体布局&#xff0c;他们的工作范围是电子商务企业成功的关键因素之一。然而&#xff0c;并不是每个人都对这个职业有深刻的理解。因此&#xff0c;在本文中&#xff0c;我们…

【Git-驯化】一文学会git中对代码进行存储操作:git stash技巧

【Git-驯化】一文学会git中对代码进行存储操作&#xff1a;git stash技巧 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免费获取相关内…