面向向量处理器的浮点复数块FIR的向量化实现方法转让专利

申请号 : CN201110213358.9

文献号 : CN102231624B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘仲陈书明郭阳陈跃跃陈海燕龚国辉万江华孙海燕阳柳陈胜刚

申请人 : 中国人民解放军国防科学技术大学

摘要 :

本发明公开了一种面向向量处理器的浮点复数块FIR的向量化实现方法,包括以下步骤:(1)输入向量数据x,系数数据h;将向量数据x的虚部和实部分别连续存放,将系数数据h的虚部和实部分别连续存放;向量处理器包括p个处理单元;(2)将向量数据x的实部和虚部、系数数据h的实部和虚部并行加载到向量处理器的同一个处理单元的不同局部寄存器中;(3)p个处理单元中的每个处理单元在本单元内执行向量数据x和系数数据h的复数乘法并将乘法的结果进行累加;(4)p个处理单元的计算完成,输出p个结果。本发明具有原理简单、操作方便、能够高效计算并能缩短整个算法的运算时间、能提高处理器计算资源使用效率等优点。

权利要求 :

1.一种面向向量处理器的浮点复数块FIR的向量化实现方法,其特征在于包括以下步骤:

(1)输入向量数据x、系数数据h;将所述向量数据x的虚部和实部分别连续存放,将所述系数数据h的虚部和实部分别连续存放;所述向量处理器包括p个处理单元;

(2)将向量数据x的实部和虚部、系数数据h的实部和虚部并行加载到向量处理器的同一个处理单元的不同局部寄存器中;

(3)所述p个处理单元中的每个处理单元在本单元内执行向量数据x和系数数据h的复数乘法并将乘法的结果进行累加;

(4)p个处理单元的计算完成,输出p个结果;

所述向量数据x的实部存放在地址VAR1开始的连续区域;输入向量数据x的虚部存放在地址VAR2开始的连续区域;系数数据h的实部存放在地址VAR3开始的连续区域,并且每个实部重复存储p个;系数数据h的虚部存放在地址VAR4开始的连续区域,并且每个虚部重复存储p个,所述VAR1、VAR2、VAR3和VAR4分别映射到不同的存储体中;

所述步骤(1)中,假设每一行的数据宽度是p个字,即4*p字节,假定每个PE对应b个存储体,则与PE0的第1个存储体地址对齐的地址为4p*b*s,其中s是整数;选择合适的整数s使得4s*p*b是空闲的存储地址,由此确定VAR1=4s*p*b,使得VAR1是空闲的,且与PE0的第1个存储体地址对齐;设置外循环计数器n,其初值为输入数据x的长度n,外循环计数器用于控制FIR计算是否结束,每次外循环一次,计算出p个结果,令n=n-p;设置内循环计数器k,内循环计数器k用于控制每一批FIR计算所需要的向量乘法次数,每次内循环开始时,设置k的初值为:k=v,v是系数h的长度;每一次循环,令k=k-1;直至k=0时,重新赋初值k=v;设置k的初值为系数h的长度v;输入向量数据x的实部和虚部地址指针、系数数据h的实部和虚部地址指针,四者的地址指针分别为上述得到的VAR1,VAR2,VAR3,VAR4;更新向量数据x的实部和虚部地址指针、系数数据h的实部和虚部地址指针,每次更新地址指针如下:VAR1 = VAR1+p;

VAR2 = VAR2+p;

VAR3 = VAR3+p;

VAR4 = VAR4+p。

说明书 :

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

技术领域

[0001] 本发明涉及FIR滤波器向量化领域,特指一种浮点复数块FIR向量化实现方法。

背景技术

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

发明内容

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

附图说明

[0023] 图1是向量处理器的一般结构示意图;
[0024] 图2是本发明具体实施例的总流程示意图;
[0025] 图3是本发明的向量数据x和系数数据h的初始存放地址示意图;
[0026] 图4是本发明的向量处理器的浮点复数块FIR向量化的伪代码段。

具体实施方式

