一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

处理数据的方法及装置与流程

2022-10-26 13:27:50 来源:中国专利 TAG:


1.本公开涉及无线通信技术领域,具体涉及一种处理数据的方法及装置。


背景技术:

2.傅里叶变换作为数字信号处理的一种重要算法,可被广泛的应用于通信技术领域。例如,在移动通信系统长期演进(umts long term evolution,简称lte)或第五代移动通信新空口(5g new radio,简称5gnr)中均可采用傅里叶变换进行信号的调制和解调。现有技术在对数据进行傅里叶变换时,存在处理效率低、成本高的问题。


技术实现要素:

3.本技术提供一种处理数据的方法及装置。下面对本技术实施例涉及的各个方面进行介绍。
4.第一方面,提供一种处理数据的方法,包括:获取傅里叶变换的输入数据;针对所述输入数据,利用矢量处理器执行多级第一矢量操作,得到第一中间结果数据,其中,所述第一矢量操作包括蝶形操作和重换序操作,所述重换序操作用于将所述蝶形操作的操作结果的顺序转换为正序;将所述第一中间结果数据分成多个包含n个数据元素的蝶形运算组,n为所述矢量处理器的simd指令中矢量处理数据的数量,利用所述矢量处理器对所述多个蝶形运算组执行一级或多级第二矢量操作,得到第二中间结果,其中,所述第二矢量操作为蝶形操作;针对所述第二中间结果,利用所述矢量处理器执行第三矢量操作,得到所述傅里叶变换的结果,其中,所述第三矢量操作为矢量级反向进位操作。
5.第二方面,提供了一种处理数据的装置,包括:获取单元,被配置为获取傅里叶变换的输入数据;第一执行单元,被配置为针对所述输入数据,利用矢量处理器执行多级第一矢量操作,得到第一中间结果数据,其中,所述第一矢量操作包括蝶形操作和重换序操作,所述重换序操作用于将所述蝶形操作的操作结果的顺序转换为正序;第二执行单元,被配置为将所述第一中间结果数据分成多个包含n个数据元素的蝶形运算组,n为所述矢量处理器的simd指令中矢量处理数据的数量,利用所述矢量处理器对所述多个蝶形运算组执行一级或多级第二矢量操作,得到第二中间结果,其中,所述第二矢量操作为蝶形操作;第三执行单元,被配置为针对所述第二中间结果,利用所述矢量处理器执行第三矢量操作,得到所述傅里叶变换的结果,其中,所述第三矢量操作为矢量级反向进位操作。
6.第三方面,提供了一种计算机程序产品,所述计算机程序产品包括:计算机程序代码,当所述计算机程序代码在计算机上运行时,使得计算机执行上述各方面中的方法。
7.第四方面,提供了一种计算机可读介质,所述计算机可读介质存储有程序代码,当所述计算机程序代码在计算机上运行时,使得计算机执行上述各方面中的方法。
8.本技术通过蝶形加重倒序操作使得经蝶形运算后的数据为正序,数据的混合程度为simd的宽度,以运算组为单位进行矢量级的蝶形运算,并在蝶形运算之后,对运算组进行矢量级的反序操作,利用矢量处理器实现数据的正序输入及出,提高了数据处理的效率,节
省了软硬交互的成本及开销。
附图说明
9.图1为本技术实施例提供的一种处理数据的方法的流程示意图。
10.图2为本技术实施例提供的一种可行的64点fft数据处理过程示意图。
11.图3为本技术实施例提供的一种数据重换序示意图。
12.图4为本技术实施例提供的另一种数据重换序示意图。
13.图5为本技术实施例提供的一种可行的72点dft数据处理过程示意图。
14.图6为本技术实施例提供的一种处理数据的装置的结构示意图。
具体实施方式
15.下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本公开一部分实施例,而不是全部的实施例。
16.傅里叶变换是数字信号处理领域中一种很重要的算法,其可以将任何连续测量的时序或者信号表示为不同频率的正弦波信号的无限叠加。利用傅里叶变换可以将难以处理的是与信号转换成易于分析的频域信号,而利用傅里叶反变换可以将频域信号转换成时域信号。需要说明的是,本技术实施例所提及的傅里叶变换可以是指傅里叶变换也可以是指傅里叶反变换。
17.傅里叶变换有多种类型,例如离散傅里叶变换(discrete fourier transform,dft)、离散傅里叶反变换(inverse discrete fourier transform,idft)、快速傅里叶变换(fast fourier transform,fft)和快速傅里叶反变换(inverse fast fourier transform,ifft)等。离散傅里叶变换(discrete fourier transform,dft)/反离散傅里叶变换(inverse discrete fourier transform,idft)广泛应用于各种变换域处理场合,例如在计算机视觉领域(computer vision,cv),通常将时域的数据通过dft变换到频域在进行处理,在通过idft反变换到时域。快速傅里叶变换(fast fourier transforms,fft)是dft的一种快速计算方法,反快速傅里叶变换(inverse fast fourier transforms,ifft)是idft的一种快速计算方法。本技术实施例所提及的傅里叶变换方法可以适用于上述任一种类型的傅里叶变换中。
18.倒位序也可以称为重新排序,是傅里叶变换中的一个必要的步骤,其可将顺序输入傅里叶变换模块的数据流(或称一组数据)按照二进制比特反转的顺序(即倒位序)输出。在进行fft/dft变换时,正序输入的数据在经过多级蝶形运算,期初蝶形最大,处理中蝶形会越来越小,最后形成返序的处理数据;返序输入的数据,则蝶形期初最小,处理中越来越大,最后形成正序的结果。ifft/idft的处理过程可以与fft/dft相同,只是系数有差异。
19.以16点fft数据为例,数据的输入顺序为正序输入,即以0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15的顺序输入,在经过有fft变换之后,数据的输出顺序为倒序,即0、8、4、12、2、10、6、14、1、9、5、13、3、11、7、15的顺序输出。以8点fft返序输入为例,数据以0、4、2、6、1、5、3、7的返序输入,在经过fft变换之后以0、1、2、3、4、5、6、7的正序输出。
20.在进行数据频域处理时,希望正序输入数据并得到正序输出的数据,所以存在变换之后数据返序的过程,包括,输入前将正序数据返序输入,以得到正序输出的数据或变换
之后将返序输出的数据返序为正序。相关技术中,数据的返序都是点级的处理过程,不匹配当前矢量处理器中数据并行技术。换句话说,数据的返序是点级的,处理器例如中央处理器cpu或数字信号处理器(digital signal processor,dsp)在返序时,只能使用标量指令进行单点数据处理,不能使用单指令多数据(single instruction multi-data,simd)指令进行并行返序。所以,相关技术中换序多采用硬件加速器完成。
21.然而,标量指令处理数据的换序处理的时间太长,效率低下。若采用硬件加速器实现数据换序,则额外增加了数据的处理环节,也出现了软硬件交互的成本和时延。
22.本技术实施例提供一种数据处理的方法及装置。图1为本技术实施例提供的一种数据处理的方法的流程示意图。下面结合图1对本方案进行介绍。
23.在步骤s110,获取傅里叶变换的输入数据。
24.傅里叶变换的输入数据可以理解为用于进行傅里叶变换的数据。该输入数据里如可以是用于进行傅里叶变换的fft或dft数据,例如还可以是用于进行傅里叶反变换的ifft或idft数据。
25.输入数据可以包括m个数据元素,因此,输入数据也可以称为m点数据。本技术不限制输入数据中数据元素的数量,示例性的,输入数据中可以有8个或16个或32个或64个或72个数据元素。
26.输入数据通常为复数,包括虚部及实部,在一些情况下,输入数据可以为实数,即为复数的特殊类型。输入数据的整体位宽可以为w-bit。如前文介绍,输入数据可以包括m个数据元素,如果是用于fft变换的数据,则m=2m,m为正整数。如果是用于dft的数据,则m=p1
s1
×
p2
s2

