CN108733413B - 数据处理装置和数据处理方法 - Google Patents
数据处理装置和数据处理方法 Download PDFInfo
- Publication number
- CN108733413B CN108733413B CN201711347790.0A CN201711347790A CN108733413B CN 108733413 B CN108733413 B CN 108733413B CN 201711347790 A CN201711347790 A CN 201711347790A CN 108733413 B CN108733413 B CN 108733413B
- Authority
- CN
- China
- Prior art keywords
- shift
- instruction
- operand
- multiplier
- data element
- 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
Links
- 238000012545 processing Methods 0.000 title claims abstract description 116
- 238000003672 processing method Methods 0.000 title claims description 5
- 230000004044 response Effects 0.000 claims abstract description 41
- 239000013598 vector Substances 0.000 claims description 37
- 229920006395 saturated elastomer Polymers 0.000 claims description 8
- 238000013507 mapping Methods 0.000 claims description 5
- 238000000034 method Methods 0.000 description 33
- 238000007792 addition Methods 0.000 description 16
- 238000009825 accumulation Methods 0.000 description 10
- 230000008707 rearrangement Effects 0.000 description 7
- 238000003491 array Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 238000013459 approach Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 4
- 230000015572 biosynthetic process Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000001066 destructive effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000001902 propagating effect Effects 0.000 description 1
- 238000004513 sizing Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
Abstract
本公开涉及移位指令。一种装置具有包括用于对一对输入操作数进行乘法运算的乘法器电路的处理电路。响应于指定至少一个移位量的移位指令和包括至少一个数据元素的源操作数,将源操作数和根据移位量确定的移位操作数作为输入操作数提供给乘法器电路,并且控制乘法器电路以执行至少一个乘法运算,其等效于使源操作数的相应数据元素移位由相应移位量指定的位数以生成移位结果值。
Description
技术领域
本技术涉及数据处理领域。
背景技术
用于响应于指令来执行数据处理的处理电路可以包括用于使一对操作数相乘以产生乘积结果的乘法器。乘法器可以包括用于累加这对操作数的部分乘积的加法器阵列。
发明内容
至少一些示例提供了一种装置,包括:处理电路,用于执行处理操作,所述处理电路包括乘法器电路,以对一对输入操作数执行乘法;以及指令解码器,用于解码程序指令以控制所述处理电路来执行处理操作;其中响应于指定至少一个移位量的移位指令和包括至少一个数据元素的源操作数,所述指令解码器被配置为控制处理电路以向乘法器电路提供所述源操作数和根据所述至少一个移位量确定的移位操作数作为所述输入操作数对,并且控制所述乘法器电路,以执行至少一个乘法运算,所述至少一个乘法运算等效于使源操作数的对应数据元素移位由对应的移位量指定的位数来生成移位结果值。
至少一些示例提供了一种装置,包括:用于执行处理操作的装置,包括用于对一对输入操作数执行乘法运算的装置;以及指令解码器,用于解码程序指令以控制所述处理电路来执行处理操作;其中响应于指定至少一个移位量的移位指令和包括至少一个数据元素的源操作数,所述指令解码器被配置为控制处理电路以向所述用于执行乘法的装置提供所述源操作数和根据所述至少一个移位量确定的移位操作数作为所述输入操作数对,并且控制所述用于执行乘法的装置,以执行至少一个乘法运算,所述至少一个乘法等效于使源操作数的对应数据元素移位由对应的移位量指定的位数来生成移位结果值。
至少一些示例提供了一种数据处理方法,包括:响应于指定至少一个移位量的移位指令和包括至少一个数据元素的源操作数;提供根据所述至少一个移位量确定的所述源操作数和移位操作数作为乘法器电路的一对输入操作数;并且控制所述乘法器电路以执行至少一个乘法,所述至少一个乘法等效于使所述源操作数的相应数据元素移位由相应移位量指定的位数,以生成移位结果值。
结合附图阅读的实施例的以下描述将明白本技术的其它方面、特征和优点。
附图说明
图1示意性地示出了具有乘法器阵列的数据处理装置的示例;
图2示出了由L×M乘法器阵列的加法器增加部分乘积的示例,其中对于这个示例L=M=8;
图3示出了一个4×4乘法器阵列的加法器的示例;
为了比较,图4示出了如果操作数以其原始形式输入到乘法器阵列,则累加操作数的子部分的各个乘积的示例;
图5示出了用于处理乘积和乘积(MAP)指令的处理电路的一部分的示例;
图6示出了重排一个操作数以便可以使用用于累加部分乘积的相同加法器的一个子集来响应乘法指令来加上操作数的子部分的各个乘积的示例;
图7A至7C示出了配置乘法器阵列以处理MAP指令的三个不同变型的示例;
图7D示出了对两个操作数的元素进行重排的MAP指令的处理的示例;
图8示出了用于重新安排第二操作数的部分的操作数重排电路的示例;
图9示出了一个MAP指令的示例,其中被相乘以形成每个E×F乘积的部分具有不同的尺寸(E不等于F)。
图10示出了在L不等于M的L×M乘法器阵列上处理MAP指令的示例;
图11和图12示出了当使用布斯编码和无符号算术执行MAP指令时增加附加的部分乘积的不同方法;
图13示出了使用L×M乘法器阵列的加法器来支持MAP指令的处理的数据处理的方法;
为了比较,图14示出了用于将目标操作数向左移位给定数量的位位置的复用电路的示例;
图15示出了重复使用乘法器阵列来实现移位操作的示例;
图16示出了矢量移位操作的一个示例,其中通过使用乘法器电路执行等效乘法,将移位应用于矢量操作数的每个元素;
图17示出了用于生成结果值的元素调整大小移位指令的示例,其中每个元素对应于目标操作数的对应元素的移位版本,并且结果值的元素与目标操作数的元素具有不同尺寸;
图18示出了减少移位指令的示例,其中每个矢量通道的移位结果加在一起;
图19示出了在乘法器阵列上执行减少移位指令以便响应于乘法指令使用现有的累加部分乘积的加法器来执行各个移位结果的相加的示例;
图20示出了饱和移位操作的示例;
图21示出了舍入移位操作的示例;并且
图22示出了使用乘法电路来处理移位指令的方法。
具体实施方式
具体示例如下所述。可以理解,本技术不限于这些特定示例。
处理电路可以包括L×M乘法器阵列,用于响应于由指令解码器解码的乘法指令来处理L位和M位操作数的乘法。可以理解的是,指令解码器也可以通过仅使用乘法器的一些部分来支持分别在少于L和M位的较短操作数上操作的乘法指令,但是至少支持一个作用于L和M位操作数的乘法指令。L和M可以相等或不相等。L×M乘法器阵列可以包括用于累加L位和M位操作数的部分乘积的加法器。
一些处理应用程序可能需要累加大量的乘积。在数字信号处理(DSP)应用中尤其如此,其中诸如快速傅立叶变换(FFT)或离散余弦变换(DCT)的计算通常可能涉及添加许多乘积。处理这种乘积累加的一种方法可以是维持一个累加器寄存器,并对每个乘积执行一次乘累加指令,以将两个操作数的最新乘积加到由先前乘积总和得到的先前累加器值上。
但是,可以通过每条指令计算并添加多个乘积来提高性能。因此,可以提供指定第一J位操作数和第二K位操作数的乘-累加-乘积(MAP)指令,其中J≤L且K≤M。响应于MAP指令,指令解码器控制处理电路来生成包括至少一个结果元素的结果值,其中每个结果元素对应于第一J位操作数的E位部分和第二K位操作数的F位部分的相应E×F乘积的总和,其中1<E<J且1<F<K(J和K可以相同或不同,E和F可以相同或不同)。然而,虽然可以通过每条指令计算两个或多个E×F乘积来提高性能,但是通常认为将相应地E×F乘积相加在一起除了需要已经为响应于乘法指令累加部分乘积而提供的加法器之外,还需要在乘法器阵列的末端提供另外的加法器。这些额外的加法器不仅在电路编辑和功耗方面产生费用,而且在MAP操作延迟方面产生费用。
在本申请中描述的技术中,可以避免这样的附加加法器。用于处理常规乘法运算的乘法器阵列可以被重新用于处理MAP指令,相应的E×F乘积是使用加法器的子集来累加的,用于累加L-位和M-位操作数的部分乘积以响应乘法指令。通过重排将第二K位操作数的F位部分呈现给乘法器阵列的顺序,乘法器阵列中的现有加法器不仅可以生成E×F乘积,而且还可以将由相同的MAP指令产生的多个E×F乘积一起累加起来,以避免除了那些已经提供的用于处理标准乘法指令的额外加法器之外的额外加法器。这节省了电路面积并减少了与MAP指令相关的等待时间。
可以提供操作数重排电路以从变换的K位操作数重排第二K位操作数的F位部分。例如,操作数重排电路可以包括一组多路复用器,其选择第二K位操作数的哪些部分被映射到变换的K位操作数的每个部分。这些多路复用器可以例如在读操作数的寄存器文件和乘法器阵列之间的操作数路径上实现,或者可以被合并到寄存器文件的读取端口中,该寄存器文件可能已经具有从寄存器中选择所需数据的一组复用器。
对于包括至少两个F位部分的第二K位操作数的至少一个段,操作数重排电路可以颠倒第二K位操作数的该段内的F位部分的顺序,以形成变换的K位操作数的对应段。对于MAP指令的一些变型,该段可以对应于整个第二K位操作数,因此所有的F位部分都具有相反的顺序。其它变型可以独立地重新排序第二K位操作数的多个段,使得第二操作数的变换将F位部分的每个段一起保留在相同位置,但是当映射到变换的K位操作数时(例如,在段之间不存在F位部分的交换,但是在段内颠倒顺序),每个段内的F位部分的顺序是相反的。
通常,通过颠倒第二操作数的给定部分内的F位部分的顺序,这意味着乘法器阵列的加法器将其结果加在一起形成乘法运算结果的一部分将对应于部分乘积位,这是由原始的第一和第二操作数的相应位置的E位和F位部分的乘法运算产生的,使得乘法器阵列内的现有加法器可以被重新用于累加计算的多个E×F乘积。相反,如果已经在原始的第一和第二操作数上执行了乘法运算,那么将一起累加的乘积将被计算在乘法器阵列的不同列中,并且因此在从L×M乘法器阵列输出之后,需要单独的加法器来添加E×F乘积。
尽管在一些实施例中,经变换的K位操作数中的相应段可以是与第二K位操作数的相关段(在电路中实现时最有效)在操作数内具有相同相对位置的段,但这不是必需的,在某些情况下,当从第二K位操作数映射到已转换的K位操作数时,也可能会重新排序这些段。如果段被重新排序,则也可能有相应的第一J位操作数段的重新排序。因此,可以将第二K位操作数的给定段映射到变换的K位操作数的对应段(使段内的元素颠倒),其不一定位于操作数内的相同相对位置处。
操作数重排电路可以支持能够根据MAP指令的参数来选择的多个不同重排模式。例如,不同的重排模式可以对应于E和/或F的不同值和/或不同的段尺寸。用于选择要应用的重排模式的MAP指令的参数可以是标识指令类型的指令操作码(例如,可以将多个不同的操作码分配给MAP指令的不同形式)。可选地,多个不同形式的MAP指令可以共享相同的操作码,但是具有一个或多个其它位字段,其直接或间接地识别要使用的重排模式(例如,通过指定E、F或段尺寸的值,指定表示特定重排模式的编码值,或者指定存储用于确定重排模式的信息的寄存器)。
尽管重排第一和第二操作数中仅一个操作数的元素足以允许在乘法器阵列内执行E×F乘积的累加(在重排操作数中的一个操作数的定时或电路区域方面可以是更高效的),也可以重排第一和第二操作数。因此,在一些情况下,响应于MAP指令,指令解码器可控制处理电路重排第一J位操作数的E位部分以形成经变换的J位操作数,并根据经转换的J位操作数和经转换的K位操作数来控制L×M乘法器阵列以使用加法器子集来添加各自的E×F乘积。在这种情况下,请注意,由于转换后的J位操作数取决于第一J位操作数,所以仍然依据上述第一J位操作数和转换后的K位操作数来控制乘法器阵列。第一J位操作数的重排可以按照与上述第二K位操作数类似的方式执行。由于两个操作数都可能被重新排序,所以在J位操作数或K位操作数内的所有段不必按顺序颠倒它们的元素,因为颠倒可以应用于一个段的一个操作数和另一个段的另一个操作数。
处理电路可以包括部分乘积形成电路,以生成将由L×M乘法阵列的加法器累加的部分乘积。对于标准乘法指令,部分乘积形成电路例如可以形成L个1*M位部分乘积或M个1*L位部分乘积以进行累加。例如,部分乘积形成电路可以包括一组“与”门,用于产生一个输出位阵列,它对应于乘法指令的两个输入操作数的各个位组合的乘积。
对于MAP指令,可以重新使用部分乘积形成电路,但是为了掩蔽乘法器阵列的不对应于要添加的任何E×F乘积的部分,可以将部分乘积位的子集设置为零。这确保乘法器的输出包括对应于各个E×F乘积之和的一个或多个部分。选择哪些特定的部分乘积位作为将被清零的部分乘积位的子集可以取决于MAP指令的参数(例如,操作码或另一个位字段),并且对于MAP指令的不同变型可以不同。
对于至少一种形式的MAP指令,指令解码器可以控制处理电路来生成包括多个结果元素的结果值,每个结果元素指定第一J位操作数的X位段内的E位部分的各自E×F乘积与第二K位操作数的Y位段内的F位部分的和,其中E<X<J和F<Y<K。因此,响应于相同的MAP指令,可以在乘法器阵列内并行执行不同段中的多个子乘积的独立累加,以在对应于子乘积的不同段的总和的结果值内生成单独的结果元素。例如,指令解码器可以控制L×M乘法器阵列来为第一J位操作数的第一X位段添加相应的E×F乘积,所述第二K位操作数的第一Y位段使用所述多个加法器的第一子集,并且使用所述多个加法器的第二子集针对第一J位操作数的第二X位段和第二K位操作数的第二Y位段添加相应的E×F乘积。
请注意,在使用乘法器阵列的加法器添加各自的E×F乘积时,在将这些E×F乘积中的每一个乘积加在一起之前不需要单独计算。多个E×F乘积可以一起添加1*E或1*F部分乘积,所以对于第二个E×F乘积或其它E×F乘积来说,可以将该E×F乘积的每个1*E或1*F部分乘积添加到所有以前的部分乘积的累加总量中,从而不确定第二个或更多E×F乘积的实际值。因此,结果的确定可以使用分别产生对应于第一和第二操作数的各个E位和F位部分的E×F乘积之和的结果值的任何一系列加法,不管用于生成该结果的添加的确切顺序如何。
上面讨论的技术的一个优点是它不需要特殊的乘法器电路。在一些示例中,可以通过将输入操作数操作为L×M乘法阵列来提供用于处理MAP指令的适配,并且因此可以重用现有的乘法阵列。有许多技术用于加速L×M乘法器阵列中的L和M位操作数的乘法,所以任何这样的技术都可以与上述的MAP指令处理技术一起使用。例如,L×M乘法器阵列可以包括华莱士树乘法器(Wallace tree multiplier)。其它已知的加速技术可以包括也能够使用的4:2压缩。
用于加速乘法的另一种技术可以是使用布斯(Booth)编码对其中一个被乘的操作数进行编码,其中二进制数被转换为具有数字集{-2,-1,0,+1,+2}的基数为4的数字。虽然布斯编码可以增加部分乘积的生成复杂度,但可以减少必须添加的部分乘积的总数量,因此可以加快乘数阵列的速度。对于一个标准的乘法指令,可以提供布斯编码电路来编码要用布斯编码相乘的一个操作数(使用布斯编码转换哪个操作数无关紧要)。然而,原则上,第一J位操作数和第二K位操作数中的任一个可以响应于MAP指令而进行布斯编码,重新编码第二K位操作数将需要在重排F位部分之前或之后执行额外的步骤。为了加速处理,布斯编码电路可以使用布斯编码与操作数重排电路并行地对第一J位操作数进行编码,重排第二K位操作数的F位部分以形成变换的K位操作数。
如果将布斯编码用于有符号乘法运算,那么上面讨论的MAP指令处理技术可以用于任何现有的L×M布斯乘法器阵列。但是,如果要支持无符号乘法运算,那么布斯编码可能会在被编码的值中增加一个数字。因此,如果正在计算多个子乘积以响应具有无符号算术的MAP指令,则用于形成E×F乘积的每个E位或F位部分可以产生额外的数字,因此需要为每个添加的E×F乘积累加额外的部分乘积,以响应MAP指令形成一个结果元素。
因此,L×M乘法器阵列的多个加法器可以包括足以添加至少N个Z位部分乘积的多个加法器,其中N是L和M中的一个,Z是L和M中的另一个,并且处理电路可以包括附加的部分乘积增加电路以增加额外的Pmax部分乘积,其中P是将被添加以形成结果值的一个结果元素的相应E×F乘积的数目,并且Pmax是处理电路所支持的P的最大值。响应于MAP指令,指令解码器可以控制处理电路来生成对应于所述N个Z位部分乘积与所述另外的Pmax个部分乘积中的至少一个的总和的结果。响应于乘法指令,指令解码器可以控制处理电路来生成取决于N个Z位部分乘积之和的结果,独立于由附加的部分乘积添加电路添加的任何另外的Pmax部分乘积(或者通过将输入归零至附加的部分乘积添加电路,或者通过完全绕过附加的部分乘积添加电路)。这使得布斯编码可以用于MAP指令。
附加的部分乘积添加电路可以用多种方法来实现。在一些示例中,附加部分乘积添加电路可以包括包括在L×M乘法器阵列中的另外的加法器,使得多个加法器包括足以添加至少(N+Pmax)个Z位部分乘积的多个加法器。因此,附加的部分乘积加法电路可以简单地是在现有的L×M乘法器阵列内的一些额外的加法器行。对于乘法指令,可以将这些进一步加法器的输入设置为零,以确保乘法器仅添加N个Z位部分乘积以形成乘法指令的结果。对于MAP指令,可以向至少一个其它加法器行提供基于输入操作数选择的值(要添加的附加部分乘积的数量可能取决于要添加多少E×F乘积以形成结果值的一个结果元素,因为对于MAP指令的给定实例,P可能小于或等于Pmax,所以给定的MAP指令可能不需要所有其它加法器)。
可选地,附加的部分乘积添加电路可以与L×M乘法器阵列分离,并且可以添加附加的Pmax部分乘积以形成单个值。通过使用单独的逻辑电路将布斯编码产生的P个附加部分乘积加到现有的L×M乘法器的“一侧”,这对现有的乘法器可能具有较小的破坏性,因为只需要将一个附加值添加到L×M乘法器阵列的结果(在阵列内使用额外的加法器行,或者在单独的加法器中)。这可以允许MAP指令在对现有的L×M乘法器设计的中断较少的情况下实现,这可以使得电路开发更便宜并减少对乘法指令的影响。
其它示例可以提供上述两种方法的混合。因此,附加的部分乘积添加电路可以包括:添加与所述L×M乘法器阵列分开的电路,以将所述另外的Pmax部分乘积减少到另外的部分乘积,其中2≤R<Pmax;以及包括在所述L×M乘法器阵列中的另外的加法器,使得所述多个加法器包括足以添加至少(N+R)个Z位部分乘积的多个加法器。因此,一些额外的加法器可能仍然包含在L×M乘法器阵列中,但是仅仅足以将R的另外的部分乘积加入,其中R小于Pmax,并且当需要多于R个额外的部分乘积时,则使用单独的加法电路来将多达Pmax个额外的部分乘积减少到R个额外的部分乘积,这些额外的部分乘积然后可以由L×M乘法器阵列的另外的加法器添加。这种方法可以比在L×M乘法器阵列内添加所有Pmax附加部分乘积的方法更有效率,因为单独的加法电路可以使用诸如4比2加法之类的技术,这比添加4个数字来产生单个结果更快。这种方法可以防止L×M乘法器阵列的中断。
L和M可以分别作为第一个和第二个操作数的乘法器阵列所支持的最大尺寸。有可能在L不等于M的L×M乘法器阵列上实现上面讨论的技术。但是,在实践中,许多现有的乘法器阵列采用相同最大尺寸的操作数,其中L=M。术语“L×M乘法器阵列”并不旨在限制,乘法是否加上L个1*M位部分乘积或加上M个1*L位部分乘积(所以L×M乘法器可以统称为M×L乘法器阵列)。
J和K是指MAP指令的第一和第二操作数的尺寸,分别可以等于L和M或者可以小一些。J可能等于K。但是,也可以提供一个MAP指令来处理不同大小的操作数,所以J和K是不同的。例如,并非所有较大操作数的部分都可以用于形成具有较小操作数部分的E×F乘积。或者,可以计算结果元素的多个并行计算,其中每个结果元素使用来自第一和第二操作数中较小者的同一组E位或F位部分,但是使用来自第一和第二操作数中的较大者的不同组的E位或F位部分作为将被相乘以形成E×F乘积的部分。
对于第一J位操作数和第二K位操作数,X和Y是指对应部分的E×F乘积加在一起的段的尺寸。X可以等于Y,或者X和Y可以不同。再次,X可以等于J或者小于J,并且Y可以等于K或者小于K。比率J/X等于比率K/Y并不重要。
E和F是指被乘的单个部分的尺寸以形成每个E×F乘积。E和F可以相等或不同。在E和F不同的情况下,可以通过在L×M乘法器阵列的输入处的部分乘积形成电路将附加的部分乘积位归零,以填充较短的部分尺寸以匹配较长的部分尺寸。
图1示意性地示出了数据处理装置2的一部分的示例。应该理解,图1是简化的表示,省略了通常存在于数据处理器中的许多组件。如图1所示,处理装置2包括:用于存储待执行的程序指令的指令高速缓冲存储器或存储器4;用于从指令高速缓冲存储器或存储器4获取指令的取指台6。取指台6可以例如包括用于预测分支指令的结果的分支预测功能,以便确定正在执行的程序中的程序流程的可能进程并获取用于解码和处理的对应的指令序列。解码台8解码取出的指令以产生控制信号,以控制处理电路10执行对应于那些指令的数据处理操作。
通常,处理电路10可以从寄存器12中读取操作数值A、B,并且生成将被写回到寄存器12的处理结果R。处理电路10可以包括用于执行不同类型的处理操作的多个执行单元。例如,执行单元可以包括用于处理对存储器的存储器访问的加载/存储单元,用于处理整数运算或逻辑运算的算术/逻辑执行单元以及用于处理浮点运算的浮点单元。如图1所示,处理电路的至少一个执行单元可以包括L×M乘法器阵列14,用于计算在L位和M位操作数上执行的乘法运算的结果。尽管图1示出了单个乘法器阵列14,但是一些处理器可以具有多个乘法器阵列,这些乘法器阵列可以支持尺寸操作数尺寸L、M或者可以支持不同的操作数尺寸。例如,在矢量处理器中,可能有多个乘法器阵列用于处理在矢量操作数的相应通道上执行的乘法运算。或者,可以在单个乘法器上按顺序处理每个通道来处理矢量指令。因此,可以理解,图1仅仅是一个示例,对于特定类型的指令如何实现乘法器有许多变型。
图2示出了在L=M=8的情况下的L×M乘法运算的示例。如图2所示,乘法运算可以看作是L个1*M位(或M个1*L位)部分乘积20与对应于其中一个操作数B的单个位乘以另一个操作数A的乘积的每个部分的乘积。部分乘积根据它们的相对位重要性进行对齐,并且加法器的列在每一列中添加相应位置的位以形成乘法运算结果。这类似于用手来计算长乘法运算的方式。
图3示出了可以在乘法器阵列14内提供的用于累加各种部分乘积的加法器阵列30的示例。为了简洁起见,图3的示例显示为L=M=4。在这个示例中,乘法器阵列14包括4行进位保存加法器30,它们被提供基于输入操作数A和B计算的部分乘积位。例如,图3示出了对十进制数11进行13次计算的示例,即二进制数为1101×1011:
图3示出了上面显示的总和的部分乘积如何映射到加法器阵列的输入。进位保存加法器产生进位保存形式的4位结果(即,在最后一行加法器30中产生的进位还没有加到最后一行加法器的相加结果中),所以提供了一个4位进位传播加法器32来加和并进位以二进制形式产生一个4位结果。请注意,乘以两个4位值的实际乘积结果为8位。进位传播加法器32的结果表示高4位,低4位由每行中的右手进位保存加法器直接输出。乘法指令的某些变型可能会返回完整乘积的下半部分,而不是上半部分。不管怎样,从图3的示例中可以看出,完整乘积的8位对应于上述乘法运算所示的相同位值。
对于某些应用,当选择完整乘积的上半部分时,可能需要根据较低的位来舍入乘积的上半部分。为了支持这一点,可以在最后一行的最右边的进位保存加法器中输入舍入常数(R),在乘积的上半部分的最低有效位下方一个位置的位位置上,将部分乘积的总和加1。因此,如果乘积的上半部分截断下方的一个位置的位是1,那么再加1就会导致1被转移到乘积的选定半部分的最低有效位,有效地将结果舍入为可以用高位表示的最接近的值。一些舍入模式可以规定用于确定乘积是否恰好在可以使用高位表示的两个值之间的中间值应该向上舍入或向下舍入的条件。对于这样的舍入模式,决定是否将(R)设置为0或1可以取决于未被选择用于输出的完整乘积的较低位的值。
图3只是一个可能的乘法器设计的示例。有许多已知的技术使得乘法运算的执行速度比图3的简单示例所示的更快,例如使用华莱士树、布斯编码或4:2压缩。图3的示例可以扩展到更大尺寸以支持任意尺寸的L×M乘法器阵列,但是可以理解的是,这不是唯一可以使用的技术,并且可以使用其它的加法器组合来累加乘法运算的各种部分乘积。
如图4所示,一些处理器架构可以支持MAP指令,该指令返回较大操作数内的子部分的各对乘积之和。例如,如图4所示,矢量乘法和累加乘积指令的结果可以是将输入操作数A和B的高部分相乘,将两个输入操作数的低部分相乘,并添加两个乘积结果。例如,这种类型的操作对DSP应用程序非常有用。在32位操作数上运行的这种子矢量乘加指令的其它变型可以返回如下结果:
·(A[31:24]×B[31:24])+(A[23:16])×B[23:16])+(A[15:8]×B[15:8])+
(A[7:0])×B[7:0])
·(A[31:24]×B[23:16])+(A[23:16]×B[31:24])in parallel with(A[15:8]
×B[7:0])+(A[7:0]×B[15:8])
用于这种MAP指令的累加的加数可以是由每个子乘法产生的乘积的下半部分(每个子乘积的全积的上半部分可以被忽略)。请注意,MAP指令并不要求将所有的子乘积加在一起。例如,在上面所示的两个示例中的第二个示例中,第二个选项提供了每对相邻的子乘积加在一起,但是第一个和第二个子乘积不加到第三个和第四个乘积上。
如图2中的虚线所示,L×M乘法器阵列在概念上可以分成映射到输入操作数的某些子部分的乘积的部分。例如,如果这些部分是操作数A和B各自的一半,那么乘法器可以在概念上划分象限,如图2的底部所示。右上象限乘以两个操作数的下半部分BL、AL。左上象限将操作数A的上半部分AH与操作数B的下半部分BL相乘。右下象限将操作数A的下半部分AL与操作数B的上半部分BH相乘。左下象限乘以两个操作数A和B的上半部分AH、BH。注意,乘法运算阵列中的各个象限的位置意味着左上和右下象限的结果由乘法器阵列14内的加法器的列加起来,但是左下角和右上角的象限是分开的加法器的列,所以不加。
因此,为了实现具有以原始形式输入到乘法器的操作数A和B的MAP指令,可以在乘法器阵列内分别计算操作数A和B的上半部分和下半部分的乘积,如图4的右边部分所示,但是这将需要在乘法器阵列14的输出之外提供另外的加法器40,以便将相应的子乘积加在一起。这个附加的加法器40增加了额外的电路面积和功耗,并且还增加了操作的额外延迟。这个问题可以通过对输入操作数中的一个进行重新排序来解决,使得各个子乘积的累加可以在现有乘法器阵列14内发生,从而不需要随后的加法电路40。
图5示出了包括L×M乘法器阵列14的处理电路10的一部分的示例。在L×M乘法器14的输入之前,提供操作数重排电路50,用于对MAP指令的操作数A的F位部分重新排序以形成变换的操作数A'。可选地,可以提供布斯编码电路52,用于与由操作数重排电路50执行的操作数重排并行地编码其它操作数B的布斯编码电路。然而,一些实施方式可能不使用布斯编码,并且在这种情况下可以省略电路52。如果使用布斯编码,那么为了支持无符号乘法运算,进位保存加法器30的附加行可以被包括在乘法器中以处理由布斯编码引入的附加数字。
第一操作数B(包括J个位)和变换后的操作数A'(包括K个位)都被提供给部分乘积形成电路54,部分乘积形成电路计算提供给L×M乘法器40的各个加法器30的部分乘积位的数量。部分乘积形成电路54根据正在执行的MAP指令的特定变型来选择被清除为0的某些位。因此,操作数重排电路50和部分乘积形成电路54都取决于至少一个控制参数56,这是根据指令解码器8对MAP指令的编码来确定的,或者是由MAP指令所引用的寄存器访问的。
图6示出了使用现有乘法器处理MAP指令的一般原理的示例。在这个示例中,X=Y=J=K和E=F=M/2。因此,在这种情况下,由操作数重排电路50施加的重排交换第二操作数A的上半部分和下半部分的顺序以生成经变换的操作数A'。如图6的右侧所示,这意味着当操作数被提供给乘法器阵列14时,乘法器阵列的两个操作数的前半部分和两个操作数的后半部分分别在乘法器的左上和右下象限中。左下和右上象限的输入可以通过部分乘积形成电路54设定为零。这意味着当各列加法器以与上面讨论的图2和3类似的方式计算它们的总和时,那么对应于乘数的左上和右下象限的部分内的加法器的输出将产生对应于与操作数A和B的上半部分对应的第一E×F乘积和与下半部分对应的第二E×F乘积的总和的结果。因此,各个子乘积的累加已经在L×M乘数本身内计算出来,而不需要进一步的加入阶段。
图7A至7C示出了处理MAP指令的变型的三个更多示例。在图7A中,通过颠倒输入操作数A中的一个的相应8位部分被呈现给乘法器的顺序,使用32×32乘法器阵列来计算和添加四个8×8乘积。在图7B中,两对8×8乘积被加在一起,但是不加各自的对以形成两个独立的结果元素,每个对应于两个8×8乘积的总和。在这种情况下,操作数A的每半部分中的8位部分被交换,但是当将A变换成A'时,它们保持在操作数的相同的一半内,在这种情况下N小于M。在图7C中,MAP指令与图6的示例类似,并且该示例在32×32乘法器阵列内添加两个16×16乘积。如图7A至7C所示,乘法器阵列的未使用部分通过在乘法器的输入处将相应的部分乘积位设置为0来归零。
上面的示例示出了只有一个操作数A被重排的情况。但是,如图7D所示,也可以通过重排两个操作数来实现MAP指令。例如,在图7D中,元素的颠倒被应用于操作数B,但是也存在两个操作数A、B的上半部分和下半部分的交换,给出了与图7A中相同的结果。因此,只对其中一个操作数进行重排并不重要。
图8示出了用于支持图7A-7C的示例的操作数重排电路50的示例。操作数重排电路50可以包括一组多路复用器60,用于选择第二操作数A的哪个部分映射到变换后的操作数A'的每个部分。每个多路复用器60可以例如对应于第二操作数A的某个固定尺寸的部分,例如4位、8位或者16位。尽管图8示出了具有四个多路复用器60的示例,但显然这可以根据需要缩放成更小或更大的尺寸。图8底部的表格示出了如何控制输入操作数A的哪些部分被映射到变换后的操作数A'的每个部分以获得标准乘法指令的示例以及分别在图7A至7C中示出的MAP指令的三个变型。对于MAP指令,还示出了Y和F的对应值(在这些示例中,J=K,X=Y,E=F)。在诸如图7D的示例中,两个操作数被重排为第二组多路复用器,可以提供类似于图8所示的操作数来重排操作数B,或者可替代地,每个操作数A、B可以通过具有不同的控制输入的单一组多路复用器顺序地通过,以针对每个操作数选择不同的重排。
如图9所示,MAP指令的输入操作数A、B的尺寸是相同的,或者两个操作数的元素尺寸E和F是相同的。图9示出了一个示例,其中64位操作数A的16位部分与48位操作数B的相应12位部分相乘。12位部分在乘法器阵列的输入处用0填充以匹配16位部分的宽度。尽管在本示例中操作数重排被应用于更宽的操作数A,但显然重排也可以应用于更窄的操作数B。
另外,如图10所示,该技术也可以应用于其中L不等于M的不对称L×M乘法器阵列。在这个示例中,M=2L。这个示例展示了一个计算两个独立结果元素的情况,每个对应于第一操作数B的相同的一对E位部分B0、B1,但是第二操作数A的不同对的F位部分A0、A1或A2、A3,其中第二操作数的每个Y位段按顺序独立地颠倒(即,A2和A3交换,A0和A1交换)。但是,也可以通过归零阵列的一半来计算单个结果元素R。
这种技术的一个优点是,包含大部分整数乘法器的面积和关键路径的全加器阵列不受这个提议的影响。因此,数字乘法运算(如华莱士树、4:2压缩等)的加速技术仍然可用。对于带符号的乘法运算,这个提议也与布斯编码兼容,其交换全加器阵列尺寸的部分乘积产生的复杂度。
但是,对于无符号乘法运算,每乘法运算需要一个额外的部分乘积。如图11所示,这可以通过扩展阵列来适应,使得加法器的数量足以至少加上(N+Pmax)个Z位部分乘积,其中N是L和M中的一个,Z是L和M中的另一个,P是为了形成结果值的一个结果元素而要加上的各个E×F乘积的数量,Pmax是处理电路支持的P的最大值。在这个示例中,通过在L×M乘法器阵列内包括加法器的额外行80来容纳附加的Pmax部分乘积。正如在这个示例中,最多有4个E×F乘积相加来响应一个MAP指令,另外还有4个加法器行80被包括在内。应该理解,如果要添加更多数量的E×F乘积,其它示例可以包括更多的行。对于乘法指令,这些行80不是必需的,所以这些行的输入可以被设置为零。
如图12所示,对原始L×M阵列破坏性小的一种替代方案是将独立的逻辑电路90中的“无符号唯一”部分乘积导出并加到L×M乘法器阵列的“一侧”,并将这一个额外的部分乘积添加到主阵列中,而不是将四个额外的部分乘积嵌入到L×M乘法器阵列中。
混合解决方案也是可用的,其中四个额外的无符号部分乘积的四到二加法在一个单独的逻辑电路中执行,并且两个额外的部分乘积被加入到该阵列中——这种布置交易速度(4比2加比加4个数快),因为阵列中断(两个额外的部分乘积必须容纳在阵列中而不是一个)。在Pmax大于4的情况下,可以以3:2或4:2的多次加法实施。
请注意,E×F乘积上半部分的累加(可选择地舍入)将不会使用上面讨论的技术进行,因为乘积的下半部分需要包含在上半部分中,而这可以通过在各个乘积的整个宽度上进行传播来实现。
图13是表示使用乘法器阵列14处理乘法的方法的流程图。在步骤100,指令解码器8检查下一个将被译码的指令,并确定遇到的指令的类型。如果该指令是指定一对要相乘的输入操作数A、B的乘法指令,那么在步骤102,指令解码器8控制处理电路10将输入操作数A和B提供给L×M乘法器14,乘法器阵列的加法器累加操作数A和B的各种部分乘积。通常,乘法指令可以使用任何已知的技术来处理。如果当前指令不是乘法指令,则在步骤104指令解码器8确定它是否是MAP指令,如果不是,则指令解码器产生控制信号,用于控制处理电路10执行适合于被译码的指令类型的另一个处理操作。
然而,如果检测到MAP指令,则在步骤106,指令解码器8控制处理电路10的操作数重排电路50重排输入操作数A的F位部分以形成经变换的操作数A',其中F<K(K是操作数A的总位数)。在步骤108中,指令解码器8控制部分乘积形成电路54为第一J位操作数B和转换的K位操作数A'的计算的部分乘积的零选择部分乘积位,使得它们变为零,而不管A和B的实际输入值如何。哪些特定的部分乘积位被清零将取决于MAP指令的变型(例如参见图6、7A至7C、9和10中所示的零)。
在步骤110,乘法器阵列14被控制以产生结果R,其中操作数B的E位部分的各自的E×F乘积和操作数A的F位部分使用相同加法器的子集,这将响应常规的乘法指令用于部分乘积的累加。这是因为在步骤106中F位部分的重排使倍增的部分映射以将每个E×F乘积形成到乘法器阵列的区域中,它们被添加到加法器的列中,以便不需要随后的添加阶段。
数据处理装置中的指令解码器可以支持的另一个指令可以是指定将被移位的源操作数的移位指令,其包括至少一个数据元素,并且还指定用于移位源操作数的至少一个数据元素的至少一个移位量。对于标量指令,可能只有一个数据元素和一个移位量。对于矢量指令,操作数可以包括多个数据元素,并且可以在所有数据元素之间共享一个移位量,或者可以为每个元素指定几个不同的移位量,每个数据单元被移位由相应移位量指定的多个位位置。
在下面讨论的技术中,处理电路包括用于对输入操作数对执行乘法运算的乘法器电路,并且响应于该移位指令,指令解码器控制处理电路向乘法器电路提供由移位指令指定的源操作数和由至少一个移位量确定的移位操作数。乘法器电路将源操作数和移位操作数处理为其一对输入操作数,并且控制乘法器电路以执行至少一个乘法运算,其等效于使源操作数的相应数据元素移位由相应移位量指定的位数,以生成移位结果值。
因此,可以使用用于执行乘法运算的现有乘法器电路来处理移位。这对于本领域技术人员而言是不直观的。通过给定数量的位位置左移或右移可以被看作等同于源操作数乘以或除以2的某个幂(或左移映射到2的正幂,右移映射到2的负幂)。然而,典型地,这样的移位不会在乘法器电路内进行,而是在单独的专用移位电路内进行。例如,图14示出了这种移位电路的示例,其可以包括一组多路复用器150,用于接收指定源操作数A将被移位的位数的移位量S,并根据移位量S选择输入操作数的哪一位映射到移位结果的每一位。在图14的示例中,示出了左移,所以移位结果A'的低位位置根据移位量S填充零。可以理解的是,可以使用类似的多路复用器组来执行右移,但是在这种情况下,则可以在移位结果的上端移入零或符号位。
技术人员通常期望诸如图14所示的专用移位电路在产生移位结果时比乘法电路更快。例如,移位电路可以用一组简单的多路复用器来实现,但是乘法器阵列可能需要使用如上面关于图2和图3所讨论的几行进位保存加法器来使多个部分乘积相加,所以技术人员会期望这花费更长的时间,并消耗更多的动态功率,因为它可能需要激活更多数量的门。尽管可以使用诸如使用华莱士树、布斯编码、4:2压缩等的技术来提高乘法器的速度,不过由于更多的门被激活,技术人员将不会使用乘法器来处理移位作为功率有效的折衷。出于这个原因,处理器的趋势是另一种方式,实际上使用移位指令,甚至当真正需要的操作是乘以或除以2的某个幂,但是因为当已知一个操作数是2的幂时,期望在移位器上执行期望的乘法或除法将更节能,所以使用专用的移位指令代替。
然而,在电路面积可能特别受限的低端处理领域,功耗可能不像节省电路面积那样重要。因此,通过在乘法器电路上执行移位,这可以消除完全提供专用移位电路的需要,以便减少总电路面积。另外,实际上,对于提供专用移位电路的这种低端处理器而言,可能会限制执行某些更复杂形式的移位操作的能力,例如涉及饱和或舍入或某些矢量移位操作的移位操作。如下所述,这些类型的移位操作使用多路复用器或其它专用移位电路可能是相对昂贵的,因为需要添加额外的逻辑来检查被移位的操作数内的位值或以设置例如处理不同的矢量数据元素尺寸所需的控制线。实际上,处理电路内的乘法器电路可能已经具有能够处理可变元素尺寸、舍入、饱和或基本移位操作的其它变型的电路,所以这可以使得使用乘法器电路来处理移位指令而不是专用的移位电路更为有效。这与传统的方法相反,即将乘法运算转移到移位电路的另一方向,而不是将移位运算转移到乘法器。
移位指令可以具有与指定要相乘的两个操作数的乘法指令不同的操作码。与乘法指令不同,利用移位指令,指令的第二操作数不是要操作的数据值,而是指定代表源操作数将被移位的位数的移位量的参数。
该装置可以具有查找表以提供给定移位量与移位操作数的对应部分之间的映射。通常,移位操作数可以对应于能够基于由移位指令指定的移位量来选择的2的某个幂。对于矢量指令,移位操作数的不同部分可以根据相应的移位量分别设置为对应于2的不同幂。
为了支持矢量操作,移位指令可以指定包括至少一个数据元素的源操作数,该数据元素具有从处理电路支持的多个数据元素尺寸中选择的当前数据元素尺寸。因此,一个数据元素可以对应于整个源操作数,或者可以在源操作数内定义多个数据元素,每个数据元素的大小较小。当前的数据元素尺寸可以被指定为移位指令的参数,或者可以例如在单独的控制寄存器内指定。在支持可变数据元素尺寸的实现中,移位操作数不仅可以基于移位量而且还可以基于当前数据元素尺寸来生成。这对于右移可能特别有用,其中源操作数的每个部分所乘的2的幂可以对应于元素尺寸和移位量之间的差异。乘法器电路可以包括乘法器阵列,并且可以提供乘法器控制电路以基于当前数据元素尺寸来划分乘法器阵列的部分。例如,分区可以对应于阵列的各个部分之间的载体链的断开。当前数据元素尺寸小于源操作数的总尺寸时,指令解码器可以控制乘法器电路执行两个或更多个乘法运算,每个乘法运算等效于将源操作数的对应数据元素移位由对应的移位量指定的位位置的数目。移位指令可以指定在源操作数的每个数据元素之间共享的单个移位量,或者可以指定每个对应于数据元素之一的多个不同的移位量。
对于一些矢量实施方式,矢量移位指令可以控制指令解码以控制处理电路在当前数据元素尺寸小于总尺寸时生成包括多个结果数据元素的结果值,其中每个结果数据元素对应于响应于该移位指令而执行的相应的乘法运算的结果。也就是说,每个结果数据元素可以对应于输入操作数的元素之一的移位版本。结果数据元素可以与输入数据元素具有相同的大小。可选地,响应于元素尺寸调整移位指令,指令解码器可以控制处理电路来生成包括具有与源操作数的数据元素不同的数据元素尺寸的数据元素的结果值。例如,由于每个乘法运算可以产生具有输入两倍位数的乘积,元素调整大小移位指令可以生成一个结果值,其元素是源操作数的两倍,在这种情况下,只有一半的源操作数元素可能会影响结果。
还可以提供一种减小移位指令,其中当当前数据元素尺寸小于总尺寸时,指令解码器控制处理电路以产生包括至少一个结果数据元素的结果值,该结果数据元素对应于至少两个乘法运算的结果之和。也就是说,减少移位指令可以响应于相同的矢量指令而有效地移位源操作数的多个数据元素,而且还将移位的结果加在一起以形成放置在结果数据元素的对应部分中的累加结果,全部响应于相同的指令。这种类型的减少移位指令可以受益于上面讨论的在L×M乘法器阵列内处理子乘积累加的技术。因此,可以对源操作数或移位操作数进行重新排序,以确保与各个移位结果对应的要添加的子乘积位于在加法器行内相加的乘法器阵列的部分内。如果矢量指令为每个通道指定相同的移位量,则可能不需要进行任何重新排序,因为移位操作数的每个元素可以是相同的。
移位指令可以是左移或右移指令。一些实现可以使用不同的指令操作码来区分左移和右移,使得左移和右移指令可以是不同的类型。可选地,移位指令可以简单地是普通类型的移位指令,但是移位是左移还是右移也可以由移位量指定。例如,如果将移位视为旋转,则向右移位S位可以相当于左移N-S位,其中元素尺寸为N,因此在某些情况下左右移位可以看作是等同的。如果移位不是旋转操作,而不是将从操作数的一端移出的位打包到另一端,而是在操作数的下端或上端注入一些零位或符号位,然后左右移位操作变得不同。即使如此,提供对应于左右移位的不同的指令操作码也是不必要的,因为这仍然可以通过移位量来识别。例如,移位量可以由移位指令指定的带符号的二进制值指定,如果符号为正,那么这可以指示左边和右边的一个移位,而如果符号为负,那么这可以指示另一种移位。考虑将左右移位中的哪一个映射到正或负移位量可以是任意的,并取决于指令集架构的特定编码。
对于右移操作,可以提供不同形式的右移,例如,算术右移操作可以对应于在操作数的顶端被注入的位值,其被标记为位,而逻辑右移可以对应于在操作数的上端注入的位值为零。因此可以提供不同形式的指令以对应于算术和逻辑右移。当在乘法器电路上实现移位时,可以有效地处理这样的算术和逻辑移位,因为乘法器电路可能已经处理了有符号乘法运算和无符号乘法运算,并且算术右移可以被映射到有符号乘法运算,而逻辑移位被映射到无符号乘法运算。因此,这些操作可以简单地通过控制乘法器电路来使用适当类型的有符号/无符号乘法运算来实现。
舍入和饱和可能难以用专用移位多路复用电路处理,但通常已经在乘法器电路中得到支持。因此,可以提供控制乘法器电路执行至少一个乘法运算的饱和移位指令,其中每个乘法运算是一个饱和乘法运算,其中落在预定范围之外的乘法运算结果被钳位到该范围的最小值或最大值。虽然这样的饱和在乘法运算中是常见的,但它不适用于移位。移位时,饱和度基本上意味着如果移位导致该值大于最大值或小于最小值,则结果被钳位到最大值或最小值。当执行左移时,饱和移位通常可能是有用的,所以不需将这个功能提供用于右移。
类似地,可以提供舍入移位指令,其控制乘法器电路将至少一个乘法运算与每个包括将舍入常数加到在该乘法运算中累加的部分乘积的乘法运算一起执行。在移位操作中,舍入常数将被注入的位位置将根据移位量而变化,并且在多路复用移位电路中实现它可能代价高昂。然而,如上所述,乘法器阵列通常可能具有可以将舍入值(R)注入到乘法器阵列的加法器30中的点,并且这些点可以在执行移位操作时使用。
图15示出了用于处理移位操作的处理电路10的一部分的示例。移位指令指定要移位的源操作数A和移位量S。对于矢量操作,还可以在指令本身的编码中或在单独的控制寄存器中定义数据元素尺寸Z。移位量S和元素尺寸Z被提供给移位操作数查找表200,移位操作数查找表存储从移位操作数S和元素尺寸Z的特定值到移位操作数B的多个映射。可选地,不是明确地存储移位操作数,移位操作数查找表200可以包括用于基于当前元素尺寸Z和移位量S来生成操作数B的一组逻辑门。如果还没有通过移位量S指示,则移位操作数查找操作也可以取决于是否执行左移或右移,以及右移是算术右移还是逻辑右移。
然后将源操作数A和所产生的移位操作数B作为输入提供给乘法器阵列14,乘法器阵列可以是用于增加输入操作数的部分乘积的常规L×M乘法加法器阵列,并且是与上面讨论的常规乘法指令相同的阵列。如果上面讨论的MAP指令得到支持,则该阵列还可以具有操作数重排电路或与处理如上所述的MAP指令相关联的其它逻辑,但是用于处理移位操作的乘法器阵列的重用也可以用在不支持这种MAP指令的系统中。实际上,移位操作数B的生成对应于2的某个幂的生成,当乘以源操作数A时,乘法器14计算的乘法结果的相关位移入乘法运算结果的上半部分或下半部分,然后可以通过输出乘积的下半部分或上半部分来读取偏移的结果A'。例如,可以如下执行不同类型的移位:
作为替代方案,对于左移,乘法器不是乘以2S,而是取低位字的结果,乘法器可以乘以2Z+S,然后取高位字的结果。确保移位结果出现在乘积的高半部分或低半部分可以更有效,因为通常乘法器阵列40可能已经提供了用于选择乘积的上半部分或下半部分的功能。例如,可以提供乘法指令版本的不同示例以分别返回乘积的上半部分或下半部分,并且因此如上所述处理移位的方式使得能够重复用于输出用于移位的乘积的上/下部分的电路。然而,如果需要的话,也可以通过乘以基于移位量S选择的两个适当的幂来将移位结果映射到乘积的任意部分,所以移位结果对应于乘积的上半部分或上半部分并不重要。
如图16所示,如果移位指令是矢量指令,则目标矢量VA的每个元素的相应乘法运算可以与移位矢量VB的对应元素一起进行,其中移位操作数VB的每个元素对应于基于由移位指令指定的相应移位量S0-S3而确定的2的幂。例如,移位指令可以指定提供每个矢量通道的移位量的第二矢量操作数VS。或者,移位指令可以指定将由所有通道共享的单个移位量S,并且在这种情况下,移位操作数矢量VB的每个通道将是相同的。虽然图16示出了应用于左移的矢量指令的示例,但是应该理解的是,右移也可以以类似的方式实现。使用矢量处理器,可以使用单独的乘法器阵列实例来处理每个矢量通道,或者可以在公共乘法器电路上顺序处理几个通道以生成矢量结果的相应部分。
如图17所示,移位指令也可以是移位指令的元素尺寸调整,其生成具有不同数据元素尺寸的结果矢量以被输入。例如,在图17中,结果的元素是输入矢量A的两倍。在这种情况下,只有输入矢量的一些元素被映射为输出,并且每个结果元素对应于相应输入元素的移位版本。同样,基于移位量并且可能基于元素尺寸Z来确定用于在每个操作通道中相乘的2的幂。
如图18所示,减少移位指令可以将每个矢量通道的移位结果减小到对应于响应于移位而执行的乘法运算的每个结果的总和的单个结果。如图19所示,这可以使用上面讨论的技术来完成,其中通过颠倒其中一个输入的元素被提供给乘法器的顺序,相应的子乘积在L×M乘法器阵列中相乘并累加。在这个示例中是重新排序的移位操作数B,但重新排序也可以应用到源操作数A。应该理解的是,上面讨论的用于响应于MAP指令累加乘积的任何示例也可以应用于移位指令。因此,尽管图18和19示出了来自每个矢量通道的所有子乘积被加在一起以形成单个结果的情况,子乘积的累加也可以针对矢量内的相邻元素的每个段单独执行,并且以与图7B所示的示例类似的方式与其它段分开地进行。
图20示出了饱和偏移的示例,其中如果偏移导致一个大于最大值的值,则将结果钳位到最大值,而如果结果小于最小值,则将其钳位到最小值,否则如果在最小值和最大值之间,则结果是实际的移位结果。当移位真正意图对应于乘以2的某个幂时,饱和移位可能特别有用,所以如果正在使用带符号的算术运算,则如果移位导致非符号位移出操作数的上端,这有效地意味着结果已经包装成为负值(或者负值已经包装成为正值),所以为了提供一个更准确地代表原来的移位操作数A乘以2的所需的幂的真实结果的值,可以将实际的移位结果饱和以将其钳位到最大值或最小值。利用类似于图14中所示的多路复用移位电路,这种饱和将非常难以有效地实现,特别是对于面积效率是重要因素的低端处理器,因为需要额外的逻辑来检查正在移出的操作数的位,并且如果发生饱和,强制结果值的某些较低位为0或1。然而,当在乘法器上实施移位时,通常可能已经实现了饱和乘法,因此重用该电路以执行饱和移位也更为有效。例如,在乘法器阵列末端的进位传播加法器32可以提供有用于检查所产生的乘积的更高有效位的逻辑,以确定是否发生上溢或下溢,从而判断结果是否饱和并被钳位到最大值或最小值。对于在乘法器14的输出端已经提供的较低位,可能通常会有一些多路复用器,当要执行饱和时,可以将0或1注入到乘积结果的较低位。因此,通过重新使用乘法器来处理移位指令,更可能的是饱和移位操作变得可行,增加了可用的移位操作的灵活性。
图21示出了一个舍入移位操作的示例。在这个示例中,要移位的操作数A被右移3位,这导致某些位值在二进制点位置之下移动。结果可以被截断以形成移位结果。然而,如果移位实际上是想用2的某个幂来表示一个除法,那么通常可能希望将除法结果舍入到最接近的整数,如果结果被简单地截断,那么这可能不会发生。因此,可以在二进制点位置之下的一个位置添加1的额外位值的情况下执行舍入,并且如果原始移位结果中的二进制点位置的下一位是1,则导致进位到二进制点位置之上的位以确保最终结果代表了如果中间结果的所有位都被保留,那么表示最接近的整数。尽管图21示出了在二进制点位置上舍入的示例,但是将会理解,舍入也可以在取决于所表示的值的重要性的其它位位置处发生。
利用类似于图14所示的多路复用移位电路,因为舍入常数R的加法可能需要在原始输入操作数A的任何位上发生,并且还需要提供通常不会在移位器中提供的附加加法器,所以难以实现这样的舍入。对于矢量移位来说,这尤其是对于可变数据元素尺寸的支持可能导致用于在移位器中的不同位置处注入舍入位的复杂控制逻辑的问题。同样对于一些舍入模式,还需要一些用于检查原始输入操作数A的特定位值的逻辑。如上面在图3中所讨论的那样,乘法器阵列通常可以具有通过在阵列内的特定位位置处注入舍入常数(R)来对乘法运算结果进行舍入的能力,并且因此当执行移位操作时可以重新使用该功能。例如,代替使用专用的移位电路来处理舍入右移,而是可以替代地将其映射到源操作数A乘以基于元素尺寸和移位量S确定的2的幂,并且乘积的高阶部分可以与在高阶部分声明的舍入输入(R)一起取得,以有效地将0.1加到乘积上。
图22示出了处理处理电路10内的移位操作的处理方法。在步骤250,指令解码器8确定要解码的下一个指令的类型。如果指令不是移位,则根据检测到的指令类型进行处理,并且指令解码器8产生用于控制处理电路10执行相应的处理操作的控制信号。如果指令是移位指令,则在步骤252,解码器8控制移位操作数形成电路200基于由移位指令指定的至少一个移位量S并且可选地还基于元件尺寸Z来生成移位操作数。在步骤254,将由移位指令指定的移位操作数和源操作数A作为输入操作数提供给乘法器电路14。在步骤256,乘法器电路14使源操作数A和移位操作数B相乘,就好像它们是正常的乘法运算输入一样,使得乘法器电路执行至少一个乘法运算,其等效于使源操作数A的对应数据元素移位由对应的移位量S指定的位位置的数量以产生移位结果。
该技术提供了关于如何实现取决于特定核心的约束的舍入、饱和移位的更广泛选择的实施方式。在面积受限的内核中,例如小型嵌入式微控制器,可以用所需的额外硬件实现所有期望的行为。如果发现效率更高,实施可以选择以这种方式实施一些甚至全部的转变。
对于所有类型的移位指令使用乘法器电路14并不是必须的。尽管一些实施方式可能根本不提供专用的移位电路,并且可能使用乘法器来处理所有的移位,其它的实现方式仍然可以提供移位器来处理相对简单的移位类型,但是更复杂的移位操作类型,例如舍入或饱和移位或各个移位结果的累加到合并累加器值的移位可以使用如上所述的乘法器来处理。
在本申请中,词语“被配置为......”用于表示装置的元件具有能够执行所定义的操作的配置。在这种情况下,“配置”是指硬件或软件互连的布置或方式。例如,该装置可以具有提供所定义的操作的专用硬件,或者处理器或其它处理装置可以被编程为执行该功能。“被配置为”并不意味着装置元件需要以任何方式改变以提供定义的操作。
尽管已经参照附图详细描述了本发明的说明性实施例,但是应该理解,本发明不限于这些精确的实施例,在不脱离由所附权利要求限定的本发明的范围和精神的情况下,本领域技术人员可以在其中进行各种改变和修改。
Claims (19)
1.一种数据处理装置,包括:
处理电路,用于执行处理操作,所述处理电路包括乘法器电路,以对一对输入操作数执行乘法;以及
指令解码器,用于解码程序指令以控制所述处理电路来执行处理操作;
其中响应于指定至少一个移位量的移位指令和包括至少一个数据元素的源操作数,所述指令解码器被配置为控制处理电路以向乘法器电路提供所述源操作数和根据所述至少一个移位量确定的移位操作数作为所述一对输入操作数,并且控制所述乘法器电路,以执行至少一个乘法运算,所述至少一个乘法运算等效于使源操作数的对应数据元素移位由对应的移位量指定的位数来生成移位结果值。
2.如权利要求1所述的数据处理装置,包括查找表以提供给定移位量与所述移位操作数的对应部分之间的映射。
3.如权利要求1所述的数据处理装置,其中所述移位指令指定源操作数,所述源操作数包括具有从所述处理电路支持的多个数据元素尺寸中选择的当前数据元素尺寸的至少一个数据元素。
4.如权利要求3所述的数据处理装置,其中响应于所述移位指令,所述指令解码器被配置为控制所述处理电路以根据所述当前数据元素尺寸和所述至少一个移位量来产生所述移位操作数。
5.如权利要求3所述的数据处理装置,其中所述乘法器电路包括乘法器阵列和乘法器控制电路,以根据所述当前数据元素尺寸来划分所述乘法器阵列的部分。
6.如权利要求3所述的数据处理装置,其中,当所述当前数据元素尺寸小于所述源操作数的总尺寸时,响应于所述移位指令,所述指令解码器被配置为控制乘法器电路执行多个乘法运算,每个乘法运算等效于将源操作数的对应数据元素移位由对应的移位量指定的位数的数量。
7.如权利要求6所述的数据处理装置,其中,当所述当前数据元素尺寸小于所述总尺寸时,所述移位指令为所述源操作数的每个数据元素指定单个移位量作为所述对应移位量。
8.如权利要求6所述的数据处理装置,其中,当所述当前数据元素尺寸小于所述总尺寸时,所述移位指令指定多个移位量作为所述源操作数的各个数据元素的所述对应移位量。
9.如权利要求6所述的数据处理装置,其中当所述当前数据元素尺寸小于所述总尺寸时,响应于矢量移位指令,所述指令解码器被配置为控制处理电路来产生结果值,所述结果值包括多个结果数据元素,每个结果数据元素对应于所述多个乘法运算中相应的一个的结果。
10.如权利要求6所述的数据处理装置,其中,当所述当前数据元素尺寸小于所述总尺寸时,响应于减少移位指令,所述指令解码器被配置为控制所述处理电路来生成包括至少一个结果数据元素的结果值,每个结果数据元素对应于所述多个乘法运算中的至少两个的结果的和。
11.如权利要求2所述的数据处理装置,其中响应于元素调整大小移位指令,所述指令解码器被配置为控制处理电路来生成包括具有与所述移位操作数的一个或多个数据元素不同的数据元素尺寸的一个或多个数据元素的结果值。
12.如权利要求1所述的数据处理装置,其中响应于左移指令,所述指令解码器被配置为控制乘法器电路执行所述至少一个乘法,其中每个乘法等效于使所述移位操作数的对应数据元素向左移位由相应移位量指定的位位置的数目,以生成所述移位结果值。
13.如权利要求1所述的数据处理装置,其中响应于饱和移位指令,所述指令解码器被配置为控制所述乘法器电路执行所述至少一个乘法运算,其中每个乘法运算是饱和乘法运算,其中落在预定范围之外的乘法运算的结果被钳位到所述预定范围的最小值或最大值。
14.如权利要求1所述的数据处理装置,其中响应于右移指令,所述指令解码器被配置为控制所述乘法器电路执行所述至少一个乘法运算,其中每个乘法运算等效于使源操作数的相应数据元素右移位由相应移位量指定的位数的数量,以生成所述移位结果值。
15.如权利要求14所述的数据处理装置,其中响应于算术右移指令,所述指令解码器被配置为控制所述乘法器电路以使用带符号的乘法运算来执行所述至少一个乘法运算。
16.如权利要求14所述的数据处理装置,其中响应于逻辑右移指令,所述指令解码器被配置为控制所述乘法器电路以使用无符号乘法运算来执行所述至少一个乘法运算。
17.如权利要求1所述的数据处理装置,其中响应于舍入移位指令,所述指令解码器被配置为控制所述乘法器电路系统执行所述至少一个乘法运算,所述每一乘法运算包括将舍入常数添加到所述乘法运算中累加的部分乘积。
18.一种数据处理装置,包括:
用于执行处理操作的装置,包括用于对一对输入操作数执行乘法运算的装置;以及
指令解码器,用于解码程序指令以控制所述用于执行处理操作的装置来执行处理操作;
其中响应于指定至少一个移位量的移位指令和包括至少一个数据元素的源操作数,所述指令解码器被配置为控制所述用于执行处理操作的装置以向所述用于执行乘法运算的装置提供所述源操作数和根据所述至少一个移位量确定的移位操作数作为所述一对输入操作数,并且控制所述用于执行乘法运算的装置,以执行至少一个乘法运算,所述至少一个乘法运算等效于使源操作数的对应数据元素移位由对应的移位量指定的位数来生成移位结果值。
19.一种数据处理方法,包括:
响应于指定至少一个移位量的移位指令和包括至少一个数据元素的源操作数;
提供根据所述至少一个移位量确定的所述源操作数和移位操作数作为乘法器电路的一对输入操作数;并且
控制所述乘法器电路以执行至少一个乘法运算,所述至少一个乘法运算等效于使所述源操作数的相应数据元素移位由相应移位量指定的位数,以生成移位结果值。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/494,911 US10162633B2 (en) | 2017-04-24 | 2017-04-24 | Shift instruction |
US15/494,911 | 2017-04-24 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108733413A CN108733413A (zh) | 2018-11-02 |
CN108733413B true CN108733413B (zh) | 2023-10-24 |
Family
ID=63853888
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711347790.0A Active CN108733413B (zh) | 2017-04-24 | 2017-12-15 | 数据处理装置和数据处理方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10162633B2 (zh) |
CN (1) | CN108733413B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110196709B (zh) * | 2019-06-04 | 2021-06-08 | 浙江大学 | 一种基于RRAM的非易失性8位Booth乘法器 |
US20210056220A1 (en) * | 2019-08-22 | 2021-02-25 | Mediatek Inc. | Method for improving confidentiality protection of neural network model |
CN111694540B (zh) * | 2020-05-06 | 2023-04-21 | 常熟理工学院 | 一种用于数论变换乘法的基64运算电路 |
US11740899B2 (en) * | 2021-08-31 | 2023-08-29 | Micron Technology, Inc. | In-memory associative processing system |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH02100127A (ja) * | 1988-10-06 | 1990-04-12 | Nec Corp | データ処理装置 |
CN1534458A (zh) * | 1995-08-31 | 2004-10-06 | ض� | 能够使用分组数据指令来执行快速变换操作的方法和装置 |
CN102053817A (zh) * | 2009-10-30 | 2011-05-11 | Arm有限公司 | 用于执行乘法累加运算的设备和方法 |
CN102576302A (zh) * | 2009-11-30 | 2012-07-11 | 马丁·劳比赫 | 微处理器及用于微处理器上增强精确度乘积和计算的方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6738793B2 (en) * | 1994-12-01 | 2004-05-18 | Intel Corporation | Processor capable of executing packed shift operations |
US6643673B1 (en) * | 1999-11-30 | 2003-11-04 | Ati International, Srl | Method and apparatus for arithmetic shifting |
US7275147B2 (en) * | 2003-03-31 | 2007-09-25 | Hitachi, Ltd. | Method and apparatus for data alignment and parsing in SIMD computer architecture |
US7689641B2 (en) * | 2003-06-30 | 2010-03-30 | Intel Corporation | SIMD integer multiply high with round and shift |
GB2411974C (en) * | 2003-12-09 | 2009-09-23 | Advanced Risc Mach Ltd | Data shift operations |
US9678749B2 (en) * | 2014-12-22 | 2017-06-13 | Intel Corporation | Instruction and logic for shift-sum multiplier |
-
2017
- 2017-04-24 US US15/494,911 patent/US10162633B2/en active Active
- 2017-12-15 CN CN201711347790.0A patent/CN108733413B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH02100127A (ja) * | 1988-10-06 | 1990-04-12 | Nec Corp | データ処理装置 |
CN1534458A (zh) * | 1995-08-31 | 2004-10-06 | ض� | 能够使用分组数据指令来执行快速变换操作的方法和装置 |
CN102053817A (zh) * | 2009-10-30 | 2011-05-11 | Arm有限公司 | 用于执行乘法累加运算的设备和方法 |
CN102576302A (zh) * | 2009-11-30 | 2012-07-11 | 马丁·劳比赫 | 微处理器及用于微处理器上增强精确度乘积和计算的方法 |
Non-Patent Citations (2)
Title |
---|
Yedidya Hilewitz 等 .A New Basis for Shifters in General-Purpose Processors for Existing and Advanced Bit Manipulations.《IEEE Transactions on Computers 》.2009,第58卷第1035-1048页. * |
李川.嵌入式微处理器的设计分析与仿真验证.《中国优秀硕士学位论文全文数据库 信息科技辑》.2008,(第8期),第I137-7页. * |
Also Published As
Publication number | Publication date |
---|---|
CN108733413A (zh) | 2018-11-02 |
US20180307486A1 (en) | 2018-10-25 |
US10162633B2 (en) | 2018-12-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108733413B (zh) | 数据处理装置和数据处理方法 | |
US9703529B2 (en) | Exception generation when generating a result value with programmable bit significance | |
US9703531B2 (en) | Multiplication of first and second operands using redundant representation | |
US8468335B2 (en) | Reconfigurable system having plurality of basic function units with each unit having a plurality of multiplexers and other logics for performing at least one of a logic operation or arithmetic operation | |
US10409604B2 (en) | Apparatus and method for performing multiply-and-accumulate-products operations | |
TW201617850A (zh) | 標準格式中間結果 | |
KR19990044304A (ko) | 압축 데이터 연산용 명령 세트 | |
KR19980041798A (ko) | 영상처리를 위한 명령을 지원하는 모듈 계산구조 | |
CA2725136A1 (en) | Microprocessor techniques for real signal processing and updating | |
WO2017081435A1 (en) | Lane position information for processing of vector | |
CN108733345B (zh) | 乘法累加乘积指令 | |
US20170139673A1 (en) | Redundant representation of numeric value using overlap bits | |
US9928031B2 (en) | Overlap propagation operation | |
US10846056B2 (en) | Configurable SIMD multiplication circuit | |
US7464128B1 (en) | Methods and apparatus for single stage Galois field operations | |
US20090031117A1 (en) | Same instruction different operation (sido) computer with short instruction and provision of sending instruction code through data | |
CN112230993A (zh) | 数据处理方法及装置、电子设备 | |
JP2013210837A (ja) | 演算回路及び演算方法 | |
KR20080052194A (ko) | 재구성형 프로세서 연산 방법 및 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |