买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】乘法累加乘积指令_ARM 有限公司;安谋科技(中国)有限公司_201711367078.7 

申请/专利权人:ARM 有限公司;安谋科技(中国)有限公司

申请日:2017-12-18

公开(公告)日:2024-03-15

公开(公告)号:CN108733345B

主分类号:G06F7/496

分类号:G06F7/496

优先权:["20170424 US 15/494,946"]

专利状态码:有效-授权

法律状态:2024.03.15#授权;2020.03.20#实质审查的生效;2018.11.02#公开

摘要:本公开涉及乘法累加乘积指令。本文提供了一种设备,该设备具有包括L×M乘法器阵列的处理电路。与处理电路相关联的指令解码器支持用于生成至少一个结果元素的乘法累加乘积MAP指令,该至少一个结果元素对应于J位操作数的E位部分和K位操作数的F位部分的相应E×F乘积的和,其中1EJ≤L并且1FK≤M。响应于MAP指令,指令解码器控制处理电路来重新排列第二K位操作数的F位部分以形成经变换的K位操作数,并根据第一J位操作数和经变换的K位操作数控制L×M乘法器阵列使用用于累加常规乘法的部分乘积的加法器的子集来加总相应E×F乘积。

主权项:1.一种数据处理设备,包括:处理电路,所述处理电路用于执行数据处理,所述处理电路包括L×M乘法器阵列,其中L和M是整数;以及指令解码器,所述指令解码器响应于指定L位操作数和M位操作数的乘法指令来控制所述乘法器阵列使用用于累加所述L位操作数和所述M位操作数的部分乘积的多个加法器来将所述L位操作数和所述M位操作数相乘;其中响应于指定第一J位操作数和第二K位操作数的乘法累加乘积MAP指令,其中J≤L并且K≤M,所述指令解码器被配置用于控制所述处理电路来生成包括至少一个结果元素的结果值,每个结果元素对应于所述第一J位操作数的E位部分和所述第二K位操作数的F位部分的相应E×F乘积的和,其中1EJ并且1FK;响应于MAP指令,所述指令解码器被配置用于控制所述处理电路重新排列所述第二K位操作数的F位部分以形成经变换的K位操作数,并且用于根据所述第一J位操作数和所述经变换的K位操作数控制所述L×M乘法器阵列使用所述多个加法器的子集来加总所述相应E×F乘积;并且其中,用于响应于所述MAP指令来加总所述相应E×F乘积的所述多个加法器的所述子集包括:在硬件中提供的也用于响应于所述乘法指令来累加所述L位操作数和所述M位操作数的部分乘积的相同的加法器。

