CN103294621A - 支持数据按模重组的向量访存方法 - Google Patents
支持数据按模重组的向量访存方法 Download PDFInfo
- Publication number
- CN103294621A CN103294621A CN2013101668595A CN201310166859A CN103294621A CN 103294621 A CN103294621 A CN 103294621A CN 2013101668595 A CN2013101668595 A CN 2013101668595A CN 201310166859 A CN201310166859 A CN 201310166859A CN 103294621 A CN103294621 A CN 103294621A
- Authority
- CN
- China
- Prior art keywords
- data
- vectorial
- mould
- instruction
- memory access
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Abstract
一种支持数据按模重组的向量访存方法,在基本的向量Load/Store指令中增加按模重组类型MT域,MT的宽度为2位;对于向量Load指令,MT为不同值时执行与之对应的重组方式,将数据从VM读出的数据进行按模重组后写入到VR中;对于向量Store指令,MT为不同值时执行与之对应的重组方式,将从VR读出的数据进行按模重组后写入VM中。本发明能够将SIMD处理器的数据混洗和向量访存两个部件的部分功能融合,从而能够显著提高以FFT为代表一类算法在SIMD处理器上的执行效率,并能够降低程序员的映射难度和应用程序的代码尺寸。此外,本发明还能够高效解决复数数据在SIMD处理器中的向量访问问题。
Description
技术领域
本发明主要涉及到采用单指令流多数据流技术(Single Instruction stream MultipleData stream,SIMD)的处理器的向量访存部件领域,特指一种支持数据按模重组的向量访存方法。
背景技术
SIMD技术通过采用多个处理单元共享同一套取指、译码、地址计算和访存等控制部件,能够以较低的硬件开销充分开发应用程序的并行性,因而在当前的处理器中,如通用处理器、图形处理器和数字信号处理器等,得到了广泛的采用。SIMD技术分为子字SIMD和向量SIMD,前者侧重于一个字中多个字节或半字之间的并行,后者侧重于多个字之间的并行。当前采用SIMD技术的处理器(以下简记为SIMD处理器)一般融合了子字SIMD和向量SIMD两种技术,并且单条指令驱动的单个向量操作数的位宽(以下记为处理器的SIMD宽度)已达到或超过512。如何为SIMD处理器提供高效灵活的数据供给支持是其充分发挥运算能力的重要保证。向量访存部件和数据混洗部件是SIMD处理器中主要采用的用于向量数据Load/Store、以及位置置换的部件。向量访存部件通过地址计算单元计算出访问向量存储器(Vector Memory,VM)的地址,然后高带宽将数据在VM和向量寄存器(Vector Register,VR)中搬移。数据混洗部件一般采用混洗网络实现,程序员需要提前设置混洗模式,在程序执行时调用不同的混洗模式驱动混洗网络对VR中的数据进行位置置换。
快速傅立叶变换(Fast Fourier Transform,FFT)算法是通用计算、嵌入式计算和高性能计算等领域中一类典型的变换算法。FFT算法可以分为按时域抽取法(Decimation-In-Time,DIT)和按频域抽取(Decimation-In-Frequency,DIF)两种。两种算法的运算特点基本相同,不同之处在于DIT的蝶形运算为先乘后加,DIF的蝶形运算为先加后乘;并且两者需要混洗数据的轮次不同。FFT算法一般采用Cooley-Tukey方法,基2、基4FFT算法较为常用,如果要处理的点数不是2或4的整数次幂,可采用添零等方法将其转化为基2或基4FFT算法。FFT算法在SIMD处理器映射时,头几轮(DIT)或最后几轮(DIF)的每一轮蝶形运算之后需要使用混洗单元调整当前轮次的结果数据的位置,以方便下一轮蝶形运算能够顺利执行。FFT算法基的不同以及采用的时/频域抽取方法不同,导致了其在SIMD处理器中对数据访存和数据置换的需求较为复杂,使向量访存和数据混洗部件容易成为系统的瓶颈。
在传统的SIMD处理器中,向量访存和数据混洗这两个部件是分离的,因而导致了FFT为代表一类算法在映射时效率不高,具体原因如下:1)指令发射槽有限。在典型的SIMD处理器中,乘法单元、加法单元和访存单元占据着指令发射槽的主体,混洗部件一般情况下只有一个,并且可能和某个加法或乘法单元公用一个指令槽。这种指令发射槽的限制将会降低FFT等算法的执行效率。2)混洗部件的带宽有限。Crossbar由于较强的灵活性,是SIMD处理器混洗部件最常用的实现形式。然而硬件开销限制使得Crossbar在实现时多采用一个向量输入一个向量输出的方式,实际有效带宽较小。3)设置混洗模式存在开销。虽然采用Crossbar的混洗部件能够提供的多种混洗模式,但是在使用时需要设置并调用不同的混洗模式,从而引入额外的开销。4)复数的不规则向量访问问题。当SIMD处理器的机器位宽和要处理的复数数据的实/虚部的位宽相同时(如对于32位处理器其复数数据的实/虚部均为32位,或对于64位处理器其复数数据的实/虚部均为64位),由于复数数据一般在VM中连续放置,当这些数据搬移至VR时,用户希望实部和虚部数据能位于不同的VR中(如实部在VR0,虚部在VR1)。这将会在向量Load/Store操作之后引入额外的混洗操作,从而降低程序的执行效率。
实际上,除了FFT算法之外,包括维特比解码、离散余弦变换、离散正弦变换、哈特利变换等算法在SIMD处理器映射时均存在和FFT算法类似的数据访存和数据置换需求,因而高效地解决FFT算法在SIMD处理器中面临的数据访存和数据置换问题具有一定的普适意义。
发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种开销小、使用方便、能将数据混洗和向量访存两个部件的部分功能融合、高效地支持FFT等一类算法在SIMD处理器中应用的支持数据按模重组的向量访存方法。
为解决上述技术问题,本发明采用以下技术方案:
一种支持数据按模重组的向量访存方法,
在基本的向量Load/Store指令中增加按模重组类型MT域,MT的宽度为2位;
对于向量Load指令,MT为2’b00表示该指令为正常的向量Load指令,记为VLDDW;VLDDW不对从VM读出的数据进行按模重组,正常将数据写入到VR中;MT为2’b01表示对从VM读出的数据进行模2提取,记为VLDDWM2;如果从VM读出的数据为B0B1B2…B2N-1,则这些数据将被重组为B0B2B4…R2N-2B1B3B5…B2N-1,然后再被写入到VR中;MT为2’b10,在两个向量访存部件同时发送向量Load指令时,表示将从VM读出的数据进行整体模2提取,记为VLDDWDM2;如果两个向量访存部件从VM读出的数据为B0B1B2…B4N-1,则这些数据将会被重组为B0B1B2…B4N-2B1B3B5…B4N-1,然后再被写入到VR中;MT为2’b11,在两个向量访存部件同时发送向量Load指令时,表示将从VM读出的数据进行整体模4提取,记为VLDDWDM4;如果两个向量访存部件从VM读出的数据为B0B1B2…B4N-1,则这些数据将会被重组为B0B4B8…B4N-4B1B5B9…B4N-3B2B6B10…B4N-2B3B7B11…B4N-1,然后再被写入到VR中;
对于向量Store指令,MT为2’b00表示该指令为正常的向量Store指令,记为VSTDW,VSTDW不对从VR读出的数据进行按模重组,正常将数据写入到VM中;MT为2’b01表示对从VR读出的数据进行模N提取,记为VSTDWMN;如果从VR读出的数据为B0B1B2…B2N-1,则这些数据将被重组为B0BNB1BN+1B2BN+2…BN-1B2N-1,然后再被写入到VM中;MT为2’b10,在两个访存单元同时发送向量Store指令时,表示将从VR读出的数据进行整体模N提取,记为VSTDWDMN,如果两个向量访存部件从VR读出的数据为B0B1B2…B4N-1,则这些数据将会被重组为B0BNB2NB3NB1BN+1B2N+1B3N+1…B2N-1B3N-1B3N-1B4N-1,然后再被写入到VM中;MT为2’b11时,在两个向量访存部件同时发送向量Store指令时,表示将从VR读出的数据进行整体模2N提取,记为VSTDWDM2N,如果两个向量访存部件从VR读出的数据为B0B1B2…B4N-1,则这些数据将会被重组为B0B2NB1B2N+1B2B2N+2…B2N-1B4N-1,然后再被写入到VM中。
作为本发明的进一步改进:
在向量访存流水线的译码栈增加逻辑对MT域进行抽取,并随着流水线进行传递。
在向量访存流水线的地址计算栈增加一个4选1的选择器,根据当前流水栈中MT域的值对从VR中读取的数据进行按模重组选择。
在向量访存流水线的VM数据返回栈增加一个4选1的选择器,根据当前流水栈中MT域的值对从VM中读取的数据进行按模重组选择。
与现有技术相比,本发明的优点在于:
1、本发明能够显著提高以FFT为代表一类算法在SIMD处理器上的执行效率。本发明将SIMD处理器的数据混洗和向量访存两个部件的部分功能融合,使混洗操作能够利用向量访存单元的指令发射槽和向量访存单元与VM、VR间的数据通路的高带宽。此外,由于支持不同按模重组方式的向量访存指令可直接选择,因而用户将不需要设置混洗模式。上述因素使得以FFT为代表一类算法在SIMD处理器上的执行效率将会获得显著提升。
2、本发明能够减少以FFT为代表一类算法在SIMD处理器上的映射难度和代码尺寸。在传统在SIMD处理器中用户需要花费几条指令或者十几条混洗指令来在调整FFT等算法某一轮次运算后的结果数据位置,而采用本发明的用户只要直接调用提出的向量访存指令即可。FFT等算法在SIMD处理器映射难度以及代码的尺寸将会得到明显降低。对于某一种FFT算法(基2、基4其中一种;DIF、DIT其中一种)的数据混洗需求,只需要连续使用本发明提出的指令中的一种即可满足。
3、本发明高效解决了复数数据在SIMD处理器中的不规则向量访问问题。使用传统的向量访存部件访问复数数据将会出现实部数据和虚部数据位于相同的VR中,用户或者需要在数据从片外存储器搬移至VM时进行调整,或者需要采用花费额外的指令混洗数据,这都会造成程序执行效率的降低。而本发明提出的访存指令,可以将向量复数数据的实部和虚部直接放置在不同VR中,或者可以将不同的VR中实部虚部数据连续地写入VM,从而方便程序员后续的处理。
4、本发明在具体应用后额外开销较小。本发明主要的开销包括:a)在基本的向量Load/Store指令增加MT域会占用2位指令编码空间。即本发明只会在正常的向量Load/Store指令基础上增加3条支持按模重组功能的向量Load指令和3条支持按模重组功能的向量Store指令。b)在向量访存流水线增加对MT域的抽取和传递会增加2M个寄存器(M为向量访存流水线的级数)。c)在地址计算栈和数据返回栈将会增加两个4选1的选择器,每个选择器驱动的数据宽度为4W位(假设SIMD处理器器拥有两个向量访存部件,每个向量访存部件每拍能够发射一条双字向量访存指令,处理器的SIMD宽度为W)。a)、b)和c)这三方面的开销均不大,对指令编码空间、处理器的面积和关键路径延时的影响几乎可以忽略。
综上所述,针对当前SIMD处理器的缺陷,本发明通过提出专门的支持数据按模重组的向量访存方法以及配套的指令、实现装置,将SIMD处理器的数据混洗和向量访存两个部件的部分功能融合,从而能够显著提高以FFT为代表一类算法在SIMD处理器上的执行效率,并能够降低程序员的映射难度和应用程序的代码尺寸。此外,本发明还能够高效解决复数数据在SIMD处理器中的向量访问问题。由于本发明效果显著并且开销很小,因而有利于在当前SIMD处理器中推广和广泛采用。
附图说明
图1是典型的SIMD处理器的结构。
图2是N=16时本发明的支持数据按模重组的向量访存指令示意图:(a)支持数据按模重组的向量Load指令;(b)支持数据按模重组的向量Store指令。
图3是本发明提出的支持数据按模重组的向量访存流水线示意图。
图4是FFT算法的原理示意图:(a)DIF8点基2FFT运算流图;(b)DIF16点基4FFT算法的运算流图。
图5是应用本发明后DIF FFT算法在SIMD处理器的映射流程图:(a)DIF基2或基4FFT算法在SIMD处理器上的映射流程图;(b)DIT基2或基4FFT算法在SIMD处理器上的映射流程图。
图6是复数数据FFT算法在SIMD处理上的不规则向量访问问题以及本发明的解决效果示意图:(a)复数数据的不规则向量访问问题示意图;(b)DIF基2或基4FFT算法的复数数据不规则访问问题的解决流程图;(c)DIT基2或基4FFT算法的复数数据不规则访问问题的解决流程图。
图例说明:
1、标量单元;2、向量单元;3、指令派发单元;4、取指单元;5、指令Cache;6、处理元素;7、向量寄存器;8、向量访存部件;9、向量存储器;10、数据混洗部件。
具体实施方式
以下将结合说明书附图和具体实施例对本发明做进一步详细说明。
如图1所示,为典型SIMD处理器的结构。该SIMD处理器一般包含标量单元1和向量单元2,其中标量单元1主要负责处理应用中的串行执行部分、执行分支、中断以及系统配置等任务;向量单元2主要对应用中的并行任务进行加速。标量单元1和向量单元2采用统一(或分离)的取指单元4和指令派发单元3从指令Cache5中取出指令包进而派发指令。以下侧重对向量单元的结构进行讨论,向量单元2包含多个并行的处理元素6(ProcessingElement,PE),处理元素6从向量寄存器7(Vector Register,VR)中读出数据进行计算并写入到向量寄存器7中。向量寄存器7的数据通过向量访存部件8与向量存储器9(VectorMemory,VM)高带宽地进行数据交换。如果向量寄存器7的中间结果数据的位置不规则或者不利于下一次计算则需要通过数据混洗部件10进行寄存器级的数据重拍。在传统的SIMD处理器中,向量访存部件8和数据混洗部件10是分离的,因而导致了FFT为代表一类算法在映射时效率不高,本发明针对该问题提出了支持数据按模重组的向量访存方法,将传统SIMD处理器的向量混洗和访存两个部件的部分功能融合并且主要在向量访存部件8中完成。需要注意的是,本发明的存在仅仅是为了加速FFT为代表一类算法的执行效率,并不意味着不再需要传统SIMD处理器中的向量混洗部件,后者灵活性保证了SIMD处理器能够满足不同应用的多样化混洗需求。
假设SIMD处理器包含N个处理元素(Processing Elements,PE),拥有两个向量访存部件,每个向量访存部件每拍能够发射一条双字向量访存指令。本发明的支持数据按模重组的向量访存方法,就是在基本的向量Load/Store指令中增加按模重组类型MT域,MT的宽度为2位。
对于向量Load指令,MT为2’b00表示该指令为正常的向量Load指令,记为VLDDW;VLDDW不对从VM读出的数据进行按模重组,正常将数据写入到VR中;MT为2’b01表示对从VM读出的数据进行模2提取,记为VLDDWM2;如果从VM读出的数据为B0B1B2…B2N-1,则这些数据将被重组为B0B2B4…B2N-2B1B3B5…B2N-1,然后再被写入到VR中;MT为2’b10,在两个向量访存部件同时发送向量Load指令时,表示将从VM读出的数据进行整体模2提取,记为VLDDWDM2;如果两个向量访存部件从VM读出的数据为B0B1B2…B4N-1,则这些数据将会被重组为B0B1B2…B4N-2B1B3B5…B4N-1,然后再被写入到VR中;MT为2’b11,在两个向量访存部件同时发送向量Load指令时,表示将从VM读出的数据进行整体模4提取,记为VLDDWDM4;如果两个向量访存部件从VM读出的数据为B0B1B2…B4N-1,则这些数据将会被重组为B0B4B8…B4N-4B1B5B9…B4N-3B2B6B10…B4N-2B3B7B11…B4N-1,然后再被写入到VR中;
对于向量Store指令,MT为2’b00表示该指令为正常的向量Store指令,记为VSTDW,VSTDW不对从VR读出的数据进行按模重组,正常将数据写入到VM中;MT为2’b01表示对从VR读出的数据进行模N提取,记为VSTDWMN;如果从VR读出的数据为B0B1B2…B2N-1,则这些数据将被重组为B0BNB1BN+1B2BN+2…BN-1B2N-1,然后再被写入到VM中。MT为2’b10,在两个访存单元同时发送向量Store指令时,表示将从VR读出的数据进行整体模N提取,记为VSTDWDMN,如果两个向量访存部件从VR读出的数据为B0B1B2…B4N-1,则这些数据将会被重组为B0BNB2NB3NB1BN+1B2N+1B3N+1…B2N-1B3N-1B3N-1B4N-1,然后再被写入到VM中;MT为2’b11时,在两个向量访存部件同时发送向量Store指令时,表示将从VR读出的数据进行整体模2N提取,记为VSTDWDM2N,如果两个向量访存部件从VR读出的数据为B0B1B2…B4N-1,则这些数据将会被重组为B0B2NB1B2N+1B2B2N+2…B2N-1B4N-1,然后再被写入到VM中。
本发明进一步在向量访存流水线的译码栈增加逻辑对MT域进行抽取,并随着流水线进行传递。在向量访存流水线的地址计算栈增加一个4选1的选择器,根据当前流水栈中MT域的值对从VR中读取的数据进行按模重组选择。在向量访存流水线的VM数据返回栈增加一个4选1的选择器,根据当前流水栈中MT域的值对从VM中读取的数据进行按模重组选择。
如图2所示,为N=16时,本发明提出的支持数据按模重组的向量访存指令示意图,其中图2(a)为支持数据按模重组的向量Load指令,图2(b)为支持数据按模重组的向量Store指令。从图2中就可以了解本发明的主体和核心部分。
如图2(a)所示,图中虚线左侧的部分为VM空间,Bi(0≤i≤63)的位宽和SIMD处理器的处理器位宽相同,B0,B1,…,B31为VM地址增大的一段连续空间,B32,B33,…,B63为VM地址增大的另外一段连续空间。图中虚线右侧的部分为VR空间,VR_e和VR_o指示了一对奇偶向量寄存器(在实际中可以为VR_0和VR_1或者VR_4和VR_5等)。在下面的描述中假设向量访存部件的向量Load0指令的源地址指向B0所在的位置,向量Load1指令的源地址指向B32所在的位置。本发明对传统的向量双字Load指令进行改进提出了VLDDW、VLDDWM2、VLDDWDM2和VLDDWDM4四种支持数据按模重组的向量Load指令,分别对应Load指令编码MT域为2‘b00、2‘b01、2‘b10、2‘b11时的情况。图2(a)中的箭头①所示的为VLDDW指令的执行效果示意图,VLDDW指令和传统的向量双字Load指令功能完全相同,不对从VM读出的数据进行按模重组,直接写入到一对奇偶向量寄存器中。图中从VM中读出的数据为B0,B1,…,B31,则经过VLDDW指令后这些数据按序写入奇偶向量寄存器对VR_e和VR_o中,接下来PE0能够使用的数据为B0和B16,PE1能够使用的数据为B1和B17,依次地,PE15能够使用的数据为B15和B31。图2(a)中箭头②所示的为VLDDWM2指令的执行效果示意图,图中从VM读出的数据为B0,B1,…,B31,经过VLDDWM2指令的模2提取之后,数据的顺序变为B0,B2,B4,…,B30,B1,B3,B5,…,B31,然后写入到一对奇偶向量寄存器中,接下来PE0能够使用的数据为B0和B1,PE1能够使用的数据为B2和B3,依次地,PE15能够使用的数据为B30和B31。图2(a)中箭头③和箭头④显示了VLDDWDM2和VLDDWDM4的执行效果示意图。与VLDDW和VLDDWM2指令不同,VLDDWDM2和VLDDWDM4需要两个向量访问部件同时工作,并执行相同的指令(源地址和目的寄存器分别不同)。如图箭头③所示,两个向量VLDDWDM2指令从VM中读出的数据为B0,B1,…,B63,经过整体模2提取之后,数据的顺序变为B0,B2,B4,…,B62,B1,B3,B5,…,B63,接下来数据被写入到两个奇偶寄存器对VR_e1和VR_o1、VR_e2和VR_o2中,则PE0能够使用的数据为B0、B32、B1和B33,PE1能够使用的数据为B2、B34、B3和B35,依次地,PE15能够使用的数据为B30、B62、B31和B63。如图箭头④所示,两个向量VLDDWDM4指令从VM中读出的数据为B0,B1,…,B63,经过整体模4提取之后,数据的顺序变为B0,B4,B8,…,B60,B1,B5,B9,…,B61,B2,B3,B10,…,B62,B3,B7,B11,…,B63,接下来数据被写入到两个奇偶寄存器对VR_e1和VR_o1、VR_e2和VR_o2中,则PE0能够使用的数据为B0、B1、B2和B3,PE1能够使用的数据为B4、B5、B6和B7,依次地,PE15能够使用的数据为B60、B61、B62和B63。
如图2(b)所示,图中虚线右侧的部分为VM空间,Bi(0≤i≤63)的位宽和SIMD处理器的处理器位宽相同,B0,B1,…,B31为VM地址增大的一段连续空间,B32,B33,…,B63为VM地址增大的另外一段连续空间。图中虚线左侧的部分为VR空间,VR_e1和VR_o1指示了一对奇偶向量寄存器,VR_e2和VR_o2指示了另一对奇偶向量寄存器。在下面的描述中假设向量访存部件的向量Store0指令搬移VR_e0和VR_o0的数据且目的地址指向B0所在的位置,向量Store1指令搬移VR_e1和VR_o1的数据且目的地址指向B32所在的位置。本发明对传统的向量双字Store指令进行改进提出了VSTDW、VSTDWM16、VSTDWDM16和VSTDWDM32四种支持数据按模重组的向量Store指令,分别对应Store指令编码MT域为2‘b00、2‘b01、2‘b10、2‘b11时的情况。图2(b)中的箭头①所示的为VSTDW指令的执行效果示意图,VSTDW指令和传统的向量双字Store指令功能完全相同,不对从VR读出的数据进行按模重组,直接写入到VM中。图中从VR中读出的数据为B0,B1,…,B31,则经过VSTDW指令后这些数据按序写入到VM中。图2(b)中箭头②所示的为VSTDWM16指令的执行效果示意图,图中从VR读出的数据为B0,B1,…,B31,经过VSTDWM16指令的模16提取之后,数据的顺序变为B0,B16,B1,B17,B2,B18,…,B15,B31,然后再写入到VM中。图2(b)中箭头③和箭头④显示了VSTDWDM16和VSTDWDM32的执行效果示意图。与VSTDW和VSTDWM16指令不同,VSTDWDM16和VSTDWDM32需要两个向量访问部件同时工作,并执行相同的指令(源寄存器和目的地址分别不同)。如图箭头③所示,两个向量VSTDWDM16指令从VR中读出的数据为B0,B1,…,B63,经过整体模16提取之后,数据的顺序变为B0,B16,B32,B48,B1,B17,B33,B49,…,B15,B31,B47,B63,接下来数据被写入到VM中。如图箭头④所示,两个向量VSTDWDM32指令从VM中读出的数据为B0,B1,…,B63,经过整体模32提取之后,数据的顺序变为B0,B32,B1,B33,…,B31,B63,接下来数据被写入到VM中。
如图3所示,为本发明提出的支持数据按模重组的向量访存流水线示意图。尽管不同的SIMD处理器的向量访存流水线均略有不同,然而其具体的操作过程是类似的。如图3所示,假设向量Load访问流水线分为地址计算、请求仲裁、访问VM、数据返回、写入VR五栈;向量Store访问流水线分为地址计算、请求仲裁、访问VM三栈。
首先对基本的向量访存流水线进行介绍。在向量Load和Store访问流水线的前一栈均为指令译码栈,在该栈中向量访存指令被解析得到了基址、偏移寄存器的编号、源(或目的)寄存器的编号,并且向基址和偏移寄存器发送读取命令。如果是向量Load指令,则该栈将发送读取原操作数VR的请求;如果是向量Store指令,则该栈将目的操作数VR的编号传递到下一栈。地址计算栈主要对读取的基址寄存器和偏移寄存器的内容(或者偏移立即数)进行相加操作,得到访问VM的地址,并将从VR中读出的数据或VR的编号传递到下一栈。请求仲裁栈主要判断是否能够获得访问VM的权限,并将访存地址、从VR中读出的数据或VR的编号传递到下一栈。在访问VM栈主要根据访存地址对VM进行读或写,并将VR的编号发送到下一栈,向量Store访问流水线在这一栈结束。在数据返回栈等待从VM返回的数据,最后再写入VR栈将VM返回的数据写入到VR中,至此向量Load访问流水线结束。
本发明提出的支持数据按模重组的向量访存流水线在指令译码栈增加了解析MT域的功能,并且将MT域的值随流水线传递到地址计算栈、请求仲裁栈、访问VM栈和数据返回栈。由于本发明支持的按模提取指令是固定的,因而在按模提取时,只需要根据MT域的值选择即选取MT=2‘b00、2‘b01、2‘b10和2‘b11对应的数据即可。在地址计算栈对于向量Store指令,需要根据当前栈的MT域值对从VR中读取的数据进行按模提取,即对应图3中的VRData->VR Data’。该功能对应的硬件为一个4选1的选择器,每个选择器驱动的数据宽度为4W位(假设SIMD的处理器器拥有两个向量访存部件,每个向量访存部件每拍能够发射一条双字向量访存指令,处理器的SIMD宽度为W)。此外,在数据返回栈对于向量Load指令,需要根据当前栈的MT域值对从VM中读取的数据进行按模提取,即对应图3中的VM Data->VMData’。该功能对应的硬件还是一个4选1的选择器,每个选择器驱动的数据宽度也为4W位。
如图4所示,为本发明具体应用时FFT算法的原理示意图,其中图4(a)DIF8点基2FFT的运算流图;(图4b)DIF16点基4FFT的运算流图。DIF基2FFT算法的基本思想是将N点序列x(n)按序号前后对半分开,前后组对进行蝶形运算;之后再将N点分解成两个N/2点组,组内再前后对半分开,前后组对进行蝶形运算;如此反复,直到组内只有两个点,再进行一级蝶形运算为止。如图4(a)所示,在DIF8点基2FFT算法中,需要进行三级蝶形运算,第一级蝶形运算中,每个数据x(n)要和x(n+4)进行蝶形运算,其中0≤n≤3;在第二级蝶形运算中,将8个数据分为上下两组,每组内的数据x(n)要和x(n+2)进行蝶形运算,即x(n)要和x(n+2)进行蝶形运算,其中n=0,1,4,5;在第三级蝶形运算中,将8个数据分为四组,组内的元素进行蝶形运算,即x(n)要和x(n+1)进行蝶形运算,其中n=0,2,4,6。DIF基4FFT的基本思想是将N点序列x(n)等分成4份,处于每一份的相同位置的4个元素进行一次4元素的蝶形运算;之后N点分解成四个N/4点组,每一组内再进行4等分,相同位置数据组对后再进行4元素的蝶形运算;如此反复,直到组内只有四个点,再进行一级4元素蝶形运算为止。如图4(b)所示,在DIF16点基2FFT算法中,需要进行两级蝶形运算,第一级蝶形运算中,每个数据x(n)要和x(n+4)、x(n+8)和x(n+12)进行4元素蝶形运算,其中0≤n≤3;在第二级蝶形运算中,将16个数据按序分为四组,组内的四个数据进行4元素蝶形运算。通过上文分析,对于M点DIF FFT算法映射至PE数目为N的SIMD处理器的情况,基2DIF需要进行log2M级蝶形运算,基4DIF需要进行log4M级蝶形运算。此外,DIF算法在最后log2N级(基2)或最后log4N级(基4)之前的蝶形运算的结果数据的交换是以N的整倍数为单位的,因而采用正常的访存指令即可完成数据加载和读出,不需要在PE间进行数据混洗。而基2DIF算法需要在最后log2N级进行N个元素内的数据交换,基4DIF算法需要在最后log4N级进行N个元素内的数据交换,这种N个元素内的数据交换需求影响着FFT算法执行效率,而本发明恰恰提供了一种高效且满足这一需求的技术。
需要注意的是,图4仅给出了DIF的基2和基4FFT的运算流图,而DIT FFT算法的运算流程和DIF FFT算法正好相反,因而基2和基4DIT FFT算法需要在前log2N级和log4N级进行N个元素内的数据交换,这里不再详述。此外,在上述过程之后还需要进行位反序操作,该过程不在本发明的考虑范围之内。
如图5所示,为应用本发明后FFT算法在SIMD处理器的映射流程图,其中图5(a)DIF基2或基4FFT算法在SIMD处理器上的映射流程图;图5(b)DIT基2或基4FFT算法在SIMD处理器上的映射流程图。由于在FFT算法的运算过程中,蝶形因子是提前放置在VM中并且在运算过程中采用普通的向量Load运算读入到VR中参与蝶形运算,因而在下文的描述中忽略对蝶形因子的搬移。此外,依然假设FFT的点数为M,SIMD处理器中PE的数目为N。
DIF基2或基4FFT算法在SIMD处理器上的映射流程如下:
5a.1根据FFT的点数和PE的数目,计算出蝶形运算的级数L和需要混洗的级数K。对于基2FFT算法,L=log2M,K=log2N;对于基4FFT算法,L=log4M,K=log4N。此外,需要提前计算出所需要的蝶形因子,跳到5a.2;
5a.2判断是否存在复数数据的不规则向量访问问题(该问题在图6的描述中有详细解释),如果是则跳入5a.3,否则跳入5a.4;
5a.3采用VLDDWDM2指令将数据从VM搬移至VR中;跳入5a.5;
5a.4采用VLDDW指令将数据从VM搬移至VR中;跳入5a.5;
5a.5进行蝶形运算并将结果数据采用VSTDW指令写入VM,转入5a.6;
5a.6判断第一轮次蝶形运算是否将所有的数据处理过一遍,如果没有则跳入5a.2,继续读取数据;否则将当前级数C设置为1,转入5a.7;
5a.7采用VLDDW指令将数据从VM搬移至VR中,进行蝶形运算,并将结果数据采用VSTDW指令写入到VM,转入到5a.8;
5a.8判断当前轮次的蝶形运算是否将所有的数据处理过一遍,如果没有则跳入5a.7,继续读取数据;否则将当前级数C加1,转入5a.9;
5a.9判断当前当前级数C是否等于L-K,如果是则跳入5a.10,否则跳回5a.7;
5a.10采用VLDDW指令将数据从VM搬移至VR中,转入5a.11;
5a.11进行蝶形运算,如果是DIF基2FFT算法,则采用VSTDWMN指令将结果数据写入VM;如果是DIF基4FFT算法,则采用VSTDWDMN指令将结果数据写入VM。转入5a.12;
5a.12判断当前轮次数据是否处理完毕,如果没有则跳回5a.10,否则将当前级数C加1,转入5a.13;
5a.13判断当前级数C是否等于L-1,如果不等于则跳回5a.10,否则跳至5a.14;
5a.14采用VLDDW指令将数据从VM搬移至VR中,进行蝶形运算,转入5a.15;
5a.15判断是否存在复数数据的不规则向量访问问题,如果是则跳入5a.16,否则跳入5a.17;
5a.16对复数数据进行调整并搬移至VM(详见图6(b)的具体实施方式),跳入5a.18;
5a.17如果是DIF基2FFT算法,则采用VSTDWMN指令将结果数据写入VM;如果是DIF基4FFT算法,则采用VSTDWDMN指令将结果数据写入VM。转入5a.18;
5a.18判断最后轮次的数据是否处理完毕,如果没有则跳入到5a.14继续读取数据,否则运行结束。
DIT基2或基4FFT算法在SIMD处理器上的映射流程如下:
5b.1根据FFT的点数和PE的数目,计算出蝶形运算的级数L和需要混洗的级数K。DIT FFT算法的L和K和DIFFFT算法相同(见5a.1),计算所需要的蝶形因子,转入5b.2;
5b.2判断是否存在复数数据的不规则向量访问问题,如果是则跳入5b.3,否则跳入5b.4;
5b.3对复数数据进行调整并搬移至VR(详见图6(c)的具体实施方式),跳入5b.5;
5b.4如果是DIT基2FFT算法采用VLDDWM2指令(如果是DIT基4FFT算法采用VLDDWDM4指令)将数据从VM搬移到VR中,跳入5b.5;
5b.5进行蝶形运算,将结果数据采用VSTDW指令写入VM,转入5b.6;
5b.6判断第一轮次蝶形运算是否将所有的数据处理过一遍,如果没有则跳入5b.2继续读取数据;否则将当前级数C设置为1,转入5b.7;
5b.7如果是DIT基2FFT算法采用VLDDWM2指令(DIT基4FFT算法采用VLDDWDM4指令),将数据从VM搬移至VR中,进行蝶形运算,并将结果数据采用VSTDW指令写入VM,转入5b.8;
5b.8判断当前轮次的数据是否处理完毕,如果没有则返回5b.7,否则将当前级数C加1,转入5b.9;
5b.9判断当前级数C是否等于K,如果等于则转入5b.10,否则跳回5b.7;
5b.10采用VLDDW指令将数据从VM搬移至VR中,进行蝶形运算并将结果数据采用VSTDW指令写入VM,转入5b.11;
5b.11判断当前轮次的数据是否处理完毕,如果没有则返回5b.10,否则将当前级数C加1,转入5b.12;
5b.12判断当前级数C是否等于L-1,如果等于则转入5b.13,否则跳回5b.10;
5b.13采用VLDDW指令将数据从VM搬移至VR中,进行蝶形运算,转入5b.14;
5b.14判断是否存在复数数据的不规则向量访问问题,如果存在则采用VSTDWDM2N指令将数据搬移至VM,转入5b.15,否则采用VSTDW指令将数据写入到VM,转入5b.15;
5b.15判断最后一轮数据是否处理完毕,如果处理完毕则运行结束,否则跳回5b.13。
从上面的描述中,对于某一种FFT算法(基2、基4其中一种;DIF、DIT其中一种)的数据混洗需求,只需要连续使用本发明提出的指令中的一种即可满足。由于混洗的过程完全融入访存中,因而该过程不会引起额外的节拍开销。此外,由于在需要混洗的轮次中,采用本发明提出的一种指令即可满足所有需求,即本发明能够将某一种FFT算法所有需要混洗的方式统一起来。因而程序员可将不需要混洗的轮次和所有需要混洗的轮次分别采用软件流水实现即可,而不需针对需要混洗的轮次的混洗的需求不同而分别设计不同的软件流水,因而采用本发明也能够减少FFT程序的代码尺寸。
如图6所示,是复数数据的FFT算法在SIMD处理上的不规则向量访问问题以及本发明的解决效果示意图,图6(a)为复数数据的不规则向量访问问题示意图;图6(b)为DIF基2或基4FFT算法的复数数据不规则访问问题的解决流程图;图6(c)为DIT基2或基4FFT算法的复数数据不规则访问问题的解决流程图。
如图6(a)所示,复数数据包含实部和虚部,当SIMD处理器的机器位宽和要处理的复数数据的实/虚部的位宽相同时,则一个复数数据将占据VM的两个字位置。图6(a)的上部显示了32个复数数据在VM中存储的情况,显然这些数据按照实部虚部的顺序交替存放在VM中。如果将这些复数数据搬移到VR中,传统的SIMD处理器将会将VM中的一行搬移至VR中。由于复数数据的实部和虚部的运算不相同,而SIMD处理器的某条指令的某个操作数中包含的数据参与的运算需要完全相同,这种矛盾将会导致复数数据需要额外的搬移方式。图6(a)的下部显示了复数数据在VR中的一种可能的方式,在这种方式中实部数据和虚部数据分别放置在不同的VR中,这种方式更加有利于复数数据在SIMD处理器中进行处理。显然,采用本发明提出的VLDDWDM2指令即可完成图6(a)所示的这种搬移和转换。实际上,复数数据的处理还涉及到数据从VR向VM搬移,以及和FFT等一类运算本身的混洗融合在一起等方面情况。
图6(b)和图6(c)分别解释了图5(a)阴影部分的处理情况(即图5(a)中的步骤5a.16)、和图5(b)阴影部分的处理情况(即图5(b)中的步骤5b.3)。
如图6(b)所示,对于DIT FFT算法,当在最后几级需要混洗的运算中,需要采用本发明按照如下步骤解决复数数据的不规则访问问题:
6b.1判断是基2DIT还是基4DIT,如果是基2DIT则转入6b.2,如果是基4DIT则转入6b.3;
6b.2采用VLDDWDM4指令将数据从VM搬移至VR中,结束;
6b.3采用VLDDWDM4指令将数据从VM搬移至VR中,转入6b.4;
6b.4将数据采用VSTDW从VR中搬移至VM,转入6b.5;
6b.5采用VLDDWDM2指令将数据从VM搬移至VR中,结束。
如图6(c)所示,对于DIF FFT算法,当在最前几级需要混洗的运算中,需要采用本发明按照如下步骤解决复数数据的不规则访问问题:
6c.1判断是基2DIF还是基4DIF,如果是基2DIF则转入6c.2,如果是基4DIF则转入6c.3;
6c.2将数据采用VSTDWDMN指令从VR中搬移至VM中,结束;
6c.3将数据采用VSTDWDMN指令从VR中搬移至VM中,转入6c.4;
6c.4将数据采用VLDDW指令从VM搬移至VR中,转入6c.5;
6c.5将数据采用VSTDWDM2N指令从VM搬移至VR中,结束。
以上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。
Claims (4)
1.一种支持数据按模重组的向量访存方法,其特征在于,
在基本的向量Load/Store指令中增加按模重组类型MT域,MT的宽度为2位;
对于向量Load指令,MT为2’b00表示该指令为正常的向量Load指令,记为VLDDW;VLDDW不对从VM读出的数据进行按模重组,正常将数据写入到VR中;MT为2’b01表示对从VM读出的数据进行模2提取,记为VLDDWM2;如果从VM读出的数据为B0B1B2…B2N-1,则这些数据将被重组为B0B2B4…B2N-2B1B3B5…B2N-1,然后再被写入到VR中;MT为2’b10,在两个向量访存部件同时发送向量Load指令时,表示将从VM读出的数据进行整体模2提取,记为VLDDWDM2;如果两个向量访存部件从VM读出的数据为B0B1B2…B4N-1,则这些数据将会被重组为B0B1B2…B4N-2B1B3B5…B4N-1,然后再被写入到VR中;MT为2’b11,在两个向量访存部件同时发送向量Load指令时,表示将从VM读出的数据进行整体模4提取,记为VLDDWDM4;如果两个向量访存部件从VM读出的数据为B0B1B2…B4N-1,则这些数据将会被重组为B0B4B8…B4N-4B1B5B9…B4N-3B2B6B10…B4N-2B3B7B11…B4N-1,然后再被写入到VR中;
对于向量Store指令,MT为2’b00表示该指令为正常的向量Store指令,记为VSTDW,VSTDW不对从VR读出的数据进行按模重组,正常将数据写入到VM中;MT为2’b01表示对从VR读出的数据进行模N提取,记为VSTDWMN;如果从VR读出的数据为B0B1B2…B2N-1,则这些数据将被重组为B0BNB1BN+1B2BN+2…BN-1B2N-1,然后再被写入到VM中;MT为2’b10,在两个访存单元同时发送向量Store指令时,表示将从VR读出的数据进行整体模N提取,记为VSTDWDMN,如果两个向量访存部件从VR读出的数据为B0B1B2…B4N-1,则这些数据将会被重组为B0BNB2NB3NB1BN+1B2N+1B3N+1…B2N-1B3N-1B3N-1B4N-1,然后再被写入到VM中;MT为2’b11时,在两个向量访存部件同时发送向量Store指令时,表示将从VR读出的数据进行整体模2N提取,记为VSTDWDM2N,如果两个向量访存部件从VR读出的数据为B0B1B2…B4N-1,则这些数据将会被重组为B0B2NB1B2N+1B2B2N+2…B2N-1B4N-1,然后再被写入到VM中。
2.根据权利要求1所述的支持数据按模重组的向量访存方法,其特征在于,在向量访存流水线的译码栈增加逻辑对MT域进行抽取,并随着流水线进行传递。
3.根据权利要求2所述的支持数据按模重组的向量访存方法,其特征在于,在向量访存流水线的地址计算栈增加一个4选1的选择器,根据当前流水栈中MT域的值对从VR中读取的数据进行按模重组选择。
4.根据权利要求3所述的支持数据按模重组的向量访存方法,其特征在于,在向量访存流水线的VM数据返回栈增加一个4选1的选择器,根据当前流水栈中MT域的值对从VM中读取的数据进行按模重组选择。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310166859.5A CN103294621B (zh) | 2013-05-08 | 2013-05-08 | 支持数据按模重组的向量访存方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310166859.5A CN103294621B (zh) | 2013-05-08 | 2013-05-08 | 支持数据按模重组的向量访存方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103294621A true CN103294621A (zh) | 2013-09-11 |
CN103294621B CN103294621B (zh) | 2016-04-06 |
Family
ID=49095529
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310166859.5A Active CN103294621B (zh) | 2013-05-08 | 2013-05-08 | 支持数据按模重组的向量访存方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103294621B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105022609A (zh) * | 2015-08-05 | 2015-11-04 | 浪潮(北京)电子信息产业有限公司 | 一种数据混洗方法和数据混洗单元 |
CN103746771B (zh) * | 2013-12-26 | 2017-04-12 | 北京邮电大学 | 一种基于gpp和simd技术的信道编译码的数据格式转换方法 |
CN108139907A (zh) * | 2015-10-14 | 2018-06-08 | Arm有限公司 | 向量数据传送指令 |
CN115794671A (zh) * | 2023-02-07 | 2023-03-14 | 成都申威科技有限责任公司 | 一种兼容向量数据的访存系统及方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110072065A1 (en) * | 2009-09-20 | 2011-03-24 | Mimar Tibet | Method for efficient DCT calculations in a programmable processor |
CN102629238A (zh) * | 2012-03-01 | 2012-08-08 | 中国人民解放军国防科学技术大学 | 支持向量条件访存的方法和装置 |
-
2013
- 2013-05-08 CN CN201310166859.5A patent/CN103294621B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110072065A1 (en) * | 2009-09-20 | 2011-03-24 | Mimar Tibet | Method for efficient DCT calculations in a programmable processor |
CN102629238A (zh) * | 2012-03-01 | 2012-08-08 | 中国人民解放军国防科学技术大学 | 支持向量条件访存的方法和装置 |
Non-Patent Citations (2)
Title |
---|
YAOHUA WANG等: "Instruction Shuffle:Achieving MIMD-like Performance on SIMD Architectures", 《IEEE COMPUTER ARCHITECTURE LETTERS》 * |
魏帅等: "面向SIMD的数组重组和对齐优化", 《计算机科学》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103746771B (zh) * | 2013-12-26 | 2017-04-12 | 北京邮电大学 | 一种基于gpp和simd技术的信道编译码的数据格式转换方法 |
CN105022609A (zh) * | 2015-08-05 | 2015-11-04 | 浪潮(北京)电子信息产业有限公司 | 一种数据混洗方法和数据混洗单元 |
CN108139907A (zh) * | 2015-10-14 | 2018-06-08 | Arm有限公司 | 向量数据传送指令 |
CN115794671A (zh) * | 2023-02-07 | 2023-03-14 | 成都申威科技有限责任公司 | 一种兼容向量数据的访存系统及方法 |
CN115794671B (zh) * | 2023-02-07 | 2023-04-14 | 成都申威科技有限责任公司 | 一种兼容向量数据的访存系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103294621B (zh) | 2016-04-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP0171595B1 (en) | Floating point arithmetic unit | |
CN101359284B (zh) | 处理数个不同数据格式的乘法累加单元及其方法 | |
US9606797B2 (en) | Compressing execution cycles for divergent execution in a single instruction multiple data (SIMD) processor | |
US20230359435A1 (en) | Sorting for data-parallel computing devices | |
US20040221137A1 (en) | Efficient complex multiplication and fast fourier transform (FFT) implementation on the ManArray architecture | |
CN102144225A (zh) | 实时数据处理方法和装置 | |
KR20160130741A (ko) | 명령 세트 전환 시스템 및 방법 | |
CN101751244A (zh) | 微处理器 | |
CN103294621B (zh) | 支持数据按模重组的向量访存方法 | |
CN115562729A (zh) | 具有带读取和读取/前进操作数编码的流引擎的数据处理设备 | |
US20060265555A1 (en) | Methods and apparatus for sharing processor resources | |
KR20030067892A (ko) | 가변길이 vliw 명령어를 위한 디스패치 장치 및 방법 | |
WO2013039335A1 (en) | A processing device and a swizzle pattern generator | |
CN101826142A (zh) | 一种可重构椭圆曲线密码处理器 | |
Chen et al. | Mgmr: Multi-gpu based mapreduce | |
JP2019519865A (ja) | 並べ替え動作を実行するための装置および方法 | |
CN102012802B (zh) | 面向向量处理器数据交换的方法及装置 | |
CN110008436B (zh) | 基于数据流架构的快速傅里叶变换方法、系统和存储介质 | |
CN101470600B (zh) | 一种超长指令字处理的方法和装置 | |
Tan et al. | A pipelining loop optimization method for dataflow architecture | |
Jocksch et al. | Optimized all‐to‐all communication on multicore architectures applied to FFTs with pencil decomposition | |
US10303484B2 (en) | Method for implementing a line speed interconnect structure | |
CN112506468B (zh) | 支持高吞吐多精度乘法运算的risc-v通用处理器 | |
CN206470741U (zh) | 一种基于分布式功能单元的微处理器架构 | |
CN117561501A (zh) | 一种多线程数据处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |