CN102053817B - 用于执行乘法累加运算的设备和方法 - Google Patents

用于执行乘法累加运算的设备和方法 Download PDF

Info

Publication number
CN102053817B
CN102053817B CN201010530682.9A CN201010530682A CN102053817B CN 102053817 B CN102053817 B CN 102053817B CN 201010530682 A CN201010530682 A CN 201010530682A CN 102053817 B CN102053817 B CN 102053817B
Authority
CN
China
Prior art keywords
data element
multiplication
input
predicate
data processing
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.)
Active
Application number
CN201010530682.9A
Other languages
English (en)
Other versions
CN102053817A (zh
Inventor
D·H·赛姆斯
M·维尔德
G·拉里
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ARM Ltd
Original Assignee
ARM Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by ARM Ltd filed Critical ARM Ltd
Publication of CN102053817A publication Critical patent/CN102053817A/zh
Application granted granted Critical
Publication of CN102053817B publication Critical patent/CN102053817B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Complex Calculations (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

提供用于执行乘法累加运算的数据处理设备及方法。该设备包括:数据处理电路,响应控制信号对至少一个输入数据元素执行数据处理操作。指令解码器电路响应将第一、第二输入数据元素和谓词值指定为输入操作数的谓词乘法累加指令,生成控制信号来控制数据处理电路通过下述来执行乘法累加运算:第一输入数据元素与第二输入数据元素相乘,以产生乘法数据元素;如果谓词值具有第一值,则通过将乘法数据元素与初始累加数据元素相加产生结果累加数据元素;如果谓词值具有第二值,则通过从初始累加数据元素减去乘法数据元素产生结果累加数据元素。

Description

用于执行乘法累加运算的设备和方法
技术领域
本发明涉及一种用于执行乘法累加(MAC)运算的设备和方法。
背景技术
乘法累加(MAC)运算在数据处理系统中是频繁使用的。MAC运算可以采用的形式是A+B*C或A-B*C。乘法运算B*C典型地对于B和C的不同的值执行多次,其中,每次乘法结果然后与运行累加值A相加(或从运行累加值A中减去)。
专用MAC电路通常提供于数据处理系统内,用于对背对背(back-to-back)MAC运算的性能进行优化。这种MAC电路可以提供于标量处理电路内,在此,乘法累加指令序列一个接一个地执行,以执行所需的乘法累加运算迭代。然而,用于对这种运算的性能进行加速的一种已知方法是采用SIMD(单指令多数据)方法。根据SIMD方法,多个数据元素并排地放入寄存器内,然后在多个并行处理通道内对这些数据元素并行地执行所需的运算。考虑到生成单个乘法累加结果所需的运算,据上述讨论应理解,需要多个分离的乘法运算,并且通过使用SIMD数据处理电路,多个这种所需的乘法可以被并行执行,以增加乘法累加运算的吞吐量。至于标量电路而言,在SIMD数据处理电路内,可以提供专用MAC电路,用于对乘法累加运算的性能进行优化。
频繁使用MAC运算的一类数字信号处理运算是滤波运算。当使用专用MAC单元时,有可能相对较快地执行复数滤波运算。使用这种滤波运算的一个特定示例是当对接收到的无线电信号与导频信号进行比较时,接收机将导频信号用作已知的基准信号。导频信号将典型地在已知正幅度与已知负幅度之间交替,以限定已知的导频波形。当执行这种滤波运算时,必须贯穿整个滤波运算执行乘法加法运算和乘法减法运算,其中,在任何特定时间点的导频信号的形式确定是需要乘法加法运算还是需要乘法减法运算。
当在标量MAC电路内搜索以执行这种运算时,将可能构建当被运行时执行所需运算的乘法加法指令和乘法减法指令的序列。然而,关于所需的确切的乘法加法运算和乘法减法运算序列的判断需要在编译时间而非运行时间进行,因此该序列可以仅对于特定导频信号而被构建。这种方法因此缺少灵活性,并且从代码密度的观点来看并不是所期望的。
更典型地,人们可能期望在SIMD MAC电路内执行这种滤波运算。在这些情况下,可以发出乘法加法指令,以使得多个乘法加法运算在多通道处理内被并行执行,并且相似地,可以发出乘法减法指令,以使得多个乘法减法运算在多个并行处理通道内被并行执行。为了执行前述滤波运算,将典型地需要使用一种指令形式(例如乘法加法指令),然后按预定时间间隔将导频信号的幅度编码为数据元素的矢量,即直接标识正幅度值和负幅度值二者。这需要存储器中的很多空间来对导频信息进行编码,并且每次导频信号改变时,这些大的信息矢量就将需要被重新计算。甚者,即使导频信号照旧,但导频信号的幅度因接收特性的变化而改变,存储器内的矢量也将需要被重新编程。
或者如果判断出试用并且使用乘法加法指令和乘法减法指令二者,则这将典型地带来某些数据重排问题,并且还有代码密度问题。
因此,虽然期望使用专用MAC电路来执行滤波运算,但难以使用已知的MAC技术来高效地执行特定类型的滤波运算。
当乘法数据元素(例如先前所指的元素C)之一大小恒定但仅符号改变(如实际上对于先前所描述的导频信号的情况那样)时可以采用的一种替换方法将是:在加法器单元内执行加法和减法序列,随后将结果单次乘以恒定幅度值。在这些加法器单元内,已知的是提供谓词加法/减法指令,这将根据指令中所提供的谓词值要么执行两个数的加法,要么执行两个数的减法。虽然这种指令将为执行加法运算和减法运算序列提供灵活性,但对于关于加法运算和减法运算序列的结果的背对背累加,加法器电路典型地在硬件上并未得以优化,因此将不提供专用MAC电路将提供的性能。甚者,加法器单元内的运行累加值典型地保存于与输入操作数相同大小的寄存器中,相应地,将绞尽脑汁地确保运行累加值不上溢或者下溢,典型地,这样贯穿累加处理需要使用各种估计和移位类型运算,进一步影响了性能。与之对照,在MAC单元中,累加值典型地保存于比输入操作数更大的寄存器中,由此允许保留更高精度的累加值,而无上溢或下溢之风险。甚者,当使用加法器电路然后随之进行所需的加法时,将需要执行分离乘法指令来执行所需的乘法,以完成滤波运算。
相应地,通常人们认为不实际的是:在分离加法器电路内进行搜索以执行这些滤波运算,随后在分离乘法器电路内进行乘法。
相应地,将期望提供一种技术,在需要乘法加法运算和乘法减法运算的可变序列的情况下(例如先前描述的滤波运算的情况下),其使得乘法累加运算得以高效地在乘法累加电路内执行。
发明内容
根据第一方面,本发明提供一种数据处理设备,包括:数据处理电路,其响应于控制信号而对至少一个输入数据元素执行数据处理操作;指令解码器电路,其耦合到所述数据处理电路,并且响应于程序指令而生成所述控制信号;所述指令解码器电路响应于将第一输入数据元素、第二输入数据元素和谓词值指定为输入操作数的谓词乘法累加指令,以生成控制信号来控制所述数据处理电路通过下述步骤来执行乘法累加运算:将所述第一输入数据元素与所述第二输入数据元素相乘,以产生乘法数据元素;如果谓词值具有第一值,则通过将乘法数据元素与初始累加数据元素相加来产生结果累加数据元素;以及如果谓词值具有第二值,则通过从初始累加数据元素减去乘法数据元素来产生结果累加数据元素。
根据本发明,提供一种谓词乘法累加指令,其当由指令解码器电路进行解码时,使得所述数据处理电路根据指令所指定的谓词值的值执行乘法加法运算或乘法减法运算。通过使用这些谓词乘法累加指令中的一个或多个,于是有可能以高效方式在专用MAC电路内提供复数滤波运算。具体地说,关于是需要乘法加法运算还是需要乘法减法运算的判断可以在运行时间而非编译时间进行,带来的是明显的代码密度改善。进而,使用谓词值可以减少保存待相乘的输入数据元素的细节所需的存储器的量,尤其是在经过多个乘法累加运算时数据元素之一以正号形式或负号形式被重新使用的情况下。并非必须分别为每一乘法累加运算存储该数据元素的值,而是可以将数量(magnitude)存储在单个标量寄存器中,并且可以为每一乘法累加运算提供分离的谓词值,以标识是需要加法还是减法,结果是更高效地使用了存储器资源。
本发明的方法使得能够在需要乘法加法运算和乘法减法运算的组合的情况下当执行乘法累加运算序列时实现使用专用MAC单元的性能优势。当采用本发明的方法时,当与已知的现有技术相比时,可以实现能耗方面的明显减少。
在一个实施例中,所述数据处理电路还包括:至少一个寄存器组(bank),用于存储所述输入操作数,其中,所述谓词乘法累加指令标识包含所述谓词值的所述至少一个寄存器组中的寄存器。可以提供专用谓词寄存器组,或者另外可以将所述谓词值存储在通用寄存器组的寄存器内。
虽然可以在标量处理电路内执行本发明一个实施例的谓词乘法累加指令,但在一个实施例中,数据处理电路是SIMD数据处理电路,其提供N个并行处理通道,其中,N是大于1的整数,所述SIMD数据处理电路响应于控制信号而在所述N个并行处理通道中的每一个中并行执行数据处理操作。在这些实施例中,所述谓词乘法累加指令将形成第一矢量的多个所述第一输入数据元素指定为输入操作数,并且所述指令解码器电路响应于所述谓词乘法累加指令而生成控制信号,以控制所述数据处理电路在所述N个并行处理通道中的每一个中并行执行所述乘法累加运算,从而来自被选择用于所述乘法累加运算的输入的所述第一矢量的第一输入数据元素依赖于其中该乘法累加运算得以执行的并行处理通道。当与标量处理器内的MAC运算的性能相比较时,通过允许并行执行乘法累加运算的乘法迭代,这种方法可以提供明显的性能优势。
所述谓词乘法累加指令可以在一个实施例中指定将经过所有通道而应用的单个谓词值,或者可以指定多个谓词值,允许例如分离的谓词值对于每一通道而被指定,由此在使用谓词乘法累加指令方面提供极大的灵活性。
在一个实施例中,所述谓词乘法累加指令还将形成第二矢量的多个所述第二输入数据元素指定为输入操作数,并且来自被选择用于所述乘法累加运算的输入的所述第二矢量的第二输入数据元素依赖于其中执行乘法累加运算的并行处理通道。
然而,在替换实施例中,所述谓词乘法累加指令还将标量第二输入数据元素指定为输入操作数,所述标量第二输入数据元素于是在数据处理电路内被复制,以形成第二矢量,由此同一第二输入数据元素用在其中执行所述乘法累加运算的每一并行处理通道中。这种方法可以例如当关于导频信号执行前述滤波运算时而被使用,其中,第二输入数据元素可以指定导频信号的幅度(其典型地将是恒定的),其中谓词值然后标识幅度值的符号,并因而标识在滤波处理中的任何特定点处是需要乘法加法运算还是需要乘法减法运算。
在一个实施例中,所述谓词乘法累加指令将形成第三矢量的多个所述谓词值指定为输入操作数,并且来自被选择用于所述乘法累加运算的输入的所述第三矢量的谓词值依赖于其中执行乘法累加运算的并行处理通道。第三矢量中的谓词值的数量可以根据实现方式而变化。例如,多个特定通道可以被分组,并且受控于同一谓词值。然而,在一个实施例中,所述第三矢量指定N个谓词值,从而在所述N个并行处理通道中的每一个内,所述乘法累加运算可以独立地被配置为执行乘法加法运算或乘法减法运算。该操作因此在如何使用谓词乘法累加指令方面提供了明显的灵活性,允许容易地实现乘法累加运算的复数序列。
初始累加数据元素可以是以各种方式而指定的。例如,在一个实施例中,所述谓词乘法累加指令可以将初始累加数据元素指定为输入操作数。或者,所述初始累加数据元素可以取得某个预先确定的值,在一个特定示例中,该预先确定的值是零,即没有初始累加数据元素。
在一个实施例中,其中在SIMD数据处理电路内执行所述谓词乘法累加指令,所述谓词乘法累加指令将形成第四矢量的多个所述初始累加数据元素指定为输入操作数,并且来自被选择用于所述乘法累加运算的输入的所述第四矢量的初始累加数据元素依赖于其中执行乘法累加运算的并行处理通道。
在一个特定实施例中,所述第一矢量、第二矢量和第四矢量中的每一个具有N个数据元素。进而,在一个实施例中,所述第三矢量具有N个谓词值。
在一个实施例中,每一第一输入数据元素包括X个比特,每一第二输入数据元素包括Y个比特,每一初始累加数据元素大小至少是X+Y个比特。通常,所述数据处理电路将把所述累加数据元素保留在大于提供所述第一输入数据元素和第二输入数据元素的寄存器的寄存器内,从而每一累加数据元素大小大于X+Y个比特。在一个特定示例中,X和Y均为16比特,所述累加数据元素保存于40比特寄存器中。通过这种方法,可以保留高精度累加结果,而没有溢出的风险,因而无需结合加法运算来监控溢出情况并且当识别出溢出条件时执行关联移位。
虽然所述第一数据元素和所述第二数据元素无需是相同大小的,但在一个实施例中,X确实等于Y,并且相应地,所述第一数据元素和所述第二数据元素大小相同。
在一个实施例中,包含谓词值的所述至少一个寄存器组还包括:输入数据元素寄存器组,该输入数据元素寄存器组包括输入寄存器,用于存储所述第一输入数据元素和第二输入数据元素;以及累加寄存器组,其具有累加寄存器,用于存储每一初始累加数据元素和结果累加数据元素。如上所述,一般情况是所述累加寄存器将大于所述输入寄存器。
在一个实施例中,所述第一输入数据元素、第二输入数据元素和累加数据元素全为实数。然而,在替换实施例中,所述第一输入数据元素和所述第二输入数据元素中的至少一个为包括实部和虚部的复数,并且所述数据处理电路所执行的乘法累加运算是复数乘法累加运算,产生具有实部和虚部的复数作为结果累加数据元素。
在一个实施例中,所述第一输入数据元素和第二输入数据元素中的仅一个是复数。例如,所述第一输入数据元素可以是复数,而所述第二输入数据元素可以提供作为实数的系数。在一个这样的实施例中,系数数据元素可以转换为复数形式,之后执行复数乘法累加运算。
在另一实施例中,所述第一输入数据元素和所述第二输入数据元素二者皆为包括实部和虚部的复数。
在一个实施例中,所述复数乘法累加运算涉及执行乘法运算、加法运算和减法运算的序列,以便产生对应的复数结果累加数据元素的实部和虚部。
在一个实施例中,可以提供单个谓词值来控制关于对应的第一数据元素和第二数据元素的实部和虚部二者所执行的乘法累加运算。然而,在替换实施例中,所述谓词值包括至少两个谓词值,用于控制复数乘法累加运算的不同部分。
在一个示例实施例中,所述谓词值包括:第一谓词值,用于被执行以产生所述复数结果累加数据元素的实部的乘法累加运算;以及第二谓词值,用于被执行以产生所述复数结果累加数据元素的虚部的乘法累加运算。这在谓词乘法累加指令与复数关联的使用方面提供进一步的灵活性。
在另一示例实施例中,被执行以产生所述复数结果累加数据元素的实部的乘法累加运算以及被执行以产生所述复数结果累加数据元素的虚部的乘法累加运算皆包括第一乘法运算和第二乘法运算,并且所述谓词值包括用于第一乘法运算的第一谓词值以及用于第二乘法运算的第二谓词值。这也在谓词乘法累加指令与复数关联的使用方面提供进一步的灵活性。
在替换实施例中,第一输入数据元素和第二输入数据元素中的至少一个是浮点数,数据处理电路所执行的乘法累加运算是浮点乘法累加运算,产生浮点数作为结果累加数据元素。在这些实施例中,数据处理电路将典型地包括浮点乘法和加法电路,以便执行所需的乘法累加运算。
在一个实施例中,仅第一输入数据元素和第二输入数据元素之一是浮点数,而另一输入数据元素是定点数。然而,在一个实施例中,第一输入数据元素和第二输入数据元素二者皆为浮点数。
根据第二方面,本发明提供一种方法,其使用数据处理电路和指令解码器电路来处理数据,所述数据处理电路响应于控制信号而对至少一个输入数据元素执行数据处理操作,所述指令解码器电路耦合到所述数据处理电路,并且响应于程序指令而生成所述控制信号,所述方法包括以下步骤:对将第一输入数据元素、第二输入数据元素和谓词值指定为输入操作数的谓词乘法累加指令进行解码,以便生成控制信号;以及使用所述控制信号通过下述步骤来控制所述数据处理电路来执行乘法累加运算:将所述第一输入数据元素与所述第二输入数据元素相乘,以产生乘法数据元素;如果谓词值具有第一值,则通过将乘法数据元素与初始累加数据元素相加来产生结果累加数据元素;以及如果谓词值具有第二值,则通过从初始累加数据元素减去乘法数据元素来产生结果累加数据元素。
根据第三方面,本发明提供一种计算机程序产品,其包括至少一个谓词乘法累加指令,其当运行在数据处理器上时,控制数据处理器执行根据本发明第二方面的所述方法中的各步骤。
根据第四方面,本发明提供一种数据处理设备的虚拟机器实现方式,所述虚拟机器实现方式响应于将第一输入数据元素、第二输入数据元素和谓词值指定为输入操作数的谓词乘法累加指令而通过下述步骤来执行乘法累加运算:将所述第一输入数据元素与所述第二输入数据元素相乘,以产生乘法数据元素;如果谓词值具有第一值,则通过将乘法数据元素与初始累加数据元素相加来产生结果累加数据元素;以及如果谓词值具有第二值,则通过从初始累加数据元素减去乘法数据元素来产生结果累加数据元素。
附图说明
将参照如附图所示的本发明实施例通过示例的方式来描述本发明,其中:
图1是示意性示出其中可以采用本发明实施例的技术的数据处理设备的框图;
图2是示意性示出根据一个实施例的图1的SIMD电路如何用于响应于谓词乘法累加指令执行乘法加法运算和乘法减法运算的图;
图3示意性示出根据一个实施例的在SIMD电路内的对于每一并行处理通道的图2的加法器控制电路的运算;
图4示出来自加法器控制电路的输出如何用在每一并行处理通道内以控制乘法加法运算或乘法减法运算的性能;
图5是示出根据一个实施例的响应于谓词乘法累加指令而执行的乘法累加处理的图;以及
图6是示意性示出利用本发明实施例的谓词乘法累加指令执行程序代码的虚拟机器实现方式的图。
具体实施方式
根据本发明实施例,提供谓词乘法累加(谓词MAC)指令。对于意欲在标量处理电路上执行的指令的标量型式,指令将第一输入数据元素、第二输入数据元素以及用于对当执行指令时是执行乘法加法运算还是乘法减法运算进行控制的谓词值取作输入操作数。可选的是,谓词MAC指令也可以将初始乘法累加数据元素(在此也称为初始累加数据元素)取作输入操作数。
然而,为了描述本发明一个实施例,将假设谓词乘法累加指令意图在SIMD电路内被执行,以并行执行多个乘法累加运算。在这些实施例中,谓词MAC指令将第一输入数据元素的第一矢量(va)、第二输入数据元素的第二矢量(vb)以及谓词值的矢量(vp)取作输入操作数。可选的是,谓词MAC指令也可以将初始累加数据元素的矢量(vacc)取作输入操作数。虽然在一个实施例中第二矢量直接存储于谓词MAC指令所标识的SIMD寄存器内,但在替换实施例中,谓词MAC指令可以将单个标量值指定为第二输入数据元素,并且第二矢量可以通过跨过SIMD电路内存在的多个并行处理通道复制该单个标量值而被构建。
在一个实施例中,所有矢量具有相同数量的元素,在此称为N,但每一矢量中的数据元素可以具有不同宽度。例如,在一个实施例中,矢量累加器中的每一数据元素至少为32比特宽,而输入矢量va和vb中的数据元素是16比特宽。谓词矢量中的元素仅需要一个比特宽来指定在对应的并行处理通道中是需要加法运算还是减法运算。
当执行谓词MAC指令时,所执行的乘法累加运算产生矢量累加器输出(其中0<=i<N),其中:
vacc[i]=vacc[i]+va[i]*vb[i]  if vp[i]==true
vacc[i]=vacc[i]-va[i]*vb[i]  if vp[i]==false
图1示出根据本发明一个实施例的数据处理设备,在该特定示例中,数据处理设备采用的形式是数字信号处理器(DSP)100。虽然DSP 100所执行的运算可以采用各种形式,但在一个实施例中,DSP可以用于执行无线基带处理功能。无线基带对于这种集成电路的处理能力提出了重大需求。所需的数据吞吐量大,并且重要的是使得DSP内所提供的不同元素平衡,以便所有元素以高效率的程度被使用。如图1所示,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具有至存储当响应于谓词MAC指令而执行乘法累加运算时所使用的谓词值的一个或多个SIMD谓词寄存器135的入口。虽然寄存器130、135和140可以被提供于物理上分离的寄存器组中,但在替换实施例中,它们可以是通过单个寄存器组137来提供的。
在一个示例中,SIMD MAC电路110和其它SIMD处理电路120具有32条并行处理通道,所述通道均为16比特宽,其可以用于对从SIMD寄存器组140提供的算术值执行乘法运算、加法运算以及混合运算(shuffle operation)。16比特数据字可以取自SIMD寄存器组140内的一个或多个输入值寄存器内的相应元素,以便将所需的输入值提供给每一并行处理通道。
通常,SIMD电路将被管线化(pipelined),并且在一个实施例中,SIMD MAC电路110形成三级管线,从而在计算被发给管线之后,计算结果将可用三个周期。
在一个实施例中,各个处理通道受控于通过控制器160从程序存储器165检索到的256比特甚长指令字(VLIW)指令。该VLIW指令还将典型地包括标量指令,其用于控制DSP 100的标量部分145内的标量处理电路,该标量处理电路具有至一个或多个标量寄存器组的入口。控制器160将包括一个或多个指令解码器,其用于对VLIW指令内的指令进行解码,并且将所需的控制信号发送到SIMD部分105内的电路以及标量部分145内的电路。控制器还将根据需要并且当需要时把控制信号发送到加载/存储单元170,以使得从数据存储器175检索的数据存储在SIMD寄存器组140或标量寄存器组中,或者使得数据从这些寄存器组存储回到数据存储器175。
为了描述本发明实施例,标量部分145内的标量处理电路的运算是不相关的。然而,总之,标量处理电路典型地与上述SIMD处理电路并行地运行,并且主要用于执行控制运算。各标量处理电路之一也可以控制地址生成单元,该地址生成单元负责生成存储器存取地址,所述存储器存取地址用于存取数据存储器175中的数据值。在一个实施例中,标量处理电路具有一个至三个管线级,数据存储器175具有三个或六个周期等待时间。
考虑到本发明实施例的谓词MAC指令,这种指令可以出现于通过控制器160从程序存储器165检索到的VLIW指令内,并且在对该谓词MAC指令进行解码时,控制信号将被发到SIMD部分105(具体地是SIMD MAC电路110),以使得SIMD MAC电路在N个并行处理通道中的每一个中并行执行乘法累加运算。谓词MAC指令将指定包含谓词值的矢量的谓词寄存器135内的寄存器,每一值关联于所述通道之一并且指示该通道中所执行的乘法累加运算是实现乘法加法运算还是实现乘法减法运算。
在替换实施例中,可以通过其它方式来指定谓词值。例如,在某些情况下,可以无需为每一通道指定分离的谓词值,并且特定通道可以被安排为使用相同的谓词值。进而,在一些实施例中,可以通过参照其它信息来指定谓词值,而不是在谓词寄存器中直接指定。作为示例,当执行支持特定指令的条件执行的指令集时,通常将条件代码组保留在允许估计这些条件的存在的设备内,以便确定是否执行指令(所述代码的示例是通过ARM处理器所保留的N、Z、C和V条件代码比特)。在一些实施例中,可以参照这些条件代码比特之一来确定谓词值。
图2示意性地示出当响应于谓词MAC指令执行乘法累加运算时SIMD MAC电路110的运算。在执行谓词MAC指令之前,所需的输入数据元素的矢量将存储于矢量寄存器组140内,并且任何初始累加数据元素将作为矢量存储于累加器寄存器组130中。相似地,谓词值的矢量将存储于谓词寄存器组135内。应理解,有多种方式可以将这些数据元素和谓词值存储在寄存器组内。例如,加载指令可以被执行为将这些数据元素和谓词值从数据存储器175加载到各寄存器中,或者另外,有关的值可以直接存储于各寄存器中作为由SIMD MAC电路110或其它SIMD处理电路120所执行的先前运算的输出。
在对谓词MAC指令进行解码时,控制器160将把控制信号发给加法器控制块210,以使得加法器控制块根据谓词寄存器组135内的标识出的寄存器的内容而为每一并行处理通道发出控制信号。
如图2示意性所示,SIMD MAC电路110可以被认为对于多个并行处理通道(图2中用数字215、220来指示)中的每一个包括乘法器电路217和加法/减法电路219。输入数据元素被从矢量寄存器组140读入每一通道,在此,它们通过乘法器217得以相乘,以便产生转发至加法/减法电路219的乘法数据元素。加法/减法电路可选地从累加器寄存器组130接收初始累加值,然后根据从加法器控制块210接收到的控制信号而将乘法数据元素与累加数据元素相加或者从累加数据元素减去乘法数据元素。所得到的累加数据元素于是被返回,以存储在累加器寄存器组130中。也可以提供转发路径(未示出),以允许输出累加数据元素直接被返回作为到加法/减法电路的输入,以用在后续MAC运算中,而无需从累加寄存器组读取该值。
加法器控制块210可以是以各种方式而构建的。图3示出一个合适的实施例,其中,对于每一并行处理通道,加法器控制块有效地包括两个输入多路复用器(图3中统一表示为多路复用器250)。多路复用器的第一输入接收从控制器160输出的加法/减法控制信号,并且在缺少谓词MAC指令时,多路复用器控制信号也将由控制器160发出,以使得到多路复用器的第一输入用于控制每一通道内的加法器电路。因此,如果执行乘法加法指令,则控制器160将发出加法/减法控制信号,该加法/减法控制信号将经由多路复用器250被路由至每一通道中的加法/减法电路219,以使得执行加法。相似地,如果执行乘法减法指令,则控制器160所发出的加法/减法控制信号将经由多路复用器被路由至每一通道中的加法/减法电路219,以使得执行减法。
然而,倘若对谓词MAC指令进行解码,那么多路复用器控制信号将反而被设置为使得多路复用器250选择其第二输入,以路由至加法/减法电路219。如图3所示,该第二输入将由谓词寄存器组135提供,具体地将由谓词MAC指令所标识的谓词寄存器组内的寄存器之一提供。假设有N个并行处理通道,则该第二输入将因此至少是N比特大小,为每一并行处理通道提供至少一个谓词值。因此,对于每一并行处理通道,由该谓词寄存器所提供的谓词值的矢量中的有关谓词值将经由多路复用器250被路由至加法/减法电路219,以用于该通道,从而控制是执行加法还是减法。
有多种方式将加法/减法电路219安排为响应于加法器控制块210所发出的控制信号。图4示意性地示出一个实施例:其中,来自每一通道内的乘法器270的输出通过取反电路(negate circuitry)272被取反,然后原始乘法结果和取反后的乘法结果作为输入被提供给多路复用器275,多路复用器275的操作受控于来自加法器控制块210的输出。来自多路复用器的输出然后输入到加法器280,加法器280执行来自多路复用器的输出与任何输入累加值的加法。因此,如果对于特定并行处理通道,谓词值指示应执行乘法加法运算,则将选择到多路复用器275的未取反的输入来进行加法。反之,如果谓词值指示在对应通道中应执行乘法减法运算,则选取到多路复用器275的取反后的输入,以转发到加法器280。
图5示意性地示出本发明实施例中的N条通道内的SIMD MAC电路110所执行的乘法累加运算。如图5所示,乘法器电路内的N条通道接收N个第一输入数据元素400和N个第二输入数据元素410,并且基于此而执行所需的乘法,得到N个乘法数据元素420的乘积。假设每一输入数据元素为16比特宽,那么每一乘法数据元素将至少是32比特宽。
此后,根据为每一通道提供的谓词值,N个乘法数据元素与N个初始累加数据元素相加,或者从N个初始累加数据元素减去N个乘法数据元素。所述N个初始累加数据元素可以是由谓词MAC指令所标识的累加器寄存器的内容来指定的,或者在一个实施例中,其可以是预先确定的(例如零)。
在N条通道内所执行的各种加法和减法导致产生N个乘法累加(结果)数据元素440,其被存储回到累加器寄存器组130内的有关SIMD累加器寄存器。如图5所示,根据可应用于对应通道的谓词值,这些单独的结果累加数据元素将表示乘法加法运算或乘法减法运算的结果。
在以上实施例中,谓词值“1”指示乘法/加法运算,谓词值“0”指示乘法/减法运算,但这些值的含义可以视需求而被颠倒。
就标准矢量提取和矢量标量相乘而言,对于指定初始累加值的矢量的谓词乘法累加指令和不指定初始累加值的矢量的谓词乘法累加指令二者,以下的C代码提供上述乘法累加运算的函数模型:
1)具有初始累加值的矢量的谓词MAC指令
vint32L_t vcmlamlsl_s16(vint32L_t v acc,vint16_t va,vint16_t vb,vbool16_t vp)
{
  VNEW_s32L(res);
  uint_ti;
  for(i=0;i<n;i++){
    int_32L tmp;
    if(VGET_p16(vp,i)==true){
      tmp=mlal_s16(VGET_s32L(vacc,i),VGET_s16(va,i),VGET_s16(vb,i));
    }else{
      tmp=mlsl_s16(VGET_s32L(vacc,i),VGET_s16(va,i),VGET_s16(vb,i));
    }
    VSET_s32L(res,i,tmp);
  }
  return res;
}
以上C代码的第一行标识谓词乘法累加指令(在此称为乘法加法/乘法减法(mlamls)指令),将输入数据元素矢量va和vb、初始累加矢量vacc、以及谓词值矢量vp取作输入。响应于指令而执行的运算于是被展列在C代码的余下部分中。首先,声明结果矢量“res”,并且声明整数变量i。而矢量va和vb内的单独的数据元素是16比特宽,矢量vacc和矢量res内的单独数据元素是32比特宽,以便容纳通过将两个16比特输入数据元素相乘而产生的乘法结果。
然后进入循环,该循环对于0至N-1之间的i的所有值而重复。如以上C代码所示,在该循环的每次迭代中,如果谓词值为真,则va输入与vb输入相乘,然后与vacc输入相加(mlal_s16)。否则,va输入与vb输入相乘,然后被从vacc输入减去(mlsl_s32)。结果存储为32比特整数“tmp”。
VGET/VSET_*函数用于读或写一个矢量元素,例如,VSET_s32L(res,i,tmp)将“tmp”的值写到矢量“res”中的第i元素。
2)没有初始累加的谓词MAC指令
vint32L_t vcmulnegl_s16(vint16_t va,vint16_t vb,vbool16_t vp)
{
  VNEW_s32L(res);
  uint_ti;
  for(i=0;i<n;i++){
    int_32L tmp;
    if(VGET_p16(vp,i)==true){
      tmp=mull_s16(VGET_s16(va,i),VGET_s16(vb,i));
    }else{
      tmp=neg_s32(mull_s16(VGET_s16(va,i),VGET_s16(vb,i)));
    }
    VSET_s32L(res,i,tmp);
  }
  return res;
}
在该示例中,谓词MAC指令被称为乘法/取反指令。如以上C代码所示,如果谓词值为真,则两个输入相乘(mull_s16)。否则,两个输入相乘,然后结果取反(neg_s32)。
如先前示例那样,VGET/VSET_*函数用于读或写一个矢量元素,例如,VSET_s32L(res,i,tmp)将“tmp”的值写到矢量“res”中的第i元素。
在上述实施例中,第一输入数据元素、第二输入数据元素以及累加数据元素全都被假设为实数。然而,各实施例不限于与实数一起使用。例如,在替换实施例中,第一输入数据元素和第二输入数据元素之一或二者都可以是包括实部和虚部的复数,在此情况下,每一通道内的SIMDMAC电路110所执行的乘法累加运算将是复数乘法累加运算,产生复数的矢量作为结果累加数据元素,其均具有实部和虚部。
当考虑执行复数乘法累加运算的示例时,每次乘法将涉及执行乘法运算、加法运算和减法运算序列,以便产生对应的复数乘法结果数据元素的实部和虚部。具体地说,考虑va[i]*vb[i]的通用情况,将执行以下计算:
乘法实部结果=vbR[i]*vaR[i]-vbI[i]*vaI[i]
乘法虚部结果=vbR[i]*vaI[i]+vbI[i]*vaR[i]
(其中,“R”表示实部,“I”表示虚部)。
实数乘法结果和虚数乘法结果然后将与先前的实数累加结果和虚数累加结果累加。
虽然在以上示例中,两个输入数据元素皆为复数,但在替换实施例中,它们中的仅一个可以在输入矢量中被提供为复数。例如,虽然第一输入数据元素可以被提供为复数,但第二输入数据元素可以被提供为实数。
在一个实施例中,这种情况被看作上述复数实施例的特殊情况,其中,va矢量和vacc矢量中的数据元素是复数,而vb中的数据元素是实数。为了执行这种运算,实数vb元素可以在内部转换为复数,如下:
internal_vbR[k]=vb[k]
internal_vbI[k]=0
然后可以如上所述地执行复数乘法累加运算。
相应地,可见对于复数乘法累加运算,两次分离的乘法累加运算被执行如下:
vaccR[i]=vaccR[i]+(vbR[i]*vaR[i]-vbI[i]*vaI[i])
vaccI[i]=vaccI[i]+(vbR[i]*vaI[i]+vbI[i]*vaR[i])
在一个实施例中,可以提供单个谓词值来控制关于对应的第一数据元素和第二数据元素的实部和虚部二者所执行的乘法累加运算。在此情况下,以下选项对于上述两个乘法累加运算是可能的:
vaccR[i]=vaccR[i]+(vbR[i]*vaR[i]-vbI[i]*vaI[i])  if vp[i]==true
vaccR[i]=vaccR[i]-(vbR[i]*vaR[i]-vbI[i]*vaI[i])  if vp[i]==false
vaccI[i]=vaccI[i]+(vbR[i]*vaI[i]+vbI[i]*vaR[i])  if vp[i]==true
vaccI[i]=vaccI[i]-(vbR[i]*vaI[i]+vbI[i]*vaR[i])  if vp[i]==false
然而,在替换实施例中,所述谓词值可以包括:第一谓词值,用于被执行以产生所述复数结果累加数据元素的实部的乘法累加运算;以及第二谓词值,用于被执行以产生所述复数结果累加数据元素的虚部的乘法累加运算。这可以在谓词乘法累加指令与复数关联的使用方面提供进一步的灵活性。在该实施例中,以下选项对于上述两个乘法累加运算是可能的:
vaccR[i]=vaccR[i]+(vbR[i]*vaR[i]-vbI[i]*vaI[i])  if vpR[i]==true
vaccR[i]=vaccR[i]-(vbR[i]*vaR[i]-vbI[i]*vaI[i])  if vpR[i]==false
vaccI[i]=vaccI[i]+(vbR[i]*vaI[i]+vbI[i]*vaR[i])  if vpI[i]==true
vaccI[i]=vaccI[i]-(vbR[i]*vaI[i]+vbI[i]*vaR[i])  if vpI[i]==false
在又一实施例中,每复数两个谓词值可以再次被使用,但其中,这些谓词值用于独立地控制每一乘法累加运算中的两个乘法运算。在该实施例中,以下选项对于上述两个乘法累加运算是可能的:
vaccR[i]=vaccR[i]+(vbR[i]*vaR[i])-(vbI[i]*vaI[i])  if vpR[i]==true and vpI[i]==true
vaccR[i]=vaccR[i]+(vbR[i]*vaR[i])+(vbI[i]*vaI[i])  if vpR[i]==true and vpI[i]==false
vaccR[i]=vaccR[i]-(vbR[i]*vaR[i])-(vbI[i]*vaI[i])  if vpR[i]==false and vpI[i]==true
vaccR[i]=vaccR[i]-(vbR[i]*vaR[i])+(vbI[i]*vaI[i])  if vpR[i]==false and vpI[i]==false
vaccI[i]=vaccI[i]+(vbR[i]*vaI[i])+(vbI[i]*vaR[i])  if vpR[i]==true and vpI[i]==true
vaccI[i]=vaccI[i]+(vbR[i]*vaI[i])-(vbI[i]*vaR[i])  if vpR[i]==true and vpI[i]==false
vaccI[i]=vaccI[i]-(vbR[i]*vaI[i])+(vbI[i]*vaR[i])  if vpR[i]==false and vpI[i]==true
vaccI[i]=vaccI[i]-(vbR[i]*vaI[i])-(vbI[i]*vaR[i])  if vpR[i]==false and vpI[i]==false
作为上述实施例的延伸,将有可能指定每复数四个谓词值,以允许在对实部的乘法累加运算的设置与对虚部的乘法累加运算的设置中的完全独立性。
在另一替换实施例中,第一输入数据元素和第二输入数据元素中的至少一个可以是浮点数,在此情况下,数据处理电路所执行的乘法累加运算是浮点乘法累加运算,产生浮点数作为结果累加数据元素。在这些实施例中,SIMD MAC电路110将典型地包括浮点乘法和加法电路,以便执行所需的乘法累加运算。
在一个实施例中,仅第一输入数据元素和第二输入数据元素之一可以是浮点数,而另一输入数据元素可以是定点数。然而,在另一实施例中,第一输入数据元素和第二输入数据元素二者皆为浮点数。
从本发明实施例的以上描述,可见本发明实施例的谓词MAC指令提供一种特别高效的机制,用于在数据处理设备内执行乘法累加运算序列,允许实现利用专用MAC电路的性能优势,同时还对于在谓词值的控制下使用相同指令执行乘法加法运算或乘法减法运算提供灵活性。所述方法当与SIMD MAC电路关联而被采用时尤其有利,其中,多个乘法累加运算可以在N个并行处理通道内被并行执行,其中,这些通道基于对应的谓词值而单独被配置为执行乘法加法运算或乘法减法运算。所述方法可以提供一种高性能和能量高效的机制,以执行例如当处理无线电信号时所需的滤波运算。
虽然可以通过执行包括上述谓词MAC指令的原生指令序列的硬件来执行上述技术,但应理解,在替换实施例中,这些指令可以在虚拟机器环境中被执行,其中,所述指令对于该虚拟机器是原生的,但虚拟机器是通过在具有不同原生指令集的硬件上执行的软件来实现的。虚拟机器环境可以提供仿真完全指令集的执行的完全虚拟机器环境,或者可以是部分的,例如包括本技术的指令的仅一些指令由硬件捕获(trap)并且由部分虚拟机器仿真。
更具体地说,上述谓词MAC指令可以被执行为对于完全或部分虚拟机器的原生指令,其中,虚拟机器连同其下层硬件平台一起结合地进行操作,以提供上述SIMD处理电路。
图6示出这种可以使用的虚拟机器实现。虽然前述实施例关于用于操作所关注的具体处理硬件支持指令的设备和方法实施了本发明,但也有可能提供所谓的硬件设备的虚拟机器实现。这些虚拟机器实现在主机处理器530上运行,主机处理器530运行主机操作系统520,其支持虚拟机器程序510。典型地,需要大型的强大处理器来提供以合理速度执行的虚拟机器实现,但这样的方法在特定情况下可能是合乎情理的,例如当出于兼容性或重新使用的原因而期望运行对于另一处理器来说是原生的代码时。虚拟机器程序510将应用程序接口提供给应用程序500,其与真实硬件(其为虚拟机器程序510所建模的设备)将提供的应用程序接口相同。因而,可以使用虚拟机器程序510从应用程序500内执行包括上述谓词MAC指令的程序指令,以对它们与虚拟机器硬件的交互进行建模。
虽然在此已经描述了特定实施例,但应理解,本发明不限于此,可以在本发明范围内进行对其的很多修改和添加。例如,在不脱离本发明范围的情况下,所附从属权利要求的各特征可以与独立权利要求的各特征进行各种组合。

