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

数据处理装置中的乘-累加 

买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!

申请/专利权人:ARM有限公司

摘要:提供了一种数据处理装置、操作数据处理装置的方法、非暂态计算机可读存储介质、以及指令。指令指定第一源寄存器、第二源寄存器、以及一组N个累加寄存器。响应于该指令,生成控制信号,使得处理电路从第一源寄存器的内容中提取N个数据元素,执行N个数据元素中的每个数据元素与第二源寄存器的内容的乘法,并且将每个乘法的结果应用于一组N个累加寄存器中的相应的目标寄存器的内容。结果,以如下方式执行多个N乘法,该方式有效地提供了N倍于寄存器宽度的乘法器,但是不要求寄存器文件也变为N倍大。

主权项:1.一种数据处理装置,包括:寄存器存储电路,具有多个寄存器,每个寄存器用于存储多个数据元素;解码器电路,响应于数据处理指令而生成控制信号,所述数据处理指令在所述多个寄存器中指定:第一源寄存器、第二源寄存器、以及一组N个累加寄存器,其中N是大于1的正整数;以及处理电路,响应于所述控制信号而执行数据处理操作,该数据处理操作包括:从所述第一源寄存器的内容中提取N个数据元素,执行所述N个数据元素中的每个数据元素与所述第二源寄存器的内容的乘法,以及将每个乘法的结果应用于所述一组N个累加寄存器中的不同的相应目标寄存器的内容。

