面向向量处理器的浮点复数块fir的向量化实现方法

文档序号:7522022阅读:193来源:国知局
专利名称:面向向量处理器的浮点复数块fir的向量化实现方法
技术领域
本发明涉及FIR滤波器向量化领域,特指一种浮点复数块FIR向量化实现方法。
背景技术
随着4G无线通信、雷达信号处理、高清视频和数字图像处理等计算密集型应用的计算需求越来越高,单芯片难以满足应用需求,多核处理器尤其是其中的向量处理器得到了广泛的应用。如图1所示,是向量处理器的一般结构示意图,向量处理器一般由P个处理单元(PE)组成,通常支持基于向量的数据加载和存储。每个PE包含独立的多个功能部件,一般包括移位部件(BP)、算术部件(ALU)、乘法部件(MUL)等,每个PE包行一组局部寄存器,所有PE的同一编号的局部寄存器在逻辑上又组成一个向量寄存器。例如图1所示 PEO-PV1的RO寄存器在逻辑上组成了向量寄存器VR0,每个PE所对应的RO称为向量寄存器的一个元素。向量处理器采用SIMD的方式,在同一条向量指令的控制下,ρ个PE同时对各自的局部寄存器进行相同操作,用以开发应用程序的数据级并行性。每个PE对应多个存储体(bankO,bankl, bank2, bank3),数据映射到不同的存储体能够避免存储冲突。向量处理器包含大量功能单元,适合处理包含大量高密集运算的任务,如矩阵分解、FFT运算、HR(Finite Impulse Response)滤波运算等。然而,很多高密集运算的任务由于算法本身的特性,向量化处理困难,如何将这些算法高效的映射到向量处理器,即这些算法的向量化方法,是提高向量处理器使用效率的关键。例如,浮点复数块FIR的向量化, 浮点复数的实部与虚部都是32位,如果按照通常的实部与虚部相间隔的方法放置数据,那么,一个复数的实部与虚部被分别加载到不同PE的局部寄存器,后续的复数乘法和累加非常困难,系数长度与PE数量的不匹配导致不能充分利用向量处理器所有可并行的运算资源。HR滤波器是输入信号流χ [η]与冲击响应h[n]的离散卷积,一个系数长度为ν的 FIR滤波器计算公式如下
ν-1yn=Yjhxn_k(1)
k 二 Q其中hk(0彡k彡V-1)是滤波器系数,xn_k是输入信号。每一输出7 的计算需要V 次乘法和V-I次加法。HR滤波器的计算包括两层循环,通常的向量化方法是向量化内循环,即计算每个输出值所需要的内循环计算向量化,分配到各个PE并行执行,将方程(1)展开得到方程(2) 所示yn = XA+Xn-^+...+Xn-L1V1(2)其中的xnhQ,Xn^h1,…,Xn^1Iv1分别在每个PE并行执行,执行完以后,对所有PE 执行规约求和操作,得到一个输出值yn。这种方法的优点是程序简单,只有一层循环,尤其是当系数长度ν是PE数量P的整数倍时,且向量处理器提供规约求和操作,能够取得较高效的计算性能。但是,存在的缺点是非常明显的(1)向量处理器一般只支持定点加法规约,而浮点加法规约的硬件成本高,一般不支持;( 对于浮点复数滤波数据,由于复数的实部与虚部在不同PE的局部寄存器中,实现复数的乘法和累加困难;(3)当系数ν不是PE数量ρ的整数倍时,难以充分发挥全部PE的并行计算能力,编程控制和软件流水困难,限制了许多FIR的应用。

发明内容
本发明所要解决的技术问题是针对现有技术存在的问题,本发明提供一种原理简单、操作方便、能够高效计算并能缩短整个算法的运算时间、提高处理器计算资源使用效率的面向向量处理器的浮点复数块FIR的向量化实现方法。为解决上述技术问题,本发明采用以下技术方案一种面向向量处理器的浮点复数块FIR的向量化实现方法,包括以下步骤(1)输入向量数据X、系数数据h ;将所述向量数据χ的虚部和实部分别连续存放, 将所述系数数据h的虚部和实部分别连续存放;所述向量处理器包括ρ个处理单元;(2)将向量数据χ的实部和虚部、系数数据h的实部和虚部并行加载到向量处理器的同一个处理单元的不同局部寄存器中;(3)所述ρ个处理单元中的每个处理单元在本单元内执行向量数据χ和系数数据 h的复数乘法并将乘法的结果进行累加;个处理单元的计算完成,输出ρ个结果。作为本发明的进一步改进所述向量数据χ的实部存放在地址VARl开始的连续区域;输入向量数据χ的虚部存放在地址VAR2开始的连续区域;系数数据h的实部存放在地址VAR3开始的连续区域,并且每个实部重复存储P个;系数数据h的虚部存放在地址VAR4开始的连续区域,并且每个虚部重复存储P个,所述VAR1、VAR2、VAR3和VAR4分别映射到不同的存储体中。与现有技术相比,本发明的优点在于1、本发明的面向向量处理器的浮点复数块FIR的向量化实现方法,能够适用于各种系数长度的HR计算,不受限于系数长度是否是PE数量的整数倍,不受限于向量处理器是否支持PE间的加法归约,能够充分挖掘向量处理器的指令级和数据级并行性,发挥向量处理器的所有处理单元的并行计算性能,缩短浮点复数块FIR的计算时间,可高效的支持各种系数长度的浮点复数块FIR向量化;2、本发明的面向向量处理器的浮点复数块FIR的向量化实现方法,实现简单、成本低廉、操作十分方便、可靠性好;在实现相同功能的情况下,可降低硬件的功耗。


图1是向量处理器的一般结构示意图;图2是本发明具体实施例的总流程示意图;图3是本发明的向量数据χ和系数数据h的初始存放地址示意图;图4是本发明的向量处理器的浮点复数块FIR向量化的伪代码段。
具体实施方式
以下将结合说明书附图和具体实施例对本发明作进一步详细说明。如图2所示,本发明的面向向量处理器的浮点复数块FIR的向量化实现方法,包括以下步骤1、输入向量数据X,长度为η ;系数数据h,长度为ν ;将向量数据χ的虚部和实部分别连续存放,将系数数据h的虚部和实部分别连续存放;向量处理器包括P个处理单元,每个处理单元对应多个存储体;如图3所示,向量数据χ的实部存放在地址VARl开始的连续区域;输入向量数据 χ的虚部存放在地址VAR2开始的连续区域;系数数据h的实部存放在地址VAR3开始的连续区域,并且每个实部重复存储ρ个,如图3中的连续ρ个h
. r ;系数数据h的虚部存放在地址VAR4开始的连续区域,并且每个虚部重复存储ρ个,即图3中的连续ρ个h W]. i ; VAR1、VAR2、VAR3和VAR4分别映射到不同的存储体中。VAR1、VAR2、VAR3和VAR4的计算方法为图3显示每一行的数据宽度是ρ个字,即 4*ρ字节,假定每个PE对应b个存储体(图1中的bank数量),则与的第1个存储体地址对齐的地址为4p^3*s,其中s是整数。选择合适的整数s使得如邮补是空闲的存储地址。由此确定VARl = 4s*p*b,使得VARl是空闲的,且与的第1个存储体地址对齐。VARl作为输入向量数据χ的实部存放在地址;VAR2作为输入向量数据χ的虚部存放在地址,它与VARl的间隔至少是输入向量数据X的实部数据长度4*n,为确保VARl与VAR2对应到的不同存储体,可选择一定的偏移量 4*! ,即 VAR2 = VARl+4*n+4*m1 = VAR1+4* (n+m》;VAR3作为系数数据h的实部存放在地址,它与VARl的间隔至少是输入向量数据χ 的虚部数据长度4*η,即VAR3 = VAR2+4*n ;VAR4作为系数数据h的虚部存放在地址,它与VAR3的间隔至少是系数数据h的实部数据长度4*v*p,为确保VAR4与VAR3对应到的不同存储体,可选择一定的偏移量 4氺m2,艮口 VAR4 = VAR3+4*v*p+4*m2 = VAR3+4* (v*p+m2)。设置外循环计数器n,其初值为输入数据χ的长度n,外循环计数器用于控制HR 计算是否结束,每次外循环一次,计算出P个结果,令η = Π-Ρ。2、设置内循环计数器k(内循环计数器k用于控制每一批FIR计算所需要的向量乘法次数,每次内循环开始时,设置k的初值为k = v,v是系数h的长度。每一次循环,令 k = k-Ι ;直至k = 0时,重新赋初值k = ν),设置k的初值为系数h的长度ν ;输入向量数据χ的实部和虚部地址指针、系数数据h的实部和虚部地址指针,四者的地址指针分别为上述得到的 VARl,VAR2, VAR3, VAR4。3、更新向量数据χ的实部和虚部地址指针、系数数据h的实部和虚部地址指针,每次更新地址指针如下VARl = VARl+p ;VAR2 = VAR2+p ;VAR3 = VAR3+p ;VAR4 = VAR4+p。4、向量处理器将向量数据χ的实部和虚部、系数数据h的实部和虚部并行加载到向量处理器的同一个处理单元的不同局部寄存器中;
如图4所示,可用下面的伪代码段实现一次数据加载VLDffVARl, ROVLDWVAR2, RlVLDWVAR3, R2VLDWVAR4, R3加载数据以后,每个PE的R0,Rl分别存放Xi的实部与虚部,每个PE的R2,R3分别存放比的实部与虚部。即for(i ==0,i< P,i++) {
PEi,.RO=Xi. 实部
PEi,.Rl=Xi.. 虚部
PEi,.R2=h. 实部
PEi,.R3=h.. 虚部}5、p个处理单元中的每个处理单元在本单元内执行向量数据χ和系数数据h的复数乘法并将乘法的结果进行累加;如图4所示,下面的伪代码片段可实现复数乘法与结果累加VFMULS R0, R2, R4VFMULS Rl,R3,R5VFMULS R0, R3, R6VFMULS Rl,R2,R7VFSUBS R5, R4, R5VFADDS R6, R7, R6VFADDS R8, R5, R8VFADDS R9, R6, R9则每个处理单元在R8,R9分别保存输出值的实部与虚部。6、更新内循环计数器,即令k = k-Ι,返回步骤4 ;当内循环计数器k等于0时,向量处理器的每个处理单元并行输出P个计算结果。由于每次内循环结束,可同时计算出P 个结果,所以输出P个计算结果时,更新外循环计算器n,即令n = n-p,若n不等于0,则返回步骤2 ;当外循环计算器η = 0时,结束计算。如图3所示,下面的伪代码片段示例向量处理器并行输出ρ个计算结果VSTff R8, VAR5VSTff R9, VAR6其中ρ个输出值实部保存在VAR5起始的连续区域,ρ个输出值虚部保存在VAR6起始的连续区域。综上,本发明的方法,可以充分发挥向量处理器的全部PE的并行计算能力,有效避免存储体访问冲突,不受限于向量处理器是否支持加法规约,不受限于系数是否是PE数量的整数倍,提高了浮点复数块FIR等算法在向量处理器中的执行效率。以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。
权利要求
1.一种面向向量处理器的浮点复数块FIR的向量化实现方法,其特征在于包括以下步骤(1)输入向量数据χ、系数数据h;将所述向量数据χ的虚部和实部分别连续存放,将所述系数数据h的虚部和实部分别连续存放;所述向量处理器包括ρ个处理单元;(2)将向量数据χ的实部和虚部、系数数据h的实部和虚部并行加载到向量处理器的同一个处理单元的不同局部寄存器中;(3)所述ρ个处理单元中的每个处理单元在本单元内执行向量数据χ和系数数据h的复数乘法并将乘法的结果进行累加;P个处理单元的计算完成,输出ρ个结果。
2.根据权利要求1所述的面向向量处理器的浮点复数块FIR的向量化实现方法,其特征在于所述向量数据χ的实部存放在地址VARl开始的连续区域;输入向量数据χ的虚部存放在地址VAR2开始的连续区域;系数数据h的实部存放在地址VAR3开始的连续区域,并且每个实部重复存储P个;系数数据h的虚部存放在地址VAR4开始的连续区域,并且每个虚部重复存储P个,所述VAR1、VAR2、VAR3和VAR4分别映射到不同的存储体中。
全文摘要
本发明公开了一种面向向量处理器的浮点复数块FIR的向量化实现方法,包括以下步骤(1)输入向量数据x,系数数据h;将向量数据x的虚部和实部分别连续存放,将系数数据h的虚部和实部分别连续存放;向量处理器包括p个处理单元;(2)将向量数据x的实部和虚部、系数数据h的实部和虚部并行加载到向量处理器的同一个处理单元的不同局部寄存器中;(3)p个处理单元中的每个处理单元在本单元内执行向量数据x和系数数据h的复数乘法并将乘法的结果进行累加;(4)p个处理单元的计算完成,输出p个结果。本发明具有原理简单、操作方便、能够高效计算并能缩短整个算法的运算时间、能提高处理器计算资源使用效率等优点。
文档编号H03H17/02GK102231624SQ201110213358
公开日2011年11月2日 申请日期2011年7月28日 优先权日2011年7月28日
发明者万江华, 刘仲, 孙海燕, 郭阳, 阳柳, 陈书明, 陈海燕, 陈胜刚, 陈跃跃, 龚国辉 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1