用于执行simd乘法-累积运算的装置及方法

xiaoxiao2020-7-22  4

专利名称:用于执行simd乘法-累积运算的装置及方法
技术领域
本发明涉及用于执行SIMD (单一指令多重数据)乘法_累积(MAC)运算的装置及方法。
背景技术
当有必要对若干独立数据元素执行特定数据处理运算时,一种用于加速此运算的执行的已知方法是使用SIMD (单一指令多重数据)方法。根据SIMD方法,将多个这些数据元素并排置放于寄存器内,且接着并行地对这些数据元素执行运算。可受益于SIMD方法的一种类型的运算为乘法_累积运算,该乘法_累积运算可采取A+B X C或A-B X C的形式。通常对B和C的不同值执行乘法运算B X C多次,其中接着将每一乘法结果相加至运行累积值(running accumulate value)A,或自运行累积值A减去。考虑产生单一乘法-累积结果所需要的运算,自前文论述将了解,需要多个独立乘法运算,且通过使用SIMD数据处理电路,可并行执行多个这些所需乘法以增加乘法-累积运算的输出量。然而,还存在某些类型的运算,其中需要执行多个独立乘法-累积运算以便产生多个乘法_累积结果,但每一乘法_累积运算所使用的输入数据之间存在显著重叠。需要多个乘法-累积运算的运算的一个特定实例为有限脉冲响应(FIR)滤波运算,该有限脉冲响应(FIR)滤波运算是在数字信号处理器(DSP)中实施的标准信号处理任务。FIR滤波运算通常用于许多信号处理应用中,诸如通信、音频处理、视频处理或图像处理。许多当代数字信号处理器以及通用微处理器使用SIMD数据处理电路以便利用存在于运算(诸如FIR滤波运算)中的数据级并行性。然而,一个重要问题为如何有效地向量化FIR滤波运算以便利用数据处理装置的SIMD能力。荷兰代尔夫特工业大学(Delft University of Technology)计算机工程实验室(Computer Engineering Laboratory)白勺 Shahbahrami 等人白勺论 JC "Efficient Vectorization of the FIR Filter”(出现在因特网}lhUp://ce. et. tudelft.nl/ publica tionfiles/1090_ 509_ shahbahrami_prorisc2005. pdf)概述了 用于向量化 FIR 滤波运算的各种技术。根据第一技术,通过向量化内部循环(inner loop)来向量化FIR滤波器,以使得该内部循环并行计算单一输出的若干项。因此,通过此方法,在单一迭代期间在 SIMD数 据处理电路内并行执行形成单一乘法_累积结果所需的多个乘法运算,且因此依次决定每一乘法_累积结果,其中该处理电路的SIMD能力用于加快每一乘法_累积结果的计算。根据所描述的替代技术,向量化FIR滤波器的外部循环,使得内部循环并行计算若干输出中的一项。因此,根据此技术,在每一迭代中,关于所需乘法_累积结果中的每一个执行一个乘法_累积计算,以使得并行执行所有所需的乘法_累积运算,且在该过程的最后迭代之后可得到乘法_累积运算中的每一个的最后乘法_累积结果。该论文还描述第三机制, 其中同时向量化内部循环与外部循环。在克萨斯州(Texas)奥斯汀市(Austin)摩托罗拉公司(Motorola Inc)M Phillip的论 文“AltiVec (TM) Technology: A second Generation SIMD Microprocessor Architecture"(出现在因特网 Al http://www. hotchips. org/archives/hclO/2_Mon/ HC10. S5/HC10. 5. 3. pdf)中描述一种用于向量化内部循环的技术,其中使用跨越求和 (sum-across)型指令。此文献描述使用AltiVec乘法指令来向量化内部FIR循环或外部 FIR循环的技术。然而,外部循环技术使用向量乘法(或乘法-累积)运算,这些运算并不同时执行数据重配置功能。
挪威禾斗技大学(Norwegian University of Science and Technology)电子及电信学院(Department of Electronics and Telecommunications) H Naess 的公开"A Programmable DSP for Low-Power, Low-Complexity Baseband Processing,,(出现在因特
http://www. diva-portal, org/ntnu/abstract. xsql dbid=1095)描述用于向量化夕卜部循环从而得到重复的向量累积及移位运算的技术。特别地,此公开的图9示出使用两个向量输入及一个内部移位寄存器的运算。此运算经由在重复循环中发布多个指令而执行多次(例如,如该文献中的表10中所论述的那样)。尽管使用内部移位寄存器允许数据的一些内部重配置,但有必要通过重复循环迭代多次以便执行所要计算,且每次重复重复循环时, 需要对指令进行译码及执行,且需要从存储器存取新数据值。上文描述的现有技术通常旨在改良FIR计算的性能。然而,另一重要问题为功率消耗。本发明的发明者认识到,当执行一系列的MAC运算时(诸如当执行FIR运算时所需), 存在三个主要活动,即指令提取及译码、乘法_累积计算,及在每一迭代之前对数据元素适当排序所需的向量数据重配置计算。此外,发明者注意到,在指令提取及译码以及向量数据重配置计算中消耗显著功率,例如所消耗总功率的25-40%。因此,需要提供用于执行SIMD乘法-累积运算的经改良的技术,其与已知现有技术相比降低了功率消耗。

发明内容
从第一方面来看,本发明提供一种数据处理装置,其包含SIMD数据处理电路,其响应于控制信号而对多个数据元素并行执行数据处理运算;指令译码器电路,其耦合至所述SIMD数据处理电路,且响应于程序指令而产生所述控制信号;所述指令译码器电路响应于将输入数据元素的第一向量、系数数据元素的第二向量以及指示所需的多个迭代M的标量值作为输入操作数的重复乘法_累积(重复MAC)指令而产生控制信号以控制所述SIMD 数据处理电路执行乘法-累积处理的所述多个迭代,该乘法-累积处理的每一迭代包含并行执行N个乘法-累积运算以便产生N个乘法-累积数据元素;对于每一迭代,决定来自所述第一向量的N个输入数据元素以及来自所述第二向量的要在该N个乘法-累积运算期间与该N个输入数据元素中的每一个相乘的单一系数数据元素;以及输出自在该乘法-累积处理的最后迭代中产生的该N个乘法-累积数据元素导出的N个乘法-累积结果。根据本发明,提供单一指令(本文中称为重复MAC指令),其将输入数据元素的第一向量、系数数据元素的第二向量及指示所需的多个迭代M的标量值作为输入操作数。指令译码器电路响应于此重复MAC指令以产生控制信号,这些控制信号用于控制SIMD数据处理电路执行乘法_累积处理的多个迭代,其中每一迭代涉及并行执行N个乘法-累积运算。在每一迭代期间,SIMD数据处理电路决定来自第一向量的N个输入数据元素及来自第二向量的单一系数数据元素。在执行多个迭代之后,SIMD数据处理电路接着输出N个乘法-累积
结果。
因此,使用本发明,可使用单一指令来使得SIMD数据处理电路执行乘法-累积处理的由作为该指令的输入操作数提供的标量值决定的多个迭代,以便直接产生多个乘法-累积结果。由于所有指定迭代所需的所有数据元素可直接从被作为指令的输入操作数提供的第一向量及第二向量导出,因此与已知现有技术相比,可实现能量消耗的显著降低, 现有技术需要执行程序循环多次,且在每一次通过循环期间存取存储器。特别地,本发明提供可在无其它寄存器或指令读取的情况下执行以便产生多个乘法_累积结果的单一指令, 从而与已知现有技术相比节省显著能量消耗。本发明的重复MAC指令可用于多种目的。然而,在一个实施例中,使用重复MAC指令来执行FIR滤波运算,且所产生的N个乘法-累积结果形成N个FIR结果。因此,根据本发明的这样的实施例,可使用单一指令来使得SIMD数据处理电路执行乘法_累积处理的多个迭代以便从该单一指令直接产生多个FIR结果。此方法提供用于产生这样的FIR结果的特别具能量效益的机制。SIMD数据处理电路可以以多种方式配置。然而,在一个实施例中,SIMD数据处理电路具有用于决定用于每一迭代的N个输入数据元素及单一系数数据元素的状态机。在一个特定实施例中,提供至SIMD数据处理电路的控制信号中的一个识别所需迭代的数目M, 且状态机产生内部控制信号,这些内部控制信号取决于正执行的迭代而改变,且用于选择用于每一迭代的输入数据元素以及单一系数数据元素。在一个特定实施例中,第一向量中的输入数据元素的数目为至少N+M-1,且状态机通过使得相对于用于迭代P-I的N个数据元素执行移位运算而决定用于迭代P的N个输入数据元素。在执行第一迭代时,选择初始的N个输入数据元素。在一个实施例中,状态机对于每一迭代决定来自该第二向量的不同系数数据元素。然而,在一些实施例中,对于多于一个迭代保持系数数据元素相同。这样可(例如)使得能够响应于单一指令而执行若干独立乘法_累积处理,其中对于每一乘法_累积处理在最后迭代后产生N个乘法-累积结果。或者,可通过每一迭代改变系数数据元素,但对于多于一个迭代保持输入数据元素相同而响应于单一指令执行若干独立乘法_累积处理。在一个实施例中,重复MAC指令还将初始乘法-累积数据元素的向量作为输入操作数。在替代实施例中,可能不提供这样的初始乘法-累积数据元素的向量,而替代地在开始该过程时将累积器初始化为零。由于根据本发明,重复MAC指令指定指示所需的多个迭代的标量值作为其输入操作数中的一个,所以SIMD数据处理电路响应于重复MAC指令以执行所需计算而采取的时钟周期的数目并不是预定的,且将取决于对于重复MAC指令的任何特定示例所指定的标量值而显著改变。通常,在数据处理装置的各种其它组件的活动与由SIMD数据处理电路响应于该重复MAC指令而执行的计算之间存在某些相依性。举例而言,自程序存储器提取以供由 SIMD数据处理电路执行的后续指令将不能够由SIMD数据处理电路执行,直至其已完成关于该重复MAC指令所需的计算为止。此外,被提取以由数据处理装置的其它组件执行的指令可能不能够被执行,直至SIMD数据处理电路已完成响应于该重复MAC指令所需的计算为止(举例而言,若这些指令指定N个乘法-累积结果中的任一个作为输入操作数)。
为减轻由这些问题导致的不必要的功率消耗,在一个实施例中,状态机根据标量值决定迭代的数目M,且在正执行该多个迭代中的至少一个时将停止信号(stall signal) 断言(assert)至数据处理装置的一个或多个组件。在一个特定实例中,该停止信号用以在断言该停止信号时暂停指令提取。考虑到诸如特定组件的管线深度等方面,发布停止信号的时间长度将取决于特定实施例。在一个实施例中,在多个迭代中的除一个以外的所有迭代期间发布该停止信号,藉此(例如)通过避免在指令提取活动中所消耗的任何不必要的功率而使得显著功率节省。尽管在一个实施例中,每一时钟周期完成一迭代,但应了解,并不要求每一时钟周期完成一迭代,且在替代实施例中,可在每一迭代的完成之间存在多于一个时钟周期。 在一个实施例中,该数据处理装置进一步包含用于存储数据元素的SIMD寄存器组,该SIMD数据处理电路在执行该乘法-累积处理的所述多个迭代之前从该SIMD寄存器组的寄存器存取所述第一向量及第二向量,藉此在执行该乘法-累积处理的所述多个迭代期间无需关于该第一向量及该第二向量而对SIMD寄存器组进行进一步存取。通过避免在执行该乘法-累积处理的该多个迭代期间存取该SIMD暂存区组的需要,可实现显著功率节省。在一个特定实施例中,输入数据元素的第一向量具有为N的倍数的若干输入数据元素,且SIMD数据处理电路通过存取SIMD寄存器组的多个寄存器而存取这些输入数据元素,所述多个寄存器中的每一个含有N个输入数据元素。在一个实施例中,系数数据元素的第二向量具有小于或等于N的若干系数数据元素,且这些系数数据元素是从该SIMD寄存器组的一个寄存器存取的。然而,在替代实施例中,系数数据元素的第二向量具有为N的倍数的若干系数数据元素,且该SIMD数据处理电路通过存取该SIMD寄存器组的多个寄存器而存取所述系数数据元素。在一个实施例中,该数据处理装置进一步包含用于存储N个乘法_累积数据元素的乘法_累积寄存器。尽管在一个实施例中,此乘法_累积寄存器可由该SIMD寄存器组内的一个或多个寄存器提供,但在替代实施例中,该乘法_累积寄存器是独立于该SIMD寄存器组而提供。在一个实施例中,这些输入数据元素中的每一个包含X个位,这些系数数据元素中的每一个包含Y个位,且存储于该乘法-累积寄存器中的每一乘法-累积数据元素在大小上为至少X+Y个位。由于该乘法-累积寄存器存储N个乘法-累积数据元素,所以应该了解,该乘法_累积寄存器需要比SIMD寄存器组中的用于存储输入数据元素或系数数据元素的寄存器宽。尽管X与Y可不同,但在一个实施例中,X与Y相同,使得输入数据元素与系数数据元素具有相同大小。尽管每一乘法_累积数据元素在大小上可确切地为X+Y个位,但在一个实施例中, 该乘法_累积寄存器以扩展形式存储这些乘法_累积数据元素,该扩展形式包括用于决定溢位(overflow)的额外位。因此,当自在乘法-累积处理的最后迭代中产生的N个乘法-累积数据元素导出N个乘法-累积结果时,可考虑这些额外位以便检测已发生溢位的情形,且相应地修改相关的乘法-累积数据元素。可以多种方式自该扩展形式导出N个乘法-累积结果。在一个实施例中,使扩展形式元素饱和至结果元素的大小,使得在结果元素的范围外的值由其在范围内最接近的值替换。在另一个实施例中,这些结果元素是通过采用扩展形式元素的选定部分且废弃其余位而形成。其它实施例可进行两者且使扩展形式元素的选定部分饱和。 尽管在一个实施例中,输入数据元素及系数数据元素为实数,但在其它实施例中, 输入数据元素及系数数据元素中的至少一个为包含实部及虚部的复数(complex number). 在一个这样的复数实施例中,乘法_累积处理的每一迭代包含并行执行N个复数乘法-累积运算以便产生N个复数乘法-累积数据元素,且N个乘法-累积结果输出为复数。在一个实施例中,输入数据元素及系数数据元素中的仅一个将为复数。举例而言, 输入数据元素可为复数,而系数数据元素可为实数。在一个这样的实施例中,可在执行复数乘法_累积运算之前将系数数据元素转换为复数形式。在另一个实施例中,输入数据元素及系数数据元素二者都为包含实部及虚部的复数。在一个实施例中,每一复数乘法-累积运算涉及执行一系列的乘法、加法及减法运算,以便产生相应复数乘法_累积数据元素的实部及虚部。在一个实施例中,系数数据元素为复数,且可在执行N个复数乘法_累积运算之前使该复数系数数据元素共轭。通常,此涉及对复数系数数据元素的虚部求反(negate)。执行此共轭的能力可以在乘法_累积处理的多个迭代期间处理复数的方式来提供灵活性。存在指定这样的共轭的多种方式,但在一个实施例中,可提供重复MAC指令的非共轭及共轭变数两者。响应于这样的共轭重复MAC指令,指令译码器电路被配置成产生额外控制信号来使得SIMD数据处理电路在执行N个复数乘法-累积运算之前对复数系数数据元素的虚部求反。尽管在一个实施例中,乘法_累积运算可使得每一乘法结果相加至执行累积值, 但在替代实施例中,这些乘法_累积运算可形成乘法_减法运算,其中每一乘法结果自运行累积值减去。在一个特定实施例中,使得执行乘法-累积处理的多个迭代(在其期间,这些乘法_累积运算使得将乘法结果相加至运行累积值)的重复MAC指令之后是另一使得执行乘法_累积处理的多个迭代的重复MAC指令,其中此时所执行的这些乘法_累积运算使得将乘法结果自运行累积值减去。指令的这样的组合可为有用的(例如,当对复数执行运算时)。在一个实施例中,由指令译码器电路产生的控制信号中的一个指定是否需要舍入,且若需要舍入,则状态机被配置成使得将舍入增量注入在所述多个迭代中的一个(例如,该最后迭代)中执行的每一乘法_累积运算中。因此,重复乘法_累积指令可指定需要舍入,且在这种情况下,状态机被配置成允许除最后迭代外的所有迭代在无舍入的情况下进行,且使舍入增量接着注入在最后迭代中执行的每一乘法-累积运算中,以便实施所需舍入。作为实例来考虑输入数据元素及系数数据元素中的每一个在长度上为16位的情形, 则所产生的乘法_累积数据元素在大小上将为32位。若不需要舍入,则将输出全32位结果。然而,若需要舍入,则需要输出16个最高有效位作为结果,但执行舍入运算以考虑将不直接包括于结果中的16个最低有效位。为执行所需舍入,在位位置15处注入舍入增量(假定32个位编号是通过位位置0至31给出,且位位置31为最高有效位)。当通过重复MAC 指令指定舍入时,状态机确保仅在最后迭代期间应用舍入,以便确保舍入处理仅应用于用以形成最后乘法_累积结果的最后乘法_累积数据元素。
然而,尽管在前述实施例中,在最后迭代期间注入舍入增量,但在替代实施例中, 可在任一迭代中注入舍入增量,因此舍入无需留至最后迭代。在一个实施例中,由指令译码器电路产生的控制信号中的一个指定要产生的乘法-累积数据元素是饱和的还是非饱和的,且SIMD数据处理电路中的累积电路是取决于所述控制信号而加以配置。因此,在本发明的实施例中,可指定重复MAC指令的饱和及非饱和
变数。
尽管加于标量值选择上的约束将取决于实施,但在一个实施例中,将标量值约束为小于或等于N。在这样的实施例中,假定所需迭代的数目小于或等于N,则有可能经由单一重复 MAC指令来执行乘法-累积处理的多个迭代以便产生N个乘法-累积结果,其中这些乘法_累积结果表示所要的实际最后结果。然而,若需要多于N个迭代,则此可通过使用一系列的重复MAC指令来达成,其中每一后续重复MAC指令采用来自先前重复MAC指令的乘法_累积结果作为输入。因此,在一个实施例中,若需要N+Q个迭代(其中Q小于或等于N), 则第一重复MAC指令具有指示N个迭代的标量值,且之后是另一重复MAC指令,该另一重复 MAC指令具有指示Q个迭代的标量值且将由SIMD数据处理电路响应于该第一重复MAC指令而产生的N个乘法-累积结果识别为初始乘法_累积数据元素的向量。在一个实施例中,若如由该重复MAC重量指定的所述标量值大于可执行的迭代的最大数目(通常为第二向量中系数数据元素的数目),则将该标量值设定为等于所述最大数目,且所述SIMD数据处理电路执行所述乘法_累积处理的所述最大数目的迭代。在一个实施例中,该指令译码器电路响应于一系列的重复MAC指令而产生控制信号来控制该SIMD数据处理电路执行一系列的乘法-累积级,每一乘法-累积级执行所述乘法_累积处理的所述多个迭代,且至少一个乘法_累积级使用由先前乘法_累积级所产生的N个乘法-累积结果作为输入。尽管可出于多种原因(例如,因为所需迭代的数目超过N) 使用这样的方法,但在一个特定实施例中,使用该序列的乘法-累积级来对复数执行重复 MAC运算。在这种情形中,输入数据元素及系数数据元素皆将包括实部及虚部,且需要四个乘法_累积级以便产生所需的实数及虚数乘法_累积结果。在需要执行一系列的乘法_累积级的一个实施例中,则可布置指令译码器电路以响应于单一重复MAC指令而产生控制信号来控制所述SIMD数据处理电路执行至少两个乘法_累积级,每一乘法_累积级执行所述乘法_累积处理的所述多个迭代,其中每一乘法_累积级所需的输入数据元素及系数数据元素是根据该第一向量及该第二向量决定的。 因此,响应于单一重复MAC指令,可并行执行多个乘法_累积级,在一个特定实施例中,能够并行执行两个乘法_累积级。这在其中对于这些级中的两个或更多个重复使用输入数据元素或系数数据元素的情况中是有用,因为其意谓这些数据元素仅需要自寄存器组/存储器存取一次,藉此得到进一步改良的能量节省。在一个特定实施例中,输入数据元素在两个乘法-累积级之间重复使用,用于一个级的每一迭代之后是使用相同N个输入数据元素的另一级的对应迭代。系数数据元素的每一迭代被改变,使得不同系数数据元素用于该两个级中的每一个。在一特定实施例中,将标量值M约束为小于或等于N/2,以使得可通过含有N个系数数据元素的SIMD寄存器的内容来提供所需的系数数据元素。然而,替代地,可通过使用多于一个SIMD寄存器提供系数数据元素的第二向量来移除对M的此限制。从第二方面来看,本发明提供一种使用SIMD数据处理电路及指令译码器电路来处理数据的方法,该SIMD数据处理电路响应于控制信号而对多个数据元素并行执行数据处理运算,并且该指令译码器电路耦合至所述SIMD数据处理电路且响应于程序指令而产生所述控制信号,所述方法包含以下步骤对将输入数据元素的第一向量、系数数据元素的第二向量以及指示所需的多个迭代M的标量值作为输入操作数的重复乘法_累积(重复 MAC)指令进行译码,以产生控制信号;以及用这些控制信号控制所述SIMD数据处理电路以通过以下步骤产生乘法_累积结果执行乘法_累积处理的所述多个迭代,该乘法_累积处理的每一迭代包含并行执行N个乘法-累积运算以便产生N个乘法-累积数据元素;对于每一迭代,决定来自所述第一向量的N个输入数据元素以及来自 所述第二向量的要在该N 个乘法_累积运算期间与该N个输入数据元素中的每一个相乘的单一系数数据元素;以及输出自在该乘法_累积处理的最后迭代中产生的该N个乘法-累积数据元素导出的N个乘法-累积结果。从第三方面来看,本发明提供一种数据处理装置的虚拟机实施,所述虚拟机实施响应于将输入数据元素的第一向量、系数数据元素的第二向量以及指示所需的多个迭代M 的标量值作为输入操作数的重复乘法_累积(重复MAC)指令而通过以下步骤产生乘法-累积结果执行乘法-累积处理的所述多个迭代,该乘法-累积处理的每一迭代包含并行执行 N个乘法-累积运算以便产生N个乘法-累积数据元素;对于每一迭代,决定来自所述第一向量的N个输入数据元素以及来自所述第二向量的要在该N个乘法-累积运算期间与该N 个输入数据元素中的每一个相乘的单一系数数据元素;以及输出自在该乘法_累积处理的最后迭代中产生的该N个乘法-累积数据元素导出的N个乘法-累积结果。从第四方面来看,本发明提供一种数据处理装置,其包含SIMD数据处理构件,其用于响应于控制信号而对多个数据元素并行执行数据处理运算;以及指令译码器构件,其耦合至所述SIMD数据处理构件,用于响应于程序指令而产生所述控制信号;其中所述指令译码器构件响应于将输入数据元素的第一向量、系数数据元素的第二向量以及指示所需的多个迭代M的标量值作为输入操作数的重复乘法_累积(重复MAC)指令而产生控制信号来控制所述SIMD数据处理构件通过以下步骤产生乘法_累积结果执行乘法_累积处理的所述多个迭代,该乘法_累积处理的每一迭代包含并行执行N个乘法-累积运算以便产生N个乘法-累积数据元素;对于每一迭代,决定来自所述第一向量的N个输入数据元素以及来自所述第二向量的要在该N个乘法-累积运算期间与该N个输入数据元素中的每一个相乘的单一系数数据元素;以及输出自在该乘法_累积处理的最后迭代中产生的该N个乘法-累积数据元素导出的N个乘法-累积结果。


图IA及图IB示意性地图示根据本发明的一个实施例的由SIMD数据处理电路响应于重复乘法_累积指令而执行的乘法_累积处理的迭代;
图2为示意性地说明可使用本发明的实施例的技术的数据处理装置的框图; 图3为更详细地说明本发明的一个实施例的SIMD MAC电路的图; 图4为说明图3中所示的状态机的操作的状态图;图5为说明根据图3的实施例所产生的各种信号的时序图6示意性地说明根据本发明的一个实施例的在每一迭代中执行的乘法_累积处理; 图7示意性地说明根据本发明的一个实施例的如何自输入数据元素的第一向量导出各迭代的N个输入数据元素;
图8示意性地说明根据本发明的一个实施例的如何自系数数据元素的第二向量导出每一迭代所用的系数向量;
图9示意性地图示如何利用本发明的实施例的一系列的重复MAC指令来对复数执行 FIR滤波运算;
图10说明图3中所示实施例的本发明的替代实施例,其中SIMD MAC电路可响应于单一重复MAC指令而并行执行两个独立乘法-累积级; 图11为图10的电路的时序图;以及
图12为示意性地说明虚拟机实施的图,该虚拟机实施用于利用本发明的实施例的重复MAC指令来执行程序代码。
具体实施例方式根据本发明的实施例,提供重复乘法_累积(重复MAC)指令,其采用输入数据元素的第一向量(Vd)、系数数据元素的第二向量(VC)及指示所需的多个迭代M的标量值作为输入操作数。可选地,该重复MAC指令也可采用初始乘法-累积数据元素(本文中也称为初始累积数据元素)的向量作为输入操作数。当由指令译码器电路对此指令进行译码时,产生控制信号,该控制信号用以控制 SIMD数据处理电路以便产生由以下方等式给出的向量累积器输出
vaccfi] = vc
十…·十w[M· 1 ]*vd[i十M-1 ] 对于向量中的所有“i,,
若指定初始乘法-累积数据元素的向量,则此等式变为
vaccp] = vacc(i}+vc(0]*vdfi] + ·...寺 w[M4] vd[i+M-l!对于向量中的所有 “ i ”
SIMD数据处理电路可视为提供N个并行处理路线(lane),且在一个实施例中,上述等式中的变量“i”采用0与N-I之间的所有值。因此,如图IA及图IB中所说明的那样,SIMD 数据处理电路将产生含有N个乘法-累积结果的向量累积器输出10,其中这些N个乘法-累积结果是在执行图IA或图IB中所示的M个迭代之后产生的。图IA说明在未指定初始乘法_累积数据元素的向量的情况下执行的乘法_累积处理的迭代,且图IB说明在指定初始乘法_累积数据元素的向量的情况下执行的乘法_累积处理的迭代。应注意,在图IA及图IB中,且实际上在先前提及的等式中,在VaCC、VC或vd后 的方括号中的数字指示这些向量的正被运算的特定数据元素。因此,如自图IA或图IB显而易见,在第一迭代期间,来自系数向量vc的第一系数数据元素用于所有N个并行处理路线中,其中每一路线采用来自输入数据元素的向量vd的不同输入数据元素(始于第一输入数据元素)。在迭代2中,在所有路线上使用下一系数数据元素,且所使用的输入数据元素的向量类似于第一迭代中所使用的输入数据元素的向量,但移位一个数据元素位置。在每一迭代之间改变系数数据元素及输入数据元素的方式是相同的,使得第M迭代所使用的系数数据元素及输入数据元素为示出于图IA或图IB中右手栏中的这些数据元素。
向量VaCC、VC及vd中的数据元素可为实数或复数。因此,每一迭代可执行实数或复数乘法-累积运算,其中第M迭代产生N个实数或复数结果。当考虑执行复数乘法-累积运算的实例时,图IA及图IB中的框中的乘法中的每一个将涉及执行一系列的乘法、加法及减法运算,以便产生相应复数乘法结果数据元素的实部及虚部。特别地,考虑vc(k) * vd(l)的一般情况,将执行以下计算
乘法实部结果=[vdR(l) * vcR(k)]編[VdI(I) * vcl(k)]
乘法虚部结果=[VdR(I) * vcl(k)] + [vdl(l) * vcR(k)]
(其中“R”表示实数分量,且“ I ”表示虚数分量)。接着将这些实数及虚数乘法结果与先前实数及虚数累积结果进行累积。尽管在以上实例中,输入数据元素及系数数据元素两者皆为复数,但在替代实施例中,可将这些数据元素中仅一个在输入向量中被提供为复数。举例而言,虽然可将输入数据元素提供为复数,可将系数数据元素提供为实数。在一个实施例中,将此情形处理为上文所述的复数实施例的特殊情况,其中vd及 vacc向量的数据元素为复数,而vc的系数数据元素为实数。为执行此运算,可如下将实数 vc元素在内部转换为复数
且接着可如上文所论述执行复数乘法-累积运算。如先前所提及,根据本发明的实施例,图IA或图IB中所说明的所有运算可由SIMD 数据处理电路响应于单一重复MAC指令而执行,且因此,该N个乘法-累积结果10所有均响应于该单一指令而产生。此外,在本发明的实施例中,在执行图第IA或图第IB中所示的计算之前将所有所需的输入数据元素及系数数据元素自SIMD寄存器组读取至SIMD数据处理电路的内部寄存器中,因此避免在执行图IA或图IB中所示的计算期间进一步存取SIMD 寄存器组的需要。为实现此功能性,输入数据元素的第一向量将包括至少N+M-1个数据元素,且系数数据元素的第二向量将包括至少M个系数数据元素。在一个特定实施例中,将标量值M限制为小于或等于N,且通过提供两个N-元素SIMD寄存器的内容以形成输入数据元素的第一向量,且通过提供一个N-元素SIMD寄存器的内容以提供系数数据元素的第二向量来满足以上要求。尽管响应于重复MAC指令而执行的运算可以在多种情形中有用,其提供用于执行 HR滤波运算的尤其有能量效益的机制,其中向量累积器输出10中的M个乘法-累积结果中的每一个形成FIR结果。对于重复MAC功能模型的若干变数中的每一个,以下C代码根据标准向量抽取及向量与标量乘法提供图IA以及图IB的上述运算的功能模型。1)重复MAC,其中初始累积器归零。vacc - vrolalnsl6(vacc, vext_sli!vd0,vdl,P), vget_iane_sl€(vc, Arn vmlal η ai6 !vacc, veKt Sl€(vdO,vdl, ), vqet lane s16(vc, P)); 2)重复MAC,其中初始累积器作为输入向量c 4)使重复MAC饱和,其中初始累积器作为输入向量。
5)使重复MAC饱和并舍入,其中初始累积器归零。 vint32L_t vqr4mla2_Ez_sl6<vintl6__t vdO, viotl6_t veil vintl6_t vc, ui t_t M 6)使重复MAC饱和并舍入,其中初始累积器作为输入向量。
v!nt32L t{vint32L_t 5Ufacci i intl6_t ^rdQf vintlS—t ν ,
^int X6 t vcr nint t Μ}
vacc 驚 vqdmlal π s!6 Cvaccr vext_s!6 CvdO4. udl, P) ^ irgefc_lane_slS (n cf P)); 1 丨― , 一一 return yqrdmlaX η sl6 vaccr vext sl6{^d0> vdl,P}, vget lane s!6 Cvcf )) 7
*■----- ------------------“·'^tm-"^rUUmm*' 7)重复乘法与减法,其中初始累积器归零。 8)重复乘法与减法,其中初始累积器作为输入向量。
9)使重复乘法与减法饱和,其中初始累积器归零。 10)使重复乘法与减法饱和,其中初始累积器作为输入向量。 12)使重复乘法与减法饱和并舍入,其中初始累积器作为输入向量。 vint32L t TOrdtalsI r slS{vint32L t%riritl6 t %π! , ν ηt veil
13)复数重复MAC,其中初始累积器归零。
vint32L_t vinlal rz c!6vdQ, ^intl6_t ^rdlf¥intlS__tuint_t M)
I— ——一
uint^t,
ν£rt132L·—t vacG譯血]p—32L CO} ι15)复数共轭重复MAC,其中初始累积器归零。
%rinZ32t^t vmlB.l_conj_xz_cl6 (^intl6 t vdOr vint!6 t ^dlr ^intlG t wcf
m~滅■_
{
vintJlh^t iracc vdup_B_s32LCC>S ;
M = <H>-EiEHENTCl6) ? ELEMENTC16 : Μ; M - Μ<1) ? {M-D ι.
for FmQ ι P<M; P++》 f
vacc vmlal_conj_it_cl6(-vaccf vext_cX6 [^dOi veil, P) r ifget(vc^ P》} i
T "“
retam vmlal eon{vacc vext_cl6 (VdOr-^dli P3 ,· VgotsJLane書cU
}胃一16)复数共轭重复MAC,其中初始累积器作为输入向量。
考虑上文实例1,此C代码的第一行识别重复MAC指令,该重复MAC指令采用输入数据元素向量VdO及vdl (—起构成输入数据元素的第一向量vd)、形成系数数据元素的向量的系数向量vc以及形成指示所需迭代的数目的标量值的整数值M作为输入。接着在 C代码的其余部分中开始响应于该指令而执行的运算。首先,初始化整数变量P,其后将乘法-累积向量vacc初始化为零(此由代码的第二行vint32L_t vacc=vdup_n_s32L(0)来执行)。然而,向量vd0、vdl及vc中的各个数据元素为16位宽,向量vacc内的各个数据元素为32位宽以便适应使16-位输入数据元素与16-位系数数据元素相乘而产生的乘法结果。接下来,执行对标量值M的两个核查。特别地,若M大于或等于参数N (在C代码中称为ELEMENTS16),则将M设定为等于N,而否则标量值M保持不变。其次,若M小于1,则将其设定为等于零,而否则将其设定为等于M-I。接着以P=O开始进入循环,且在P小于M时重复该循环(每次重复该循环时P递增)。在每一迭代中,执行乘法-累积运算(识别为vmlal_n_S16)。使用获得路线程序、自向量vc选择第P系数数据元素,连同接着将该单一系数数据元素广播至向量(即,形成所有皆相同的N个独立系数数据元素(此广播功能性由vmlal_n_S16运算中的“η”指示))而决定所使用的系数数据元素。如所示的那样,作为至MAC运算的输入的所需的N个输入数据元素是使用移位运算vext_sl6而取决于P的值自VdO及vdl选出。最后,自向量vacc选取累积输入。一旦已完成循环的所需数目的迭代,则执行最后vmlal_n_S16运算以便返回结果。假定在进入循环之前将M设定为等于M-1,则需要此最后迭代。实例2类似于实例1,但此处初始乘法-累积向量vacc由指令指定。实例3至12 说明饱和以及饱和并舍入变数,连同每一个的乘法-减法版本。实例13类似于实例1,但向量VaCC、VC及vd的数据元素为复数,且在每一迭代中, 执行复数乘法-累积运算(识别为vmlal_n_C16)及复数移位运算(识别为veXt_cl6)。实例15类似于实例13,但使系数数据元素共轭以便在执行乘法-累积运算之前反转系数数据元素的虚部的正负号。实例14及16分别类似于实例13及15,但在此等实例中,初始乘法-累积向量vacc由指令指定。尽管实例13至16表示对应于实数实例1及2的复数变数(以非共轭及共轭形式两者),但将了解,可容易地提供所有实数实例1至12的复数变数。图2说明根据本发明的一个实施例的数据处理装置,在此特定实例中,数据处理装置采用数字信号处理器(DSP)IOO的形式。尽管由DSP 100执行的运算可采用多种形式, 但在一个实施例中,可使用DSP来执行无线基带处理功能。无线基带对这样的集成电路的处理能力要求很高。所需的数据输出量大,且使DSP内提供的不同元件平衡以使所有元件在高效率下使用是重要的。如图2中所示,该DSP包括SIMD部分105,该SIMD部分105包括SIMD乘法-累积电路110及各种其它SIMD处理电路120。SIMD MAC电路110及该其它 SIMD处理电路120两者皆可存取SIMD寄存器组140,该SIMD寄存器组140存储SIMD处理电路所需的数据元素的向量。SIMD MAC电路110也可存取用以保持在MAC运算期间产生的累积数据元素的一个或多个SIMD累积寄存器130。在一个实例中,SIMD MAC电路110及其它SIMD处理电路130具有32个并行处理路线,每一个为16位宽,其可用以对自SIMD寄存器组提供的算术值执行乘法、加法及混排 (shuffle)运算。自SIMD寄存器组140内的一个或多个输入值寄存器中的各个元素选取 16-位数据字,以便提供所需输入值至并行处理路线中的每一个。

通常,SIMD电路将被管线化,且在一个实施例中,SIMD MAC电路形成3级管线,使得在将计算发布至管线中三个周期之后可得到计算结果。在一个实施例中,各个处理路线是由控制器160自程序存储器165检索的256-位极长指令字(VLIW)指令控制。此VLIW指令通常也将包括用以控制DSP 100的标量部分145 内的标量处理电路150的标量指令,该标量处理电路150可存取一个或多个标量寄存器组 155。控制器160将包括一个或多个指令译码器,该一个或多个指令译码器用以对VLIW指令内的指令进行译码,且将所需控制信号发送至SIMD部分105内的电路及标量部分145内的电路。控制器也将视需要且在需要时将控制信号发送至加载/存储单元170以使得从数据存储器175检索数据以供存储于SIMD寄存器组140或标量寄存器组155中,或用于使得数据从寄存器组存储回至数据存储器175。标量处理电路150与上述SIMD处理电路并行操作且主要用以执行控制操作。标量处理电路中的一个也可控制地址产生单元,该地址产生单元负责产生用以存取数据存储器175中的数据值的存储器存取地址。在一个实施例中,标量处理电路150具有1至3个管线级,且数据存储器175具有3个周期或6个周期的等待时间。考虑本发明的实施例的重复MAC指令,此指令可出现于由控制器160从程序存储器165检索的VLIW指令中,且在对该重复MAC指令进行译码后,即将控制信号发布至SIMD 部分105,且特别地发布至SIMD MAC电路110以使得SIMD MAC电路110执行乘法-累积处理的多个迭代以便实施图IA或图IB中示意性说明的运算序列。图3为更详细说明提供于SIMD MAC电路110中以提供所需功能性的组件的图。 寄存器220及222被提供用于最初存储向量vdO及vdl (共同形成输入数据元素的第一向量vd),而寄存器246用以存储系数数据元素的第二向量。使用多路复用器M8、1 :N转换器 250及多路复用器M2,单一系数数据元素可被选择以用于每一迭代,且跨越N个路线广播以便形成存储于寄存器MO中的系数的向量。在乘法-累积处理的第一迭代期间,此经由 1 N转换器244达成,该1 N转换器244选取第一系数数据元素且将其在N个路线上广播, 藉此避免使用寄存器M6的1个周期的延迟。尽管在第一迭代中,寄存器220含有向量VdO (即,向量vd的前N个输入数据元素),但对于每一后续迭代,寄存器220的内容可使用移位电路2 加以改变,该移位电路 226接纳来自寄存器组222的数据元素中的一个(经由多路复用器224)及寄存器220的当前内容,且执行移位(移位1个数据元素)以便建立下一迭代所需的输入数据元素,该结果接
20着经由多路复用器230路由回至寄存器220中。如图3中接着示出,SIMD MAC电路110具有N个并行处理路线沈0,每一路线包括框沈0中所说明的组件(寄存器264可视为横跨所有路线),且每一路线对输入寄存器220、 240中的每一个内的N个数据元素中的一个进行运算。特别地,乘法器电路262使寄存器 220中的输入数据元素中的一个与来自寄存器MO的系数数据元素相乘,结果存储于寄存器沈4中。在下一时钟周期中,加法器电路268使用自归零电路(set to zero circuitry) 272提供的累积值及来自寄存器沈4的乘法结果来执行累积运算。通常,控制信号开启线 (control signal on line) 217将停用归零功能性,且因此,将自SIMD累积寄存器130接收累积结果。然而,可选择地,重复MAC指令可指定零值初始累积值,且在该情况下,在第一迭代期间,控制信号开启线217将启用归零功能性,因此确保在第一周期中不使用累积值。尽管重复MAC指令通常将指定乘法加法运算(其中将每一迭代中的乘法结果相加至运行累积结果),但其可替代地指定乘法减法运算(其中自运行累积值减去每一迭代中的乘法结果)。在限定乘法减法运算的情况下,控制信号开启线216将使得求反电路266对寄存器沈4中的数据元素在输入至加法器沈8中之前求反。类似地,重复MAC指令可指定所产生的乘法-累积数据元素是饱和还是非饱和的。 若其为非饱和的,则通常,输入数据元素的大小及/或累积寄存器130的大小将被选择以使得累积结果不可能饱和。然而,若指令指定乘法-累积数据元素是饱和的,则饱和电路270 经由路径219接收控制信号以使其能够在将来自加法器沈8的输出路由至SIMD累积寄存器130之前对该输出进行评估。特别地,饱和逻辑评估溢位位以决定输出乘法-累积数据元素是否跨越边界从最大正数转变至最小负数,或从最小负数转变至最大正数,且若如此, 则修改结果,以使其分别保持处于该最大正数或最小负数。还提供控制信号218以允许在最后迭代期间将可选舍入增量注入由加法器268执行的加法中,若重复MAC指令指定需要舍入,则使用此控制信号218。若需要舍入,则仅在最后迭代中执行舍入以便确保产生正确的数学结果,且因此仅在最后迭代期间注入可选舍入增量值是重要的,这将由在下文更详细论述的状态机200来控制。上文论述的各种电路元件的操作由状态机200控制,当要由SIMD MAC电路110执行的每一 SIMD指令由控制器160译码时,状态机200接收各种控制信号。如图3中所示出,状态机在对指令进行译码后接收三个信号。第一信号为经由路径202发布的重复指示,且若设定此信号,则其指示正被译码的指令为重复MAC指令,而若未设定此信号,则其指示正被译码的指令为标准MAC指令。经由路径204接收的信号为给出迭代的数目的重复数信号,此信号由来自存储于标量寄存器组155中的标量值提供,且不用于标准MAC指令。所接收的最后信号为经由路径206接收的mult_Cmd信号,且其提供标准乘法器命令信息,诸如乘法-累积为乘法加法还是乘法减法、累积值为饱和的还是非饱和的、是否需要舍入、是否指定初始累积值,或是否应在开始运算时清除累积,及任何其它相关控制信号。在替代实施例中,可自形成重复MAC指令的输入操作数中的一个的标量值导出重复数信号,在该情况下,该重复数信号由控制器160而非自标量寄存器组155提供。图4示出状态机的两个基本状态。在重设后,状态机处于无重复状态300且保持于无重复状态直至其在路径202上接收到处于设定状态的重复信号及经由路径204接收到指定若干迭代的重复数信号为止。在这些条件下,状态机的状态自无重复状态300转变至重复状态310。状态机发布若干控制信号至SIMD MAC电路110内的各种组件,该控制信号包括经由路径212的mcyc_en信号,该mcyc_en信号在状态机处于无重复状态300时设定为逻辑值0,且在状态机处于重复状态310时设定为逻辑1值。在处于重复状态310时,状态机维持被称为mCyC_Cnt信号的计数器,其在执行每一迭代时自初始重复数信号值M递减,且当mCyC_Cnt信号小于或等于1时,状态机自重复状态310转变回至无重复状态300。图5为说明由状态机200响应于其经由路径202、204及206接收的三个输入信号而产生的各种信号(在这些信号识别重复MAC指令的执行的情形中)的时序图。考虑多路复用器230,由状态机200经由路径212发布的mcyc_en信号用以控制该多路复用器,使得一旦已断言该信号,则多路复用器将其在其左手侧(自移位电路226)接收的输入输出至寄存器220。因此,在第一周期中,在断言mcyc_en信号之前,来自SIMD寄存器组的输出经由多路复用器路由至寄存器220中,且如先前所提及,此意味将向量寄存器内容vdO置于寄存器220内。在随后周期中,多路复用器230将由所断言的mcyc_en信号来起动以选择左手输入,且如先前所论述,此左手输入将由移位电路2 基于寄存器220 的内容及在多路复用器224的控制下自寄存器222选择的数据元素中的一个而产生。多路复用器2M接收如图5中所示的mCyC_elem_sel信号,且依据该信号自寄存器222选择相关数据元素。因此,参看图IA或图IB将可见,用于每一迭代的寄存器220的内容将为图IA 或图IB中示意性示出的用于每一迭代的输入数据元素。考虑多路复用器M2,则在不存在重复MAC指令的情况下,多路复用器M2的左手输入将传播至寄存器240中。特别地,多路复用器242接收两位控制信号,该两位控制信号是由状态机经由路径212输出的mcyc_en信号及由状态机经由路径202接收的重复信号形成。在不存在重复MAC指令的情况下,两个位皆被清除至逻辑零状态。在出现重复MAC指令时,重复信号将在第一时钟周期期间被设定为高,但在设定状态下将不由状态机212输出mcyc_en信号直至下一时钟周期。因此,在第一时钟周期期间,至寄存器MO的输入将由至多路复用器对2的中间输入给出,此中间输入由1:N转换器电路244使用系数的向量 vc中的第一系数数据元素(S卩,vcW])产生。对于重复MAC指令期间的每一随后周期,将设定经由路径212发布的mcyc_en信号,且因此,将自至多路复用器M2的右手输入选取至寄存器MO的输入,如先前所论述,该右手输入在多路复用器M8的控制下自寄存器246 的内容(即,系数数据元素的第二向量)产生。类似于多路复用器224,多路复用器248接收 mCyC_elem_sel信号且因此依序步进通过系数数据元素中的每一个。考虑多路复用器对8, 若mCyC_elem_sel为i,则此多路复用器选择系数数据元素i+1。为了完整起见,在图5中说明从寄存器D 240及寄存器A 220的输出,其中VCtl指示用于第一迭代中的系数的向量,VDtl指示用于第一迭代中的输入数据元素的向量,等等。如图3中所示,经由路径206接收的mult_Cmd信号锁存于寄存器205中,且接着随后路由至多路复用器210,在多路复用器210处,其可在各种命令信息接着在第三时钟周期中经由路径216、217、218及219传播之前传播至寄存器215。仅插入两个寄存器205、 215以确保在传播命令信息时所需的三个周期的延迟,以使得该命令信息在正确周期传递至累积电路。如图5中所示,状态机还可产生mult_Cmd信号的略加修改的版本以供经由路径208路由至多路复用器210的另一输入端,且接着发布控制信号(mult_Cmd_ex控制信号)至多路复用器以指示应将左手输入还是右手输入作为mult_Cmd_ex信号传播至多路复用器215。此控制信号设定为高,同时mcyc_en或mcyc_ex (图5中所示的mcyc_en的管线式版本)设定为高。因此,对于第一迭代,如图5中所示,所接收的mult_cmd OP将作为OPO经由路径 208输出,且被选择用于自多路复用器210输出,OPO与OP相同,除了在OP指定舍入的情形中,在该情况下,OPO将停用舍入以确保在第一迭代中不注入舍入增量。对于下一迭代直至最后迭代,状态机将经由路径208发布0P1,该OPl将与原始OP相同,但其中始终启用累积,且始终停用舍入,且将自多路复用器210传播OPl。如先前所提及,原始OP可识别应将初始累积归零,但显而易见,此情形应仅发生于第一迭代期间,且其后有必要启用累积。需要保持停用舍入直至最后周期,以便确保发生正确的数学舍入。如还在图5中所示,在最后迭代中,mult_Cmd_ex信号将被设定为0P2,该0P2将与原始OP相同,但其中始终启用累积, 且将从多路复用器210传播0P2。因此,此时,若原始OP指定舍入,则0P2还将指定舍入,且将使得经由路径218注入舍入增量。图5中的mult_Cmd_eX信号示出多路复用器210的输出,其将导致一个周期后自寄存器215发布信号mult_Cmd_Wb以控制运算的写回级。如还在图3中所示,经由路径212发布的mcyc_en信号可可选择地锁存于寄存器 214中,以产生图5中所示的停止信号。可使用此信号来使得控制器在断言停止信号时暂停指令提取,藉此降低功率消耗。图6示意性说明由根据本发明的实施例中的N个路线沈0内的SIMD MAC电路110 执行的乘法-累积运算。如图6中所示,多路复用器沈2内的该N个路线接收N个输入数据元素400及通过复制单一系数数据元素N次而形成的系数向量410,且基于所述输入数据元素400及系数向量410而执行所需的乘法,从而导致产生存储于寄存器沈4内的N个乘法数据元素420。假定所述输入数据元素及系数数据元素中的每一个为16位宽,则该乘法数据元素中的每一个将为至少32位宽。此后,将该N个乘法数据元素420相加(或可选择地相减,若启动求反电路沈6的话)至从电路272输入的N个乘法-累积数据元素430。通常,此将为SIMD累积寄存器130 的内容,其将为来自先前迭代的N个乘法-累积数据元素,或将为初始乘法-累积数据元素的向量。或者,对于第一迭代,该N个乘法-累积数据元素将均被归零。加法的结果为产生 N个乘法-累积数据元素440,其存储回至SIMD累积寄存器130。图7示意性地说明如何布置图3中的电路元件220、222、2M及226以自输入数据元素的原始第一向量vd产生用于第一迭代的N个输入数据元素。特别地,最初,向量vdO 450存储于寄存器220中,且向量vdl 460存储于寄存器222中。在第一迭代上,寄存器220 的内容不变,且因此,N个输入数据元素470路由至多路复用器沈2。在下一迭代中,移位电路2 接收寄存器220的当前内容(S卩,向量vdO 450),且还从存储于寄存器222中的向量 vdl接收第一数据元素(即,vd[N]),且执行移位一个数据元素的向右移位运算,使得所得N 个输入数据元素480被产生且经由多路复用器230传回至寄存器220中。每一随后迭代以类似方式进行,以便产生图IA或图IB中所示的该系列N个输入数据元素向量。图8示意性地说明如何自存储于寄存器M6中的系数数据元素的第二向量vc导出用于每一迭代的系数向量。在第一迭代上,选择第一系数数据元素vc
且接着将其复制N次以形成系数向量510。如先前所论述,在一个实施例中,此实际上使用1:N转换电路 244而非使用寄存器对6的内容达成,以便避免一个周期的传播延迟。在下一周期中,选择第二系数数据元素vc[l]且将其复制N次以形成系数向量520,该系数向量520自1:N转换器250经由多路复用器242输入至寄存器MO中。对于每一随后迭代,选择下一系数数据元素且以相同方式操纵以便产生图IA或图IB中所示的该系列系数向量。在上述实施例中,重复MAC指令处理实数。然而,如先前所论述,在替代实施例中, 重复MAC指令可能被布置成处理复数,其中(在输入数据的第一向量、系数的第二向量及N 个乘法-累积结果中的)所有数据元素为复数且所有运算为复数运算。考虑图3的实例,此可通过将乘法电路262布置为复数乘法器来达成,复数乘法器可被布置成执行先前第11页所论述的实部及虚部的四个乘法,连同所需的加法及减法以便产生具有实部及虚部的乘法结果。可继而将加法器268布置为复数加法器以关于实部及虚部执行所需的累积运算以便产生被更新的复数累积值。若正执行乘法-减法运算,则求反电路266将对由乘法电路262 产生的复数乘法结果在输入至加法器268之前进行求反。在正处理复数共轭重复MAC指令的情况下,可将额外控制信号提供至乘法电路 262以使其在执行所需乘法运算之前反转系数数据元素的虚部的正负号。作为以以上方式处置复数的替代,如图9中示意性地说明,还可使用四个非复数重复MAC指令来合成复数FIR滤波器(MR filter)。特别地,在图9的上部,示出产生乘法-累积结果的实数分量及虚数分量所需的等式(“R”指示实数分量,且“I”指示虚数分量)。在图9的下半部中,示出产生这些结果所需的一系列的四个指令,其中用于每一指令的输入操作数识别于方括号中。因此,第一重复MAC指令使用vdR及vcR作为输入向量执行乘法加法,且初始累积值为零。对于所有四个指令,将标量值设定为相同值M。第二重复 MAC指令接着使用向量vdl及vcl作为输入且将由第一重复MAC指令产生的累积结果设定为初始累积结果而完成产生vaccR结果。应注意,第二重复MAC指令具有减法变型,且因此执行乘法减法运算。第三及第四重复MAC指令接着以类似方式产生vaccl结果,但此时该两个重复MAC指令中的第二个(重复MAC 4)再次为一加法变数。尽管在本发明的上述实施例中,每一重复MAC指令接收输入数据元素的第一向量及系数数据元素的第二向量,且产生N个乘法-累积结果的一个集合,但在替代实施例中, 一个重复MAC指令可被布置成产生N个乘法-累积结果的两个或更多个集合,其中输入操作数或系数数据元素在所执行的两个或更多个乘法-累积处理间重复使用。此实施例将参考图10的框图及图11的时序图加以论述。用于图10中的装置用于启用SIMD MAC电路110以并行执行两个乘法-累积级, 以便全部均响应于由控制器160译码的单一重复MAC指令产生N个乘法-累积结果的两个独立集合。如从图10与前述图3的比较所显而易见,电路基本上相同,经历少数修改。首先,提供两个SIMD累积寄存器600、610而非单一 SIMD累积寄存器130,且提供某一些相关联的存取控制电路620,该存取控制电路620由状态机200所发布的控制信号控制,如下文将更详细论述。此外,在图3中用以决定至寄存器220的输入的多路复用器230现由三个输入多路复用器630替换,该输入多路复用器630由从由状态机200输出的控制信号导出的两位信号控制。仅需要注意的另一点是,尽管在图3中,多路复用器2M及248两者由来自状态机的相同控制信号来控制,但如将参考图11的时序图更详细论述,其现由两个不同信号控制。如从图11的时序图与图5的时序图的比较显而易见,图11类似于图5,但额外示出用于图10的电路中的额外控制信号。如图10中所示,多路复用器M8由mcyc_c_sel信号控制,该mcyc_c_sel信号如图11中所示在每一迭代期间递增。尽管所指定的迭代的数目为M,但假定存在两个正被实施的独立乘法-累积级,则mCyC_Coimt自2M-1递减。由于 mcyc_c_sel信号在每一迭代期间递增,可以看到,从寄存器D 240输出的系数向量在每一迭代期间改变。相比的下,多路复用器224由mCyC_b_Sel信号控制,如从图11显见,该mcyc_b_ sel信号仅每两个迭代递增。如图10中所示,来自寄存器A 220的输出作为中间输入路由回至多路复用器630。当设定mcyc_en信号时,多路复用器630将取决于由状态机200经由路径212输出的mCyC_a_en信号的值而将其中间输入或其左手输入输出至寄存器220。如图11中所示,此信号在每一迭代中在设定状态与清除状态间交替,藉此确保自寄存器220 的输出对于两个迭代维持相同,因为其内容仅可响应于mCyC_a_en信号变高而正是两个迭代更新一次。一旦已完成第一迭代所需的三个初始周期,则由存取控制电路620从状态机200 接收的mcyc_acc_ctrl信号也在每一时钟周期振荡。当此信号处于逻辑零位准时,存取 SIMD累积寄存器600,且当其处于逻辑1位准时,存取SIMD累积寄存器610。这确保对于独立乘法-累积级中的每一个维持的累积数据元素独立地留存于独立SIMD累积寄存器600、 610 内。如从图10及图11的以上描述显而易见,在此实施例中,被选择用于每一迭代的输入数据元素的向量对于两个乘法-累积级都重新使用。然而,系数数据元素并未重新使用, 并且相反,系数数据元素的不同向量用于乘法-累积级中的每一个,第一乘法-累积级使用向量W0Ui等,且第二乘法-累积级使用向量VCpVCpVQ等。因此,可见在此实施例中,如自SIMD寄存器组中的寄存器中的每一个提供的系数数据元素的第二向量含有被封装使得每一交替系数数据元素与相同乘法-累积级相关的各个系数数据元素。在此实施例中,将标量值M限制为小于或等于N/2,使得存储于寄存器246中的N个系数数据元素足以提供图11中所示的系数数据元素的2M个独立向量集合。然而,在替代实施例中,图10中的电路可被修改以使得可使用两个SIMD寄存器的内容来提供系数数据元素的第二向量, 藉此允许标量值M为小于或等于N的任何值。提供使得能够在SIMD MAC电路110内并行执行两个独立乘法-累积级的单一重复MAC指令在各种情形中可能是有用的。在一个实施例中,这样的指令用以降低在执行对复数执行FIR滤波运算时所需的各种乘法-累积级时的能量消耗。举例而言,考虑图9,可使用一个指令来执行级vaccK = vaccK+vdK. vcK及Vacc1 = vacCl+vdK. Vc1两者。特别地,可显见,量可在两个级间共享,但使用先前参考图10及图11描述的机制来选择系数数据元素的不同向量。因此,实际上,可由图9中所示的两个重复MAC指令”重复MAC 1 ”及” 重复MAC 3 ”执行的功能性可包含于单一重复MAC指令中。类似地,由两个重复MAC指令 “重复MAC 2”及“重复MAC 4”执行的功能性也可包含在单一重复MAC指令中,但在此情况下,将需要在每一迭代间交替地启用及停用求反电路沈6,以使得在一累积寄存器中留存乘法减法程序的结果,而在另一累积寄存器中留存乘法加法程序的结果。在所有以上实施例中,将了解,若将标量值限制为小于或等于N,仍有可能通过一个接一个地使用多个重复MAC指令执行计算(需要多于N个迭代),其中随后重复MAC指令采用由先前重复MAC指令产生的N个乘法-累积结果作为其初始乘法-累积数据元素。尽管可通过执行一系列本地指令(包括以上提及的重复MAC指令)的硬件来执行上述技术,但将了解,在替代实施例中,这样的指令可执行于虚拟机环境中,其中该指令对于虚拟机为本地的,但虚拟机由执行于具有不同本地指令集合的硬件上的软件实施。虚拟机环境可提供仿真执行全指令集合的全虚拟机环境或可为部分的,例如,仅一些指令(包括本发明的技术的指令)由硬件捕集且由部分虚拟机模拟。更具体言的,上述重复MAC指令可作为对于全虚拟机或部分虚拟机为本地的指令来执行,其中该虚拟机连同其基础硬件平台组合地操作以提供上述SIMD处理电路。图12说明可使用的这种虚拟机实施。尽管前述实施例在用于操作支持相关指令的特定处理硬件的装置及方法方面实施本发明,但也有可能提供硬件器件的所谓的虚拟机实施。这些虚拟机实施在运行支持虚拟机程序880的主机操作系统860的主机处理器840 上运行。通常,需要大的功率强大的处理器来提供以合理速度执行的虚拟机实施,但这样的方法在某些情境中可以是适当的,诸如当为兼容性或重新使用原因而想要运行对于另一处理器为本地的代码时。虚拟机程序880提供与应用程序900的应用程序接口,该应用程序接口与可真实硬件(由虚拟机程序880建模的器件)提供的应用程序接口相同。因此,程序指令(包括上述重复MAC指令)可使用虚拟机程序880自应用程序900内执行以建模其与虚拟机硬件的互动。尽管已在本文中描述特定实施例,但将了解,本发明不限于此,且可在本发明的范畴内对其进行许多修改及添加。举例而言,可在不脱离本发明的范畴的情况下进行以下独立权利要求的特征与从属权利要求的特征的各种组合。
2权利要求
1.一种数据处理装置,包含SIMD数据处理电路,其响应于控制信号而对多个数据元素并行执行数据处理运算;指令译码器电路,其耦合至所述SIMD数据处理电路且响应于程序指令而产生所述控制信号;所述指令译码器电路响应于将输入数据元素的第一向量、系数数据元素的第二向量、 以及指示所需的多个迭代M的标量值作为输入操作数的重复乘法-累积(重复MAC)指令, 而产生控制信号以控制所述SIMD数据处理电路执行乘法_累积处理的所述多个迭代,该乘法_累积处理的每一迭代包含并行执行N 个乘法_累积运算,以便产生N个乘法-累积数据元素;对于每一迭代,决定来自所述第一向量的N个输入数据元素、以及来自所述第二向量的要在该N个乘法-累积运算期间与该N个输入数据元素中的每一个相乘的单一系数数据元素;以及输出自在该乘法_累积处理的最后迭代中产生的该N个乘法-累积数据元素导出的N 个乘法-累积结果。
2.如权利要求1所述的数据处理装置,其中该重复MAC指令用于执行FIR滤波运算,且产生的该N个乘法-累积结果形成N个FIR结果。
3.如权利要求1或2所述的数据处理装置,其中该SIMD数据处理电路具有状态机,该状态机用于决定用于每一迭代的该N个输入数据元素及该单一系数数据元素。
4.如权利要求3所述的数据处理装置,其中该第一向量中输入数据元素的数目至少为 N+M-1,且该状态机通过使得相对于用于迭代P-I的该N个数据元素执行移位运算而决定用于迭代P的该N个输入数据元素。
5.如权利要求3或4所述的数据处理装置,其中该状态机对于每一迭代决定来自所述第二向量的不同系数数据元素。
6.如之前任一权利要求所述的数据处理装置,其中该重复MAC指令也将初始乘法_累积数据元素的向量作为输入操作数。
7.如权利要求1-5中任一项所述的数据处理装置,其中未指定初始乘法_累积数据元素的向量,且该N个乘法-累积数据元素在该乘法_累积处理的该第一迭代之前归零。
8.如从属于权利要求3的之前任一项所述的数据处理装置,其中该状态机自该标量值决定迭代的数目M,且在正执行该多个迭代中的至少一个时,断言停止信号至该数据处理装置的一个或多个组件。
9.如权利要求8所述的数据处理装置,其中该停止信号在除该多个迭代中的一个迭代外的所有迭代期间被断言。
10.如之前任一权利要求所述的数据处理装置,进一步包含用于存储数据元素的SIMD 寄存器组,该SIMD数据处理电路在执行该乘法-累积处理的所述多个迭代之前,自该SIMD 寄存器组的寄存器存取所述第一向量及第二向量,藉此在执行该乘法_累积处理的所述多个迭代期间无需关于该第一向量及第二向量而对该SIMD寄存器组进行进一步存取。
11.如权利要求10所述的数据处理装置,其中输入数据元素的该第一向量具有为N的倍数的若干输入数据元素,且该SIMD数据处理电路通过存取该SIMD寄存器组的多个寄存器而存取所述输入数据元素,所述多个寄存器中的每一个含有N个输入数据元素。
12.如权利要求10或11所述的数据处理装置,进一步包含用于存储N个乘法-累积数据元素的乘法-累积寄存器。
13.如权利要求12所述的数据处理装置,其中该输入数据元素中的每一个包含X个位, 该系数数据元素中的每一个包含Y个位,且存储于该乘法_累积寄存器中的每一乘法_累积数据元素在大小上至少为X+Y个位。
14.如权利要求13所述的数据处理装置,其中该乘法_累积寄存器以扩展形式存储该乘法-累积数据元素,该扩展形式包括用于决定溢位的额外位。
15.如之前任一权利要求所述的数据处理装置,其中该输入数据元素及该系数数据元素中的至少一个为包含实部及虚部的复数;该乘法_累积处理的每一迭代包含并行执行N个复数乘法-累积运算以便产生N个复数乘法-累积数据元素;以及该N个乘法-累积结果输出为复数。
16.如权利要求15所述的数据处理装置,其中该输入数据元素及该系数数据元素二者皆为包含实部及虚部的复数。
17.如权利要求15或16所述的数据处理装置,其中每一复数乘法_累积运算涉及执行一系列的乘法、加法,及减法运算,以便产生相应复数乘法_累积数据元素的实部及虚部。
18.如权利要求15-17中任一项所述的数据处理装置,其中所述系数数据元素为复数, 且在每一迭代中,该复数系数数据元素在执行该N个复数乘法-累积运算之前取共轭。
19.如之前任一权利要求所述的数据处理装置,其中所述乘法-累积运算为乘法-减法运算。
20.如从属于权利要求3的之前任一权利要求所述的数据处理装置,其中由该指令译码器电路产生的控制信号中的一个指定是否需要舍入,且若需要舍入,则该状态机被布置以使得将舍入增量注入在所述多个迭代中的一个中执行的每一乘法_累积运算中。
21.如之前任一权利要求所述的数据处理装置,其中由该指令译码器电路产生的控制信号中的一个指定要产生的乘法_累积数据元素是饱和的还是非饱和的,且该SIMD数据处理电路中的累积电路取决于所述控制信号而被配置。
22.如之前任一权利要求所述的数据处理装置,其中所述标量值小于或等于N。
23.如权利要求22所述的数据处理装置,其中若需要N+Q个迭代,其中Q小于或等于N, 则第一重复MAC指令具有指示N个迭代的标量值,且之后是另一重复MAC指令,该另一重复 MAC指令具有指示Q个迭代的标量值,且将由该SIMD数据处理电路响应于该第一重复MAC 指令而产生的该N个乘法-累积结果识别为初始乘法_累积数据元素的向量。
24.如之前任一权利要求所述的数据处理装置,其中若由该重复MAC指令指定的所述标量值大于可被执行的迭代的最大数目,则该标量值被设定为等于所述最大数目,且所述 SIMD数据处理电路执行所述乘法_累积处理的所述最大数目的迭代。
25.如之前任一权利要求所述的数据处理装置,其中该指令译码器电路响应于一系列的重复MAC指令而产生控制信号,来控制所述SIMD数据处理电路以执行一系列的乘法_累积级,每一乘法_累积级执行所述乘法_累积处理的所述多个迭代,且至少一个乘法_累积级使用由先前乘法_累积级所产生的该N个乘法-累积结果作为输入。
26.如权利要求1-24中任一项所述的数据处理装置,其中该指令译码器电路响应于单一重复MAC指令而产生控制信号,来控制所述SIMD数据处理电路以执行至少两个乘法_累积级,每一乘法_累积级执行所述乘法_累积处理的所述多个迭代,其中每一乘法_累积级所需的输入数据元素及系数数据元素是根据该第一向量及该第二向量决定的。
27.如权利要求25或26所述的数据处理装置,其中该多个乘法_累积级用以对复数执行重复的MAC运算。
28.一种使用SIMD数据处理电路及指令译码器电路来处理数据的方法,该SIMD数据处理电路响应于控制信号而对多个数据元素并行执行数据处理运算,该指令译码器电路耦合至所述SIMD数据处理电路且响应于程序指令而产生所述控制信号,所述方法包含以下步骤对将输入数据元素的第一向量、系数数据元素的第二向量、以及指示所需的多个迭代M 的标量值作为输入操作数的重复乘法-累积(重复MAC)指令进行译码,以产生控制信号;以及用所述控制信号控制所述SIMD数据处理电路,以由下述步骤产生乘法_累积结果执行乘法_累积处理的所述多个迭代,该乘法_累积处理的每一迭代包含并行执行N 个乘法_累积运算,以便产生N个乘法-累积数据元素;对于每一迭代,决定来自所述第一向量的N个输入数据元素、以及来自所述第二向量的要在该N个乘法-累积运算期间与该N个输入数据元素中的每一个相乘的单一系数数据元素;以及输出自在该乘法_累积处理的最后迭代中产生的该N个乘法-累积数据元素导出的N 个乘法-累积结果。
29.一种数据处理装置的虚拟机实施,所述虚拟机实施响应于将输入数据元素的第一向量、系数数据元素的第二向量、以及指示所需的多个迭代M的标量值作为输入操作数的重复乘法_累积(重复MAC)指令,以由下述步骤产生乘法_累积结果执行乘法_累积处理的所述多个迭代,该乘法_累积处理的每一迭代包含并行执行N 个乘法_累积运算,以便产生N个乘法-累积数据元素;对于每一迭代,决定来自所述第一向量的N个输入数据元素、以及来自所述第二向量的要在该N个乘法-累积运算期间与该N个输入数据元素中的每一个相乘的单一系数数据元素;以及输出自在该乘法_累积处理的最后迭代中产生的该N个乘法-累积数据元素导出的N 个乘法-累积结果。
30.一种数据处理装置,包含SIMD数据处理构件,用于响应于控制信号而对多个数据元素并行执行数据处理运算;以及指令译码器构件,其耦合至所述SIMD数据处理构件,用于响应于程序指令而产生所述控制信号;其中所述指令译码器构件响应于将输入数据元素的第一向量、系数数据元素的第二向量、以及指示所需的多个迭代M的标量值作为输入操作数的重复乘法_累积(重复MAC)指令,而产生控制信号来控制所述SIMD数据处理构件以由下述步骤产生乘法_累积结果执行乘法_累积处理的所述多个迭代,该乘法_累积处理的每一迭代包含并行执行N个乘法-累积运算,以便产生N个乘法-累积数据元素;对于每一迭代,决定来自所述第一向量的N个输入数据元素、以及来自所述第二向量的要在该N个乘法-累积运算期间与该N个输入数据元素中的每一个相乘的单一系数数据元素;以及 输出自在该乘法_累积处理的最后迭代中产生的该N个乘法-累积数据元素导出的N 个乘法-累积结果。
全文摘要
一种用于执行SIMD乘法-累积运算的装置及方法,其包括SIMD数据处理电路,其响应于控制信号而对多个数据元素并行执行数据处理运算。指令译码器电路耦合至该SIMD数据处理电路,且响应于程序指令而产生所需的控制信号。该指令译码器电路响应于将输入数据元素的第一向量、系数数据元素的第二向量、以及指示所需的多个迭代的标量值作为输入操作数的单一指令(此处被称为重复乘法-累积指令),而产生控制信号来控制该SIMD处理电路。响应于这些控制信号,该SIMD数据处理电路执行乘法-累积处理的这些多个迭代,每一迭代涉及并行执行N个乘法-累积运算以便产生N个乘法-累积数据元素。对于每一迭代,该SIMD数据处理电路决定来自所述第一向量的N个输入数据元素、以及来自所述第二向量的要与N个输入数据元素中的每一个相乘的单一系数数据元素。接着使用在该乘法-累积处理的最后迭代中产生的N个乘法-累积数据元素,来产生N个乘法-累积结果。此机制提供一种用于执行例如FIR滤波器处理所需的SIMD乘法-累积运算的尤其有能量效益的机制。
文档编号G06F9/302GK102197369SQ200980139996
公开日2011年9月21日 申请日期2009年9月16日 优先权日2008年10月8日
发明者D·H·赛姆斯, M·维尔德, R·E·布鲁斯 申请人:Arm有限公司

最新回复(0)