全文数据:数据处理装置中的乘-累加技术领域本公开涉及数据处理,更具体地涉及执行算术运算的数据处理装置。背景技术可以要求数据处理装置执行算术运算。这些算术运算例如可以包括可以在各种情况中找到应用性的矩阵乘法运算。这种矩阵乘法的实现方式的一个特征在于吞吐量是非常计算受限的而不是加载存储受限的。随着向量长度增加并且更多工作数据可以存储于寄存器文件中,这种情况进一步凸显。例如,对于包含32位浮点值的256位向量,每次向量加载可以执行6个向量乘法需要至少32个寄存器。为了增加矩阵乘法性能,可以增大向量长度,以给出相应的性能改善,但是更长的向量需要更大的寄存器文件并且可能需要更复杂的加载存储单元如果需要加载更大的向量的话。添加更多的向量乘法功能单元也可以增加矩阵乘法性能,但是这会对处理器的其他部分提出高要求。例如,由于每个乘法累加运算需要三个寄存器读取端口和一个寄存器写入端口,所以四个乘法累加单元将需要总共十二个读取端口和四个写入端口。此外,前端解码和调度逻辑将需要能够一次处理多个指令,以便调配到这些功能单元例如,可靠地为四个乘法器提供馈入而所需要的“五倍宽”问题,因此非常复杂。发明内容本文描述的至少一个示例提供了一种数据处理装置,包括:寄存器存储电路,具有多个寄存器,每个寄存器用于存储多个数据元素;解码器电路,响应于数据处理指令而生成控制信号,该数据处理指令在多个寄存器中指定:第一源寄存器、第二源寄存器、以及一组N个累加寄存器;以及处理电路,响应于控制信号而执行数据处理操作,该数据处理操作包括:从第一源寄存器的内容中提取N个数据元素,执行N个数据元素中的每个数据元素与第二源寄存器的内容的乘法,以及将每个乘法的结果应用于一组N个累加寄存器中的相应的目标寄存器的内容。本文描述的至少一个示例提供了一种操作数据处理装置的方法,包括:响应于数据处理指令生成控制信号,该数据处理指令在多个寄存器中指定:第一源寄存器、第二源寄存器、以及一组N个累加寄存器;以及响应于控制信号执行数据处理操作,该数据处理操作包括:从第一源寄存器的内容中提取N个数据元素,执行N个数据元素中的每个数据元素与第二源寄存器的内容的乘法,以及将每个乘法的结果应用于一组N个累加寄存器中的相应的目标寄存器的内容。本文描述的至少一个示例提供了一种计算机可读存储介质,以非暂态方式存储有包括至少一个数据处理指令的程序,该程序在由数据处理装置执行时使得:响应于数据处理指令生成控制信号,该数据处理指令在多个寄存器中指定:第一源寄存器、第二源寄存器、以及一组N个累加寄存器;以及响应于控制信号执行数据处理操作,该数据处理操作包括:从第一源寄存器的内容中提取N个数据元素,执行N个数据元素中的每个数据元素与第二源寄存器的内容的乘法,以及将每个乘法的结果应用于一组N个累加寄存器中的相应的目标寄存器的内容。本文描述的至少一个示例提供了一种数据处理装置,包括:用于在多个寄存器中的寄存器中存储多个数据元素的部件;用于响应于数据处理指令生成控制信号的部件,该数据处理指令在多个寄存器中指定:第一源寄存器、第二源寄存器、以及一组N个累加寄存器;以及用于响应于控制信号执行数据处理操作的部件,该数据处理操作包括:从第一源寄存器的内容中提取N个数据元素,执行N个数据元素中的每个数据元素与第二源寄存器的内容的乘法,以及将每个乘法的结果应用于一组N个累加寄存器中的相应的目标寄存器的内容。附图说明下面将参考附图中示出的实施例,仅通过示例进一步描述本发明,其中:图1示意性地示出了可以实现本申请的技术的各种示例的数据处理装置;图2示意性地示出了在一个实施例中对数据准备指令的使用;图3示意性地示出了图2的实施例的变形;图4A示意性地示出了示例数据处理指令,并且图4B示出了一个实施例中的数据处理指令的执行的实现方式;图5A和5B示意性地示出了在一些实施例中可以提供数据元素到运算单元的路由的两种方式;图6A和6B示意性地示出了参考图4A和4B讨论的数据处理指令的两个进一步示例及它们的执行;图7A示意性地示出了示例数据处理指令,并且图7B示出了在一个实施例中对数据处理指令的执行的实现方式;图8示出了根据一个实施例的方法采取的步骤序列;图9A示意性地示出了根据一个实施例的数据处理指令的执行,并且图9B示出了这种指令的两个示例;图10示意性地示出了图9B的数据处理指令的执行的实施例中的一些变形;图11示意性地示出了在一个实施例中利用两个128位源寄存器用于“点积”数据处理指令的更复杂示例;图12示出了图11的实施例的变形;图13示出了图11和12所示的示例的进一步变形;图14示出了根据一个实施例的方法采取的步骤序列;图15A示意性地示出了由一些实施例提供的数据处理指令的执行,并且图15B示出了对应的示例指令;图16以简单矩阵乘法运算的形式示出了图15A的实施例的示例虚拟化;图17示出了图15A所示的示例的更简单的变形,其中,从第一和第二源寄存器中的每个寄存器获得仅两个数据元素;图18示出了图15A所示的示例的另一变形,其中,从每个源寄存器提取更多数据元素;图19示出了数据处理指令的执行的示例实施例,给出了所执行的一些具体乘法运算的更多细节;图20示出了数据处理指令的执行的示例实施例,其中,两个源寄存器的内容被处理为包含两个独立通道中的数据元素;图21示出了根据一个实施例的方法采取的步骤序列;以及图22示出了根据一个实施例的虚拟机实现方式。具体实施方式本文描述的至少一个示例实施例提供了一种数据处理装置,包括:寄存器存储电路,具有多个寄存器,每个寄存器用于存储多个数据元素;解码器电路,响应于数据处理指令而生成控制信号,该数据处理指令在多个寄存器中指定:第一源寄存器、第二源寄存器、以及一组N个累加寄存器;以及处理电路,响应于控制信号而执行数据处理操作,该数据处理操作包括:从第一源寄存器的内容中提取N个数据元素,执行N个数据元素中的每个数据元素与第二源寄存器的内容的乘法,以及将每个乘法的结果应用于一组N个累加寄存器中的相应的目标寄存器的内容。因此,在数据处理装置中所提供的指令以及所提供的支持该指令的相应电路使得多N个乘法被以如下方式执行,该方式可以实际利用N倍于寄存器宽度的乘法器。另外,实现了N倍于寄存器的向量长度的计算密度而不需要使寄存器文件也变为N倍大。另外,由于源操作码被共享,所以这种方法仅使用一半读取端口即可实现N个乘法。例如,在实现四倍N=4乘法器时,本申请的技术实现了四个乘法,但是仅需要6个寄存器读取端口和4个写入端口这是4个独立乘法器所需要的读取端口的一半。另外,因为仅有一个指令而不是N个指令对于每个乘法一个指令需要解码和发布,所以该装置的解码和调度机制被简化。第二源寄存器的内容用在与N个数据元素中的每个数据元素的乘法中的方式可以改变,但是在一些实施例中,每个数据元素可以与其相应的部分相乘。另外,可以不同地配置从第一源寄存器的内容中对N个数据元素的提取,但是在一些实施例中,相同的数据元素被复制以提供N个数据元素。因此,在一些实施例中,处理电路包括数据元素操控电路,该数据元素操控电路响应于控制信号而提供从第一源寄存器提取的数据元素的多个实例,其中,执行乘法包括将数据元素的多个实例与第二源寄存器的内容的相应部分相乘。这种数据元素操控电路可以根据需要提供从第一源寄存器提取的数据元素的不同倍数的副本实例。例如,在一些实施例中,数据元素操控电路响应于控制信号而提供数据元素的M个实例,其中,M个实例的大小小于多个寄存器的寄存器大小。换言之,数据元素的多个实例可以仅占用寄存器宽度的一部分。根据所实现的计算需求,该部分可以是例如,一半、四分之一、或者任何其他整数分数。当数据元素的多个实例没有占据整个寄存器宽度时,可以是进一步的数据元素被从第一源寄存器提取并且被复制以便匹配该宽度的情况。例如,在一些实施例中,数据元素操控电路响应于控制信号提供从第一源寄存器提取的一组数据元素中的每个数据元素的各自的M个实例,其中,该组数据元素的M个实例的总大小等于寄存器大小。所以,例如,如果提取K个数据元素,并且每个数据元素被复制M次,则元素的总数目将为K*M,这等于寄存器大小。这一组数据元素可以以各种方式从第一源寄存器选择,但是在一些实施例中,一组数据元素由具有寄存器大小的重复子部分中的选定数据元素给出。在上述提取K个数据元素的示例中,则在寄存器存在K个子部分或“数据群组”。例如,在将第一源寄存器进一步划分为四个子部分的情况下,一组数据元素则可以由这些子部分中的每个子部分的第一排序数据元素给出。换言之,每个子部分的一个数据元素由数据元素操控电路进行复制,以跨全部的每个子部分重复提供相同的数据元素。但是,在与数据元素操控电路有关的方式中不需要进一步划分为子部分,并且可以跨整个寄存器宽度复制所提取的一个数据元素。因此,在一些实施例中,数据元素的多个实例的组合大小等于多个寄存器的寄存器大小。本申请的技术进一步认识到划分为K个群组并且在每个群组中进行复制更容易在硬件中实现,但是其不总是必须的,所以在一些实施例中,实际上K=1且M=向量宽度。本申请的技术可以利用各种N值实现,但是已经发现,当N在2至8的范围中时一般可以实现良好的成本效益平衡。在一些具体实施例中,N是2。在一些具体实施例中,N是4。取决于计算要求,在数据处理操作中将每个乘法的结果应用于相应的目标寄存器的内容的处理可以各种方式执行。在一些实施例中,在数据处理操作中将每个乘法的结果应用于相应的目标寄存器的内容包括将每个乘法的结果加和到相应的目标寄存器的内容。在一些实施例中,在数据处理操作中将每个乘法的结果应用于相应的目标寄存器的内容包括将每个乘法的结果从相应的目标寄存器的内容中减去。在一些实施例中,在数据处理操作中将每个乘法的结果应用于相应的目标寄存器的内容包括用每个乘法的结果替代相应的目标寄存器的内容。所提出的将每个乘法的结果应用于一组N个累加寄存器中的相应的目标寄存器的内容的方法可以允许一组N个累加寄存器的表示在指令中的高效编码,并且还允许高效的简单寄存器文件设计。例如,在一些实施例中,一组N个累加寄存器是连续寻址寄存器。在一些实施例中,一组N个累加寄存器中的第一累加寄存器的索引是N的非负整数倍。这些实施例有助于寻址,并且还允许比利用多个独立端口的情况更简单的寄存器文件设计。在对从第一源寄存器的内容中提取的数据元素的寻址中也可以获得相同的效率,并且在一些实施例中,从第一源寄存器的内容中提取的N个数据元素是连续寻址数据元素。在一些实施例中,从第一源寄存器的内容中提取的N个数据元素中的第一数据元素的索引是N的非负整数倍。在数据处理操作中执行的将从第一源寄存器提取的N个数据元素中的每个数据元素与第二源寄存器的内容相乘的乘法运算本身可以采取各种配置。在一些实施例中,N个数据元素中的每个数据元素与第二源寄存器的内容的乘法运算包括:从第一源寄存器和第二源寄存器中提取至少第一数据元素对和第二数据元素对;执行将至少第一数据元素对和第二数据元素对相乘的乘法运算;从一组N个累加寄存器中的输入累加寄存器加载累加值;以及将乘法运算的结果加和到累加值。换言之,可以执行对于从每个源寄存器提取的数据元素的成对乘法运算,使得在从第一和第二源寄存器中提取两个数据元素的示例中,逐对乘法运算在第一乘法运算中对从第一和第二源寄存器中的每个源寄存器提取的第一数据元素相乘,并且在第二乘法运算中单独对从第一和第二源寄存器中的每个源寄存器提取的第二数据元素相乘。随后将这些乘法运算的结果与累加值加和在一起。从而执行允许结果的扩大的特别致密的点积计算。本文描述的至少一个示例实施例提供了一种操作数据处理装置的方法,包括:响应于数据处理指令生成控制信号,该数据处理指令在多个寄存器中指定:第一源寄存器、第二源寄存器、以及一组N个累加寄存器;以及响应于控制信号执行数据处理操作,该数据处理操作包括从第一源寄存器的内容中提取N个数据元素,执行N个数据元素中的每个数据元素与第二源寄存器的内容的乘法,以及将每个乘法的结果应用于一组N个累加寄存器中的相应的目标寄存器的内容。本文描述的至少一个示例实施例提供了一种计算机可读存储介质,以非暂态方式存储有包括至少一个数据处理指令的程序,该程序在由数据处理装置执行时使得:响应于数据处理指令生成控制信号,该数据处理指令在多个寄存器中指定:第一源寄存器、第二源寄存器、以及一组N个累加寄存器;以及响应于控制信号执行数据处理操作,该数据处理操作包括:从第一源寄存器的内容中提取N个数据元素,执行N个数据元素中的每个数据元素与第二源寄存器的内容的乘法,以及将每个乘法的结果应用于一组N个累加寄存器中的相应的目标寄存器的内容。本文描述的至少一个示例实施例提供了一种数据处理装置,包括:用于在多个寄存器中的寄存器中存储多个数据元素的部件;用于响应于数据处理指令生成控制信号的部件,该数据处理指令在多个寄存器中指定:第一源寄存器、第二源寄存器、以及一组N个累加寄存器;以及用于响应于控制信号执行数据处理操作的部件,该数据处理操作包括:从第一源寄存器的内容中提取N个数据元素,执行N个数据元素中的每个数据元素与第二源寄存器的内容的乘法,以及将每个乘法的结果应用于一组N个累加寄存器中的相应的目标寄存器的内容。本文描述的至少一个示例实施例提供了一种由在数据处理装置上执行的计算机程序提供的虚拟机,所述虚拟机提供对应于上述数据处理装置之一的指令执行环境。现在将参考附图描述一些特定实施例。图1示意性地示出了可以实现本申请的技术的各种示例的数据处理装置。该数据处理装置包括处理电路12,该处理电路响应于其执行的指令序列而对数据项执行数据处理操作。这些指令是以本领域普通技术人员熟悉的方式从数据处理装置具有访问权的存储器14获取的,并且获取电路16出于此目的被提供。由获取电路16获取的进一步指令被传递到解码电路18,该解码电路生成被布置为控制处理电路12的配置和操作的各方面的控制信号。还示出了一组寄存器20和加载存储单元22。本领域普通技术人员将熟悉图1表示的一般配置,并且这里仅出于简洁的目的省去了其进一步的详细描述。在图1所示的实施例中,寄存器20可以包括整数倍24和数据群组25大小中的一者或二者的存储装置,下面参考一些具体实施例更详细地描述这些存储装置的使用。处理电路12在执行指令时所需要的数据、以及作为这些数据处理指令的结果生成的数据值通过加载存储单元22被写入存储器14和从存储器14读出。还应该注意的是,图1中的存储器14一般可以被看作可以存储本申请的技术的指令一般是处理电路随后执行的预定指令序列“程序”的部分的计算机可读存储介质的示例。但是,处理电路可以从各种不同的来源例如,在RAM中,在ROM中,经由网络接口等访问程序。本公开描述了处理电路12可以执行的各种新颖指令,并且下面的附图提供了对于数据处理电路中的这些指令、变形的特性的解释,以支持这些指令的执行等。图2示意性地示出了对于数据准备指令32的使用。数据准备指令32包括操作码部分34将其定义为数据准备指令、寄存器指示符36、以及存储器位置指示符38。本实施例的数据处理装置对该指令的执行使得存储在存储器30中的数据群组40被识别出来该数据群组由指定存储器位置引用,例如,在一个以上地址上延伸,取决于所定义的数据群组大小,该数据群组在所示出的实施例中包括两个数据元素b0和b1在图中标记为42和44。另外,指令的执行使得数据群组40被拷贝到指定寄存器,并且被跨寄存器的宽度复制,如图2中的重复数据群组46、48、50、52所示,每个数据群组由数据元素b0和b1组成。图3示意性地示出了图2的实施例的变形,说明这种数据准备指令会导致不同大小的数据群组被拷贝和复制。在图3所示的示例中,指令60具有相同的结构,即包括操作码62、寄存器指示符64、以及指定存储器位置66。指令60的执行使得存储器位置66被访问并且存储在那里的数据群组68即,例如,该数据群组从该存储器位置66开始并且在预定数目的数据元素上延伸包括数据元素c0、c1、c2、和c3在图中标记为70、72、74、76。此数据群组68被拷贝并跨目标寄存器的宽度被复制,并且由此数据群组的重复副本78、80、82、和84示出。注意,返回参考图1,数据群组大小可以由寄存器20中的专用存储位置25中保存的值预先定义。最后,应该明白的是,图2和图3的示例不限于任何特定数据群组宽度或复制的倍数。但是,为了仅讨论在当代背景中有用的一个示例,复制可以在128位的宽度上进行。在英国剑桥的有限公司提供的可伸缩向量扩展SVE的上下文中,这个宽度对应于SVE向量粒度大小。在同样由有限公司提供的ASMID指令的上下文中,这对应于ASIMD寄存器的大小。因此,本申请的技术使能以下群组类型的加载和复制:两个64位数据元素;四个32位数据元素;八个16位数据元素;或十六个8位数据元素。图4A示意性地示出了示例数据处理指令,图4B示出了在一个实施例中该数据处理指令的执行的实现方式。该数据处理指令包括操作码102、第一寄存器指示符104、第二寄存器指示符106、索引指示符108、以及作为可选变量的结果寄存器指示符110。图4B示出了该指令的执行使得寄存器A和寄存器B中的数据群组被访问,其中,寄存器A中的每个数据群组中的所有数据元素即,在该示例中,第一数据群组112中的数据元素a0和a1、以及第二数据群组114中的数据元素a2和a3将被访问,而在寄存器B中,在每个数据群组116和118中仅访问选定数据元素,即数据元素b1。所访问的这些数据元素被传递到处理电路的操作电路在图4B中由运算单元120、122、124、以及126表示,该操作电路对从寄存器B获取的数据元素和从寄存器A获取的数据群组应用数据处理操作。如上所述,指令100可以通过标识符110指定结果寄存器,并且这些操作的结果被写入结果寄存器128的相应数据元素。事实上,在一些实施例中,结果寄存器128和寄存器A可以是一个相同的寄存器,这例如允许乘累加运算针对该寄存器的内容被执行如图4中通过虚线箭头示意性地示出的。还应该注意图4B所示的寄存器被故意示出为潜在地在两侧扩展超过示例指令访问的部分。这对应于以下事实,即在一些实现方式例如,上述可伸缩向量扩展SVE中向量大小可能是未指定的。例如,利用图4B描绘对于SVE示例中的例如两个64位数据元素b0和b1的群组的指令的操作,目的地的向量大小可以是128位到2048位中的任意大小以128位作为增量。应该明白的是,尽管图4B所示的示例给出了正在使用来自寄存器B的内容的选定重复的数据元素的特定示例,但是一般而言优选的是向多用途、灵活数据处理装置提供以使用寄存器B中的任意数据元素作为运算单元120-126中的任意运算单元的输入的能力。图5A和5B示意性地示出了可以实现的两种方式。图5A示出了一组存储组件130、132、134、和136这些存储组件可以例如存储寄存器中的相应数据元素连接到一组运算单元140、142、144、和146这些运算单元可以是例如熔合乘加单元。存储单元130-136和功能单元140-146之间的连接在图5A中被示出为直接连接和经由多工器148作为中介而连接。因此,这种配置提供了:各个存储单元130-136中的任意存储单元的内容可以被提供给功能单元140-146中的任意功能单元作为对于各相应功能单元的第一输入,并且存储单元130-136的内容可以分别被提供作为功能单元140-146的第二输入。由功能单元140-146执行的处理的结果被传送到存储单元150-156,这些存储单元可以例如存储寄存器中的相应数据元素。多工器148和功能单元140-146中的每个功能单元由所示出的控制信号控制,以允许上述灵活输入选项。图5B示意性地示出了图5A的替代配置,其中,存储单元160、162、164、和166中的每个存储单元直接连接到功能单元170、172、174、和176中的每个功能单元,每个功能单元由相应的控制信号控制并且其结果被传递到相应的存储单元180、182、184、和186。图5B采取的方法以更复杂的连线要求为代价,避免了图5B示例使用多工器148的需要并且避免了与图5B示例使用多工器148相关联的延迟。因此,图5A和图5B的两个示例示出,在力争实现完全灵活的可配置的一组输入存储单元、运算单元、以及输出存储单元时会出现复杂性,尤其是在有关数据元素的数目增加时。例如,采用图5A的示例并且使输入存储单元、运算单元、以及输出存储单元的数目分别加倍为8个会导致对于八倍输入多工器的需要。另一方面,采用图5B的方法的这种八倍宽实现方式将需要从每个输入存储单元到每个运算单元的八条路径,即,总共64条路径,并且每个运算单元需要能够接收八个不同输入并在它们之间进行选择。因此,将理解的是,本申请的技术的实施例所采取的跨寄存器宽度重复使用数据部分即,数据群组的方法对所需要的控制单元的输入的复杂性和多样性施加了限制。此外,应该注意的是,在上述SVEASIMD上下文中,可以预期图4A的经过分组的-元素乘向量element-by-vector指令可以实现为单个微操作,而不存在相比等同的正常向量操作的额外延迟,因为选择和复制停留在SVE向量粒度并且ASIMD已经具有在128位中这样做的机制例如,使用“FMLA乘以元素byelement”指令。这样,可以预期图4A所示的指令比单独重复DUP指令序列更高效在DUP后面进行正常向量操作。图6A和6B示意性地示出了数据处理指令的两个进一步示例,其中,参考图4A和4B讨论了该数据处理指令的示例。在图6A的示例中,指令200包括操作码202、第一寄存器指示符204、第二寄存器指示符206、即时索引值208、以及结果寄存器指示符210。图6A的下部示意性地示出了指令200的执行,其中,选择寄存器B的重复子部分数据群组中的指定数据元素索引1,并且将该数据元素与寄存器A的相应数据群组表示的向量相乘,以生成构成结果寄存器的内容的相应的结果数据群组。在图6A中,在相应的数据元素和数据群组之间执行的操作由通用运算符示出,该通用运算符指示尽管上述示例被作为这种乘法给出,但是其他运算是可能的并且是可以预见的。本申请的技术不限于这种仅指定一个向量的数据处理指令,并且图6B示出了提供包括操作码222、第一寄存器指示符224、第二寄存器指示符226、第三寄存器指示符228、以及索引指示符230的数据处理指令220的示例。图6B的下部分以图6A所示的类似方式示出了第一寄存器B中的选定数据元素b1如何与从寄存器A和C中获取的数据群组向量结合,并且生成了结果值。仅仅出于示出变形的目的,在图6B的示例中没有在指令220中指定结果寄存器,相反默认预定结果寄存器被临时用于该目的。另外,尽管各组件的组合在图6B中再次通过通用运算符号示出,但是同样应该明白的是,取决于所执行的特定指令,这种操作可以采用各种形式,尽管这实际上是乘法运算,但是其也可以是任何其他类型的算术运算加法、减法等或者也可以是逻辑运算ADD、XOR等。图7A示意性地示出了另一示例数据处理指令,并且图7B示出了一个实施例中的数据处理指令的执行的实现方式。该数据处理指令被提供,以支持用于复数的元素乘向量操作,并且在这里被称为FCMLA复数熔合乘累加指令。如图7A所示,示例FCMLA指令220包括操作码222、旋转指示符224、第一寄存器A指示符226、第二寄存器B寄存器228、索引指示符230、以及累加寄存器指示符232。图7B示出了这种指令的执行使得寄存器A和寄存器B中的数据群组被访问,其中,该指令中的数据群组定义了复数元素的数目。复数元素由一对元素参见图7B中的标签“复数对”表示。在图7B的示例中,寄存器B的复数对是b3,b2和b1,b0,并且复数对b3,b2被选择。寄存器A的复数对是a7,a6、a5,a4、a3,a2、以及a1,a0。从寄存器A和B选择的复数对由索引230标识的寄存器B的数据群组中的选定复数对和来自寄存器A的所有复数对被传递到复数熔合乘累加CFMA单元234、236、238、和240,其中,来自寄存器A的每个复数对分别形成对于每个CFMA单元的一个输入,而来自寄存器B中的一个数据群组的选定复数对形成对于CFMA单元234和236的另一输入,并且来自寄存器B中的下个数据群组的另一选定复数对形成对于CFMA单元238和240的另一输入。各个复数熔合乘累加操作的相应结果被累加作为指定累加寄存器中的相应复数对,这些复数对又分别形成每个相应CFMA单元的第三输入。旋转参数224可选地在指令中指定是如下改变操作的2位控制值仅示出了第一对,其中,c1,c0是操作前的累加值:旋转结果复数对c1,c000c1+a1*b3,c0+a1*b201c1-a1*b3,c0+a1*b210c1-a0*b2,c0-a0*b311c1+a0*b2,c0-a0*b3图8示出了根据一个实施例的方法采取的步骤序列。该流程开始于步骤250。在步骤250,对数据加载准备指令进行解码,并且在步骤260,生成对应的控制信号。然后在步骤270,这些控制信号使得从存储器中指令指定位置例如,参见图2和图3起加载具有控制寄存器指定大小的指定数据群组。随后,在步骤280,控制信号随后进一步使得跨在数据加载准备指令中指定的指定目标寄存器的向量宽度复制所加载的数据群组。数据加载指令的执行随后完成。流程继续进行到步骤290。在步骤290,对元素乘向量数据处理指令进行解码。然后在步骤300,生成对应的控制信号,并且随后在步骤310,在元素乘向量指令中指定的第一寄存器中的每个数据群组中的索引元素和该指令中指定的第二寄存器的每个数据群组中的每个数据元素之间执行由该指令指定的运算。图9A示意性地示出了根据本申请的技术的不同数据处理指令的执行。图9B示出了这种指令的两个示例,第一示例数据处理指令320包括操作码322、第一寄存器指示符324、第二寄存器指示符326、以及可选的输出寄存器指示符328。图9B所示的第二示例数据处理指令330包括操作码332、输出寄存器指示符334、以及累加寄存器指示符336。参考图9A说明这些数据处理指令。由数据处理指令指定的第一和第二源寄存器在图9A的上部示出,每个源寄存器被进一步划分为数据元素部分,这些数据元素部分被分组到通道中。响应于数据处理指令,数据处理装置即,在由解码器电路生成的控制信号的控制下的处理电路从第一源寄存器和第二源寄存器中的每个源寄存器撷取一组数据元素。在图9A所示的示例中,从第一和第二源寄存器的每个通道撷取一组四个数据元素。这些数据元素在被布置为执行乘法运算的运算单元340、342、344、以及346被成对聚集在一起。这些乘法运算的结果在求和单元348被聚集在一起,并且所生成的最终结果值被写入输出寄存器的对应通道。换言之,执行“点积”操作。图9A中的通道的标记示出了以下事实,即:四个乘法单元340-246和求和单元348仅表示数据处理装置的处理电路中提供的一组这样的单元,并且这些单元被对应地重复以匹配数据处理装置针对每个寄存器可以处理的每个通道。图9A中没有专门明确示出每个寄存器中的通道数目,这对应于这样的事实,即:通道的数目可以根据数据元素的相对宽度、每个通道中的数据元素的数目、以及可用寄存器宽度自由定义。因此,可以看出,该指令类似于累加器宽度的相同宽度的操作进行动作例如,在32位宽通道中的8位值例如,整数的示例中,其类似于32位整数操作进行动作。但是,在每个通道中,不再执行32×32乘法运算,但是认为32位源通道由4个不同的8位值组成,并且跨这两个“小向量”执行点积操作。然后,从累加值开始,将结果累加到对应的32位通道中。将明白的是,该附图仅明确描绘了单个32位通道中的操作。将128位向量长度作为示例,该指令将有效地执行32个运算16个乘法和16个加法,这比可比较的当代指令密3-4倍。如果实现为允许更长向量的架构,例如,由英国剑桥的有限公司提供的可伸缩向量扩展SVE,这些更长的向量将相应地增加有效操作计数。还应该明白的是,尽管示出了32位通道宽的具体示例,但是在输入和输出中很多不同的宽度组合是可能的,例如,16位×16位-64位或16位×16位-32位。还提出了“乘以元素byelement”形式例如,针对一个操作数复制单个32位通道。图9A中将输出寄存器连接到第二寄存器的虚线箭头示意性地表示以下事实,即第二寄存器实际上可以是输出寄存器,允许对该寄存器的内容执行累加运算。返回考虑图9B,注意,这里示出了两个不同的示例。一般,第一个示出的指令可以导致图9A中所示的所有操作被执行,但是还提供了图9B中第一个示出的指令仅导致乘法和求和运算被执行的实施例,并且利用输出寄存器中的结果并且将其应用于累加器寄存器的随后的累加运算可以由专门用于该任务的第二个示出的指令实现。图10示意性地示出了图9B所示的数据处理指令的执行的实施例中的一些变形。这里,仅为了示出的简明,将在两个源寄存器350和352中的每个源寄存器中访问的数据元素的数目减少到2。对应地,仅提供两个乘法单元354和356对于每个通道和一个求和单元358对于每个通道。取决于所执行的特定数据处理指令,可以将“点积”操作的结果写入指定的输出寄存器360如果指定的话,或者可以替代地写入累加寄存器362如果指定的话。在后一种情况中,在定义了累加寄存器的情况下,该累加寄存器的内容可以被作为对于求和单元358的附加输入,从而可以进行持续的累加。图11示意性地示出了更复杂的示例,其中,两个128位寄存器380和382是用于上述“点积”数据处理操作指令之一的源寄存器。这些源寄存器380和382中的每个源寄存器被按照四个独立通道通道0-3处理,并且这些通道的相应内容被获取到临时存储缓冲器384-398中,以使得来自两个源寄存器的相同通道的相应内容被放入相邻的存储缓冲器中。在每个存储缓冲器中,内容数据元素在本示例中,每个存储缓冲器中的四个数据元素随后提供对于针对每个通道400、402、404、和406设置的一组四个乘法单元的输入。这些乘法单元的输出被馈送到相应的求和单元408、410、412、和414,并且这些求和单元中的每个求和单元的输出被传递到累加寄存器416的相应通道。累加寄存器416的相应通道向求和单元累加器408-414提供第二类型的输入。图12示出了与图11的示例相同的基本配置,并且实际上,相同的子组件被利用相同的参考标号表示并且在这里不再描述。图12和图11之间的不同在于,使用128位寄存器380源寄存器的四个通道中的每个通道的内容,但仅使用来自第二128位源寄存器382的第一通道内容并且将该内容复制到临时存储单元386、390、394、以及398中的每个临时存储单元。在本示例中被选择作为提供来自源寄存器382的内容的唯一通道的通道由指令指定。将明白的是,不存在与此特定通道通道0相关联的重要性,该通道是出于示例图示的目的被示出,并且源寄存器382的其他通道中的任意通道也可以被等同地指定。选定通道的指定是通过在指令中设置索引值执行的,例如,如图4A的示例指令中所示。图11和12中所示的示例的进一步变形在图13中示出。具有相同参考标号的相同的子组件再次被重复使用,并且为了简明没有重复描述。相对于图11和图12的示例,图13所示的不同在于,源寄存器380和382中的每个源寄存器的四个通道本身在两个数据群组在本文中也被称为“组块”,在图中标记为组块0和组块1中被处理。这不影响处理寄存器380的内容的方式,因为其四个通道的内容如前所述被传输到临时存储单元384、388、392、和396。但是,利用图12的示例介绍的单个通道内容的提取和复制在此基于数据群组“逐组块”地被执行,使得寄存器382的通道0的内容被复制并被传输到临时存储缓冲器394和398,而组块1中通道2的内容被复制并被传输到临时存储缓冲器386和390。应该注意的是,可以认为图13中所示的操作是更一般地示出的图4B的具体示例,其中,该图中由四个处理单元120-126执行的“操作”包括所描述的点积操作。另外,将明白的是,不存在与在所示出的示例中选择的特定通道通道2和0,作为每个组块的“第一”通道相关联的重要性,这些通道通过在指令中设置索引值指定,例如,在图4A的示例指令中示出。最后,注意,在图13所示的数据处理指令的执行之前进行如图2和图3所示并且在上面讨论的数据准备指令的执行可能是有用的,以便适当地准备源寄存器的内容。图14示出了当执行数据处理指令以执行诸如以上参考图9A至13讨论的点积操作时,根据一个实施例的方法采取的步骤序列。流程开始于步骤430。在步骤430,对指令进行解码,并且在步骤440,生成对应的控制信号。然后,在步骤450,逐通道地从指令指定的第一源寄存器和第二源寄存器提取多个数据元素,并且在步骤460,来自第一和第二源寄存器的各对数据元素在每个通道中相乘,以执行点积操作的第一部分。然后,在步骤470,将相应乘法器运算的结果加和在一起,然后逐通道地与从指令中指定的输入累加寄存器撷取的累加值加和在本示例中。图15A示意性地示出了由一些实施例提供的数据处理指令的执行。图15B示出了对应的示例指令。该示例指令500包括操作码502、第一源寄存器指示符504、第二源寄存器指示符506、以及一组累加寄存器指示符508。在图15A的示例中实现的第一和第二源寄存器510和512被示出在该图的上部,响应于数据处理指令的执行,从这些源寄存器提取数据元素。所有四个数据元素是分别从第一源寄存器510提取的,而组成第二源寄存器512的所有内容的四个数据元素被作为块提取。第二源寄存器512的内容被传递到四个运算单元即,熔合乘加FMA单元514、516、518、和520中的每个运算单元。从第一源寄存器510提取的四个数据元素中的每个数据元素被传递到FMA单元514-520中的相应的一个FMA单元。FMA单元514和520中的每个FMA单元由所示出的相应控制信号控制。因此,图15A的示例中的数据处理指令的执行使得数据处理电路由四个FMA单元表示同时执行四个向量乘元素的乘法累加运算。应该注意的是,本申请的技术不限于四个的多样性,但是已经发现这是对于负荷在这种现代处理装置中一般可用的计算率的良好匹配。FMA单元的输出被应用于指令中指定的这一组累加寄存器参见图15B中的条目508中的相应寄存器。另外,这四个累加寄存器522、524、526、以及528的内容形成FMA单元514-520中的每个FMA的另一输入,从而对这些寄存器中的每个寄存器的内容进行累加。图16示出了对图15的示例的示例可视化,其表示简单矩阵乘法示例,其中,主题矩阵A和主题矩阵B相乘,以生成结果矩阵C。在做准备时,矩阵A的阴影列被加载到寄存器v0,并且矩阵B的阴影行被加载到寄存器v2。结果矩阵C的累加器被存储在寄存器v4-v7中。注意,尽管从矩阵A加载的值被表示为列,但是矩阵很容易被转置和或交织,使得来自每个源阵列的连续向量加载可以被执行。应该注意的是,在上下文中,矩阵乘法是On3运算,因此准备用于处理的矩阵数据的辅助任务是On2运算,因此对于足够大n来说这是可忽略的负荷。对应于所示出的示例的指令可以表示为FMA4v4-v7,v2,v0[0-3]。这里,FMA4表示该指令的标签或等同地,表示操作码,v4-v7是一组累加寄存器,v2是从其获取所有内容的源寄存器,v0是从其获取一组数据元素由0-3索引的源寄存器。该指令的执行随后产生四个运算:v4+=v2*v0[0],v5+=v2*v0[1],v6+=v2*v0[2],以及v7+=v2*v0[3]。图17表示图15A所示的示例的更简单的版本,其中,在本示例中,仅从第一和第二源寄存器540和542中的每个寄存器获取两个数据元素。从寄存器542提取的两个数据元素被传递到FMA单元544和546中的每个FMA单元,而来自寄存器540的第一数据元素被传递到FMA单元544,第二数据单元被传递到FMA单元546。累加寄存器548和550的内容提供了对于每个相应的FMA单元的进一步输入,并且累加结果被应用于每个相应的累加寄存器。相反,图18示出了更多数据元素被从每个源寄存器提取出来的示例,其中数据元素在本示例中为8个从源寄存器560和562中的每个源寄存器提取。寄存器562的所有内容被提供给FMA单元564-578中的每个FMA单元,而从寄存器560选择的相应数据元素被提供作为另一输入。乘-加运算的结果在相应的累加寄存器580-594中被累加。图19示出了给出在一个示例中执行的一些具体乘法运算的具体细节的示例。这里,两个源寄存器v0和v2分别在两个不同的数据群组中被处理。寄存器v0的两个数据群组还表示该寄存中用于复制选定数据元素的部分,在图19的示例中选定数据元素是每个部分的“第一”数据元素,即分别是元素[0]和[4]。选定数据元素可以在指令中通过索引指定。因此,在图19所示的数据操作中的第一步骤中,寄存器v0的这两个数据群组的数据元素被如图所示地跨每个部分的宽度复制。然后,这些数据元素提供对于四个乘法器600、602、604、以及606的输入,而其他输入由寄存器v2的内容提供。然后,v2的各数据元素与v0的相应数据元素的乘法被执行,并且结果被应用于目标寄存器v4-v7,其中,到两个数据群组的子划分被保持到这四个累加寄存器中,如针对每个累加寄存器的每个数据群组所标记的具体计算所示。注意,在图19所示的数据处理指令的执行之前,可以有用地进行诸如图2和图3所示并且在上面讨论的数据准备指令的执行,以便适当地准备源寄存器的内容。图20示出了两个源寄存器620和622的内容被看作包含两个独立通道通道0和通道1中的数据元素进行处理的示例。在每个通道中,两个子部分被定义,并且内容的这种“分通道”处理贯穿计算,即通过FMA单元624、626、628、以及630,并最后保持到累加寄存器632和634。图21示出了当处理针对图15A至图20的示例描述的数据处理指令时,根据一个实施例的方法采取的步骤序列。流程开始于步骤650。在步骤650,对数据处理指令进行解码,并且在步骤652,生成对应的控制信号。然后在步骤654,从数据处理指令中指定的第一源寄存器中提取N个数据元素,而在步骤656,N个数据元素与数据处理指令中指定的第二源寄存器的内容相乘。在步骤658,随后将这些乘法运算的N个结果值应用于数据处理指令中指定的N个相应累加寄存器的内容。根据前面的描述将明白的是,在参考图21描述的指令的执行、以及同样地参考图14描述的指令的执行之前进行在诸如图2和图3中所示并在以上讨论的数据准备指令的执行以适当地准备源寄存器的内容可能是有用的。图22示出了可以使用的虚拟机实现方式。尽管上述实施例在支持所涉及的技术的用于操作具体处理硬件的方法和装置方面实现了本申请的技术,但是也可以提供硬件设备的所谓虚拟机实现方式。这些虚拟机实现方式在一般运行支持虚拟机程序710的主机操作系统720的主机处理器730上运行。这要求提供更强大的处理器来支持以合理速度执行的虚拟机实时方式,但是这种方式在某些情况下可以是正当的,例如,当出于兼容性或重复使用的原因期望运行来自另一处理器的代码时。虚拟机程序710提供到应用程序700的应用程序接口,该应用程序接口与作为虚拟机程序710所模拟的设备的真实硬件提供的应用程序接口相同。因此,包括上面讨论的处理器状态检查指令的一个或多个示例的程序指令可以使用虚拟机程序710在应用程序700中执行,以模拟它们与虚拟机硬件的交互。在简要概述中,提供了一种数据处理装置、操作数据处理装置的方法、非暂态计算机可读存储介质、以及指令。指令指定第一源寄存器、第二源寄存器、以及一组N个累加寄存器。响应于指令,生成控制信号,使得处理电路:从第一源寄存器的内容中提取N个数据元素,执行N个数据元素中的每个数据元素与第二源寄存器的内容的乘法,并且将每个乘法的结果应用于一组N个累加寄存器中的相应的目标寄存器的内容。结果,多个N个乘法被以有效地提供N倍于寄存器宽度的乘法器的方式执行,而不要求寄存器文件也被做得N倍大。在本申请中,术语“被配置为...”或“被布置为”用来表示装置的元件具有能够实现所定义的操作的配置。在本上下文中,“配置”表示硬件或软件的互连布置或方式。例如,该装置可以具有提供所定义的操作的专用硬件,或者处理器或其他处理设备可以被编程为执行该功能。“被配置为”或“被布置为”并不暗示装置元素需要以任何方式改变以提供所定义的操作。尽管这里已经参考附图详细描述了说明性实施例,但是将理解的是,本发明不限于这些精确实施例,并且本领域技术人员在不偏离所附权利要求限定的本发明的范围的情况下做出各种改变、添加、和修改。例如,在不偏离本发明的范围的条件下,可以做出独立权利要求的特征与从属权利要求的特征的各种组合。