pk
sk
,这里用质因子表述方式,其中,p1、p2

,pk(i=1~k,共k个)都是质数,且互不相同,而s1、s2

,sk(i=1~k,共k个)是对应的幂次,幂次为正整数。可以看出,fft是dft只有质因子2的特殊情况。
27.在步骤s120,针对输入数据,利用矢量处理器执行多级第一矢量操作,得到第一中间结果数据,其中,第一矢量操作包括蝶形操作和重换序操作,重换序操作用于将蝶形操作的操作结果的顺序转换为正序。
28.矢量处理器可以采用simd体系结构,通过矢量运算指令simd、矢量寄存器,矢量处理阵列及矢量加载单元等单元完成矢量的运算。矢量寄存器的中可以包括n个fft/dft的数据元素,通常n=2n,换句话说,矢量处理器一次可以处理n个数据的运算,即矢量处理器的simd指令中矢量处理数据的个数为n,也可以理解为simd的宽带为n。
29.针对输入数据,在进行一级蝶形操作之后再进行一次重换序操作,称为一级第一矢量操作,也就是说,一级第一矢量操作包括一级蝶形操作加一次重换序操作,重换序操作是用于就将一级蝶形操作之后的操作结果的顺序转换为正序。本技术不限制蝶形操作的类型,示例性的,蝶形操作可以为基2蝶形,为了提高数据处理的效果,蝶形操作可以为基4蝶形,也可以是基8蝶形等。
30.以8点fft数据为例,进行一级第一矢量操作为例,对这一步骤进行示例性的介绍。对正序输入的数据0、1、2、3、4、5、6、7,进行一级第一矢量操作,首先对输入数据进行一级蝶形处理,将16点fft数据分解为两个4点子序列,分别为子序列0、1、2、3及子序列4、5、6、7,两个子序列中的数据元素对应做蝶形运算,得到蝶形操作的结果,x0、x2、x4、x6、x1、x3、x5、x7。可见,正序的输入数据在进行一级蝶形操作之后可以被奇偶分离为奇数子序列及偶数
子序列。之后,对蝶形操作的结果的顺序进行重换序操作,重换序是将x0、x2、x4、x6、x1、x3、x5、x7重新换位正序,重换位之后,数据的顺序为x0、x1、x2、x3、x4、x5、x6、x7。
31.在步骤s130,将第一中间结果数据分成多个包含n个数据元素的蝶形运算组,利用矢量处理器对所述多个蝶形运算组执行一级或多级第二矢量操作,得到第二中间结果。
32.单个运算指令(single instruction multi-data,simd)中数据元素的数量可以理解为该单个运算指令可以同时触发运算的数据的数量。应当理解,本技术不限制simd运算指令中数据的数量。示例性的,n可以等于4,即simd_n=4,即一个simd可以同时执行4个复数运算,n还可以等于8,即simd_n=8,一个simd可以同时执行8个复数运算。
33.按照单个运算指令中数据元素的数量将第一中间结果数据分为多个蝶形运算组。示例性的,以8点fft数据为例,simd_n=4时,可以将经过第一矢量操作的正序中间结果分为2个蝶形运算组,其中,0、1、2、3为一个蝶形运算组,4、5、6、7为一个蝶形运算组。又一个示例,以64点fft数据为例,simd_n=4时,可以将经过第一矢量操作后正序的第一中间结果分为64/4=16个蝶形运算组,其中,0-3为一个蝶形运算组,4-7为一个蝶形运算组,同理,60-63为一个蝶形运算组。再以72点fft数据为例,simd_n=8时,可以将经过第一矢量操作后正序的第一中间结果分为72/8=8个蝶形运算组。可见,在蝶形运算组中的数据元素的数量满足simd的宽度,即,一个simd指令可以执行一个蝶形元素组中数据的数量。且,多个蝶形运算组的顺序是正序并且在一个蝶形运算组中,数据是正序并且顺序是连续的。
34.利用矢量处理器使用simd指令对多个蝶形运算组执行一级或多级蝶形操作,换句话说,可以使用simd指令对一个蝶形运算组中的所用数据元素进行蝶形运算。
35.示例性的,以图2所示的64点fft数据,simd_n=4,基2蝶形运算为例,64点数据可以被分成16个蝶形运算组,在16个蝶形运算组的顺序是正序且连续的。在stage3对多个蝶形运算组进行蝶形运算时,16个运算组的输入顺序可以是x0-x3运算组、x4-x7运算组、x8-x11运算组、x12-x15运算组
……
x60-x63运算组。经过一级蝶形运算之后,运算结果数据可以被奇偶分离为奇数部分及偶数部分。偶数部分包括8个运算组的蝶形运算的结果,8个运算组分别为x4-x7运算组、x12-x15运算组、x20-x23运算组、x28-x31运算组、x36-x39运算组、x44-x47运算组、x52-x55运算组、x60-x63运算组,奇数部分包括8个运算组的蝶形运算的结果,分别为:x0-x3运算组、x8-x11运算组、x16-x19运算组、x24-x27运算组、x32-x35运算组、x40-x43运算组、x48-x51运算组、x56-x59运算组。在stage4对上述一级蝶形运算的结果数据再进行一次蝶形运算,运算结果数据进一步被奇偶分离为4个数据块,每个数据块分别为包含4个蝶形运算组。具体的,上一级的偶数部分经运算之后,分离为奇数数据块,包括:x0-x3运算组、x16-x19运算组、x32-x35运算组、x48-x51运算组、以及偶数数据块,包括:x8-x11运算组、x24-x27运算组、x40-x43运算组、x56-x59运算组。上一级的奇数部分经运算之后,可以被分离为奇数数据块,包括:x4-x7运算组、x20-x23运算组、x36-x39运算组、x52-x55运算组、以及偶数数据块,包括:x12-x15运算组、x28-x31运算组、x44-x47运算组、x60-x63运算组。在stage5,对上一级蝶形运算的结果数据再进行一次蝶形运算,运算结果进一步被奇偶分离为8个数据块,每个数据块包括2个蝶形运算组。具体的,x0-x3运算组及x32-x35运算组为奇数数据块,x16-x19运算组及x48-x51运算组为偶数数据块,x8-x11运算组、x40-x43运算组为奇数数据块,x24-x27运算组及x56-x59运算组为偶数数据块,x4-x7运算组及x36-x39运算组为奇数数据块,x20-x23运算组及x52-x55运算组偶数数据块,x12-x15
运算组及x44-x47运算组为奇数数据块,x28-x31运算组及x60-x63运算组为偶数数据块。在stage6,对上一级蝶形运算的结果再进行一次蝶形运算,运算结果进一步被奇偶分离为16个数据块。例如,x0-x3运算组及x32-x35运算组为奇数数据块被分离为x0-x3运算组及x32-x35运算组,x28-x31运算组及x60-x63运算组被分离为x28-x31运算组及x60-x63运算组。可见,经过多级第二矢量作之后可以得到反序的傅里叶变换的结果。
36.在步骤s140,针对第二中间结果,利用矢量处理器执行第三矢量操作,得到傅里叶变换的结果,其中,所述第三矢量操作为矢量级反向进位操作。
37.上一步,得到了反序的傅里叶变换的结果数据,其中,结果数据包含多个数据运算组,数据运算组的数据元素的数量与simd的宽度一致。为了实现数据的正序输入及正序输出,可以执行矢量级反向进位操作,将数据反序,得到傅里叶变换结果的正序数据。也就是说,第三矢量操作可以时矢量级反向进位操作,以将反序的傅里叶变换的结果数据反序为正序。
38.矢量级反序进位操作,可以理解为对运算组里面的一组数据的顺序进行反序进位操作。继续以图2为例,进行示例性的介绍。经过stage1及stage2两级第一矢量操作之后,数据的顺序为正序,在stage3以运算组为单位进行蝶形运算,运算组内的数据是正序且连续的,经stage3蝶形运算之后,数据经奇偶分离,奇数数据组的顺序可以为0_00,偶数数据组的顺序可以是1_00。经stage4蝶形运算之后,数据经奇偶分离,数据组的顺序为00_00、10_00、01_00、11_00。经stage5蝶形运算之后,数据经奇偶分离,数据组的顺序为000_00、100_00、010_00、110_00、001_00、101_00、011_00及111_00。经stage6蝶形运算之后,数据经奇偶分离为16个数据组,数据组的顺序为0000_00、1000_00、0100_00、1100_00、0010_00、1010_00、0110_00、1110_00、0001_00、1001_00、0101_00、1101_00、0011_00、1011_00、0111_00及1111_00。对这16个数据组执行矢量及反向进位操作,示例性的,0000_00反向进位为0000_00、1000_00反向进位为0001_00、0100_00反向进位为0010_00,依次类推,1111_00反向进位为111_00。经过矢量及反向进位操作之后,运算组的数据顺序是正序,因为运算组内的数据是正序且连续的,因此,可以得到正序且连续的输出数据。
39.在一些实施例中,可以使用特殊的矢量级反序进位保存指令sv.rev为每个矢量找到对应的正序输出位置上。例如,可以根据矢量级运算组中数据元素的数量,预先计算出各个数量的保存位置,从而在sv.rev指令中写死数据的偏移地址,以实现按需调用。
40.可见,本技术实施例提供的处理数据的方法,先通过蝶形加重倒序操作使得经蝶形运算的数据为正序,数据的混合程度为simd的宽度,之后以运算组为单位进行矢量级的蝶形运算,并在蝶形运算之后,对运算组进行矢量级的反序操作,利用矢量处理器实现数据的正序输入及出,提高了数据处理的效率,节省了软硬交换的成本及开销。
41.如前文介绍,数据需要经过一级矢量操作及二级矢量操作,不同级矢量操作的级数可以根据数据的点数及simd的宽度确定。以fft数据为例,m=2
n r
=n
×2r
,其中n=2^n为矢量处理数据个数。以8点fft数据,simd=4为例,8=4
×
21,即r=1,即对输入数据进行1次第二矢量操作。以64点数据,simd=4为例,64=4
×24
,即r=4,即对数据进行4次第二矢量操作,2次第一矢量操作。
42.在第一矢量操作时重换序操作可以采用数据混合交织的方式进行。下面对数据混合交织进行介绍。
43.重换序是将第一矢量操作中经蝶形运算处理后,形成的奇偶分离的数据元素,做反序操作,将数据元素重新回到正序。重换序操作可以以指令mixr.x表示,其中mix表示混合动作,r为需要混合的矢量个数,r为蝶形处理的基。以基2蝶形为例,r=2,以基4蝶形为例,r=4。x为当前混合的粒度,即,用于做交织的数据元素的数量。以基2蝶形为例,示例性的,64点fft数据,执行2次第一矢量操作,在第一次第一矢量操作,经第一次蝶形运算之后,重换序时,混合粒度x=1,再第二次矢量操作,经第二次蝶形运算之后,重换序时,混合粒度x=2。mixr.x可以理解为从r个输入数量分别对应取x个数据元素,交织后放到对应的输出元素的位置处。下面结合图3及图4对数据重倒序进行示例性的介绍。
44.图3包括图3.1及图3.2两部分,图3.1示出的是mix2.1,图3.2示出的是mix2.2。下面对这两部分分别进行介绍。图3.1是对2个输入矢量进行1元素的交织。2个输入矢量分别为vi1[b7,b6,b5,b4,b2,b1,b0]及vi0[a7,a6,a5,a4,a3,a2,a1,a0],取这两个输入矢量中的1个数据元素对应的交织,将交织的数据对应放回,可以得到2个交织之后的矢量vo1[b7,a7,b6,a6,b5,a5,b4,a4]及矢量vo0[b3,a3,b2,a2,b1,a1,b0,a0]。图3.2是对2个输入矢量进行2元素的交织。2个输入矢量分别为vi1[b7,b6,b5,b4,b2,b1,b0]及vi0[a7,a6,a5,a4,a3,a2,a1,a0],取这两个输入数量中的2个数据元素对应交织,将交织的数据对应放回,可以得到2个交织之后的矢量vo1[b7,b6,a7,a6,b5,b4,a5,a4]及矢量vo0[b3,b2,a3,a2,b1,b0,a1,a0]。以16点fft数据为例,第一输入矢量可以是第一次第一矢量操作中蝶形运算的结果数据,该结果数据例如可以是vi1[1,3,5,7,9,11,13,15]及vi0[2,4,6,8,10,12,14,16],做mix2.1,取这两个输入矢量中的1个数据元素做混合交织,可以得到交织之后的输出矢量vo1[1,2,3,4,5,6,7,8]及输出矢量vo0[9,10,11,12,13,14,15,16,]。第二输入矢量可以是第二次第一矢量操作中蝶形运算之后的结果数据,该结果数据例如可以是vi1[1,2,5,6,9,10,13,14]及vi0[3,4,7,8,11,12,15,16],做mix2.2,取这两个矢量中的2个数据元素做混合交织,可以得到交织之后的输出矢量vo1[1,2,3,4,5,6,7,8]及输出矢量vo0[9,10,11,12,13,14,15,16,]。
[0045]
图4包括图4.1及图4.2两部分,图4.1示出的是mix4.1,图4.2示出的是mix4.2。图4是对4个输入矢量(vi3~vi0)对应交织,输出4个矢量(vo3~vo0),其中mix4.1是做1个数据元素的交织,mix4.2是做2个数据元素的交织。下面以图4.1做示例行的介绍。输入矢量可以分别为[d7,d6,d5,d4,d3,d2,d1,d0]、[c7,c6,c5,c4,c3,c2,c1,c1]、[b7,b6,b5,b4,b3,b2,b1,b0]及[a7,a6,a5,a4,a3,a2,a1,a0],取这四个矢量中1个数据元素做混合交织,可以得到交织之后的输出矢量[d7,c7,b7,a7,d6,c6,b6,a6],[d5,c5,b5,a5,d4,c4,b4,a4],[d3,c3,b3,a3,d2,c2,d2,a2]及[d1,c1,b1,a1d0,c0,b0,a0]。
[0046]
可见,重换序操作可以将经过蝶形运算后返序的数据重新反为正序。输入矢量中的元素的数量可以与simd的宽度一致,这样就可以使用矢量级simd指令完成重换序。以16点fft数据为例,simd_n=4,输入矢量可以为vi1[1,3,5,7]及vi0[2,4,6,8]经过mix2.1之后的输出矢量可以是vo1[1,2,3,4,]及vo0[5,6,7,8],输入矢量可以为vi1[9,11,13,15]及vi0[10,12,14,16]经过mix2.1之后的输出矢量可以是vo1[9,10,11,12]及vo0[13,14,15,16]。换句话说,可以按照simd的宽度取与simd宽度一致的输入矢量做矢量级的重换序操作,以提升数据处理的效率。
[0047]
dft的数据,m=2
n r
p1
s1
×
p2
s2