Claims (25)

1.一种数据处理设备,包括:
数据处理电路,其响应于控制信号而对至少一个输入数据元素执行数据处理操作;
指令解码器电路,其耦合到所述数据处理电路,并且响应于程序指令而生成所述控制信号;
所述指令解码器电路响应于将第一输入数据元素、第二输入数据元素和谓词值指定为输入操作数的谓词乘法累加指令,以生成控制信号来控制所述数据处理电路通过下述步骤来执行乘法累加运算:
将所述第一输入数据元素与所述第二输入数据元素相乘,以产生乘法数据元素;
如果谓词值具有第一值,则通过将乘法数据元素与初始累加数据元素相加来产生结果累加数据元素;以及
如果谓词值具有第二值,则通过从初始累加数据元素减去乘法数据元素来产生结果累加数据元素。
2.如权利要求1中所述的数据处理设备,还包括:
至少一个寄存器组,用于存储所述输入操作数,其中,所述谓词乘法累加指令标识包含所述谓词值的所述至少一个寄存器组中的寄存器。
3.如权利要求1中所述的数据处理设备,其中:
所述数据处理电路是SIMD数据处理电路,其提供N个并行处理通道,其中,N是大于1的整数,所述SIMD数据处理电路响应于所述控制信号而在所述N个并行处理通道中的每一个中并行执行数据处理操作;
所述谓词乘法累加指令将形成第一矢量的多个所述第一输入数据元素指定为输入操作数;
所述指令解码器电路响应于所述谓词乘法累加指令而生成控制信号,以控制所述数据处理电路在所述N个并行处理通道中的每一个中并行执行所述乘法累加运算,使得来自被选择用于所述乘法累加运算的输入的所述第一矢量的第一输入数据元素依赖于其中该乘法累加运算被执行的并行处理通道。
4.如权利要求3中所述的数据处理设备,其中:
所述谓词乘法累加指令将形成第二矢量的多个所述第二输入数据元素指定为输入操作数;以及
来自被选择用于所述乘法累加运算的输入的所述第二矢量的所述第二输入数据元素依赖于其中该乘法累加运算被执行的并行处理通道。
5.如权利要求3中所述的数据处理设备,其中:
所述谓词乘法累加指令将标量第二输入数据元素指定为输入操作数,所述标量第二输入数据元素于是在所述数据处理电路内被复制,以形成第二矢量;
据此,同一第二输入数据元素用在其中所述乘法累加运算被执行的每一并行处理通道中。
6.如权利要求3中所述的数据处理设备,其中:
所述谓词乘法累加指令将形成第三矢量的多个所述谓词值指定为输入操作数;以及
来自被选择用于所述乘法累加运算的输入的所述第三矢量的所述谓词值依赖于其中该乘法累加运算被执行的并行处理通道。
7.如权利要求6中所述的数据处理设备,其中,所述第三矢量指定N个谓词值,使得在所述N个并行处理通道中的每一个内,所述乘法累加运算独立地被配置为执行乘法加法运算或乘法减法运算。
8.如权利要求1中所述的数据处理设备,其中,所述谓词乘法累加指令进一步将所述初始累加数据元素指定为输入操作数。
9.如权利要求1中所述的数据处理设备,其中,所述初始累加数据元素是预先确定的值。
10.如权利要求9中所述的数据处理设备,其中,所述预先确定的值是零。
11.如权利要求3中所述的数据处理设备,其中:
所述谓词乘法累加指令还将形成第四矢量的多个所述初始累加数据元素进一步地指定为输入操作数;以及
来自被选择用于所述乘法累加运算的输入的所述第四矢量的所述初始累加数据元素依赖于其中该乘法累加运算被执行的并行处理通道。
12.如权利要求11中所述的数据处理设备,其中:
所述数据处理电路是SIMD数据处理电路,其提供N个并行处理通道,其中,N是大于1的整数,所述SIMD数据处理电路响应于所述控制信号而在所述N个并行处理通道中的每一个中并行执行数据处理操作;
所述谓词乘法累加指令将形成第一矢量的多个所述第一输入数据元素指定为输入操作数;
所述指令解码器电路响应于所述谓词乘法累加指令而生成控制信号,以控制所述数据处理电路在所述N个并行处理通道中的每一个中并行执行所述乘法累加运算,使得来自被选择用于所述乘法累加运算的输入的所述第一矢量的第一输入数据元素依赖于其中该乘法累加运算被执行的并行处理通道;
并且其中:
所述谓词乘法累加指令将形成第二矢量的多个所述第二输入数据元素指定为输入操作数;以及
来自被选择用于所述乘法累加运算的输入的所述第二矢量的所述第二输入数据元素依赖于其中该乘法累加运算被执行的并行处理通道,
其中,所述第一矢量、第二矢量和第四矢量中的每一个具有N个数据元素。
13.如权利要求1中所述的数据处理设备,其中,每一第一输入数据元素包括X个比特,每一第二输入数据元素包括Y个比特,每一初始累加数据元素大小至少是X+Y个比特。
14.如权利要求13中所述的数据处理设备,其中,X=Y。
15.如权利要求2中所述的数据处理设备,其中,所述至少一个寄存器组包括:输入数据元素寄存器组,其包括输入寄存器,用于存储所述第一输入数据元素和第二输入数据元素;以及累加寄存器组,其具有累加寄存器,用于存储每一初始累加数据元素和结果累加数据元素。
16.如权利要求1中所述的数据处理设备,其中:
所述第一输入数据元素和所述第二输入数据元素中的至少一个是包括实部和虚部的复数;以及
所述数据处理电路所执行的乘法累加运算是复数乘法累加运算,其产生复数结果累加数据元素作为结果累加数据元素,所述复数结果累加数据元素是具有实部和虚部的复数。
17.如权利要求16中所述的数据处理设备,其中,所述第一输入数据元素和所述第二输入数据元素都是包括实部和虚部的复数。
18.如权利要求16中所述的数据处理设备,其中,所述复数乘法累加运算涉及执行乘法运算、加法运算和减法运算序列,以便产生对应的复数结果累加数据元素的实部和虚部。
19.如权利要求16中所述的数据处理设备,其中,所述谓词值包括至少两个谓词值,所述至少两个谓词值用于控制所述复数乘法累加运算的不同部分。
20.如权利要求19中所述的数据处理设备,其中,所述谓词值包括:第一谓词值,用于被执行以产生所述复数结果累加数据元素的实部的乘法累加运算;以及第二谓词值,用于被执行以产生所述复数结果累加数据元素的虚部的乘法累加运算。
21.如权利要求19中所述的数据处理设备,其中,被执行以产生所述复数结果累加数据元素的实部的乘法累加运算以及被执行以产生所述复数结果累加数据元素的虚部的乘法累加运算都包括第一乘法运算和第二乘法运算,并且所述谓词值包括用于第一乘法运算的第一谓词值以及用于第二乘法运算的第二谓词值。
22.如权利要求1中所述的数据处理设备,其中:
所述第一输入数据元素和所述第二输入数据元素中的至少一个是浮点数;以及
所述数据处理电路所执行的乘法累加运算是浮点乘法累加运算,其产生浮点数作为结果累加数据元素。
23.如权利要求22中所述的数据处理设备,其中,所述第一输入数据元素和所述第二输入数据元素都是浮点数。
24.一种使用数据处理电路和指令解码器电路来处理的方法,所述数据处理电路响应于控制信号而对至少一个输入数据元素执行数据处理操作,所述指令解码器电路耦合到所述数据处理电路,并且响应于程序指令而生成所述控制信号,所述方法包括以下步骤:
对将第一输入数据元素、第二输入数据元素和谓词值指定为输入操作数的谓词乘法累加指令进行解码,以便生成控制信号;以及
使用所述控制信号控制所述数据处理电路来通过下述步骤执行乘法累加运算:
将所述第一输入数据元素与所述第二输入数据元素相乘,以产生乘法数据元素;
如果谓词值具有第一值,则通过将乘法数据元素与初始累加数据元素相加来产生结果累加数据元素;以及
如果谓词值具有第二值,则通过从初始累加数据元素减去乘法数据元素来产生结果累加数据元素。
25.一种数据处理设备,包括:
数据处理装置,其用于响应于控制信号而对至少一个输入数据元素执行数据处理操作;
指令解码器装置,其耦合到所述数据处理装置,并且用于响应于程序指令而生成所述控制信号;
所述指令解码器装置响应于将第一输入数据元素、第二输入数据元素和谓词值指定为输入操作数的谓词乘法累加指令,用于生成控制信号来控制所述数据处理装置,以通过下述步骤执行乘法累加运算:
将所述第一输入数据元素与所述第二输入数据元素相乘,以产生乘法数据元素;
如果谓词值具有第一值,则通过将乘法数据元素与初始累加数据元素相加来产生结果累加数据元素;以及
如果谓词值具有第二值,则通过从初始累加数据元素减去乘法数据元素来产生结果累加数据元素。
CN201010530682.9A 2009-10-30 2010-10-29 用于执行乘法累加运算的设备和方法 Active CN102053817B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB0919120.6A GB2474901B (en) 2009-10-30 2009-10-30 Apparatus and method for performing multiply-accumulate operations
GB0919120.6 2009-10-30