权利要求:1.一种数据处理装置,包括:寄存器存储电路,具有多个寄存器,每个寄存器用于存储多个数据元素;解码器电路,响应于数据处理指令而生成控制信号,所述数据处理指令在所述多个寄存器中指定:第一源寄存器、第二源寄存器、以及一组N个累加寄存器;以及处理电路,响应于所述控制信号而执行数据处理操作,该数据处理操作包括:从所述第一源寄存器的内容中提取N个数据元素,执行所述N个数据元素中的每个数据元素与所述第二源寄存器的内容的乘法,以及将每个乘法的结果应用于所述一组N个累加寄存器中的相应目标寄存器的内容。2.如权利要求1所述的数据处理装置,其中,所述处理电路包括数据元素操控电路,该数据元素操控电路响应于所述控制信号而提供从所述第一源寄存器提取的数据元素的多个实例,其中,执行所述乘法包括将所述数据元素的所述多个实例乘以所述第二源寄存器的内容的相应部分。3.如权利要求2所述的数据处理装置,其中,所述数据元素操控电路响应于所述控制信号而提供所述数据元素的M个实例,其中,所述M个实例的大小小于所述多个寄存器的寄存器大小。4.如权利要求3所述的数据处理装置,其中,所述数据元素操控电路响应于所述控制信号而提供从所述第一源寄存器提取的一组数据元素中的每个数据元素的各自的M个实例,其中,所述一组数据元素的所述M个实例的总大小等于所述寄存器大小。5.如权利要求4所述的数据处理装置,其中,所述一组数据元素是由所述寄存器大小的重复子部分中的选定数据元素给出的。6.如权利要求2所述的数据处理装置,其中,所述数据元素的所述多个实例的组合大小等于所述多个寄存器的寄存器大小。7.如任意前述权利要求所述的数据处理装置,其中,N在2至8的范围内。8.如权利要求7所述的数据处理装置,其中,N是2。9.如权利要求7所述的数据处理装置,其中,N是4。10.如权利要求1至9中任一项所述的数据处理装置,其中,在所述数据处理操作中将每个乘法的结果应用于相应的目标寄存器的内容包括:将每个乘法的结果加和到相应的目标寄存器的内容。11.如权利要求1至9中任一项所述的数据处理装置,其中,在所述数据处理操作中将每个乘法的结果应用于相应的目标寄存器的内容包括:将每个乘法的结果从相应的目标寄存器的内容中减去。12.如权利要求1至9中任一项所述的数据处理装置,其中,在所述数据处理操作中将每个乘法的结果应用于相应的目标寄存器的内容包括:用每个乘法的结果替换相应的目标寄存器的内容。13.如任意前述权利要求所述的数据处理装置,其中,所述一组N个累加寄存器是连续寻址的寄存器。14.如权利要求13所述的数据处理装置,所述一组N个累加寄存器中的第一累加寄存器的索引是N的非负整数倍。15.如任意前述权利要求所述的数据处理装置,其中,从所述第一源寄存器的内容提取的所述N个数据元素是连续寻址的数据元素。16.如权利要求15所述的数据处理装置,其中,从所述第一源寄存器的内容提取的所述N个数据元素中的第一数据元素的索引是N的非负整数倍。17.如任意前述权利要求所述的数据处理装置,其中,所述N个数据元素中的每个数据元素与所述第二源寄存器的内容的乘法包括:从所述第一源寄存器和所述第二源寄存器提取至少第一数据元素对和第二数据元素对;执行将所述至少第一数据元素对和第二数据元素对进行相乘的乘法运算;从所述一组N个累加寄存器中的输入累加寄存器加载累加值;以及将所述乘法运算的结果加和到所述累加值。18.一种操作数据处理装置的方法,包括:响应于数据处理指令生成控制信号,所述数据处理指令在多个寄存器中指定:第一源寄存器、第二源寄存器、以及一组N个累加寄存器;以及响应于所述控制信号执行数据处理操作,所述数据处理操作包括:从所述第一源寄存器的内容中提取N个数据元素,执行所述N个数据元素中的每个数据元素与所述第二源寄存器的内容的乘法,以及将每个乘法的结果应用于所述一组N个累加寄存器中的相应的目标寄存器的内容。19.一种计算机可读存储介质,以非暂态方式存储有包括至少一个数据处理指令的程序,该程序在由数据处理装置执行时使得:响应于数据处理指令生成控制信号,所述数据处理指令在多个寄存器中指定:第一源寄存器、第二源寄存器、以及一组N个累加寄存器;以及响应于所述控制信号执行数据处理操作,所述数据处理操作包括:从所述第一源寄存器的内容中提取N个数据元素,执行所述N个数据元素中的每个数据元素与所述第二源寄存器的内容的乘法,以及将每个乘法的结果应用于所述一组N个累加寄存器中的相应的目标寄存器的内容。20.一种数据处理装置,包括:用于在多个寄存器中的寄存器中存储多个数据元素的部件;用于响应于数据处理指令生成控制信号的部件,所述数据处理指令在所述多个寄存器中指定:第一源寄存器、第二源寄存器、以及一组N个累加寄存器;以及用于响应于所述控制信号执行数据处理操作的部件,所述数据处理操作包括:从所述第一源寄存器的内容中提取N个数据元素,执行所述N个数据元素中的每个数据元素与所述第二源寄存器的内容的乘法,以及将每个乘法的结果应用于所述一组N个累加寄存器中的相应的目标寄存器的内容。21.一种由在数据处理装置上执行的计算机程序提供的虚拟机,所述虚拟机提供对应于权利要求1至17、20中任一项的数据处理装置的指令执行环境。

百度查询: ARM有限公司 数据处理装置中的乘-累加

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

-相关技术