pk
sk
,即点数m是n=2n的倍数,n为simd的宽度。以
基2蝶形运算为例,数据处理步骤包括:做n次基2蝶形运算,每次蝶形完成后做重换序,即奇偶分离重新回到自然正序;按次序做r次基2蝶形,s2次基p2蝶形,

,sk次基pk蝶形,不用做重排序;按不同进阶组合数据pk
sk
×
pk―1
sk―1
……
p2
s2
左边为最高位,对应最右处理蝶形基,右边为最低位,对应次左边的处,不用重排序;最后一个步骤的输出,每存储一个n点向量,按pk
sk
×
pk―1
sk―1
……
p2
s2
×2r
按反序进位计算下一个矢量的偏移地址,直到全部完成。若矢量包含元素个数n不是m=p1
s1
×
p2
s2

pk
sk
的因子,则从m中选择一个因子q,使得q在小于n的情况下,最接近n,即把n个元素的矢量当做q个元素使用。接下来,先做因子q的蝶形并做重新正序的动作,在形成q的正序后,后续就按正常的dft,依次完成,最后做矢量(q个元素)级多进位阶组合数据的反序进位,完成整个dft/fft过程。
[0048]
下面结合图5对本技术实施例提供的处理数据的方法进行示例行的介绍。图5示出的是72点dft数据的处理过程。
[0049]
simd_n=4,即simd的宽度为4,一个simd指令可以同时处理4个数据。首先,先做两级第一矢量操作,即先做一级蝶形操作之后做重换序操作,以将数据反序为正序,在做一级蝶形运算之后做重换序操作,将数据反序为正序。即图中stage1,做蝶形运算加mix2.1,stage2做蝶形运算加mix2.1,经过两级蝶形运算之后,完成失量的正序。之后,将上一级的运算结果数据分为与simd宽度一致的数据块,并进行蝶形运算。如在stage3,18个运算组进行蝶形运算,得到奇偶分离的数据运算组。在stage4,对18个蝶形运算组进行蝶形运算,得到奇偶分离的6个数据块,其中一个数据块包括3个运算组。在stage5做蝶形运算,得到反序的傅里叶变换的结果。最后使用矢量级反序进位指令sv.rev,将矢量反序为正序,得到正序输出的傅里叶变换的结果。在stage3奇偶分离的运算组的顺序为奇数数据块为0_00,偶数数据块为1_00,经过stage4运算后,奇偶分离的数据块的顺序为00_00、10_00,20_00、01_00,11_00及21_00,经stage5运算之后,奇偶分离的数据块的顺序为000_00、100_00、200_00、010_00、110_00、210_00、020_00、120_00、220_00、001_00、101_00、201_00、011_00、111_00、211_00、021_00、121_00及221_00。采用矢量及sv.rev指令对上述数据组进行矢量及反序进位操作,得到正序的运算组,因为每个运算组内的数据的连续且正序,因此可以得到正序的傅里叶变换的结果。图5所示的数据的顺可以采用混合进制表示,也就是说,sv.rev指令对用二进制或混合进制做反向进位操作。
[0050]
在数据处理时,当处理蝶形尺寸效应等于处理器的simd的矢量大小时,就会出现适量内蝶形处理的问题。示例行的,16点fft数据,simd_n=4时,第三级蝶形处理是将2个向量之间的蝶形处理,不能使用simd矢量处理指令,即从第三级出现了矢量内的蝶形处理的问题。矢量内蝶形处理与矢量间蝶形处理完全不同,因为矢量质量即simd指令都是就矢量间操作而定义的。simd越大,单次处理的数据的吞吐量就越大,但也更早的进入矢量内操作。对于矢量内的操作,矢量内的指令比较特殊,成本大且不通用,矢量内指令目前仅见simd=4,包括基2蝶形或基4蝶形,用于先倒序的前2级或后倒序的最后2级。本技术实施例提供的处理数据的方法也解决了上述问题。以正序输入,点数m=1024,simd_n=4,基2蝶形为例。本技术以2级矢量间重排序(mix2.1 mix2.2)为代价,避免标量级倒序,避免定义特殊不通用的适量内指令,在点数m较大的情况能得到较大收益。但simd_n较大的情况下,需要做mix的stage就多了,收益相对会减少。
[0051]
可见,本技术,通过增加一些矢量间交换元素的mix指令,以及矢量级反序存储
sv.rev指令,可以避免做标量级别的反序动作,从而让处理器完成fft正序输入正序输出的完整矢量操作;也避免了做矢量内操作,不需要定义复杂不通用的矢量内操作指令。
[0052]
上文结合图1至图5,详细描述了本公开的方法实施例,下面结合图6详细描述本公开的装置实施例。应理解,方法实施例的描述与装置实施例的描述相互对应,因此,未详细描述的部分可以参见前面方法实施例。
[0053]
图6所述的处理数据的装置600可以包括获取单元610、第一执行单元620、第二执行单元630及第三执行单元640,下面对各个单元进行示例性的介绍。
[0054]
获取单元610,被配置为获取傅里叶变换的输入数据;
[0055]
第一执行单元620,被配置为针对所述输入数据,利用矢量处理器执行多级第一矢量操作,得到第一中间结果数据,其中,所述第一矢量操作包括蝶形操作和重换序操作,所述重换序操作用于将所述蝶形操作的操作结果的顺序转换为正序;
[0056]
第二执行单元630,被配置为将第一中间结果数据分成多个包含n个数据元素的蝶形运算组,n为所述矢量处理器的simd指令中矢量处理数据的数量,利用矢量处理器对所述多个蝶形运算组执行一级或多级第二矢量操作,得到第二中间结果,其中,所述第二矢量操作为蝶形操作;
[0057]
第三执行单元640,被配置为针对所述第二中间结果,利用矢量处理器执行第三矢量操作,得到所述傅里叶变换的结果,其中,所述第三矢量操作为矢量级反向进位操作。
[0058]
可选地,所述第一执行单元620进一步被配置为:
[0059]
针对所述输入数据,执行蝶形操作,得到蝶形操作结果;
[0060]
对所述蝶形操作结果,执行数据元素混合交织,以将所述蝶形操作的操作结果的顺序转换为正序。
[0061]
可选地,,所述输入数据包含m个元素,所述多级第一矢量操作为n级,所述一级或多级第二矢量操作为r级,且m=2
n r

[0062]
可选地,所述多级第一矢量操作中的最后一级矢量操作所针对的数据元素的数量大于或等于n。
[0063]
可选地,所述蝶形操作为基2蝶形操作。
[0064]
应理解,在本公开实施例中,“与a相应的b”表示b与a相关联,根据a可以确定b。但还应理解,根据a确定b并不意味着仅仅根据a确定b,还可以根据a和/或其它信息确定b。
[0065]
应理解,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
[0066]
应理解,在本公开的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本公开实施例的实施过程构成任何限定。
[0067]
在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦
合或通信连接,可以是电性,机械或其它的形式。
[0068]
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0069]
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
[0070]
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本公开实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够读取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,数字通用光盘(digital video disc,dvd))或者半导体介质(例如,固态硬盘(solid state disk,ssd))等。
[0071]
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变换或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以所述权利要求的保护范围为准。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献