Publications (2)

Publication Number Publication Date
CN102053817A CN102053817A (zh) 2011-05-11
CN102053817B true CN102053817B (zh) 2015-09-09

Family

ID=41434978

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201010530682.9A Active CN102053817B (zh) 2009-10-30 2010-10-29 用于执行乘法累加运算的设备和方法

Country Status (4)

Country Link
US (1) US8595280B2 (zh)
JP (1) JP5647859B2 (zh)
CN (1) CN102053817B (zh)
GB (1) GB2474901B (zh)

Families Citing this family (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8831133B2 (en) * 2011-10-27 2014-09-09 Lsi Corporation Recursive digital pre-distortion (DPD)
CN104011664B (zh) * 2011-12-23 2016-12-28 英特尔公司 使用三个标量项的超级乘加(超级madd)指令
CN104011665B (zh) * 2011-12-23 2017-05-31 英特尔公司 超级乘加(超级madd)指令
US8909687B2 (en) * 2012-01-19 2014-12-09 Mediatek Singapore Pte. Ltd. Efficient FIR filters
US9274750B2 (en) 2012-04-20 2016-03-01 Futurewei Technologies, Inc. System and method for signal processing in digital signal processors
US9355068B2 (en) * 2012-06-29 2016-05-31 Intel Corporation Vector multiplication with operand base system conversion and re-conversion
CN103268223B (zh) * 2013-04-26 2016-06-29 深圳中微电科技有限公司 在编译过程中改善乘加类指令执行性能的方法
CN104866461B (zh) * 2014-02-21 2018-03-02 北京国睿中数科技股份有限公司 用于浮点复数乘i加减的装置和方法
US9916130B2 (en) * 2014-11-03 2018-03-13 Arm Limited Apparatus and method for vector processing
US10275247B2 (en) * 2015-03-28 2019-04-30 Intel Corporation Apparatuses and methods to accelerate vector multiplication of vector elements having matching indices
GB2540944B (en) * 2015-07-31 2018-02-21 Advanced Risc Mach Ltd Vector operand bitsize control
GB2540943B (en) 2015-07-31 2018-04-11 Advanced Risc Mach Ltd Vector arithmetic instruction
US9733899B2 (en) * 2015-11-12 2017-08-15 Arm Limited Lane position information for processing of vector
CN106980600B (zh) * 2016-01-18 2019-09-06 普天信息技术有限公司 一种lte接收系统中fpga处理复数矩阵乘法的方法及系统
US11507761B2 (en) 2016-02-25 2022-11-22 Hewlett Packard Enterprise Development Lp Performing complex multiply-accumulate operations
GB2548908B (en) * 2016-04-01 2019-01-30 Advanced Risc Mach Ltd Complex multiply instruction
GB2553783B (en) * 2016-09-13 2020-11-04 Advanced Risc Mach Ltd Vector multiply-add instruction
US10824934B2 (en) * 2017-01-12 2020-11-03 Texas Instruments Incorporated Methods and apparatus for matrix processing in a convolutional neural network
KR102425668B1 (ko) * 2017-02-23 2022-07-28 에이알엠 리미티드 데이터 처리장치에서의 곱셈-누적
JP7148526B2 (ja) * 2017-02-23 2022-10-05 アーム・リミテッド データ処理装置におけるベクトルによる要素演算
GB2560159B (en) * 2017-02-23 2019-12-25 Advanced Risc Mach Ltd Widening arithmetic in a data processing apparatus
US10162633B2 (en) * 2017-04-24 2018-12-25 Arm Limited Shift instruction
US10409592B2 (en) * 2017-04-24 2019-09-10 Arm Limited Multiply-and-accumulate-products instructions
DE102017207876A1 (de) * 2017-05-10 2018-11-15 Robert Bosch Gmbh Parallelisierte Verarbeitung
US10503507B2 (en) 2017-08-31 2019-12-10 Nvidia Corporation Inline data inspection for workload simplification
KR102356708B1 (ko) * 2017-09-28 2022-01-27 삼성전자주식회사 컨볼루션 연산을 수행하는 연산 장치 및 연산 방법
US10795677B2 (en) * 2017-09-29 2020-10-06 Intel Corporation Systems, apparatuses, and methods for multiplication, negation, and accumulation of vector packed signed values
US10795676B2 (en) * 2017-09-29 2020-10-06 Intel Corporation Apparatus and method for multiplication and accumulation of complex and real packed data elements
US11243765B2 (en) 2017-09-29 2022-02-08 Intel Corporation Apparatus and method for scaling pre-scaled results of complex multiply-accumulate operations on packed real and imaginary data elements
US10802826B2 (en) 2017-09-29 2020-10-13 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication of packed data elements
US10514924B2 (en) 2017-09-29 2019-12-24 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication of packed data elements
US10664277B2 (en) 2017-09-29 2020-05-26 Intel Corporation Systems, apparatuses and methods for dual complex by complex conjugate multiply of signed words
US10534838B2 (en) 2017-09-29 2020-01-14 Intel Corporation Bit matrix multiplication
US11074073B2 (en) * 2017-09-29 2021-07-27 Intel Corporation Apparatus and method for multiply, add/subtract, and accumulate of packed data elements
US10552154B2 (en) 2017-09-29 2020-02-04 Intel Corporation Apparatus and method for multiplication and accumulation of complex and real packed data elements
US11256504B2 (en) 2017-09-29 2022-02-22 Intel Corporation Apparatus and method for complex by complex conjugate multiplication
GB2568085B (en) * 2017-11-03 2020-01-01 Imagination Tech Ltd Hardware unit for performing matrix multiplication with clock gating
EP3499362B1 (en) * 2017-12-13 2022-11-30 ARM Limited Vector add-with-carry instruction
US10678507B2 (en) * 2017-12-22 2020-06-09 Alibaba Group Holding Limited Programmable multiply-add array hardware
US10977001B2 (en) * 2018-02-05 2021-04-13 Mediatek Inc. Asymmetric quantization of multiple-and-accumulate operations in deep learning processing
US10528346B2 (en) 2018-03-29 2020-01-07 Intel Corporation Instructions for fused multiply-add operations with variable precision input operands
KR102126857B1 (ko) * 2018-05-10 2020-06-25 서울대학교산학협력단 행 단위 연산 뉴럴 프로세서 및 이를 이용한 데이터 처리 방법
GB2576180B (en) * 2018-08-08 2022-08-10 Temporal Computing Ltd Temporal computing
JP7296574B2 (ja) * 2019-03-04 2023-06-23 パナソニックIpマネジメント株式会社 プロセッサ及びプロセッサの制御方法
US20210173662A1 (en) * 2019-12-05 2021-06-10 International Business Machines Corporation Processor unit for multiply and accumulate operations

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0718757A2 (en) * 1994-12-22 1996-06-26 Motorola, Inc. Apparatus and method for performing both 24 bit and 16 bit arithmetic
US5583804A (en) * 1994-07-14 1996-12-10 Advanced Risc Machines Limited Data processing using multiply-accumulate instructions
CN1658152A (zh) * 2004-02-20 2005-08-24 阿尔特拉公司 乘法器-累加器块模式划分
EP1710691A1 (en) * 2005-04-07 2006-10-11 STMicroelectronics (Research & Development) Limited MAC/MUL unit

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0298777A (ja) * 1988-10-05 1990-04-11 Nec Corp 並列積和演算回路及びベクトル行列積演算方法
JPH04271431A (ja) * 1991-02-27 1992-09-28 Fujitsu Ltd 演算制御方式
SG52303A1 (en) * 1993-12-20 1998-09-28 Motorola Inc Arithmetic engine
JP3652018B2 (ja) * 1996-07-22 2005-05-25 シャープ株式会社 行列演算装置
US5796645A (en) * 1996-08-27 1998-08-18 Tritech Microelectronics International Ltd. Multiply accumulate computation unit
JP3462670B2 (ja) * 1996-08-29 2003-11-05 富士通株式会社 演算実行方法及び演算装置
GB2326253A (en) * 1997-06-10 1998-12-16 Advanced Risc Mach Ltd Coprocessor data access control
DE69838028T2 (de) * 1998-10-06 2008-03-13 Texas Instruments Inc., Dallas Linearvektorrechnung
US6542916B1 (en) * 1999-07-28 2003-04-01 Arm Limited Data processing apparatus and method for applying floating-point operations to first, second and third operands
JP3958662B2 (ja) * 2002-09-25 2007-08-15 松下電器産業株式会社 プロセッサ
US7437401B2 (en) * 2004-02-20 2008-10-14 Altera Corporation Multiplier-accumulator block mode splitting
US7660841B2 (en) * 2004-02-20 2010-02-09 Altera Corporation Flexible accumulator in digital signal processing circuitry
WO2006017339A2 (en) * 2004-07-13 2006-02-16 3Plus1 Technology, Inc. Programmable processor system with two types of sub-processors to execute multimedia applications
JP4159565B2 (ja) * 2005-06-01 2008-10-01 エヌイーシーコンピュータテクノ株式会社 ベクトル積和演算回路
JP2007004542A (ja) * 2005-06-24 2007-01-11 Renesas Technology Corp 半導体信号処理装置
JP2009048532A (ja) * 2007-08-22 2009-03-05 Nec Electronics Corp マイクロプロセッサ

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5583804A (en) * 1994-07-14 1996-12-10 Advanced Risc Machines Limited Data processing using multiply-accumulate instructions
EP0718757A2 (en) * 1994-12-22 1996-06-26 Motorola, Inc. Apparatus and method for performing both 24 bit and 16 bit arithmetic
CN1658152A (zh) * 2004-02-20 2005-08-24 阿尔特拉公司 乘法器-累加器块模式划分
EP1710691A1 (en) * 2005-04-07 2006-10-11 STMicroelectronics (Research & Development) Limited MAC/MUL unit

Also Published As

Publication number Publication date
US20110106871A1 (en) 2011-05-05
JP2011096254A (ja) 2011-05-12
US8595280B2 (en) 2013-11-26
GB0919120D0 (en) 2009-12-16
JP5647859B2 (ja) 2015-01-07
GB2474901B (en) 2015-01-07
GB2474901A (en) 2011-05-04
CN102053817A (zh) 2011-05-11

Similar Documents

Publication Publication Date Title
CN102053817B (zh) 用于执行乘法累加运算的设备和方法
US10509876B2 (en) Simulation using parallel processors
EP2951681B1 (en) Solution to divergent branches in a simd core using hardware pointers
CN102197369B (zh) 用于执行simd乘法-累积运算的装置及方法
TWI728068B (zh) 複數乘法指令
Smith et al. Vector instruction set support for conditional operations
US8438521B1 (en) Methods and apparatus for implementing application specific processors
CN110321159A (zh) 用于实现链式区块操作的系统和方法
CN108205448A (zh) 具有在每个维度上可选择的多维循环寻址的流引擎
EP2584460A1 (en) Vector processing system comprising a replicating subsystem and method
US11106465B2 (en) Vector add-with-carry instruction
CN112074810B (zh) 并行处理设备
KR20150051083A (ko) 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
Faber et al. Efficient parallel execution of genetic algorithms on Epiphany manycore processor
Abnous et al. Architectural design and analysis of a VLIW processor
CN101615114A (zh) 完成两次乘法两次加法两次位移的微处理器实现方法
RU2179333C1 (ru) Синергическая вычислительная система
KR20150051114A (ko) 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
JP2020201659A (ja) 演算装置、演算方法、および演算プログラム
Yin et al. On the implementation of virtual array using configuration plane
KR20150051116A (ko) 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
KR20120040630A (ko) 메모리 의존성 있는 루프를 처리하기 위한 재구성 가능 프로세서 및 방법

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