[0027] 以下将结合说明书附图和具体实施例对本发明作进一步详细说明。
[0028] 如图2所示,本发明的面向向量处理器的浮点复数块FIR的向量化实现方法,包括以下步骤:
[0029] 1、输入向量数据x,长度为n;系数数据h,长度为v;将向量数据x的虚部和实部分别连续存放,将系数数据h的虚部和实部分别连续存放;向量处理器包括p个处理单元,每个处理单元对应多个存储体;
[0030] 如图3所示,向量数据x的实部存放在地址VAR1开始的连续区域;输入向量数据x的虚部存放在地址VAR2开始的连续区域;系数数据h的实部存放在地址VAR3开始的连续区域,并且每个实部重复存储p个,如图3中的连续p个h[0].r;系数数据h的虚部存放在地址VAR4开始的连续区域,并且每个虚部重复存储p个,即图3中的连续p个h[0].i;VAR1、VAR2、VAR3和VAR4分别映射到不同的存储体中。
[0031] VAR1、VAR2、VAR3和VAR4的计算方法为:图3显示每一行的数据宽度是p个字,即4*p字节,假定每个PE对应b个存储体(图1中的bank数量),则与PE0的第1个存储体地址对齐的地址为4p*b*s,其中s是整数。选择合适的整数s使得4s*p*b是空闲的存储地址。由此确定VAR1=4s*p*b,使得VAR1是空闲的,且与PE0的第1个存储体地址对齐。
[0032] VAR1作为输入向量数据x的实部存放在地址;
[0033] VAR2作为输入向量数据x的虚部存放在地址,它与VAR1的间隔至少是输入向量数据x的实部数据长度4*n,为确保VAR1与VAR2对应到PE0的不同存储体,可选择一定的偏移量4*m1,即VAR2=VAR1+4*n+4*m1=VAR1+4*(n+m1);
[0034] VAR3作为系数数据h的实部存放在地址,它与VAR1的间隔至少是输入向量数据x的虚部数据长度4*n,即VAR3=VAR2+4*n;
[0035] VAR4作为系数数据h的虚部存放在地址,它与VAR3的间隔至少是系数数据h的实部数据长度4*v*p,为确保VAR4与VAR3对应到PE0的不同存储体,可选择一定的偏移量4*m2,即VAR4=VAR3+4*v*p+4*m2=VAR3+4*(v*p+m2)。
[0036] 设置外循环计数器n,其初值为输入数据x的长度n,外循环计数器用于控制FIR计算是否结束,每次外循环一次,计算出p个结果,令n=n-p。
[0037] 2、设置内循环计数器k(内循环计数器k用于控制每一批FIR计算所需要的向量乘法次数,每次内循环开始时,设置k的初值为:k=v,v是系数h的长度。每一次循环,令k=k-1;直至k=0时,重新赋初值k=v),设置k的初值为系数h的长度v;输入向量数据x的实部和虚部地址指针、系数数据h的实部和虚部地址指针,四者的地址指针分别为上述得到的VAR1,VAR2,VAR3,VAR4。
[0038] 3、更新向量数据x的实部和虚部地址指针、系数数据h的实部和虚部地址指针,每次更新地址指针如下:
[0039] VAR1=VAR1+p;
[0040] VAR2=VAR2+p;
[0041] VAR3=VAR3+p;
[0042] VAR4=VAR4+p。
[0043] 4、向量处理器将向量数据x的实部和虚部、系数数据h的实部和虚部并行加载到向量处理器的同一个处理单元的不同局部寄存器中;
[0044] 如图4所示,可用下面的伪代码段实现一次数据加载:
[0045] VLDWVAR1,R0
[0046] VLDWVAR2,R1
[0047] VLDWVAR3,R2
[0048] VLDWVAR4,R3
[0049] 加载数据以后,每个PE的R0,R1分别存放xi的实部与虚部,每个PE的R2,R3分别存放hi的实部与虚部。
[0050] 即:for(i=0,i<p,i++){
[0051] PEi.R0=xi.实部
[0052] PEi.R1=xi.虚部
[0053] PEi.R2=hi.实部
[0054] PEi.R3=hi.虚部
[0055] }
[0056] 5、p个处理单元中的每个处理单元在本单元内执行向量数据x和系数数据h的复数乘法并将乘法的结果进行累加;
[0057] 如图4所示,下面的伪代码片段可实现复数乘法与结果累加:
[0058] VFMULS R0,R2,R4
[0059] VFMULS R1,R3,R5
[0060] VFMULS R0,R3,R6
[0061] VFMULS R1,R2,R7
[0062] VFSUBS R5,R4,R5
[0063] VFADDS R6,R7,R6
[0064] VFADDS R8,R5,R8
[0065] VFADDS R9,R6,R9
[0066] 则每个处理单元在R8,R9分别保存输出值的实部与虚部。
[0067] 6、更新内循环计数器,即令k=k-1,返回步骤4;当内循环计数器k等于0时,向量处理器的每个处理单元并行输出p个计算结果。由于每次内循环结束,可同时计算出p个结果,所以输出p个计算结果时,更新外循环计算器n,即令n=n-p,若n不等于0,则返回步骤2;当外循环计算器n=0时,结束计算。
[0068] 如图3所示,下面的伪代码片段示例向量处理器并行输出p个计算结果:
[0069] VSTW R8,VAR5
[0070] VSTW R9,VAR6
[0071] 其中p个输出值实部保存在VAR5起始的连续区域,p个输出值虚部保存在VAR6起始的连续区域。
[0072] 综上,本发明的方法,可以充分发挥向量处理器的全部PE的并行计算能力,有效避免存储体访问冲突,不受限于向量处理器是否支持加法规约,不受限于系数是否是PE数量的整数倍,提高了浮点复数块FIR等算法在向量处理器中的执行效率。
[0073] 以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。