全文数据:乘法累加乘积指令技术领域[0001]本技术涉及数据处理领域。背景技术[0002]用于响应于指令来执行数据处理的处理电路可以包括用于将一对操作数相乘以产生乘积结果的乘法器。乘法器可以包括用于累加这对操作数的部分乘积的加法器阵列。发明内容[0003]至少一些示例提供了一种设备,设备包括:处理电路,处理电路用于执行数据处理,处理电路包括LXM乘法器阵列,其中L和M是整数;以及指令解码器,指令解码器响应于指定L位操作数和M位操作数的乘法指令来控制乘法器阵列使用用于累加L位操作数和M位操作数的部分乘积的多个加法器来将L位操作数和M位操作数相乘;其中响应于指定第一J位操作数和第二科立操作数的乘法累加乘积multiply-and_accumulate-products,MAP指令,其中JSL并且KSM,指令解码器被配置用于控制处理电路来生成包括至少一个结果元素的结果值,每个结果元素对应于第一J位操作数的E位部分和第二K位操作数的F位部分的相应EXF乘积的和,其中1〈E〈J并且1〈F〈K;并且响应于MAP指令,指令解码器被配置用于控制处理电路重新排列第二K位操作数的F位部分以形成经变换的K位操作数,并且用于根据第一J位操作数和经变换的K位操作数控制LXM乘法器阵列使用多个加法器的子集来加总相应EXF乘积。[0004]至少一些示例提供了一种设备,设备包括:用于执行数据处理的装置,包括用于执行LXM乘法的装置;以及用于解码指令的装置,其响应于指定L位操作数和M位操作数的乘法指令,来控制用于执行LXM乘法的装置使用多个用于加总以累加L位操作数和M位操作数的部分乘积的装置将L位操作数和M位操作数相乘;其中响应于指定第一J位操作数和第二K位操作数的乘法累加乘积MAP指令,其中JSL并且KSM,用于解码指令的装置被配置用于控制用于执行数据处理的装置来生成包括至少一个结果元素的结果值,每个结果元素对应于第一J位操作数的E位部分和第二K位操作数的F位部分的相应EXF乘积的和,其中1〈E〈J并且1〈F〈K;并且响应于MAP指令,用于解码指令的装置被配置用于控制用于执行数据处理的装置重新排列第二K位操作数的F位部分以形成经变换的K位操作数,并且用于根据第一J位操作数和经变换的K位操作数控制用于执行LXM乘法的装置使用多个用于加总的装置的子集来加总相应EXF乘积。[0005]至少一些示例提供了一种用于包括LXM乘法器阵列的设备的数据处理方法,LXM乘法器阵列包括多个加法器,多个加法器用于累加响应于乘法指令而被相乘的L位操作数和M位操作数的部分乘积,其中L和M是整数,方法包括:响应于指定第一J位操作数和第二K位操作数的乘法累加乘积MAP指令,其中JSL且KSM:重新排列第二K位操作数的F位部分以形成经变换的K位操作数,其中1〈F〈K;以及根据第一J位操作数和经变换后的K位操作数控制LXM乘法器阵列来生成包括至少一个结果元素的结果值,每个结果元素对应于第一J位操作数的E位部分和第二K位操作数的F位部分的相应EXF乘积的和,其中1〈E〈J;其中使用多个加法器的子集来加总相应EXF乘积。[0006]本技术的其他方面、特征和优点将从结合附图阅读的对示例的以下描述变得显而易见。附图说明[0007]图1示意性地示出了具有乘法器阵列的数据处理设备的示例;[0008]图2示出了由LXM乘法器阵列的加法器对部分乘积进行加总的示例,其中对于此示例L=M=8;[0009]图3示出了4X4乘法器阵列的加法器的示例;[0010]图4为了比较而示出了在操作数以其原始形式输入到乘法器阵列中时累加操作数的子部分的相应乘积的不例;[0011]图5示出了处理电路的用于处理乘法累加乘积MAP指令的部分的示例;[0012]图6示出了以下示例:重新排列操作数中的一个操作数,以便可以使用用于响应于乘法指令累加部分乘积的相同加法器的子集来而加总操作数的子部分的相应乘积;[0013]图7A至图7C示出了配置乘法器阵列以处理MAP指令的三个不同变体的示例;[0014]图7D示出了使用两个操作数的元素重新排列来处理MAP指令的示例;[0015]图8示出了用于重新排列第二操作数的多个部分的操作数重新排列电路的示例;[0016]图9示出了MAP指令的示例,其中相乘以形成每个EXF乘积的部分具有不同的大小E不等于F;[0017]图10示出了在L不等于M的情况下,在LXM乘法器阵列上处理MAP指令的示例;[0018]图11和图12示出了当使用Booth编码和无符号运算执行MAP指令时用于加总附加的部分乘积的不同方法;[0019]图13示出了使用LXM乘法器阵列的加法器来支持对MAP指令的处理的数据处理方法;[0020]图14为了比较而示出了用于将目标操作数向左偏移给定数量的数位位置的多路复用电路的示例;[0021]图15示出了重复使用乘法器阵列来实现偏移操作的示例;[0022]图16示出了向量偏移操作的示例,其中通过使用乘法器电路执行等效乘法,来将偏移施加至向量操作数的每个元素;[0023]图17示出了用于生成结果值的元素大小改变偏移指令elementresizingshiftinstruction的示例,结果值中的每个元素对应于目标操作数的对应元素的经偏移版本,并且结果值的元素具有与目标操作数的元素不同的大小;[0024]图18示出了减少偏移指令的示例,其中每个向量通道vectorlane中的偏移的结果加总在一起;[0025]图19示出了以下示例:在乘法器阵列上实现减少偏移指令,以便使用响应于乘法指令累加部分乘积的现有加法器来执行相应偏移结果的加总;[0026]图20示出了饱和偏移操作的示例;[0027]图21示出了具有舍入的偏移操作的示例;以及[0028]图22示出了使用乘法电路来处理偏移指令的方法。具体实施方式[0029]下文描述了具体示例。应当理解,本技术并不限于这些具体示例。[0030]处理电路可以包括LXM乘法器阵列,所述LXM乘法器阵列用于响应于由指令解码器解码的乘法指令来处理L位和M位操作数的乘法。应当理解,指令解码器也可以通过使用乘法器的仅一些部分来支持对具有少于分别L位和M位的较短操作数的乘法指令运算,但是支持作用于L位操作数和M位操作数的至少一个乘法指令。L和M可以相等或不相等。LXM乘法器阵列可以包括用于累加L位和M位操作数的部分乘积的加法器。[0031]一些处理应用可能需要累加大量的乘积。在数字信号处理DSP应用中尤其是这种情况,其中诸如快速傅立叶变换FFT或离散余弦变换DCT的计算通常可能涉及加总许多乘积。一种处理这种乘积累加的方法可以是维持累加寄存器,并对每个乘积执行一次乘法累加指令以将两个操作数的最新乘积加到从先前乘积之和产生的先前累加值上。[0032]然而,性能可以通过每条指令计算和加总多于一个乘积来提高。因此,可以提供指定第一J位操作数和第二K位操作数的乘法累加乘积MAP指令,其中JSL并且KSM。响应于MP指令,指令解码器控制处理电路来生成包括至少一个结果元素的结果值,其中每个结果元素对应于第一J位操作数的E位部分与第二K位操作数的F位部分的相应的EXF乘积的和,其中1〈E〈J并且1〈F〈KJ和K可以相等或不同,并且E和F可以相等或不同)。然而,虽然性能可以通过每条指令计算两个或更多个EXF乘积来提高,但是将相应的EXF乘积加总在一起通常被认为需要除了已经提供用于响应于乘法指令累加部分乘积的加法器以外,还在乘法器阵列的末端提供附加的加法器。这些额外的加法器通常不仅在电路面积和功耗方面产生成本,而且还在MP运算的延迟方面产生成本。[0033]在本申请中描述的技术中,可以避免这种附加加法器。用于处理常规乘法的乘法器阵列可以被重复用于处理MAP指令,其中相应的EXF乘积使用用于响应于乘法指令累加L位操作数和M位操作数的部分乘积的加法器的子集来加总。通过重新排列第二K位操作数的F位部分被呈现给乘法器阵列的顺序,乘法器阵列内的现有加法器可以不仅生成EXF乘积,而且还将由相同MAP指令产生的多个EXF乘积累积在一起,以避免对除了已经被提供用于处理标准乘法指令的那些加法器以外的附加加法器的任何需要。这节省了电路面积并减少了与MP指令相关的延迟。[0034]可以提供操作数重新排列电路以根据经变换的K位操作数重新排列第二K位操作数的F位部分。例如,操作数重新排列电路可以包括一组多路复用器,所述多路器选择第二K位操作数的哪些部分被映射到经变换的K位操作数的每个部分。这些多路复用器可以例如在从中读取操作数的寄存器文件与乘法器阵列之间的操作数路径上实现,或者可以并入到可能已经具有一组从寄存器选择所需数据的多路复用器的寄存器文件的读取端口中。[0035]对于第二K位操作数中包括F位部分中的至少两个的至少一个区段,操作数重新排列电路可以颠倒第二K位操作数的所述区段内的F位部分的顺序以形成经变换的K位操作数的对应区段。对于MAP指令的一些变体,区段可以对应于整个第二K位操作数,因此所有的F位部分都具有颠倒的顺序。其他变体可以分开独立地对第二K位操作数的多个区段进行重新排序,使得第二操作数的变换将F位部分的每个区段总体地保持在相同位置,但是每个区段内的F位部分的顺序在映射到经变换的K位操作数时被颠倒例如,在区段之间不存在F位部分的调换,但是顺序在区段内颠倒)。[0036]通常,通过颠倒第二操作数的给定部分内的F位部分的顺序,这意味着乘法器阵列的将加法器的结果加总在一起以形成部分乘法结果的加法器将对应于部分乘积位,所述部分乘积位是由原始的第一操作数和第二操作数的相应定位的E位部分和F位部分的乘法产生的,使得乘法器阵列内的现有加法器可以被重复用于累加响应于MAP指令而被计算的多个EXF乘积。相反,如果已经对原始的第一操作数和第二操作数执行了乘法,那么要累加在一起的乘积应在乘法器阵列的不同列中计算,因此在EXF乘积从LXM乘法器阵列输出之后需要单独的加法器来加上EXF乘积。[0037]尽管在一些实施方案中,经变换的K位操作数中的相应区段可以是与第二K位操作数的相关区段在操作数内具有相同相对位置的区段并且这对于在电路中实现是最有效的),这不是必需的,并且在某些情况下,当从第二K位操作数映射到经变换的K位操作数时,也可能存在对这些区段的重新排序。如果区段被重新排序,则也可能存在第一J位操作数的区段的相应重新排序。因此,第二K位操作数的给定区段可以被映射到经变换的K位操作数的对应区段其中所述区段内的元素颠倒),所述对应区段不一定位于操作数内的相同相对位置处。[0038]操作数重新排列电路可以支持可以根据MAP指令的参数来选择的多种不同重新排列模式。例如,不同的重新排列模式可对应于不同的E和或F值和或不同的区段大小。用于选择要应用的重新排列模式的MP指令的参数可以是标识指令类型的指令操作码例如,可以将多个不同的操作码分配给不同形式的MAP指令)。或者,多个不同形式的MAP指令可以共享相同的操作码,但是具有直接或间接地标识要使用的重新排列模式的一个或多个其他位域例如,通过指定E、F的值或区段大小,指定表示特定重新排列模式的编码值,或者指定存储用于确定重新排列模式的信息的寄存器)。[0039]虽然重新排列第一和第二操作数中仅一个操作数的元素足以允许在乘法器阵列内执行EXF乘积的累加这可以更有效地在定时或电路面积方面重新排列操作数中的仅一个操作数),也可以重新排列第一操作数和第二操作数两者。因此,在一些情况下,响应于MAP指令,指令解码器可以控制处理电路来重新排列第一J位操作数的E位部分以形成经变换的J位操作数,并且根据经转换的J位操作数和经变换的K位操作数控制LXM乘法器阵列使用加法器的子集加总相应的EXF乘积。在这种情况下,应注意,由于经变换的J位操作数取决于第一J位操作数,所以仍然如上所述根据第一J位操作数和经变换的K位操作数来控制乘法器阵列。第一J位操作数的重新排列可以按照与上述第二K位操作数类似的方式执行。由于两个操作数可以重新排序,所以对于J位操作数或K位操作数内的所有区段来说,将它们的元素顺序颠倒是不重要的,因为针对一个区段的颠倒可以施加于操作数中的一个操作数,而针对另一个区段的颠倒可以施加于操作数中的另一个操作数。[0040]处理电路可以包括部分乘积形成电路,以生成要由LXM乘法阵列的加法器累积的部分乘积。对于标准乘法指令,部分乘积形成电路可以例如形成待累加的L个1*M位部分乘积或M个1*L位部分乘积。例如,部分乘积形成电路可以包括一组“与”门,以用于生成输出位阵列,该输出位阵列对应于乘法指令的两个输入操作数的多个位的相应组合的乘积。[0041]对于MP指令,可以重复使用部分乘积形成电路,但是为了掩蔽乘法器阵列的不对应于要加总的任何EXF乘积的部分,可以将部分乘积位的子集设置为零。这确保乘法器的输出包括对应于相应的EXF乘积之和的一个或多个部分。选择哪些特定的部分乘积位作为要被清零的部分乘积位的子集可以取决于MAP指令的参数例如,操作码或另一个位域),并且对于MAP指令的不同变体可以不同。[0042]对于MAP指令的至少一种形式,指令解码器可以控制处理电路来生成包括多个结果元素的结果值,每个结果元素指定第一J位操作数的X位区段中的E位部分与第二K位操作数的Y位区段内的F位部分的相应的EXF乘积的和,其中E〈X〈J并且F〈Y〈K。因此,可以响应于相同的MAP指令在乘法器阵列内并行地执行不同区段中的子乘积的多个独立累加,以在结果值内生成与子乘积的不同区段的和对应的单独结果元素。例如,指令解码器可以控制LXM乘法器阵列,来使用多个加法器的第一子集对第一J位操作数的第一X位区段和第二K位操作数的第一Y位区段的相应EXF乘积进行加总,以及使用多个加法器的第二子集对第一J位操作数的第二X位区段和第二K位操作数的第二Y位区段的相应EXF乘积进行加总。[0043]应注意,在使用乘法器阵列的加法器加总相应的EXF乘积时,不必在将这些EXF乘积加在一起之前单独计算这些EXF乘积中的每一个。多个EXF乘积可以在一系列1*E或1*F部分乘积的加总中加在一起,因此例如对于第二EXF乘积或另外的EXF乘积,EXF乘积的每个1*E或1*F部分乘积可以被加到所有先前的部分乘积的累加总数中,因此不再确定第二或另外的EXF乘积的实际值。因此,结果的确定可以使用分别产生对应于第一操作数和第二操作数的相应E位和F位部分的EXF乘积的和的结果值的任何一系列加法,而不管用于生成该结果的加法的确切顺序。[0044]上面讨论的技术的优点是它不需要特殊的乘法器电路。在一些示例中,可以通过操纵输入操作数来将用于处理MAP指令的适配提供到LXM乘法阵列,并且因此可以重复使用现有的乘法阵列。存在许多技术用于加速LXM乘法器阵列中的L和M位操作数的乘法,所以任何此类技术可以与上述MAP指令处理技术一起使用。例如,LXM乘法器阵列可以包括华莱士树乘法器。其他已知的加速技术可以包括也可以使用的4:2压缩。[0045]用于加速乘法的另一种技术可以是使用Booth编码对被乘的操作数中的一个操作数进行编码,其中二进制数被转换为具有数字组{-2,-1,0,+1,+2}的基4数。虽然Booth编码可能会使部分乘积的生成增加某种复杂度,但其可以减少必须加总的部分乘积的总数量,因此可以加速乘法器阵列。对于标准乘法指令,可以提供Booth编码电路来编码要使用Booth编码相乘的操作数中的一个操作数使用Booth编码转换哪个操作数无关紧要)。然而,虽然原则上第一J位操作数和第二K位操作数中的任一个可以响应于MAP指令而被进行Booth编码,但是重新编码第二K位操作数将需要在重新排列F位部分之前或之后执行附加步骤。为了加速处理,Booth编码电路可以使用Booth编码与重新排列第二K位操作数的F位部分以形成经变换的K位操作数的操作数重新排列电路并行地编码第一J位操作数。[0046]如果将Booth编码用于有符号乘法,则上面讨论的MAP指令处理技术可以与任何现有的LXMBooth乘法器阵列一起使用。然而,如果要支持无符号乘法,那么Booth编码可能会向被编码的值中引入附加数字。因此,如果正在响应于MAP指令使用无符号运算计算多个子乘积,则用于形成EXF乘积的每个E比特或F比特部分可能会产生额外数字,因此需要针对响应于MP指令加总形成一个结果元素的每个EXF乘积累加附加的部分乘积。[0047]因此,LXM乘法器阵列的多个加法器可以包括足以加总至少N个Z位部分乘积的多个加法器,其中N是L和M中的一个并且Z是L和M中的另一个,并且处理电路可以包括附加的部分乘积加总电路以加上附加的Pmax个部分乘积,其中P是要被加总以形成结果值的一个结果元素的相应的EXF乘积的数量,并且Pmax是由处理电路支持的P的最大值。响应于MAP指令,指令解码器可以控制处理电路来生成对应于所述N个Z位部分乘积与所述另外的Pmax个部分乘积中的至少一者的总和的结果。响应于乘法指令,指令解码器可以控制处理电路来根据所述N个Z位部分乘积的和生成结果,而与由附加的部分乘积加总电路加总的任何另外的Pmax个部分乘积无关通过将至附加的部分乘积加总电路的输入调零,或者通过完全绕过附加的部分乘积加总电路)。这使得Booth编码能够用于MP指令。[0048]存在可以实现附加的部分乘积加总电路的多种方法。在一些示例中,附加的部分乘积加总电路可以包括包含在LXM乘法器阵列中的另外的加法器,使得多个加法器包括足以加总至少N+Pmax个Z位部分乘积的多个加法器。因此,附加的部分乘积加总电路可以简单地是现有LXM乘法器阵列内的一些附加行的加法器。对于乘法指令,可以将至这些另外的加法器的输入设置为零,以确保乘法器仅加总N个Z位部分乘积来形成乘法指令的结果。对于MAP指令,可以向至少一行另外加法器供应基于输入操作数选择的值要被加总的附加部分乘积的数量可以取决于正加总多少EXF乘积来形成结果值的一个结果元素,因为对于MAP指令的给定实例,P可以小于或等于Pmax,所以给定的MAP指令可以不需要所有的另外加法器)。[0049]或者,附加的部分乘积加总电路可以与LXM乘法器阵列分开,并且可以加总附加的Pmax个部分乘积来形成单个值。通过使用单独的逻辑电路将从Booth编码产生的P个附加部分乘积加“到现有的LXM乘法器的一侧”,这对现有的乘法器可能具有较小的破坏性,因为随后只需要将一个附加值加至LXM乘法器阵列的结果在阵列内使用额外行的加法器,或者在单独的加法器中)。这可以允许在对现有的LXM乘法器设计具有较少破坏的情况下实现MP指令,这可以使得电路开发更便宜并减少对乘法指令的影响。[0050]其他示例可以提供上面讨论的两种方法的混合。因此,附加的部分乘积加总电路可以包括:与所述LXM乘法器阵列分开的加总电路,以将所述另外的Pmax个部分乘积减少到R个另外的部分乘积,其中2R〈Pmax;以及包含在所述LXM乘法器阵列中的另外的加法器,使得所述多个加法器包括足以加总至少N+R个Z位部分乘积的多个加法器。因此,一些附加的加法器可能仍然包含在LXM乘法器阵列中,但是仅仅足以加总R个另外的部分乘积,其中R小于Pmax,并且当需要大于R个附加的部分乘积时,则使用单独的加法电路来将至多Pmax个附加的部分乘积减少至R个附加的部分乘积,然后可以由LXM乘法器阵列的另外的加法器加总所述R个附加的部分乘积。这种方法可以比在LXM乘法器阵列内加总所有Pmax个附加部分乘积的方法更有效,因为单独的加法电路可以使用诸如4比2加法的技术,这种技术可以比加总4个数字更快地产生单一结果。这种方法可以用速度替换对LXM乘法器阵列的破坏。[0051]L和M可以分别被视为由乘法器阵列所支持的针对第一操作数和第二操作数的最大值。在L不等于M的情况下,有可能在LXM乘法器阵列上实现上面讨论的技术。然而,在实践中,许多现有的乘法器阵列假定操作数具有相同的最大大小,其中L=M。术语“LXM乘法器阵列”并非旨在限制乘法是使用L个1*M位部分乘积还是使用M个1*L位部分乘积执行的所以LXM乘法器可以同样地被称为MXL乘法器阵列)。[0052]J和K是指MP指令的第一操作数和第二操作数的大小,可以分别等于L和M,或者可以更小。J可以等于K。然而,也可以提供作用于不同大小的操作数的MAP指令,所以J和K是不同的。例如,并非较大操作数的所有部分都可以用于与较小操作数的各部分形成EXF乘积。或者,可以计算结果元素的多个并行运算,其中每个结果元素使用来自第一操作数和第二操作数中的较小者的相同组E位或F位部分,但是使用来自第一和第二操作数中较大者的不同组E位或F位部分,作为要相乘以形成被累加的EXF乘积的部分。[0053]X和Y是指分别对于第一J位操作数和第二K位操作数,相应部分的EXF乘积加总在一起的区段的大小。X可以等于Y,或者X和Y可以不同。同样,X可以等于J或小于J,并且Y可以等于K或小于K。比率JX并非必须等于比率KY。[0054]E和F是指相乘以形成每个EXF乘积的单独部分的大小。E和F可以相等或不同。在E和F不同的情况下,可以用部分乘积形成电路在LXM乘法器阵列的输入处将附加的部分乘积位调零,来填充较短部分的大小以匹配较长部分的大小。[0055]图1示意性地示出了数据处理设备2的一部分的示例。应当理解,图1是简化图示,并且省略了通常应存在于数据处理器中的许多部件。如图1所示,处理设备2包括用于存储要执行的程序指令的指令高速缓存或存储器4、用于从指令高速缓存或存储器4提取指令的提取级6。提取级6可以例如包括用于预测分支指令的结果的分支预测功能性,以便确定正在执行的程序中的程序流程的可能进程并提取用于解码和处理的对应指令序列。解码级8解码提取的指令以产生控制信号来控制处理电路10执行对应于那些指令的数据处理操作。[0056]通常,处理电路10可以从寄存器12中读取操作数的值A、B,并生成要被写回到寄存器12的处理结果R。处理电路10可以包括用于执行不同类型的处理操作的多个执行单元。例如,执行单元可以包括用于处理对存储器的存储器访问的加载存储单元、用于处理整数运算或逻辑运算的算术逻辑执行单元,以及用于处理浮点运算的浮点单元。如图1所示,处理电路的至少一个执行单元可以包括用于计算对L位和M位操作数执行的乘法的结果的LXM乘法器阵列14。虽然图1示出了单个乘法器阵列14,但是一些处理器可以具有若干个乘法器阵列,这些乘法器阵列可以支持操作数大小L、M的大小,或者可以支持不同的操作数大小。例如,在向量处理器中,可能有多个乘法器阵列用于处理在向量操作数的相应通道上执行的乘法。或者,可以使用在单个乘法器上按顺序处理的每个通道来处理向量指令。因此,应当理解,图1仅仅是一个示例,并且对于特定类型的指令可以如何实现乘法器有许多变型。[0057]图2示出了在L=M=8的情况下的LXM乘法的示例。如图2所示,乘法可以看作L个1*M位或M个1*L位部分乘积20的和,其中每个乘积对应于一个操作数B与另一个操作数A相乘的单个位的乘积。将部分乘积基于它们的相对位有效值进行对齐,并且多列加法器将每一列中相应定位的位加总以形成乘法结果。这类似于手动计算长乘法的方式。[0058]图3示出了可以在乘法器阵列14内提供用于累加各种部分乘积的加法器30的阵列的示例。为了简洁起见,图3的示例示出为L=M=4。在这个示例中,乘法器阵列14包括4行进位保留加法器30,这些进位保留加法器被供应有基于输入操作数A和B计算的部分乘积位。例如,图3示出了以十进位计算13乘以11的示例,即二进制的1101X1011:[0059][0060]图3示出了上面示出的和的部分乘积如何映射到加法器阵列的输入。进位保留加法器产生进位保留形式的4位结果(S卩,最后一行加法器30中产生的进位还没有加到最后一行加法器的加法结果中),所以提供4位进位传递加法器32来加总和并进位以产生二进制形式的4位结果。应注意,乘以两个4位值的实际乘积结果具有8位。进位传递加法器32的结果代表高4位,而低4位由每行中的右手侧进位保留加法器直接输出。乘法指令的某些变型可能会返回完整乘积的下半部分,而不是上半部分。不管怎样,从图3的示例可以看出,完整乘积的8位对应于针对上述算出的乘法所示的相同位值。[0061]对于某些应用,当选择完整乘积的上半部分时,可能需要基于较低位来舍入乘积的上半部分。为了支持这一点,可以在最后一行中最右边的进位保留加法器处输入舍入常数R,以向在比乘积的上半部分的最低有效位低一个位的位置处的多个位的部分乘积之和加1。因此,如果比乘积上半部分的截断处cutoff低一个位的位是1,那么加上另外的1就会导致1被进位到乘积的选定半部分的最低有效位,从而有效地将结果舍入成使用高位可表示的最接近的值。一些舍入模式可以规定用于确定恰好在使用高位可表示的两个值之间的一半处的乘积结果是应该向上舍入还是向下舍入的条件。对于这样的舍入模式,关于是将R设置成〇还是1的决定可以取决于未被选择输出的完整乘积的较低位的值。[0062]图3只是一种可能的乘法器设计的示例。有许多已知的技术用于使乘法以比图3的简单示例中所示更快地执行,诸如使用华莱士树、Booth编码或4:2压缩。图3的示例可以扩展到更大的大小以支持任意大小的LXM乘法器数组,但是应当理解,这不是可以使用的唯一技术,可以使用加法器的其他组合来累加乘法的各种部分乘积。[0063]如图4所示,一些处理器架构可以支持MAP指令,该MAP指令返回较大操作数内的子部分的相应对乘积之和。例如,如图4所示,向量乘累加乘积指令的结果可以是将输入操作数A和B的高位部分相乘、将这两个输入操作数的低位部分相乘,以及将加总这两个乘积结果。例如,这种类型的操作对DSP应用可以非常有用。对32位操作数运行的这种子向量乘与加指令的其他变型可以返回如下结果:[0064]·A[31:24]XB[31:24]+A[23:16]XB[23:16]+A[15:8]XB[15:8]+[0065]A[7:0]XB[7:0][0066]#A[31:24]XB[23:16]+A[23:16]XB[31:24]与(A[15:8]XB[7:0]+[0067]A[7:0]XB[15:8]并列[0068]用于这种MAP指令的累加的加数可以是由每个子乘法产生的乘积的下半部分每个子乘法的完整乘积的上半部分可以被忽略)。应注意,MAP指令并不要求将所有子乘积加总在一起。例如,在上面所示的两个示例中的第二个中,第二选项提供用于要加总在一起的每对相邻子乘积,但是不将第一和第二子乘积加到第三和第四乘积上。[0069]如图2中的虚线所示,LXM乘法器阵列在概念上可以分成映射到输入操作数的某些子部分的乘积的多个部分。例如,如果这些部分是操作数A和B的相应一半,那么乘法器可以在概念上划分成象限,如图2的底部所示。右上象限将所述两个操作数的下半部分BL、AL相乘。左上象限将操作数A的上半部分Ah与操作数B的下半部分Bl相乘。右下象限将操作数A的下半部分Al与操作数B的上半部分Bh相乘。左下象限将两个操作数A和B的上半部分Ah、Bh相乘。应注意,相应象限在乘法阵列中的位置意味着左上象限和右下象限的结果由乘法器阵列14内的各列加法器加总在一起,而左下象限和右上象限在加法器的分开列中,因此不被加总。[0070]因此,为了使用以原始形式输入到乘法器的操作数A和B来实现MAP指令,可以如图4的右手部分中所示,在乘法器阵列内分别计算操作数A和B的上半部分和下半部分的乘积,但是这需要在乘法器阵列14的输出处之外提供另外的加法器40来将相应的子乘积加在一起。这种附加的加法器40增加了额外的电路面积和功耗,并且还增加了额外的操作延迟。这个问题可以通过以下方式来解决:对输入操作数中的一个进行重新排序,使得相应子乘积的累加可以在现有乘法器阵列14内发生,从而消除对后续的加总电路40的需要。[0071]图5示出了包括LXM乘法器阵列14的处理电路10的一部分的示例。在输入LXM乘法器14之前,提供操作数重新排列电路50来针对MAP指令对操作数A的F位部分进行重新排序,以形成经变换的操作数A’。任选地,可以提供Booth编码电路52,来与由操作数重新排列电路50执行的操作数重新排列并行地对其他操作数B进行Booth编码。然而,一些实现方式可能不使用Booth编码,在这种情况下可以省略电路52。如果使用Booth编码,那么为了支持无符号乘法,可以在乘法器中包含附加行的进位保留加法器30来处理由Booth编码引入的附加数字。[0072]第一操作数B包括J个位和经变换的操作数A’(包括K个位都被提供至部分乘积形成电路54,该部分乘积形成电路计算供应至LXM乘法器40的相应加法器30的部分乘积位的数量。部分乘积形成电路54根据正在执行的MAP指令的特定变型来选择被清除为0的某些位。因此,操作数重新排列电路50和部分乘积形成电路54都取决于至少一个控制参数56,该控制参数根据指令解码器8对MP指令的编码而确定,或者从MP指令所提及的寄存器存取。[0073]图6示出了使用现有乘法器处理MAP指令的一般原理的示例。在这个示例中,X=Y=J=K并且E=F=M2。因此,在这种情况下,由操作数重新排列电路50施加的重新排序调换第二操作数A的上半部分和下半部分的顺序以生成经变换的操作数A’。如图6的右手侧所示,这意味着当操作数被提供给乘法器阵列14时,乘法器阵列的将两个操作数的前半部分相乘的部分和将两个操作数的后半部分相乘的部分分别在乘法器的左上象限和右下象限中。左下象限和右上象限的输入可以由部分乘积形成电路54设置为零。这意味着当各列加法器以与上面关于图2和图3所讨论的相似的方式计算它们的和时,那么在与乘法器的左上象限和右下象限对应的部分内的加法器的输出将产生结果,该结果对应于与操作数A和B的上半部分对应的第一EXF乘积和与下半部分对应的第二EXF乘积的总和。因此,已经在LXM乘法器本身内计算了相应子乘积的累加,而不需要进一步的加总级。[0074]图7A至图7C示出了处理MAP指令的变型的三个更多示例。在图7A中,通过颠倒输入操作数A中的一个操作数的相应8位部分被呈现给乘法器的顺序,使用32X32乘法器阵列来计算和加总四个8X8乘积。在图7B中,将两对8X8乘积加总在一起,但是不加总相应的对,以形成两个独立的结果元素,每个结果元素对应于两个8X8乘积的总和。在这种情况下,操作数A的每一半中的8位部分被调换,但是当将A变换成A’时,它们保持在操作数的同一半内。在这种情况下,N小于M。在图7C中,MAP指令与图6的示例类似,并且该示例在32X32乘法器阵列内加总两个16X16乘积。如图7A至图7C所示,乘法器阵列的未使用部分通过在乘法器的输入处将相应的部分乘积位设置为〇而被调零。[0075]上面的示例显示了操作数A中只有一个操作数被重新排列的情况。然而,如图7D所示,也可以通过重新排列两个操作数来实现MAP指令。例如,在图7D中,元素的颠倒被施加于操作数B,但是也存在两个操作数A、B的上半部分和下半部分的调换,从而给出了与图7A中相同的结果。因此,只提供对操作数中的一个操作数的重新排列并不重要。[0076]图8示出了用于支持图7A至图7C的示例的操作数重新排列电路50的示例。操作数重新排列电路50可以包括一组多路复用器60,以选择第二操作数A的哪个部分映射到经变换的操作数A’的每个部分。每个多路复用器60可以例如对应于第二操作数A的某个具有固定大小的部分,诸如4位、8位或者16位。尽管图8示出了具有四个多路复用器60的一个示例,但是显然这可以根据需要缩放成更小或更大的大小。图8的底部处的表格示出了分别对于标准乘法指令和图7A至图7C中示出的MAP指令的三种变型,如何控制输入操作数A的哪些部分被映射到经变换的操作数A’的每个部分的一个示例。对于MP指令,还显示了Y和F的对应值在这些示例中,J=K、X=Y、E=F。在两个操作数都被重新排列的如图7D的示例中,可以提供类似于图8所示的多路复用器的第二组多路复用器来重新排列操作数B,或者替代地,可以使用不同的控制输入将每个操作数A、B顺序地通过单组多路复用器来为每个操作数选择不同的重新排列。[0077]如图9所示,MAP指令的输入操作数A、B具有相同的大小,或者两个操作数的元素大小E和F是相同的不是必要的。图9示出了示例,其中将64位操作数A的16位部分与48位操作数B的对应12位部分相乘。在乘法器阵列的输入处用0填充所述12位部分以匹配16位部分的宽度。尽管在此示例中将操作数重新排列施加于较宽的操作数A,但显然重新排列也可以施加于较窄的操作数B。[0078]而且,如图10所示,该技术也可以应用于L不等于M的不对称LXM乘法器阵列。在这个示例中,M=2L。此示例示出了计算两个独立的结果元素的情况,其中每个结果元素对应于第一操作数B的相同对E位部分Bo、Bi,但是对应于第二操作数A的不同对F位部分Ao、Ai或A2、A3,其中第二操作数的每个Y位区段被独立地反颠倒顺序卿知和知被调换,并且Ao和^被调换)。然而,也可以通过将阵列的各半中的一个调零来计算单个结果元素R。[0079]这种技术的一个优点是,包含整数乘法器的大部分面积和关键路径的全加法器阵列不受此方案的影响。因此,数字乘法如华莱士树、4:2压缩等的加速技术仍然可用。对于带符号的乘法,这个方案还与Booth编码兼容,这用部分乘积产生的复杂度替换全加法器阵列的大小。[0080]然而,对于无符号乘法,每次乘法需要额外的部分乘积。如图11所示,这可以通过以下方式来适应:扩展阵列,使得加法器的数量足以加总至少N+Pmax个Z位部分乘积,其中N是L和M中的一个,Z是L和M中的另一个,P是要加总以形成结果值的一个结果元素的相应的EXF乘积的数量,并且Pmax是处理电路所支持的P的最大值。在这个示例中,通过在LXM乘法器阵列内包括额外行80的加法器来适应附加的Pmax个部分乘积。正如在这个示例中,最多有4个EXF乘积被响应于一个MAP指令加总,包括4个附加行80的加法器。应该理解,如果要加总更多数量的EXF乘积,则其他示例可以包括另外的行。对于乘法指令,这些行80不是必需的,所以这些行的输入可以被设置为零。[0081]如图12所示,对原始LXM阵列具有较小破坏性的替代方案可以是将单独逻辑电路90中的Pmax个额外的“仅无符号的”部分乘积导出并加到LXM乘法器阵列的“一侧”,并将这一个额外的部分乘积加到主阵列中,而不是将四个额外的部分乘积嵌入到LXM乘法器阵列中。[0082]混合解决方案也是可用的,凭借混合解决方案在独立的逻辑电路中执行对四个额外的仅不带符号的部分乘积的4比2加法,并将两个额外的部分产品加到阵列中一一这种安排用速度4比2加法比加上四个数字更快替换阵列破坏必须在阵列中容纳两个额外的部分乘积,而不是一个)。在Pmax大于4的情况下,这可以用多次3:2或4:2的加法实现。[0083]应注意,EXF乘积的上半部分的累加任选地具有舍入不应使用上面讨论的技术进行,因为从乘积的下半部分进位需要包含在上半部分中,这可以替代地通过跨个别乘积的全宽度进行进位传递加法来实现。[0084]图13是示出使用乘法器阵列14处理乘法的方法的流程图。在步骤100,指令解码器8检查要解码的下一个指令并确定遇到的指令的类型。如果指令是指定要相乘的一对输入操作数A、B的乘法指令,那么在步骤102,指令解码器8控制处理电路10将输入操作数A和B供应至LXM乘法器14,其中乘法器阵列的加法器累加操作数A和B的各种部分乘积。通常,可以使用任何已知技术处理乘法指令。如果当前指令不是乘法指令,则在步骤104,指令解码器8确定当前指令是否是MAP指令,如果不是,则指令解码器产生控制信号来控制处理电路10执行适合于被解码的指令的类型的另一个处理操作。[0085]然而,如果检测到MAP指令,则在步骤106,指令解码器8控制处理电路10的操作数重新排列电路50重新排列输入操作数A的F位部分以形成经变换的操作数A’,其中F〈KK是操作数A的总位数)。在步骤108,指令解码器8控制部分乘积形成电路54以将针对第一J位操作数B和经变换的K位操作数A’计算的部分乘积中的所选部分乘积位调零,使得它们变为零,而不管A和B的实际输入值。哪些特定的部分乘积位被调零将取决于MAP指令的变型(例如参见图6、图7A至图7C、图9和图10中所示的调零)。[0086]在步骤110,控制乘法器阵列14以产生结果R,其中使用用于响应于常规乘法指令累加部分乘积的相同加法器的子集来加总操作数B的E位部分和操作数A的F位部分的相应的EXF乘积。这是因为以下原因而实现的:在步骤106中对F位部分的重新排列将要被相乘以形成每个EXF乘积的部分映射到乘法器阵列的多个区域中,这些区域在加法器的列内加总而使得不需要后续相加级。[0087]可以由数据处理设备中的指令解码器支持的另一个指令可以是偏移指令,该偏移指令指定了包括至少一个数据元素的要偏移的源操作数,并且还指定了用于偏移源操作数的至少一个数据元素的至少一个偏移量。对于标量指令,可能仅存在一个数据元素和一个偏移量。对于向量指令,操作数可以包括多个数据元素,并且可以在所有数据元素之间共享一个偏移量,或者若干个不同的偏移量可以每个元素指定一个,其中每个数据元素被偏移由相应偏移量指定的多个位位置。[0088]在下面讨论的技术中,处理电路包括用于对成对的输入操作数执行乘法的乘法器电路,并且响应于偏移指令,指令解码器控制处理电路向乘法器电路提供由偏移指令指定的源操作数和由至少一个偏移量确定的偏移操作数。乘法器电路将源操作数和偏移操作数处理为乘法器电路的成对输入操作数,并且控制乘法器电路以执行至少一次乘法,所述乘法等效于将源操作数的对应数据元素偏移由对应的偏移量指定的位数,以生成偏移结果值。[0089]因此,可以使用提供用于执行乘法的现有乘法器电路来处理偏移。这对于本领域的技术人员而言是违反直觉的。向左或向右偏移给定数量的位位置可以被看作等效于将源操作数乘以或除以2的一定幂或向左偏移映射至2的正幂,而向右偏移映射至2的负幂)。然而,典型地,这种偏移不应在乘法器电路内进行,而应在单独的专用偏移电路内进行。例如,图14示出了这种偏移电路的一个示例,该偏移电路可以包括一组多路复用器150,该组多路复用器用于接收指定源操作数A将被偏移的位数的偏移量S,并且用于基于所述偏移量S来选择输入操作数的哪一位被映射到偏移结果的每一位。在图14的示例中,示出了向左偏移,并且因此根据偏移量S用零填充偏移结果A’的低位位置。应当理解,可以使用类似组的多路复用器来执行向右偏移,但是在这种情况下,则可以在偏移结果的上端处偏移零或符号位。[0090]技术人员通常期望专用偏移电路诸如图14中所示的专用偏移电路)比乘法器电路更快地产生偏移结果。例如,偏移电路可以用简单的一组多路复用器来实现,但是乘法器阵列可能需要使用如上文关于图2和图3所讨论的若干行进位保留加法器来加总多个部分乘积,因此技术人员预期这会花费更长的时间以及消耗更多的动态功耗,因为这可能需要激活更多数量的门。尽管可以使用诸如使用华莱士树、Booth编码,4:2压缩等的技术来提高乘法器的速度,但是因为更多的门被激活,所以技术人员不会将使用乘法器处理偏移看作节能权衡。出于这个原因,处理器的趋势是以另一种方式进行并且实际上甚至当真正需要的运算是乘以或除以二的某一幂时也使用偏移指令,但是因为预期当已知操作数中的一个操作数是二的幂时在偏移器上执行期望的乘法或除法更节能,所以替代地使用专用偏移指令。[0091]然而,在电路面积可能特别受限的低端处理领域,功耗可能不像节省电路面积那样重要。因此,通过在乘法器电路上执行偏移,这可以完全消除提供专用偏移电路的需要,以便减少总电路面积。而且,在实践中,对于这种低端处理器来说,提供专用偏移电路可能会限制执行某些更复杂形式的偏移操作的能力,诸如涉及饱和或舍入的偏移操作或某些向量偏移操作。如下面所讨论的,这些类型的偏移操作对于使用多路复用器或其他专用偏移电路来说可能相对昂贵,因为例如需要添加附加的逻辑来检查正在偏移的操作数内的位值或设置处理不同的向量数据元素大小所需的控制线。在实践中,处理电路内的乘法器电路可能已经具有能够处理可变元素大小、舍入、饱和或基本偏移操作的其他变型的电路,因此这可以使得使用乘法器电路而不是专用的偏移电路来处理偏移指令更有效。这与传统的方法相反,传统的方法在将乘法运算转移到偏移电路,而不是将偏移运算转移到乘法器的另一方向上移动。[0092]偏移指令可以具有与指定要相乘的两个操作数的乘法指令不同的操作码。与乘法指令不同,对于偏移指令,指令的第二操作数不是要如此运算的数据值,而是指定表示源操作数将要偏移的位位置数的偏移量的参数。[0093]该设备可以具有查找表以提供在给定偏移量与偏移操作数的对应部分之间的映射。通常,偏移操作数可以对应于二的某一幂,所述二的某一幂可以基于由偏移指令指定的偏移量来选择。对于向量指令,偏移操作数的不同部分可以基于相应的偏移量分开设置为对应于二的不同幂数。[0094]为了支持向量操作,偏移指令可以指定包括至少一个数据元素的源操作数,所述数据元素具有从处理电路所支持的多个数据元素大小中选择的当前数据元素大小。因此,一个数据元素可以对应于整个源操作数,或者可以在源操作数内定义多个数据元素,每个数据元素具有较小的大小。例如,当前的数据元素大小可以被指定为偏移指令的参数,或者可以被指定为在单独的控制寄存器内。在支持可变数据元素大小的实现方式中,偏移操作数不仅可以基于偏移量而且还可以基于当前数据元素大小来生成。这对于向右偏移可能特别有用,其中要由源操作数的每个部分所乘的二的幂数可以对应于元素大小与偏移量之间的差。乘法器电路可以包括乘法器阵列,并且可以提供乘法器控制电路以基于当前数据元素大小来划分乘法器阵列的各部分。例如,划分可以对应于阵列的各个相应部分之间的载体链的断开。当当前数据元素大小小于源操作数的总大小时,指令解码器可以控制乘法器电路执行两次或更多次乘法,每次乘法等效于将源操作数的对应数据元素偏移由相应的偏移量指定的位位置数。偏移指令可以指定在源操作数的各个数据元素之间共享的单个偏移量,或者可以指定各自对应于数据元素中的一个数据元素的多个不同的偏移量。[0095]对于一些向量实现方式,向量偏移指令可以控制指令解码,以控制处理电路在当前数据元素大小小于总大小时生成包括多个结果数据元素的结果值,其中每个结果数据元素对应于响应于偏移指令执行的乘法中的相应乘法的结果。也就是说,每个结果数据元素可以对应于输入操作数的元素中的一个元素的偏移版本。结果数据元素可以与输入数据元素具有相同的大小。或者,响应于元素大小调整偏移指令,指令解码器可以控制处理电路来生成包括具有与源操作数的数据元素不同的数据元素大小的数据元素的结果值。例如,由于每次乘法都可以生成为输入位的两倍的乘积,所以元素大小调整偏移指令可以生成所具有的元素是源操作数的两倍大的结果值,并且在这种情况下,只有源操作数的一半元素可以影响结果。[0096]也可以提供减少偏移指令,对于该减少偏移指令,在当前数据元素大小小于总大小时,指令解码器控制处理电路产生包括至少一个结果数据元素的结果值,该至少一个结果数据元素对应于至少两次乘法的结果的总和。也就是说,减少偏移指令可以响应于相同的向量指令而有效地偏移源操作数的多个数据元素,而且还可以将偏移的结果加总在一起以形成放置在结果数据元素的对应部分中的累加结果,所有这些都响应于相同的指令。这种类型的减少偏移指令可以受益于上面讨论的在LXM乘法器阵列内处理子乘积累加的技术。因此,可以对源操作数或偏移操作数进行重新排序,以确保要对应于各个偏移结果加总的子乘积位于乘法器阵列的在各加法器行内相加的部分中。如果向量指令为每个通道指定相同的偏移量,则可能不需要进行任何重新排序,因为偏移操作数的每个元素可以是相同的。[0097]偏移指令可以是向左偏移或向右偏移指令。一些实现方式可以使用不同的指令操作码来区分向左偏移和向右偏移,使得向左偏移和向右偏移指令可以是不同的类型。或者,偏移指令可以简单地是普通类型的偏移指令,但是偏移是向左偏移还是向右偏移可以由偏移量指定。例如,如果将偏移视为旋转,则向右偏移S位可以等效于向左偏移N-S位,其中N为元素大小,因此在某些情况下向左偏移和向右偏移可以看作是等效的。如果偏移不是旋转操作,因此不是将从操作数的一个末端偏移的位绕到另一个末端,而是替代地在操作数的下端或上端注入一些零位或符号位,因此向左偏移和向右偏移操作变得不同。即使如此,提供对应于向左偏移和向右偏移的不同指令操作码也不是必要的,因为这仍然可以通过偏移量来标识。例如,偏移量可以通过由偏移指令指定的带符号的二进制值指定,并且如果符号是正的,则这可以指示向左偏移和向右偏移中的一个,而如果符号是负的,那么这可以指示偏移的另一类型。考虑将向左偏移和向右偏移中的哪一个映射到正或负偏移量可以是任意的并且取决于对指令集架构的特定编码。[0098]对于向右偏移操作,可以提供不同形式的向右偏移,例如算术向右偏移操作可以对应于在操作数的顶端被注入的为带符号位的位值,而逻辑向右偏移可以对应于在操作数的上端注入的为零的位值。因此可以提供不同形式的指令来对应于算术和逻辑向右偏移。当在乘法器电路上实现偏移时,可以有效地处理这样的算术和逻辑偏移,因为乘法器电路可能已经处理了带符号乘法和无符号乘法两者,并且算术向右偏移可以被映射到带符号乘法,而逻辑偏移映射到无符号乘法。因此,这些操作可以简单地通过控制乘法器电路使用适当类型的带符号无符号乘法来实现。[0099]舍入和饱和可能难以使用专用偏移多路复用电路处理,但通常已经在乘法器电路中得到支持。因此,可以提供饱和的偏移指令,该饱和的偏移指令控制乘法器电路执行至少一次乘法,其中每次乘法是饱和乘法,应落在预定范围之外的乘法结果被钳位到该范围的最小值或最大值。虽然这样的饱和对于乘法中是常见的,但它不适用于偏移。对于偏移,饱和基本上意味着如果偏移导致值大于最大值或小于最小值,则结果被钳位到该最大值或该最小值。当执行向左偏移时,饱和偏移可能通常是有用的,所以这个功能不需要被提供用于向右偏移。[0100]类似地,可以提供舍入偏移指令,该舍入偏移指令控制乘法器电路执行至少一次乘法,其中每次乘法包括将舍入常数加到在该次乘法中累加的部分乘积。对于偏移操作,要注入舍入常数的位位置将基于偏移量而变化,并且在多路复用偏移电路中实现这种注入可能是昂贵的。然而,如上所述,乘法器阵列通常可能已经具有可以将舍入值R注入到乘法器阵列的加法器30中的点,并且这些点可以在执行偏移操作时使用。[0101]图15示出了用于处理偏移操作的处理电路10的一部分的示例。偏移指令指定要偏移的源操作数A和偏移量S。对于向量操作,也可以在指令本身的编码中或在单独的控制寄存器中定义数据元素大小Z。将偏移量S和元素大小Z供应至偏移操作数查找表200,该偏移操作数查找表存储从偏移操作数S和元素大小Z的特定值到偏移操作数B的多个映射。或者,不是明确地存储偏移操作数,而是偏移操作数查找表200可以包括用于基于当前元素大小Z和偏移量S来生成操作数B的一组逻辑门。如果这还没有被偏移量S指示,则偏移操作数查找操作也可以取决于是执行向左偏移还是向右偏移,以及取决于向右偏移是算术向右偏移还是逻辑向右偏移。[0102]然后将源操作数A和所生成的偏移操作数B作为输入供应至乘法器阵列14,乘法器阵列14可以是用于加总输入操作数的部分乘积的加法器的常规LXM乘法阵列,并且是用于如上所述的常规乘法指令的相同阵列。如果支持上面讨论的MAP指令,那么阵列也可以具有操作数重新排列电路或与处理如上所述的MAP指令相关联的其他逻辑,但是用于处理偏移操作的乘法器阵列的重复使用也可以在不支持此类MAP指令的系统中使用。有效地,偏移操作数B的生成对应于2的某一幂的生成,当由乘法器14计算时,该2的某一幂当乘以源操作数A时使相关位偏移到乘法结果的上半部分或下半部分中,然后可以通过输出乘积的下半部分或上半部分来读出偏移的结果A’。例如,可以如下地执行不同类型的偏移:[0103][0105]作为替代方案,对于向左偏移,替代乘以25并取得低字结果,乘法器可以替代地乘以2Z+S并随后取得高字结果。确保偏移结果出现在乘积的高位半部或低位半部可以是更有效的,因为通常乘法器阵列40可能已经提供了用于选择乘积的上半部分或下半部分的功能。例如,可以提供乘法指令的各版本的不同示例来分别返回乘积的上半部分或下半部分,并且因此如上所述处理偏移的方式还使得能够重复使用电路来输出要偏移的乘积的上下部分。然而,如果需要的话,则也可以通过乘以基于偏移量S选择的二的适当幂来将偏移结果映射到乘积位的任意部分,并且因此偏移结果对应于乘积的上半部分或下半部分不是必须的。[0106]如图16所示,如果偏移指令是向量指令,则目标向量Va的每个元素的相应乘法可以使用偏移向量Vb的对应元素进行,其中偏移操作数Vb的每个元素对应于基于由偏移指令指定的相应偏移量S0-S3而确定的2的幂。例如,偏移指令可以指定第二向量操作数Vs,该第二向量操作数提供每个向量通道的偏移量。或者,偏移指令可以指定将由所有通道共享的单个偏移量S,并且在这种情况下,偏移操作数向量Vb的每个通道将是相同的。虽然图16示出了施加于向左偏移的向量指令的示例,但是应当理解,向右偏移也可以以类似的方式实现。对于向量处理器,可以使用乘法器阵列的单独实例来处理每个向量通道,或者可以在公用乘法器电路上顺序处理若干个通道以生成向量结果的相应部分。[0107]如图17所示,偏移指令也可以是元素大小调整偏移指令,该元素大小调整偏移指令生成具有要输入的不同数据元素大小的结果向量。例如,在图17中,结果具有是输入向量A的两倍宽的元素。在这种情况下,输入向量的元素中的仅一些被映射输出,并且每个结果元素对应于对应的输入元素的偏移版本。同样,基于偏移量并且可能还基于元素大小Z来确定用于在每个运算通道中相乘的2的幂。[0108]如图18所示,减少偏移指令可以将每个向量通道的偏移结果减小成对应于响应于偏移而执行的乘法的各个结果的总和的单个结果。如图19所示,这可以使用上面讨论的技术来完成,其中通过颠倒一个输入的元素被提供给乘法器的顺序,来在LXM乘法器阵列中相乘和累加相应的子乘积。在这个示例中,偏移操作数B被重新排序,但是重新排序也可以应用于源操作数A。应当理解,上面讨论的用于响应于MAP指令来累加乘积的任何示例也可以被应用于偏移指令。因此,尽管图18和图19示出了将来自每个向量通道的所有子乘积加在一起以形成单个结果的情况,但是也可以以例如与图7B中所示的示例类似的方式,针对向量内的相邻元素的每个区段并与其他区段分开地单独执行子乘积的累加。[0109]图20示出了饱和偏移的示例,其中如果偏移导致大于最大值的值,则结果被钳位到最大值,而如果结果小于最小值,则结果被钳位到最小值,否则如果结果在最小值和最大值之间,那么结果就是实际的偏移结果。当偏移实际上旨在对应于乘以2的某一幂的乘法时饱和偏移可以特别有用,并且因此如果正在使用带符号的算术,那么如果偏移导致从操作数的上端偏移无符号位,则这实际上意味着结果已经被包装变成负值或负值已经被包装变成正值),从而提供更准确地表示原始偏移操作数A乘以所需的2的幂的真实结果的值,实际的偏移结果可以经饱和以将结果钳制到最大值或最小值。对于类似于图14中所示的多路复用偏移电路,这种饱和将非常难以有效实现,特别是对于面积效率是重要因素的低端处理器来说,因为需要附加逻辑来检查操作数的正被移出的位并在饱和发生时迫使结果值的某些较低位变成0或1。然而,当在乘法器上实现偏移时,往往可能已经实现了饱和乘法,因此重复使用此电路执行饱和偏移也更为有效。例如,在乘法器阵列的末端的进位传递加法器32可以设置有用于检查所生成的乘积的较高有效位的逻辑,以确定是否已经发生了上溢或下溢,并因此确定结果是否应该被饱和并钳位到最大值或最小值。可能通常存在用于已经在乘法器14的输出端处提供的较低位的一些多路复用器,这些多路复用器可以在要执行饱和时向乘积结果的较低位注入O或1。因此,通过重复使用乘法器处理偏移指令,更可能使饱和偏移操作变得可行,这增加了可用的偏移操作的灵活性。[0110]图21示出了舍入偏移操作的示例。在这个示例中,要偏移的操作数A被向右偏移3个位的位置,这导致某些位值偏移成低于二进制点位置。结果可以被截断以形成偏移结果。然而,如果偏移实际上旨在表示除以2的某个幂,那么往往可能希望将除法结果舍入为最接近的整数,并且如果结果被简单地截断,那么这可能不会发生。因此,在低于二进制点位置的一个位置加上额外位值1的情况下可以执行舍入,并且如果在原始偏移结果中低于二进制点位置的下一位是1,则这会导致进位到高于二进制点位置的位以确保最终结果表示如果中间结果的所有位已经被保留时应表示的值的最接近整数。尽管图21示出了在二进制点位置舍入的示例,但是应当理解,舍入也可以在取决于所表示的值的有效性而在其他位位置处发生。[0111]对于类似于图14所示的多路复用偏移电路,难以实现此类舍入,因为加上舍入常数R可能需要在原始输入操作数A的任何位处发生,并且此外,可能需要提供通常不会在偏移器中提供的附加加法器。对于向量偏移来说这尤其成问题,其中对可变数据元素大小的支持可能导致用于在偏移器中的不同位置处注入舍入位的复杂控制逻辑。同样对于一些舍入模式,还需要存在用于检查原始输入操作数A的特定位的一些逻辑。如上面在图3中所讨论的,乘法器阵列通常可能已经具有通过在阵列内的特定位位置处注入舍入常数R来舍入乘法结果的能力,所以这个功能可以在执行偏移操作时重复使用。例如,代替于使用专用偏移电路来处理舍入向右偏移,这可以替代地映射到源操作数A乘以基于元素大小和偏移量S确定的2的幂的乘法,并且乘积的高阶部分可以与在该高阶部分处判断提示asserted的舍入输入R—起取得,以有效地将向乘积加〇.1。[0112]图22示出了在处理电路10内处理偏移操作的方法。在步骤250,指令解码器8确定要解码的下一个指令的类型。如果指令不是偏移,则根据检测到的指令类型来处理指令,并且指令解码器8生成控制信号来控制处理电路10执行相应的处理操作。如果指令是偏移指令,则在步骤252,解码器8控制偏移操作数形成电路200基于由偏移指令指定的至少一个偏移量S并且任选地还基于元素大小Z来生成偏移操作数。在步骤254,将由偏移指令指定的偏移操作数和源操作数A作为输入操作数提供至乘法器电路14。在步骤256,乘法器电路14将源操作数A和偏移操作数B相乘,如同它们是正常的乘法输入一样,使得乘法器电路执行至少一次乘法,所述乘法等效于将源操作数A的对应数据元素偏移由相应偏移量S指定的位位置数,以生成偏移结果。[0113]此技术提供了具有关于如何取决于特定核心的约束实现舍入、饱和偏移的更广泛选择的实现方式。在面积受限的核心诸如小型嵌入式微控制器)中,这允许在几乎不使用附加硬件的情况下实现具有所有期望性质的偏移。如果发现这种方式更有效率,则实现方式可以选择这种方式实现一些或甚至全部的偏移。[0114]对所有类型的偏移指令使用乘法器电路14并不是必须的。尽管一些实现方式可能根本不提供专用偏移电路并且可以使用乘法器来处理所有的偏移,但是其他实施方式仍然可以提供偏移器来处理相对简单类型的偏移,但是更复杂类型的偏移操作,诸如舍入或饱和偏移或将相应的偏移结果累加成合并累加器值的偏移,可以使用如上所述的乘法器来处理。[0115]在本申请中,词语“被配置用于......”用来表示设备的元件具有能够执行所定义的操作的配置。在这种情况下,“配置”是指硬件或软件互连的布置或方式。例如,该设备可以具有提供所定义操作的专用硬件,或者处理器或其他处理装置可以经编程以执行所述功能。“被配置用于......”并非暗示设备元件需要以任何方式改变以提供所定义的操作。[0116]虽然已经参考附图详细描述了本发明的说明性实施方案,但是应当理解,本发明不限于这些精确的实施方案,并且本领域的技术人员可以在本发明中实现各种改变和修改,而不偏离由所附权利要求书限定的本发明的范围和精神。

权利要求:1.一种设备,包括:处理电路,所述处理电路用于执行数据处理,所述处理电路包括LXM乘法器阵列,其中L和M是整数;以及指令解码器,所述指令解码器响应于指定L位操作数和M位操作数的乘法指令来控制所述乘法器阵列使用用于累加所述L位操作数和所述M位操作数的部分乘积的多个加法器来将所述L位操作数和所述M位操作数相乘;其中响应于指定第一J位操作数和第二K位操作数的乘法累加乘积MP指令,其中L并且KSM,所述指令解码器被配置用于控制所述处理电路来生成包括至少一个结果元素的结果值,每个结果元素对应于所述第一J位操作数的E位部分和所述第二K位操作数的F位部分的相应EXF乘积的和,其中IE〈J并且IF〈K;并且响应于MAP指令,所述指令解码器被配置用于控制所述处理电路重新排列所述第二K位操作数的F位部分以形成经变换的K位操作数,并且用于根据所述第一J位操作数和所述经变换的K位操作数控制所述LXM乘法器阵列使用所述多个加法器的子集来加总所述相应EXF乘积。2.根据权利要求1所述的设备,包括操作数重新排列电路,所述操作数重新排列电路用于重新排列所述第二K位操作数的所述F位部分以形成所述经变换的K位操作数。3.根据权利要求2所述的设备,其中,对于所述第二K位操作数中包括所述F位部分中的至少两个的至少一个区段,所述操作数重新排列电路被配置用于颠倒所述区段内的所述F位部分的顺序以形成所述经变换的K位操作数的相应区段。4.根据权利要求2所述的设备,其中,所述操作数重新排列电路被配置用于根据基于所述MP指令的参数选择的多个不同重新排列模式中的一个来重新排列所述第二K位操作数。5.根据权利要求1所述的设备,其中,响应于所述MAP指令,所述指令解码器被配置用于控制所述处理电路来重新排列所述第一J位操作数的E位部分以形成经变换的J位操作数,并且用于根据所述经变换的J位操作数和所述经变换的K位操作数控制所述LXM乘法器阵列使用所述多个加法器的子集来加总所述相应的EXF乘积。6.根据权利要求1所述的设备,包括部分乘积形成电路,所述部分乘积形成电路用于生成将由所述LXM乘法器阵列的所述加法器累加的所述部分乘积。7.根据权利要求6所述的设备,其中,响应于所述MAP指令,所述指令解码器被配置用于控制所述部分乘积形成电路来根据所述第一J位操作数和所述经变换的K位操作数生成所述部分乘积。8.根据权利要求6所述的设备,其中,响应于所述MAP指令,所述指令解码器被配置用于控制所述部分乘积形成电路来将所述部分乘积的部分乘积位的子集设置为零,而不管所述第一J位操作数和所述第二K位操作数的值如何。9.根据权利要求8所述的设备,其中,所述指令解码器被配置用于控制所述部分乘积形成电路来根据所述MP指令的参数选择哪些部分乘积位是部分乘积位的所述子集。10.根据权利要求1所述的设备,其中,响应于所述MAP指令的至少一种形式,所述指令解码器被配置用于控制所述处理电路来生成包括多个结果元素的所述结果值,每个结果元素指定所述第一J位操作数的X位区段内的所述E位部分与所述第二K位操作数的Y位区段内的所述F位部分的所述相应EXF乘积的和,其中E〈X〈J并且F〈Y〈K。11.根据权利要求10所述的设备,其中,响应于所述MAP指令的所述至少一种形式,所述指令解码器被配置用于控制所述LXM乘法器阵列,来使用所述多个加法器的第一子集对所述第一J位操作数的第一X位区段和所述第二K位操作数的第一Y位区段的所述相应EXF乘积进行加总,以及使用所述多个加法器的第二子集对所述第一J位操作数的第二X位区段和所述第二K位操作数的第二Y位区段的所述相应EXF乘积进行加总。12.根据权利要求1所述的设备,其中,所述LXM乘法器阵列包括华莱士树乘法器。13.根据权利要求1所述的设备,包括Booth编码电路,所述Booth编码电路用于使用Booth编码对所述第一J位操作数和所述第二K位操作数中的一个进行编码。14.根据权利要求13所述的设备,其中,响应于所述MAP指令,所述Booth编码电路被配置用于使用Booth编码与重新排列所述第二K位操作数的所述F位部分以形成所述经变换的K位操作数的操作数重新排列电路并行地编码所述第一J位操作数。15.根据权利要求13所述的设备,其中,所述多个加法器包括足以加总至少N个Z位部分乘积的多个加法器,其中N是L和M中的一个并且Z是L和M中的另一个;并且所述处理电路包括附加的部分乘积加总电路,所述附加的部分乘积加总电路用于加总附加的Pmax部分乘积,其中P是要被加总以形成所述结果值的一个结果要素的相应ExF乘积的数量,并且Pmax是由所述处理电路支持的P的最大值;其中响应于所述MAP指令,所述指令解码器被配置用于控制所述处理电路以生成对应于所述N个Z位部分乘积与所述附加的Pmax部分乘积中的至少一个的和的结果。16.根据权利要求15所述的设备,其中,所述附加的部分乘积加总电路包括被包含在所述LXM乘法器阵列中的另外的加法器,使得所述多个加法器包括足以加总至少N+Pmax个Z位部分乘积的多个加法器。17.根据权利要求15所述的设备,其中,所述附加的部分乘积加总电路包括与所述LXM乘法器阵列分开的电路,用于将所述附加的Pmax部分乘积加总以形成单个值。18.根据权利要求15所述的设备,其中,所述附加的部分乘积加总电路包括:加总电路,所述加总电路与所述LXM乘法器阵列分开,用于将所述附加的Pmax部分乘积减少至R个附加的部分乘积,其中2R〈Pmax,以及另外的加法器,所述另外的加法器被包括在所述LXM乘法器阵列中,使得所述多个加法器包括足以加总至少N+R个Z位部分乘积的多个加法器。19.一种设备,包括:用于执行数据处理的装置,包括用于执行LXM乘法的装置;以及用于解码指令的装置,其响应于指定L位操作数和M位操作数的乘法指令,来控制所述用于执行LXM乘法的装置使用多个用于加总以累加所述L位操作数和所述M位操作数的部分乘积的装置将所述L位操作数和所述M位操作数相乘;其中响应于指定第一J位操作数和第二K位操作数的乘法累加乘积MP指令,其中L并且KSM,所述用于解码指令的装置被配置用于控制所述用于执行数据处理的装置来生成包括至少一个结果元素的结果值,每个结果元素对应于所述第一J位操作数的E位部分和所述第二K位操作数的F位部分的相应EXF乘积的和,其中1〈E〈J并且1〈F〈K;并且响应于所述MAP指令,所述用于解码指令的装置被配置用于控制所述用于执行数据处理的装置重新排列所述第二K位操作数的F位部分以形成经变换的K位操作数,并且用于根据所述第一J位操作数和所述经变换的K位操作数控制所述用于执行LXM乘法的装置使用所述多个用于加总的装置的子集来加总所述相应EXF乘积。20.—种用于包括LXM乘法器阵列的设备的数据处理方法,所述LXM乘法器阵列包括多个加法器,所述多个加法器用于累加响应于乘法指令而被相乘的L位操作数和M位操作数的部分乘积,其中L和M是整数,所述方法包括:响应于指定第一J位操作数和第二K位操作数的乘法累加乘积MAP指令,其中JSL且K^M:重新排列所述第二K位操作数的F位部分以形成经变换的K位操作数,其中1〈F〈K;以及根据所述第一J位操作数和所述经变换的K位操作数控制所述LXM乘法器阵列来生成包括至少一个结果元素的结果值,每个结果元素对应于所述第一J位操作数的E位部分和所述第二K位操作数的F位部分的相应EXF乘积的和,其中IE〈J;其中使用所述多个加法器的子集来加总所述相应EXF乘积。

百度查询: ARM 有限公司;安谋科技(中国)有限公司 乘法累加乘积指令

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。