复制元素指令的制作方法

文档序号:18301875发布日期:2019-07-31 10:15阅读:228来源:国知局
复制元素指令的制作方法

本技术涉及数据处理的领域。更具体地,本技术涉及对向量指令的处理。



背景技术:

一些数据处理系统支持对向量指令的处理,对此该指令的源操作数或结果值为包括多个数据元素的向量。通过响应于单个指令来支持对若干不同的数据元素的处理,可改良代码密度并降低指令索取及解码的额外负担。可通过将数据值加载至向量操作数的相应元素中并使用单个向量指令一次处理若干元素的数据值来更有效地处理待处理的数据值数组。



技术实现要素:

至少一些示例提供了一种装置,其包括:

处理电路系统,用以对包括多个数据元素的向量执行向量处理操作;以及

指令解码器,用以解码程序指令以控制该处理电路系统来执行向量处理操作;

其中,响应于指定分区信息的复制分区指令,该分区信息定义了多个可变大小分区在结果向量内的位置,每个分区包括结果向量的至少一个数据元素并且至少一个分区包括结果向量的多个相邻数据元素,指令解码器被配置为控制处理电路系统生成结果向量,在该结果向量中,具有多于一个数据元素的每个分区包括源向量中开始或结束于所选数据元素位置的一系列数据元素的数据值或包括以指示所述所选数据元素位置的元素索引开始或结束的一系列递增的元素索引。

至少一些示例提供了一种用于包括处理电路系统的装置的数据处理方法,该处理电路系统用以对包括多个数据元素的向量执行向量处理操作;该方法包括:

解码指定分区信息的复制分区指令,该分区信息定义多个可变大小分区在结果向量内的位置,每个分区包括结果向量的至少一个数据元素并且至少一个分区包括结果向量的多个数据元素;并且

响应于复制分区指令,控制处理电路系统生成结果向量,在该结果向量中,具有多于一个数据元素的每个分区包括源向量中开始或结束于所选数据元素位置处的一系列数据元素的数据值或包括以指示所述所选数据元素位置的元素索引开始或结束的一系列递增的元素索引。

至少一些示例提供了一种存储虚拟机程序的计算机可读存储介质,该虚拟机程序用于控制计算机来提供对应于上文所述的装置的指令执行环境

附图说明

本技术的进一步方面、特征及优点将从结合附图阅读的示例的以下描述中显而易见,其中:

图1示意地示出了支持向量指令处理的数据处理装置的示例;

图2示出了向量处理的示例;

图3示出了复制分区指令的源变换形式的第一示例;

图4至图6示出了复制分区指令的源变换形式的第二示例;

图7至图9示出了复制分区指令的索引生成形式的第三示例;

图10图示出复制分区指令的加载复制形式的示例;

图11是图示出处理复制分区指令的方法的流程图;

图12至图16图示出复制元素指令的源变换形式的示例;

图17图示出复制元素指令的加载复制形式的示例;

图18图示出复制元素指令的索引生成形式的示例;

图19是图示出处理复制元素指令的方法的流程图;

图20至图22示出了使用复制元素指令以用于对框架中的不同大小瓦片执行矩阵乘法的示例;

图23示出了可使用复制分区指令的fft计算的示例;

图24图示出可使用的虚拟机实施方式。

具体实施方式

将在下文描述一些具体示例。应了解本技术不限于这些准确示例。

数据处理装置可具有:处理电路,用以对包括多个数据元素的向量执行向量处理操作;以及指令解码器,用以解码程序指令以控制处理电路执行向量处理操作。对于众多处理应用,向量处理可取决于向量长度(在一个向量中的数据元素数量)而使性能改良数倍。然而,发明人认识到例如在数字信号处理(dsp)、高性能计算(hpc)及网络连接应用中存在一些算法,对此正处理的数据维度可限制性能,使得增加向量长度不导致对应性能加速。此算法的示例可为涉及具有相对小维度(例如,2x2、3x3、4x4、3x2、等等)的矩阵的矩阵乘法的算法。由于众多向量通道可归因于正操作的小数据维度而保持未填充,将标准向量指令应用至此算法可导致低效的性能。

复制分区指令

指令解码器可支持指定分区信息的复制分区指令,该分区信息定义两个或多个可变大小分区在结果向量内的位置。响应于复制分区指令,指令解码器控制处理电路生成结果向量,在该结果向量中,具有多于一个数据元素的每个分区包括源向量中开始或结束于所选数据元素位置的一系列相邻数据元素的数据值或用指示该所选数据元素位置的元素索引开始或结束的一系列递增的元素索引。

因此,指令可利用在源向量中的于所选数据元素位置开始的一系列数据元素的数据值或该一系列元素的对应元素索引填充(populate)结果向量的相应分区,其中分区的位置是可变的并由指令指定。此指令可有助于加速算法的向量化处理,其中数据结构具有与向量长度相比相对小的维度。例如,这可允许利用数据结构的对应行或列的数据值或元素索引来填充每个分区,其中在相同向量内封装给定行或列的若干实例。

存在用于编码定义分区位置的分区信息的若干选项。在一个示例中,分区信息包括分区屏蔽信息(其可参考寄存器或作为立即值指定),该分区屏蔽信息包括一个或多个标记位,每个标记位标识在结果向量内分区的开始或结束。因此,通过利用在屏蔽内的不同位置中的标记位编码分区屏蔽信息,可定义不同数量、位置及大小的分区。这可用于支持具有不均匀的行或列长度的数据结构的处理。

或者,分区信息可包括指示每个分区的数据元素的数量的分区大小信息。例如,分区大小信息可为指示数据元素的数量的标量值。在一些示例中,例如,通过指定指示在每个分区中的元素数量的标量值数组,分区大小信息可分别针对每个分区指定数据元素的数量。然而,若需要不同大小的分区,则可更有效地使用上文示例中的屏蔽来编码该分区。

在其他示例中,复制分区指令的编码可限制不同于第一或最后分区的全部分区以具有相同数量的数据元素。例如,复制分区指令可指定单个标量值,该标量值指定每个分区的期望大小。可将定义分区大小信息的标量值指定为寄存器立即值或参考寄存器指定。或者,复制分区指令可指定控制屏蔽,其中分区大小可由第一或最后主动位相对于固定参考点的位置来标识、或通过在屏蔽的第一主动位与最后主动位之间的数据元素数量来标识。利用针对每个分区指定单个分区大小的编码,若其中将定义分区的向量的主动区域的长度为分区大小的准确倍数,则全部分区可具有相同大小。然而,若在主动区域中数据元素的数量非分区大小的准确倍数,则可截断第一或最后分区,使得其与其他分区相比具有较少元素(由于第一或最后分区的大小可由分区大小以及主动区域的向量长度或大小暗示,在指令中不需要明确地编码该第一或最后分区的大小)。限制每个分区(不同于第一或最后分区)以具有相同数量的数据元素的指令可在指令集架构中需要较少编码空间并且可足够支持使用数据结构的众多常见处理算法,其中全部行或列具有相同长度(例如,方形或矩形矩阵的矩阵乘法)。

针对复制元素指令的一些示例,指令编码可包括用于将不同数据元素位置标识为每个分区的所选数据元素位置的信息。例如,指令可指定步距参数,该步距参数标识在针对给定分区的所选数据元素位置与下一分区的所选数据元素位置之间的常见步距差异。

然而,对其他示例,每个分区的所选数据元素位置可是相同的。因此,复制分区指令可有效地导致在结果向量内重复数据值或元素索引的给定序列数次(注意到,若分区信息定义在相同结果向量内的不同大小的分区,则可相对于其他重复截断一些重复)。在结果向量内重复数据值或元素索引的给定序列数次的能力对于矩阵或相似数据结构的处理而言可以是非常有用的。例如,在矩阵乘法中,矩阵的相同行可需要乘以在若干不同列中的值,因此通过在结果向量内复制矩阵的给定行多次,可在指令的向量化循环的单个迭代中处置结合行与相应列的多个迭代。

在一些示例中,复制分区指令可支持其中利用对应于向量的不相邻数据元素的序列的源向量数据值或元素索引来填充每个分区的情形。例如,复制分区指令的变化可于由步距参数定义的间隔拾取元素(例如,具有步距2的元素0、2、4、6…或具有步距3的元素0、3、6…的序列,诸如)。

然而,在其他示例中,分配至每个分区的序列可为源向量的一系列相邻元素或对应于这些相邻元素的一系列递增的元素索引。以利用元素的连续区块的数据值或元素索引填充来限制每个分区可简化指令编码以及用于执行该指令的硬件,并且可足够支持常见地执行的算术运算,诸如矩阵算术,其中例如可期望索取对应于矩阵的行的元素并重复数次。

在一些示例中,在不具有任何标识在编码复制分区指令时定义的所选数据元素位置的信息的情况下,所选数据元素位置可默认至源向量内的特定位置处来指定。例如,按默认所选数据元素位置可为最低有效数据元素(在所选数据元素位置标记数据元素序列的开始的示例中,对此数据值或元素索引将分配至每个分区)。众多向量处理算法可通常填充于最低有效元素处开始的向量,因此这样的指令仍可支持大部分使用情形并且与在源向量内的任意位置处开始的指令支持序列相比,需要较少编码空间。相似地,针对所选数据元素位置标记数据元素序列的结束的示例,该所选数据元素位置可为最高有效数据元素位置。

然而,在其他示例中,所选数据元素位置可以是可变的并且由在复制分区指令内编码的元素选择信息指定。分区位置信息可以不同方式编码,例如,经由具有由屏蔽中的第一或最后主动位的位置标识的所选数据元素位置的屏蔽值编码、或通过指定该所选数据元素位置的标量值编码。通过允许复制分区指令从源向量索取对应于源向量内的任意位置的数据元素序列(或输出对应元素索引),这可减少对预先操控源向量以将期望数据放置在向量内的所需位置中的其他指令的需求,进而有助于减少计算给定处理结果所需的指令总量。

利用复制分区指令的一些示例(例如,当使用具有标识每个分区的开始/结束的标记位的屏蔽来定义分区信息时),指令可支持其中至少一个分区包括单个元素的编码。当定义包括单个元素的分区时,可利用对应于源向量内的所选数据元素位置的数据值或元素索引来填充该元素。

在一些示例中,分区信息可定义在整个结果向量内的分区,亦即,整个向量可被认为是主动部分。

然而,在其他示例中,复制分区指令可指定主动部分信息,该主动部分信息定义包括分区的结果向量的主动部分。针对此指令,在主动部分内的元素利用对应于如上文所讨论的数据元素序列的数据值或元素索引来填充,但在主动部分外部的元素可采取不同值。例如,在主动部分外部的元素可被设定为诸如零的预定值,或可保留用以存储结果向量的目的地寄存器的对应数据元素的先前值。主动部分信息可以不同方式编码,例如,使用包括标记主动部分内的元素的一系列主动位的屏蔽(或谓词)值。或者,主动部分可使用具有标记主动部分末端的主动位的控制屏蔽来定义、或通过使用指定主动部分大小的标量值来定义,其中该主动部分假设按预设为于向量的最低有效末端处开始。

在一些情形中,常见控制值可具有结合的编码,该编码指定分区信息(定义分区在结果向量内的位置)、元素选择信息(定义待分配至每个分区的序列的开始/结束)及主动区域信息(定义其中将形成分区的结果向量的元素)的两个或多个。例如,主动部分信息及分区信息可使用常见位掩码来编码,其中每个位对应于结果向量的给定数据元素并且可设定为主动值(1与0的一个)或非主动值(1与0的另一个)。最低有效主动位在位掩码中的位置指示每个分区的大小,并且最高有效主动位在位掩码中的位置指示主动部分的大小。所选数据元素位置可暗示假设为源向量的最低有效数据元素位置,并且主动部分的开始亦可暗示地于最低有效数据元素位置处开始。分区大小亦暗示地标识分区在结果向量内的位置,进而定义分区的重复图案,其中重复指定大小的分区直至到达主动区域的末端(其中若必须的话,截断最后重复)。此类型的指令允许在单个控制屏蔽中复制分区指令的控制参数的相对有效编码,同时支持众多常见使用情形,以避免需要消耗额外控制寄存器。

复制分区指令可在硬件中以不同的方式实现。在一些情形中,可已经提供了用于将源向量的任意定位的数据元素映射至结果向量内的任意位置的一般置换单元,在此情形中该一般置换单元可重复用于实现复制分区指令。然而,由于复制分区指令所需的源至结果映射的集合可以是由一般置换单元支持的映射的受限子集,在其他示例中,可提供仅支持复制分区指令所需的映射的一些定制硬件,由于若复制分区指令从不需要此映射映射,则该定制硬件可允许省略将源向量的给定元素链接至结果向量的给定元素的一些数据线,该定制硬件可以是更高效的。因此,应了解,处理电路可使用提供上文所讨论的形式的结果向量的任何电路来处理复制分区指令。

可提供数种不同形式的复制分区指令。响应于指定存储源向量的源寄存器的源变换形式的复制分区指令,指令解码器可控制处理电路生成结果向量,其中具有多于一个数据元素的每个分区包括源向量中开始或结束于所选数据元素位置处的一系列数据元素的数据值。因此,此形式的指令从源向量索取所需的数据值序列并将这些数据值映射至结果向量内的相关分区。

或者,复制分区操作可在单个指令中与加载操作结合。在此情形中,不是存储在寄存器中,而是源向量可对应于存储在数据存储器(诸如存储器)中的数据元素集合。响应于加载复制形式的复制分区指令,指令解码器可控制处理电路从数据存储器加载源向量的至少部分并生成结果向量,其中重复图案包括来自源向量的数据元素序列的数据值。这可将等同结果给予源变换形式的复制分区指令,但避免需要分配独立向量寄存器以用于存储源向量,这可有助于降低寄存器压力。

在另一示例中,不是将源向量的实际数据值映射至结果向量的数据元素,而是索引生成形式的复制分区指令可利用以指示所选数据元素位置的元素索引开始或结束的一系列递增的元素索引来填充结果向量的每个分区。获自索引生成形式的指令的结果向量可有效地被视为控制向量,该控制向量可随后由后续指令使用以控制从源向量至进一步结果向量的数据元素的映射。例如,后续指令可为收集加载指令,该收集加载指令将数据值从存储器加载结果向量的相应元素中,其中基于控制向量内的对应元素索引决定用以针对结果向量的每个元素标识加载的数据值的地址的地址位移。或者,后续指令可为一般置换指令,该一般置换指令使来自向量内的任何任意位置的数据值能够被映射至结果向量内的任何数据元素位置,其中获自先前执行的索引生成形式的复制分区指令的控制向量指定应将源向量的哪个元素映射至结果的每个元素。

源变换及加载复制形式的复制分区指令可被看作“融合”的指令,其中将数据值的所选序列从源向量映射至结果向量内的相应分区的总体操作由单个指令控制。此方法可提供增加的性能并且可允许使用针对此操作定制设计的更有效的电路。

另一方面,索引生成指令可被视为“解融合”的指令,其中将数据值从源向量映射至结果向量的分区的总体操作可被分为两个独立指令,其中索引生成指令接着另一指令。取决于已经支持了哪种其他指令,在微架构中实现此方法可有时是更为简单的。例如,若特定实施方式已经支持了允许源向量的数据元素至结果向量的任何数据元素位置的任何任意映射的一般置换指令,则由于与提供了支持“融合”的指令(诸如源变换或加载复制形式的复制分区指令)的定制电路的情形相比,索引生成指令可需要较少额外电路,添加索引生成指令的功能以使得索引生成指令的结果可用作控制一般置换指令的输入可以是更有效的。

一些实施方式可仅支持上文所讨论的源变换、加载复制及索引生成形式的复制分区指令的一个。其他实施方式可支持多于一个这些形式的指令,其中指令作业码或指令编码的另一参数指示将执行哪种形式。

复制元素指令

指令解码器可支持指定分段信息的复制元素指令的解码,该分段信息定义两个或多个可变大小分段在结果向量内的位置,其中每个分区包括该结果向量的至少一个数据元素并且至少一个分区包括该结果向量的多个数据元素。响应于复制元素指令,指令解码器控制处理电路生成结果向量,其中在每个相应分段中,在结果向量的整个该分段中重复重复值,该重复值包括源向量的对应分段的所选数据元素位置处的数据值或包括指示该所选数据元素位置的元素索引。

因此,复制元素指令定义结果向量中的多个可变大小分段,并且在每个分段中,一个重复值在该分段中重复若干次。每个分段的重复值可以是不同的,并且该重复值可以是源向量中的对应分段的所选数据元素的数据值或该所选数据元素的元素索引。此指令可用于算法(诸如矩阵乘法),其中数据结构具有小于向量长度的维度,其中单个数据值经常需要乘以矩阵的给定行或列内的每个值,因此通过定义对应于行/列结构的分区并选择不同值作为在不同分区中重复的单个值,这可允许在向量化循环的单个迭代中执行针对若干行/列的乘法的若干迭代以有助于改良性能。复制元素指令亦可用于各种其他类型的处理操作。

分段信息可以不同方式编码(例如,针对复制分区指令的分区信息的上文所讨论的任何技术可用于针对复制元素指令的分段信息的对应方式中)。例如,可使用包括标记位的分段屏蔽信息,该标记位标识结果向量内的每个分段的开始或结束。或者,分段信息可指定指示每个分段中数据元素的数量的分段大小信息(例如,控制屏蔽或标量值)。一些示例可支持相同结果向量内的不同大小的分段,而其他方法可限制不同于第一分段或最后分段的全部分段以具有相同数量的数据元素(若利用分段填充的主动区域的大小非分段大小的准确倍数,则第一分段或最后分段可具有不同大小)。

复制元素指令亦可针对每个分段指定指示所选数据元素位置的元素选择信息(该元素选择信息定义了在整个每个分段中重复源向量的哪个特定元素或哪个特定元素索引)。元素选择信息可以不同方式编码。在一些情形中,指令的编码可独立地针对每个分段指定元素选择信息(例如,控制屏蔽可具有标识每个分段中的所选元素位置的主动位)。在其他一些情形中,指令的编码可限制全部分段以具有相同的所选数据元素位置。例如,元素选择信息可为指定值n的标量值,用以指示每个分段的第n个元素将为所选元素。

在一些示例中,复制元素指令可指定主动部分信息,该主动部分信息指示包括多个分段的结果向量的主动部分,并且响应于复制元素指令,指令解码器可控制处理电路生成结果向量,其中在主动部分外部的至少一个数据元素具有预定值或用于存储结果向量的目的地寄存器的对应数据元素的值。这允许“掩蔽掉”结果向量的剩余部分以使得不利用重复元素填充这些剩余部分,例如,若正处理的数据结构具有使得不可以完全利用数据结构的行或列填充向量长度的维度,则这可以是有用的。

然而,其他示例可基于复制元素指令认为整个结果向量是利用每个分段中的重复值填充的主动部分。在此情形中,不需要指定任何主动部分信息。

以与复制分区指令相似的方式,可提供源变换、加载复制及索引生成形式的复制元素指令。同样,可选择任何特定实施方式以实现这些形式的指令的仅一个、或两个或多个。用以实现复制元素指令的电路可随微架构实施方式而变化(例如,可使用通用置换单元,或如复制元素指令所需,更多定制电路被设计为支持更多元素映射的受限子集)。因此,一般而言,可使用响应于解码的复制元素指令而提供于架构位准定义的行为的任何电路。

注意到,尽管复制分区指令及复制元素指令可支持定义两个或多个分区的编码,其中至少一个分区包括结果向量的多于一个数据元素,存在这些指令的有效编码,该有效编码亦可允许利用分区的其他配置来定义结果向量,例如,仅利用单个分区、或利用每个包括单个数据元素的若干分区来定义结果向量。这可允许使用相同指令以执行其他类型的操作,诸如直接将源向量的每个元素映射至主动区域内的结果向量的对应元素、或在整个结果向量中重复源向量的相同数据元素。支持这样的额外编码可提供isa中的其他指令以用于控制这样的不必要的操作,用以允许更有效地使用编码空间。尽管如此,复制分区指令及复制元素指令的编码可使得表示复制分区指令或复制元素指令的位值的至少一个图案意味着结果向量将包括多个分区,其中至少一个分区包括多于一个数据元素。

一些实施方式可仅实现复制分区指令及复制元素指令的一个。例如,如在以下示例中所示,即使不提供复制元素指令,复制分区指令可用于fft算法,并且即使不提供复制分区指令,复制元素指令可用于框架乘以框架的矩阵乘法。

然而,由于支持复制分区指令及复制元素指令的实施方式允许利用在向量化循环的单个迭代中处置的矩阵的多行来计算使用相对小维度的矩阵的矩阵乘法,这些实施方式是特别有用的。

上文所讨论的指令亦可在虚拟机中实现。虚拟机可用以在系统上仿真给定架构的处理硬件,该系统本身不具有该硬件。通用计算机可执行虚拟机程序以提供对应于装置的指令执行环境的指令执行环境,该装置具有支持复制分区指令或复制元素指令的硬件,使得这些指令可在虚拟机内执行以给出与实际上提供了硬件相同的结果。虚拟机计算机程序可在非暂态记录介质上存储。

示例实施例

图1是其中可采用所描述实施例的技术的系统的方块图。在图1所示的示例中,系统采取管线式处理器的形式。通过索取电路10从指令高速缓存15(该高速缓存通常经由一个或多个进一步级别的高速缓存诸如2阶高速缓存50耦接至存储器55)索取指令,从索取电路10可将这些指令经由解码电路20传递,该解码电路解码每个指令以产生用于在管线式处理器内控制下游执行资源的适当控制信号,以执行这些指令所需的操作。将形成解码指令的控制信号传递至发布级电路25以用于发布至管线式处理器内的一个或多个执行管线30、35、40、80。可认为执行管线30、35、40、80共同形成处理电路。

发布级电路25可存取寄存器60,其中可存储操作所需的数据值。具体地,向量运算的源操作数可存储在向量寄存器65内,并且标量运算的源操作数可存储在标量寄存器75中。此外,一个或多个谓词(屏蔽)可存储在谓词寄存器70中,当执行某些向量运算时用作所处理的向量操作数的数据元素的控制信息。一个或多个标量寄存器亦可用以存储数据值,该数据值用以导出这样的控制信息以在执行某些向量运算期间使用。

源操作数及任何关联的控制信息可经由路径47路由至发布级电路中,使得可将其连同标识待执行的运算(多个运算)的控制信号发送至适当执行单元以实现每个解码的指令。假设图1所示的各个执行单元30、35、40、80为用于对向量操作数进行操作的向量处理单元,但若需要可提供独立执行单元(未示出)以处置由装置支持的任何标量运算。

考虑到各种向量运算,可例如将算术运算连同所需源操作数(及任何控制信息,诸如谓词)转发到算术逻辑单元(alu)30,以实现待对这些源操作数执行算术或逻辑运算,其中结果值通常输出为存储在向量寄存器组65的指定寄存器中的目的操作数。

除了alu30外,可提供其他执行单元35,例如,用于响应于解码的浮点指令而执行浮点运算的浮点单元(fpu)、及用于对向量操作数执行某些置换运算的向量置换单元80。此外,加载/存储单元(lsu)40为用于执行加载运算以将数据值从存储器55(经由数据高速缓存45及任何介入的进一步级别的高速缓存,诸如2阶高速缓存50)加载寄存器集合60内的指定寄存器中,并用于执行存储运算以将数据值从这些寄存器存储回存储器55。

图1所示的系统可以是有序处理系统,其中按程序顺序执行指令序列,或替代地可以是无序系统,允许其中出于尝试改良性能的目的而重新排序执行各个指令的顺序。本领域技术人员应理解,在无序系统中,可提供额外结构(未在图1中明确示出),例如,提供寄存器重命名电路以将指令所指定的架构寄存器映射至来自寄存器组45中的物理寄存器池的物理寄存器(该物理寄存器池通常大于架构寄存器的数量),由此实现移除某些风险,促进无序处理的更多使用。此外,通常可提供重排序缓冲器以追踪无序执行并允许按顺序实行各个指令的执行结果。

在所描述的实施例中,布置图1的电路以对向量寄存器65中存储的向量操作数执行向量运算,其中向量操作数包括多个数据元素。针对对此向量操作数执行的某些向量运算(诸如算术运算)而言,可将所需运算并行(或迭代)应用至向量操作数内的各个数据元素。谓词信息(亦称为屏蔽)可用以标识向量内的哪些数据元素是特定向量运算的主动数据元素,并且因此是应对其应用运算的数据元素。

图2示出了在谓词寄存器70中的一者中存储的谓词值pg的控制下对在对应向量寄存器60中存储的两个向量操作数za、zb执行的向量运算的示例。在此示例中,应用至每个向量通道的独立运算是乘法运算,使得将对应于谓词pg中主动位(设定为1)的结果向量zd的元素设定为乘以操作数za、zb的对应位置处的元素的结果。对应于谓词pg的非主动位(0)的结果向量zd的元素可以设定为零,或可保留与目的地寄存器的对应部分相关的先前值。此预测可用于支持条件运算,其中先前指令可根据向量的元素是否满足某些准则来设定谓词值pg,和/或此预测可用于当不存在足够数据以完全填充向量操作数时在向量化循环的最后迭代中将向量的一些上部元素标记为非主动。

在一些微架构实施方式中,可提供处理逻辑以对每个向量元素并行执行运算。然而,其他实施方式可提供对应于与整个向量长度相比较小的数据宽度的处理硬件,并且在此情形中,向量指令可在多次穿过较狭窄硬件时处理,每次穿过生成结果向量的元素的对应子集。一些实施方式甚至可使用对应于单个数据元素的宽度的硬件顺序地生成结果的每个元素。尽管在可并行处理较宽向量的实施例中,甚至在顺序地处理向量的一些部分的实施例中性能是最大的,归因于处理给定量数据所需的减少的指令索取、解码及发布带宽,向量化仍可相对于纯的标量指令改良性能。

尽管图2示出其中每个向量包括8个数据元素的示例,这仅仅是示例并且其他实施方式可使用其他配置、或可支持对具有可变量量或大小的数据元素的向量的向量运算。指令集架构可被设计为与广泛微架构实施方式一起使用,该微架构实施方式可提供不同大小的向量处理路径及向量寄存器,使得可在利用不同向量大小运算的不同平台上执行相同指令。与使用较长向量长度的实施方式相比,使用较短向量长度的实施方式可需要向量化循环的更多迭代(向量化循环是包括向量指令的循环,其中在循环中的每个迭代从存储器加载数据块、根据一些定义系列的处理操作处理所加载向量的每个元素、以及将结果存储回存储器)。

在涉及hpc、dsp及网络连接域的各个算法中,涉及小维度(诸如2x2、3x3、4x4、等等)的矩阵乘法可以是常见使用情形。其亦是基于区块的变换运算的主干,其中,对较大框架数据(诸如像素值)执行小维度方形矩阵乘法运算,这常见在视频及图像处理算法中使用。具有小维度的矩阵提出了针对向量化的独特问题,其中输入数据的维度形成优化的限制因素而非向量长度。因此,增加向量长度将不改良性能并且这些算法不可以随着较高向量长度而按比例放大。具有宽向量长度的向量实施方式受此问题影响最大。以下示例解释此问题。

考虑到mxm矩阵乘法,m具有任何任意值。例如,m=3:

其中,c0=a0b0+a1b3+a2b6,c1=a0b1+a1b4+a2b7,c2=a0b2+a1b5+a2b8,c3=a3b0+a4b3+a5b6,c4=a3b1+a4b4+a5b7,c5=a3b2+a4b5+a5b8,c6=a6b0+a7b3+a8b6,c7=a6b1+a7b4+a8b7,c8=a6b2+a7b5+a8b8.

mxm矩阵乘法的一些标量代码的示例为:

由于在循环的独立迭代中利用独立乘法累加指令进行每个独立乘法,标量方法速度慢。

一种用于向量化标量矩阵乘法的方法为通过将完整行/列(或行/列的部分,若向量长度小于行/列长度)读取至向量寄存器且并行处理多个元素以生成输出值。此方法随着向量长度良好地按比例增加,只要存在足够的用以填充每个迭代中的向量寄存器的数据,亦即,针对具有与向量长度的维度相比较大的维度的矩阵。在较高向量长度的情况下,可在向量寄存器中封装更多数据,由此有效地减少迭代数量并改良性能。

然而,在dsp、hpc及网络连接中的众多算法中,对小维度进行矩阵运算。进一步地,在一些情形中,这些维度非2的倍数。亦在众多图像及视频处理算法中,运算对较大数据框架进行,使得即使矩阵运算本身为对较小维度进行,运算在区块乘以区块的图案上重复以覆盖整个框架数据。利用可变向量长度(vl)实现小维度的mxm矩阵乘法的简单向量方法应为以下形式:

然而,若矩阵的维度与向量长度相比是较小的,亦即,针对mxm矩阵,其中vl/m>=2,vl是向量长度(每个向量的元素数量),并且m是矩阵宽度,则用于向量化矩阵乘法的此方法具有严重的性能缺陷。

对具有宽向量长度的simd机器,用于向量化小维度的矩阵乘法的此方法导致:

·使用在小的行/列维度上操作的宽向量寄存器将导致向量寄存器的部分使用,其中不使用大部分通道。这导致具有大量稀疏填充的向量寄存器的实施方式并显著减少通道使用

·设计将不随着具有较高向量长度的机器放大。由于仅可在向量寄存器中封装一行/列,算法与向量长度无关地给出相同性能。

·设计的优化范围由矩阵宽度限制并且独立于向量长度。

因此,期望提供指令集架构特征,该特征使向量处理器能够在较小数据维度上操作,但同时采用较高向量长度的优点。以下指令实现向量分区(或“向量中向量”)方法,其中不同维度的数据可在单个向量寄存器中处理。

下文描述了指令的若干示例,称为“复制分区指令”,该指令允许程序员将向量寄存器的一部分复制至另一寄存器中。任意大小的分区可在结果寄存器内定义,并且源寄存器的所选部分可在每个分区中重复。这在处理小维度的数据的算法中有助于实现用于宽向量长度机器的若干向量中向量方法,并且由此允许以向量长度不可知方式随着向量长度按比例放大性能。显示指令可如何有助于加速算术运算的示例使用情形将在下文讨论,但首先描述指令本身的若干变化。在下文所讨论的示例中,出于便于说明的目的,控制屏蔽中的“主动位”被认为是等于1的那些位,并且非主动位是等于0的位。然而,应了解其他实施方式可将“0”位视为主动位并且将“1”位视为非主动。

图3示出了复制分区指令的源变换形式的第一示例,该复制分区指令指定了用于存储结果向量的目的向量寄存器zd、指定用于标识该结果向量的主动部分的控制屏蔽值的谓词寄存器pg、用于存储源向量的源向量寄存器zs、以及指定分区屏蔽值的第二谓词寄存器ps,该分区屏蔽值提供了标识在结果向量内的若干分区的配置的分区信息以及标识标记待映射至每个分区的相邻数据元素序列的开始的源向量的所选元素位置的元素选择信息。

在此示例中,主动部分被标识为对应于控制屏蔽pg的主动位的结果向量的部分。分区大小可通过在第一与最后主动位之间的ps的部分大小或通过其中全部位被设定为主动的ps的部分来定义(针对图3所示的分区大小2的示例,两种选项是等同的,但若分区大小为3或更大,则在第一种方法的情况下,介入位可采取任何值,而在第二种方法的情况下,在第一/最后主动位之间的介入位亦应是主动的)。这些参数定义结果向量内的分区配置,其中重复指定大小的若干分区的每个直至到达主动区域的末端(若主动区域的大小非分区大小的准确倍数,则截断最后重复)。例如,在图3中,主动区域包括结果向量zd的下部5个数据元素,分区大小为2个数据元素(由于ps中的第一及最后主动位彼此相继),并且因此前两个分区每个将包括2个数据元素,并且最后截断的分区包括单个数据元素。结果向量zd的剩余的3个元素形成该向量的非主动部分。

当执行指令时,解码电路20控制向量置换单元80生成结果向量zd,其中利用从所选元素位置开始的源向量zs的元素序列的数据值填充每个分区。在图3的示例中,所选元素位置为zs的元素5,并且因此利用以元素5中的数据值f开始的数据值序列填充结果向量的每个分区。包括2个数据元素的分区由此包括数据值f、g的序列并且包括单个数据元素的分区具有设定为所选数据元素位置的数据值f的该元素。

因此,此指令可用以在整个向量中重复数据值的相同序列的多个实例,这可用于与如下文所讨论的向量长度相比具有相对小维度的矩阵或其他数据结构的处理。

图4示出了复制分区指令的第二示例,该复制分区指令又指定了源寄存器zs及目的地寄存器zd,但该复制分区指令指定了用于定义主动区域及分区配置的单个谓词寄存器pg。在此示例中,假设默认为元素0,暗示所选数据元素位置(标记待从源向量索取的数据值序列的开始)。利用此编码,谓词值pg中的第一主动位指示分区大小(该大小关于在第一主动位与最低有效位之间的位数量编码)。谓词值的最后主动位指示结果向量zd的主动区域的大小(又相对于最低有效位定义)。在第一与最后主动位之间的pg的位利用“x”标记以指示由于其等不影响结果,其可采取任何值。

因此,在图4的示例中,分区大小为3(由于第一主动位为于pg的第三最低有效位处)并且主动区域大小为7(由于最后主动位为于pg的第七最低有效位处)。因此,结果zd配置有三个分区,前两个分区每个包括3个元素,并且由于截断最后分区以适合主动区域,该最后分区包括单个元素。zd的最后元素为非主动的。因此,当执行指令时,从zs的最低有效数据元素位置开始的数据值a、d、c的序列被映射至下部的两个分区,并且最后的截断的分区包括部分序列,该部分序列包括数据值“a”。

图5示出了使用与图4相同的编码技术的第二示例。如图5所示,若在谓词寄存器pg中仅存在一个主动位,则分区大小与主动区域大小为相同的,并且指令将仅利用zs的对应元素填充目的地寄存器zd的主动区域,其中zd的剩余元素为非主动的。如亦使用相同编码技术的图6所示,为了在整个完整的向量寄存器中复制指定大小的分区,屏蔽pg的最高有效位可被标记为主动。

结果向量zd的非主动元素可以不同方式处置。例如,在主动区域外部的非主动元素每个可利用诸如零的预定数据值填充(“归零预测”)。或者,可保留存储在目的地寄存器zd的这些非主动元素中的先前值,使得新分配的分区与zd的先前内容合并(“合并预测”)。

亦可提供复制分区指令的若干其他变化。例如,可提供不指定控制屏蔽pg的图3所示的指令的非预测变化,该指令的非预测变化控制处理器以在整个目的地寄存器中复制分区。分区大小及所选数据元素位置仍可以与图3相同的方式使用ps编码,或替代地图4所示的方法可用于定义分区大小。

此外,尽管图3至图6示出了其中指令包括分别用于源向量及结果向量的独立寄存器标识符的建设性编码,其他示例可使用其中单个寄存器指定源值及将写入结果向量的位置的破坏性编码。在此情形中,复制分区指令的结果改写源操作数。

亦可提供此等指令的标量变化,其中分区大小、主动区域大小、及所选数据元素位置的任一个可以经由标量值编码。例如:

1.rep_partitionzd,zs,rs1,rs2(建设性),或

rep_partitionzds,rs1,rs2(破坏性),

其中rs1指示分区大小,并且rs2指示主动区域大小。在此示例中,假设主动区域默认于向量信道0处开始,并且如在图4的示例中,所选数据元素位置暗示地定义为元素0。针对实现本文所讨论的“向量中向量”方法而言,期望rs1<rs2。然而,指令亦可支持有效编码,其中rs1>rs2。若将分区大小定义为大于主动区域大小,则结果将由rs2标记为主动区域的区域中的元素从源向量拷贝至结果向量的对应元素(亦即,由于较小主动区域大小,仅存在一个截断的分区)。

2.两个先前示例的对应非预测版本:

rep_partitionzd,zs,rs1//建设性

rep_partitionzds,rs1//破坏性

其中rs1指定分区大小,并且同样,所选数据元素位置暗示地为元素0。若rs1小于向量长度,则结果为zd包括至少两个分区,其中每个分区利用从zs的元素0开始的数据值序列填充。若rs1大于或等于向量长度,则结果应仅直接将源向量zs拷贝至目的向量zd。

3.非预测变化,其中主动区域为整个向量,并且分区大小及所选数据元素位置由标量值指定:

rep_partitionzd,zs,rs1,rs2(建设性)

rep_partitionzds,rs1,rs2(破坏性)。

在一个示例中,rs1及rs2可分别直接地指示分区大小及所选数据元素位置。

或者,rs1及rs2可分别指示待从zs索取的元素序列的开始及结束位置,亦即,对应于rs2-rs1+1的分区大小。这提供了等同于图3所示的ps的编码的标量,并且允许于zs内的任意位置处索取数据值序列而非默认于最低有效元素处开始。注意到,编码错误(例如,其中rs2<rs1)可通过将指令视为nop(不影响寄存器状态的非运算指令)来处置。若rs1大于向量长度(向量中的元素总量),则这亦可被视为nop以防止不确定结果。若rs2大于向量长度,这可通过假设设定rs2以指示向量的最后元素来处置(由于结果向量zd在此情形中应表示由写入执行的代码的程序员/编译者希望的待针对向量下部决定的正确结果)。

上文所讨论的变化为复制分区指令的源变换形式的全部示例,该复制分区指令操作存储在源寄存器zs或zd中的源向量并生成结果向量zd,其中取决于定义的分区配置,将来自源寄存器的数据值映射至结果的数据元素。这可被视为“融合”的操作,其中一个指令决定应索取源向量的哪些元素并将这些元素置换至结果向量zs中的所需位置。

然而,替代方案为提供如图7至图9所示的索引生成形式的复制分区指令,该复制分区指令利用来自源向量的所需元素的元素索引填充结果向量,但不准确复制数据值。后续置换指令可随后使用结果向量的元素索引以控制由源向量中的元素索引指示的元素映射至进一步结果向量。或者,从非连续地址(使用从源向量读取的偏移决定该非连续地址)加载数据值的后续收集类型的加载指令可使用作为偏移向量的由索引生成形式的复制分区指令生成的结果以控制将所需数据值从存储器加载目的地寄存器中。此方法可被认为是“分割”或“解融合”的操作,其中使用两个独立指令(索引生成复制分区指令及后续加载或置换指令)进行将所需数据填入至向量寄存器中的全部操作。尽管与如上文所讨论的单个融合的指令相比,这就性能而言可以是较慢的,在一些情况中其可简化微架构硬件设计,例如,其可允许重新使用硬件以用于实现一般置换操作或收集加载。

图7示出了索引生成形式的复制分区指令incrrzdst、rs1、rs2的第一示例,其中zdst是用于存储结果向量的目的地寄存器,并且rs1及rs2是分别指定重设值及步距的标量值。此示例是非预测的指令并且因此整个结果向量被认为是主动部分。亦可提供预测版本,其中指令的参数标识主动部分。结果向量利用元素索引的重复图案的若干重复填充,其中rs1定义重设值,该重设值指定待写入每个重复图案的第一元素的索引值,并且rs2定义指示重复周期(在每个分区中的元素数量)的步距。在每个重复内,在第一元素之后的索引通过使先前元素索引递增1而生成。在图7所示的示例中,例如,rs1=0且rs2=4,并且因此结果向量利用元素序列(3,2,1,0)的若干重复填充直至向量结束,亦即,结果为[3,2,1,0,3,2,1,0]。相似地,若rs1=2且rs2=3,则结果向量应利用重复序列(4,3,2)的重复填充以给出形式[…,4,3,2,4,3,2]的结果。

因此,由于步距参数rs2控制每个分区的大小,其可被看作等同于分区大小信息,并且由于重设参数rs1控制元素索引的每个递增序列开始的元素,其可被看作等同于元素选择信息。

图8示出了与图7相似的另一示例,不同之处在于指令亦指定第三标量值rs3,该标量值指定了表示在写入结果向量中的单个重复的相邻元素的元素索引之间的差异的递增值。例如,若rs1=1、rs2=3且rs3=3,则重复图案应为(7,4,1)并且因此结果向量应利用图案[…,7,4,1,7,4,1]填充。尽管图8示出了其中在标量寄存器中指定递增值的编码,应亦可能提供其中在指令编码本身中将递增值指定为立即值的替代编码。复制分区指令的此变化可用于定义每个利用元素索引的递增序列填充的分区,该元素索引对应于源向量的不相邻元素。

可设定索引生成形式的指令的参数以使得将结果向量的一些元素设定为大于向量的最高有效元素位置的索引的索引。例如,在图8的示例中,若rs1=2、rs2=5及rs3=2,并且向量长度为8个元素,则结果向量应为[6,4,2,10,8,6,4,2],并且在第四及第五元素位置中的元素索引8及10应在长度8的向量的元素索引的有效范围外。在一些实施方式中,当生成范围外部的元素索引时可信号传输错误,或在此情形中可将指令处理为nop。

然而,在一些情形中,定义“无效”元素索引的能力可用于在“有效”元素索引的连续重复之间实现“填充(padding)”。若后续指令简单地忽视“范围外”元素索引(例如,以与由谓词标记出的信道相似的方式处理那些信道),则结果可为通过一个或多个填充信道分开重复有效数据元素的图案的重复,这可用于一些应用。例如,在归零预测的情况下,在生成以上结果[6,4,2,10,8,6,4,2]的索引生成指令之后的后续置换或加载指令应随后导致形式[r6,r4,r2,0,0,r6,r4,r2]的结果值。

或者,不是指示在写入相同分区内的相邻元素的索引之间的增量,而是第三标量寄存器rs3可标识在一个分区的开始索引与下一分区的开始索引之间的差异。在此情形中,第一分区可包括于rs1开始的索引序列,下一分区可包括于rs1+rs3开始的索引序列,下一分区可包括于rs1+2*rs3开始的索引序列,并且依此类推。例如,利用rs1=2、rs2=3、及rs3=5编码可导致利用索引[…13,12|9,8,7|4,3,2]填充的结果向量,其中|表示在分区之间的边界。这显示了在写入结果向量的索引序列中此指令变化可如何用以提供“跳跃”。因此,这是其中每个分区的所选元素位置可针对每个分区而不同的指令的示例。加载复制或源变换形式的指令亦可指定与rs3相似的步距参数以编码不同元素位置,进而用作每个分区的序列的开始/结束。

图9示出了索引生成形式的复制分区指令的另一变化,该复制分区指令指定了标量寄存器rs1(该标量寄存器定义哪个元素为在每个分区中元素索引的递增序列开始的所选元素)以及控制屏蔽ps1,其中主动位的位置标记每个分区的开始(或者,主动位可标记每个分区的结束)。利用此方法,可能在相同结果向量内定义不同大小的分区,这可用于处理具有不同长度的行的数据结构(例如,不规则、三角形或几何栅格图案)。注意到,使用支持不同分区长度的一般屏蔽的用于分区信息的相似编码亦可用于源变换或加载复制类型的复制分区指令。

图10示出了加载复制形式的复制分区指令。一般而言,加载复制形式的指令指定了基地址寄存器ra,该基地址寄存器存储用以计算基地址#[ra]的值。于基地址开始的存储器地址处存储的数据块可被视为有效地表示在目的地寄存器zdst的每个分区中从其索取并重复数据值序列的“源向量”。亦即,若执行指定相同基地址#[ra]的独立的连续向量加载指令,这将导致包括对应于基地址#[ra]及若干后续地址处的数据值的元素a0、a1、a2…的序列的向量寄存器,并且可如上文所讨论执行后续源变换形式的指令以利用从源向量索取的元素填充结果向量的分区。加载复制形式的复制分区指令避免对此独立向量加载指令的需求,而是直接对存储器中的“源向量”操作以给出等同结果。

加载复制形式可使用上文所讨论的任何技术以用于编码分区大小/位置、主动区域位置、及所选数据元素位置。图10的特定示例与上文所讨论的源变换指令的标量示例的第一个相似,即其指定两个标量寄存器rs1、rs2以分别定义分区大小及主动区域大小,并且默认所选数据元素位置及主动区域开始位置均暗示为最低有效元素位置。因此,若rs1=3,则加载复制指令应控制处理器加载对应于在基地址#[ra]开始的地址处的存储器中存储的“源向量”之前三个元素a0、a1、a2的数据值,并且在向量的主动区域内重复这三个数据值a0、a1、a2多次。然而,应了解,图10仅仅为一个示例,并且加载复制形式的复制分区指令的其他示例可反映由上文所述的源变换形式或索引生成形式的指令的其他示例的任一个使用的分区编码。

注意到,尽管加载复制形式的复制分区指令仅可需要从在存储器中存储的源向量加载某些所选元素,尽管如此,实际上一些硬件实施方式可将整个结构a0、a1、a2…(或该结构的子部分)从存储器加载缓冲器中,并且随后拾取待写入结果目的地寄存器的所需元素。因此,指令可导致从存储器读取一些数据,即使实际上不需要生成结果向量。与从所需偏移读出所选值相比,在一些情形中此方法可以是更为方便的。例如,存储器系统硬件可将最小大小赋予在单个事务中从存储器读取的数据块,并且因此若需要彼区块的任何部分,则这可需要读取整个区块。例如,若在图10的示例中读取存储器的最小粒度对应于值a0、a1、a2、a3的区块,则尽管仅需要元素a0、a1、a2以用于生成结果,仍可读取整个区块a0-a3,但a3可由处理器丢弃。因此,对于加载复制指令而言仅加载所需数据值是不重要的-其他值亦可作为特定存储器系统操作方式的假像而加载。尽管如此,通过避免需要消耗向量寄存器,加载复制指令可减轻寄存器压力,这可有助于改良性能。

在上文所给出的示例中,分配至每个分区的数据值序列或元素索引于所选数据元素位置处开始。例如,若所选数据元素位置为元素1,则大小2的分区应包括元素1及2的数据值或元素索引,大小3的分区应包括元素1至3的数据值或元素索引,并且依此类推。

然而,其他示例可利用以所选数据元素位置结束的序列来填充结果向量的每个分区。例如,若所选数据元素位置为元素5,则大小3的分区应包括对应于元素3、4、5的数据值或元素索引;大小4的分区应包括对应于元素2、3、4、5的数据值或元素索引,并且依此类推。这可用于调节其他类型的数据结构(例如,上三角矩阵)的处理。

图11示出了图示出处理复制分区指令的方法的流程图。在步骤100,指令解码器20解码从高速缓存15索取的指令队列中的下一指令。在步骤102,解码器20决定下一指令是否为复制分区指令。若否,则在步骤104,解码器20生成控制信号,该控制信号用于控制管线之后续级以执行对遇到的指令类型适当的处理操作,并且该方法返回到步骤100。

若遇到复制分区指令,则在步骤106,解码器20生成控制信号,该控制信号用于控制处理管线之后续级以生成结果向量,其中由指令定义若干可变大小分区的位置。具有多于一个数据元素的每个分区利用来自源向量的数据值序列或于所选数据元素位置处开始或结束的元素索引来填充。

由指令解码器20支持的另一类型的指令为复制元素指令,该复制元素指令标识结果向量内的多个分段,每个可变大小由指令所指定。响应于复制元素指令,解码器20控制处理电路生成结果向量,其中在每个相应分段中,在结果向量的整个该分段中重复重复值,其中该重复值包括源向量的对应分段的所选数据元素的数据值或所选数据元素的元素索引。同样,这可用于加速操作,诸如矩阵算术,其中正处理的数据维度小于向量长度。下文讨论指令的一些示例使用情形,但首先描述指令本身。

图12示出了复制元素指令的第一示例,该复制元素指令指定了用于存储结果向量的目的向量寄存器zd、用于存储源向量的源向量寄存器zs、以及两个谓词寄存器pg、ps。

谓词寄存器pg提供了分段信息,该分段信息标识结果向量中的每个分段的大小及位置。在此示例中,将分段信息编码为分段屏蔽,其中主动位(在此示例中为1)的位置标记每个分段的结束。因此,此编码支持在相同向量内具有不同大小的分段。在图12中,例如,设定pg以使得第一分段于元素1结束,第二分段于元素2结束(因此仅包括单个元素),并且第三分段于元素6结束。谓词寄存器pg亦提供了标识结果向量的主动部分的主动区域信息。在此示例中,主动区域于结果向量的元素0处开始并且在谓词pg中对应于最高有效主动位的元素(在此示例中元素6)处结束。因此,在此示例中,结果向量的元素7位于主动区域外。利用此编码,分段大小信息及主动区域信息均可编码在相同寄存器中。应了解,在其他示例中,标记位可以与图9针对复制分区指令所示的分区开始位置的编码相似的方式表示每个分段的开始而非结束。

第二谓词寄存器ps提供了元素选择信息,该元素选择信息指示源向量zs的哪些数据元素为在由pg标识的每个分段内的所选元素。在每个分段内,所选元素为在ps中对应于最低有效主动位的元素。因此,在图12的示例中,第一分段中的所选元素为元素0,第二分段中的所选元素为元素2,并且第三分段中的所选元素为元素4。不同于使用最低有效主动位,应了解亦可使用给定分段内的最高有效主动位来信号传输所选元素。

当执行复制元素指令时,指令解码器20控制处理电路(例如,向量置换单元80)生成结果zd,其中在每个分段中,在结果的整个对应分段中重复于对应分段的所选元素位置处的源向量zs的数据值。针对图12,例如,这导致对应于zs的元素0的数据值“a”在结果zd的元素0及1中的整个第一分段中重复、将zs的元素2的数据值“c”映射至zd的元素2、以及将zs的元素4的数据值“e”映射至第三分段中的zd的元素3至6的每个。

在结果的主动区域外部的元素可如图12及图13的“归零”示例所示设定为0,或可如图13的“合并”示例所示保留在目的地寄存器的对应元素中存储的先前值。注意到,若pg为全部真谓词(全部主动位),则每个元素为其自身分段。在该情形中,取决于ps的对应值,将输入拷贝至输出中(在ps[]=1的情形中),或输出基于指令为合并或归零类型而保持不变或归零(ps[]=0)。此外,由于预测指令的此变化,若pg是all_false,则取决于指令类型而归零或合并输出。指令亦可用以如图14所示通过在pg中将最高有效向量信道标记为主动来在整个向量寄存器中复制特定元素,亦即,认为整个向量区域为单个分段。因此,由于此编码为亦支持多个分段的复制元素指令的有效编码,使用此编码可避免对提供任何独立指令以用于在整个向量中控制单个元素的复制的需求。

如图15所示,亦可提供指令的非预测变化,其中pg仅编码分段大小而非主动区域,并且认为整个向量寄存器为主动。在此情形中,最后分段对应于从pg的最后主动位之后的下一元素延伸直至向量结束的结果向量的部分。例如,在图15中,pg的最后主动位是在元素4处,并且因此结果向量zd的最后分段包括元素5至7且如由ps所标识,将结果的这些元素设定为等于在源向量zs的对应分段的所选元素5中的数据值“f”。注意到利用图15的编码,若pg是全部假(全部非主动位),则认为整个寄存器为单个分区,并且因此如图16所示,将来自源向量zs的一个所选元素的单个数据值(“e”)拷贝至结果向量zd的每个元素(这与上文所讨论的图14相似)。

指令的其他变化可使用谓词及标量值的不同组合以传送分段大小信息、主动部分信息及元素选择信息。这样的变化的一些示例包括:

1.rep_elementszd,pg,zs,xs1

预测指令,其中以与图12所示者相同的方式将主动区域信息及分段大小信息均编码至pg中,但将元素选择信息编码为在标量寄存器中指定的标量可变xs1或编码为立即值。在此情形中,在每个分段中将所选元素相对于每个分段的相对位置限制为相同的(例如,xs1指定值n,该值指示每个分段中的第n个元素为所选元素)。

2.rep_elementszd,zs,xs1,xs2,xs3

rep_elementszds,xs1,xs2,xs3

建设性及破坏性变化,其中将主动区域信息、分段大小信息及元素选择信息的每个编码为在标量寄存器中存储的标量变化。在此情形中,每个分段应具有相同大小(尽管若需要,可截断第一分段或最后分段以适合主动区域)。例如,xs1指示标记主动区域结束的元素位置,xs2指示每个分段的长度,并且xs3指示在每个分段中源向量的哪个元素为所选元素(相对于分段开始)。针对建设性变化,定义独立的源寄存器及目的地寄存器,使得在执行指令之后保留源向量。针对破坏性变化,相同寄存器用作源寄存器及目的地寄存器,使得源向量被结果向量改写。一般而言,期望针对指令的大部分用途,xs1≥xs2且xs2≥xs3。若遇到指令,其中分区大小xs2大于主动区域xs1的大小,则可将指令视为nop,或可应用归零或合并预测以掩蔽杂散至非主动区域中的分段的部分。相似地,由xs3指示的元素位置大于分段大小的情形可被视为nop或可导致每个分段由归零或合并预测掩蔽。是否采取nop或掩蔽方法可针对特定实施方式预定义(硬编码),或可取决于指令类型而变化。

3.上文示例2所示的建设性预测变化在编码空间中担负一些成本,这可通过提供破坏性变化来避免。或者,可提供建设性非预测示例以节省编码三个独立标量寄存器:

rep_elementszd,zs,xs1,xs2

在此情形中,xs1指示分段大小,xs2指示所选元素位置,并且如在上文图15的示例中,将整个结果向量视为主动部分。相似地,亦可提供非预测的破坏性编码:

rep_elementszds,xs1,xs2。

利用标量形式的指令,注意到若向量长度或主动部分的大小非分段大小的准确倍数,则截断最后分段(例如,若向量长度为8,则认为整个向量为主动的,并且若分段大小为3,认为结果向量将分别包括大小3、3、2的三个分段)。或者,可截断第一分段而非最后分段。

上文示例为源变换形式的复制元素指令,该复制元素指令从在向量寄存器60中存储的源向量索取所选元素的数据值并在结果向量的对应分段内重复这些数据值。

然而,如图17所示,亦可以与上文针对图10所讨论的加载复制形式的复制分区指令相似的方式提供结合的加载复制形式的复制元素指令。在此情形中,将从其索取元素的“源向量”存储在存储器中而非寄存器中(其中基于基底寄存器za中的值决定存储器中的源向量的基地址#[ra]),但编码分段大小、主动部分及元素选择信息的方式可与上文针对源变换的复制元素指令所讨论的任何变化相同。图17的示例反映了上文所述的非预测的标量变化3。有效地,rs1定义了对应于分段大小的固定步距,并且rs2定义了在分段内的元素位置。图17示出了示例,其中rs1=4并且rs2=3,使得每个分段包括四个元素并且在目的地寄存器zd的整个对应分段中复制每个分段的第三个元素。应了解,可提供对应于其他变化的加载复制的复制元素指令的相似示例。例如,作为加载操作的部分可指定步距及分段长度的不同值以有助于将分区填充至所需对准,或可通过如上文所讨论定义主动区域来提供预测。

如图18所示,亦可与上文图7及图8相似地提供索引生成形式的复制元素指令,该复制元素指令触发了管线在结果向量的整个对应分段中复制源向量的所选元素的元素索引,而非复制该元素的数据值。例如,索引生成的复制元素指令可指定目的地寄存器zdst及两个标量值rs1、rs2,其中rs1定义每个分段的大小(并且亦定义元素索引于分段之间的边界处的递增量),并且rs2定义结果向量的第一元素的开始值。例如,在图18中,若rs1=4且rs2=3,则结果的前四个元素包括索引3,接下来的四个元素包括索引7,并且依此类推。注意到这与图17加载复制情形为相同示例。因此,使用索引向量zd作为加载偏移或由置换选择的元素来执行后续收集加载指令或置换指令将给出与图17所示者等同的结果。

图19示出了示出处理复制元素指令的方法的流程图。在步骤120,指令解码器20解码从高速缓存15索取的指令队列中的下一指令。在步骤122,解码器20决定下一指令是否为复制分区指令。若否,则在步骤124,解码器20生成控制信号,该控制信号用于控制管线之后续级执行对遇到的指令类型适当的处理操作,并且该方法返回到步骤120。

当遇到复制元素指令时,在步骤126,解码器20控制处理管线生成结果向量,其中在每个可变大小分段中,在整个分段中重复重复值。分段可具有不同大小或可全部为相同大小,并且在指令内编码每个分段的大小/位置。针对预测的指令,分段仅可在结果向量的主动部分内定义,而针对非预测的指令,分段可填充整个向量。给定分段的重复值为源向量的对应分段的所选元素的数据值、或所选数据元素的元素索引。哪个元素为所选数据元素在指令内编码,并且可以为每个分段中的相同相对位置,或可在分段之间变化。

现将描述针对复制分区指令及复制元素指令的一些工作示例使用情形。应了解,这些并非这些指令的唯一使用情形,但仅仅示出了其中指令可有助于改良性能的一些示例。尽管示例显示了一般形式的复制分区指令或复制元素指令,应了解可根据上文所讨论的任何变化实现这些指令。

维度mxm的矩阵乘法

对维度mxm的矩阵乘法(其中可将n行封装至单个向量寄存器中)可使用如下代码实现。注意到,此示例使用标量形式的复制指令,其中将屏蔽(主动元素的数量)表达为整数-参看vecrepelements及vecreppartitions中的屏蔽参数。然而,其他示例可使用谓词形式的指令,其中屏蔽在谓词寄存器而非标量整数寄存器中表达。在此情形中,由于作为循环迭代的部分将考虑何时生成谓词屏蔽,不需要边界条件检查(这适用于以下的其他示例)。

在具有向量长度=8的3x3矩阵乘法的示例的上下文中(亦即,m=3,n=2,其中将矩阵的2行封装至第一迭代中的一个向量中及最后一行封装至第二迭代中),以下工作示例示出了此代码如何工作。

取代循环中的值:

因此,我们可看到在外部循环的第一迭代(i=0)中,不是如在先前说明的对照示例中需要独立迭代,而是使用复制元素指令及复制分区指令允许在外部循环的一个迭代中计算结果矩阵的两行c0-c2及c3-c5。复制分区指令在结果向量内复制来自矩阵b的一行的值多次。复制元素指令定义长度m的分段(对应于矩阵行大小),并且在每个分段中复制将乘以矩阵b的对应行中的每个值的矩阵a的单个元素。在三个迭代上,向量处理的给定通道具有三个执行的乘法(例如,针对第一通道的a0.b0、a1.b3、a2.b6),其中选择元素的相应乘法在矩阵a中沿着行方向进行并且在矩阵b中沿着列方向进行以给出针对矩阵c的正确值。在外部循环的第二迭代(i=6)中,计算矩阵c的剩余行。在此示例中,矩阵为方形矩阵(mxm),但应了解,复制元素指令及复制分区指令亦可用以计算其中行长度与列长度为不同的矩阵的乘法。

尽管此示例使用源变换形式的复制分区指令及复制元素指令,替代循环可使用加载复制形式的指令替代,使得亦不需要vecload()指令,或替代地可使用索引生成形式的指令,接着后续向量加载或置换指令。

框架乘以矩阵的乘法

复制分区指令及复制元素指令亦可用于其中数据值的框架内的每个区块将乘以较小矩阵的运算。例如,在核心矩阵[z]与数据[a]的整个框架的每个mxm区块之间可需要执行小维度的mxm矩阵乘法:

在图像/视频处理中框架形成输入数据(例如,源自rgb或灰阶图像)并且核心形成变换矩阵为常见使用情形。这是基于区块的运算,其中输入框架数据的每个子区块乘以核心矩阵以生成输出框架数据。传统向量方法为对每个子区块执行步距矩阵乘法并针对框架数据的宽度及高度运行循环:

在本文中,matrixmultiplication()如上文第13页讨论的传统方法向量化并且将计算每个mxm区块矩阵乘法的结果。在使用复制分区指令及复制元素指令的情况下,不在区块乘以区块的基础上执行矩阵乘法,可转换以上算法以通过将对应于多个mxm区块的数据封装在一起且并行处理多个区块来在框架中的完整行上操作。使用此方法的参考实施方式为:

工作示例为如下(m=3):

因此,i=0迭代计算两个不同mxm矩阵乘法的第一行(针对一个乘法计算行c0-c2并且针对下一个乘法计算行c3-c5)。相似地,i=1迭代计算此等两个mxm矩阵结果的每个的第二行,以及对于行的剩余部分及框架之后续部分依此类推。这可导致在处理整个框架时指令计数的显著减少,其中性能益处取决于向量长度及可在一个寄存器中封装的mxm矩阵行的数量而缩放。

框架乘以框架的矩阵乘法

在图20至图22中示出了进一步示例使用情形。此示例使用复制元素指令而非复制分区指令。如图20所示,可将框架分为多个瓦片,并且这些瓦片可具有不同大小。例如,在图20中的框架的每个部分表示2x2或4x4大小的瓦片。这些瓦片乘以其他框架中的对应瓦片以生成所得框架。此基于瓦片的方法为用于众多视频处理算法。假设具有宽向量寄存器的向量处理引擎,可在向量循环的单个迭代中处理不同大小的多个瓦片。图20至图22考虑了其中具有向量长度vl=6的向量引擎用以执行矩阵乘法的示例。如此示例所示,在相同迭代中完成不同大小(2x2及4x4)的两个相邻瓦片的乘法。注意到,迭代1及2计算上部2x2瓦片t0-t3,并且迭代3及4计算下部2x2瓦片w0-w3(其中未图示的谓词运算用以掩蔽掉向量寄存器v1-v8的一些的适当部分),而全部4个运算计算4x4瓦片u0-u15的部分。使用复制元素运算,与每个向量指令仅可在单个2x2或4x4瓦片上运算的情形相比,运算可利用较少指令完成。

n维数据结构的处理

以上示例讨论了用于处置二维栅格结构的处理的复制分区指令及复制元素指令的使用。然而,其等亦可用于处置三维或n维结构。

具有变化的行大小的栅格的处理

在相同寄存器内支持变化的分区大小的指令变化(诸如针对复制分区指令的图9或针对复制元素指令的图12)可用于支持其他非矩形栅格图案的处理,该非矩形栅格图案包括下列:

·不规则栅格图案(其中每行中的行长度由屏蔽指定)。这用于稀疏矩阵及巣套while循环。

·三角形栅格图案,其中每行具有长度1、2、3、4、…、n(或每行具有长度n、n-1、n-2、…、1)-用于三角形矩阵并且当巣套循环具有依赖循环限制时。

·几何栅格图案,具有随着几何序列缩放的行长度,诸如1、2、4、8、…。这特别用于快速傅立叶变换(fft)或离散子波变换(dwt)算法。

fft

如图23所示,复制分区指令亦可用以针对给定级复制用于fft算法的抚弄因子。当给定级中的抚弄因子的数量小于向量长度时,则抚弄因子可在若干分区中复制并且可经并行处理。例如,在图23中,考虑到8个元素向量,在级2中我们可如下复制抚弄因子:

[w0,w2,-,-,-,-,-,-]->[w0,w2,w0,w2,w0,w2,w0,w2]。

因此,这是复制分区指令可与复制元素指令分开地使用的使用情形的示例。

图24示出了可使用的虚拟机实现。尽管先前描述的实施例关于用于操作支持相关技术的具体处理硬件的装置及方法来实施本发明,亦可能提供硬件设备的所谓的虚拟机实现。这些虚拟机实现在主处理机530上运行,该主处理机运行支持虚拟机程序510的主机操作系统520。通常,需要大型高效处理器以提供按合理速度执行的虚拟机实现,但此方法在某些环境中可为合理的,诸如当需要运行另一处理器本端的代码以获得兼容性时,或出于再使用的原因。虚拟机程序510向应用500提供应用编程接口,该接口与将由真实硬件提供的应用编程接口相同,该实际硬件为通过虚拟机程序510模型化的设备。因此,程序指令(包括上文所述的对存储器存取的控制)可使用虚拟机程序510而在应用500内执行,以模型化指令与虚拟机硬件的互动。

其他示例布置在以下条款中阐述:

(1)一种装置,包括:

处理电路系统,用以对包括多个数据元素的向量执行向量处理操作;以及

指令解码器,用以解码程序指令以控制该处理电路系统来执行这些向量处理操作;

其中,响应于指定分段信息的复制元素指令,该分段信息定义了多个可变大小分段在结果向量内的位置,每个分段包括结果向量的至少一个数据元素并且至少一个分段包括结果向量的多个相邻元素,指令解码器被配置为控制处理电路系统生成结果向量,在该结果向量中,在每个相应分段中,在结果向量的整个该分段中重复重复值,该重复值包括源向量的对应分段的所选数据元素位置处的数据值或包括指示所述所选数据元素位置的元素索引。

(2)如条款(1)所述的装置,其中,分段信息包括分段屏蔽信息,该分段屏蔽信息包括标识在结果向量内的分段的开始或结束的至少一个标记位。

(3)如条款(1)所述的装置,其中,分段信息包括指示每个分段的数据元素的数量的分段大小信息。

(4)如条款(3)所述的装置,其中,复制元素指令的编码将除第一分段或最后分段之外的全部分段限制为具有该相同数量的数据元素。

(5)如条款(1)-(4)中任一项所述的装置,其中,复制元素指令指定了指示每个分段的所选数据元素位置的元素选择信息。

(6)如条款(5)所述的装置,其中,元素选择信息具有编码,该编码将所选数据元素位置限制为对每个分段均相同。

(7)如条款(5)所述的装置,其中,元素选择信息具有编码,该编码分别针对所述多个分段中的每一者标识所选数据元素位置。

(8)如条款(1)-(7)中任一项所述的装置,其中,复制元素指令指定了主动部分信息,该主动部分信息指示包括多个分段的结果向量的主动部分;

其中,响应于复制元素指令,指令解码器被配置为控制处理电路系统生成结果向量,在该结果向量中,在主动部分外部的至少一个数据元素具有预定值或用于存储结果向量的目的地寄存器的对应数据元素的值。

(9)如条款(1)-(8)中任一项所述的装置,其中,响应于指定存储源向量的源寄存器的源变换形式的复制元素指令,指令解码器被配置为控制处理电路系统生成结果向量,在该结果向量中,在每个相应分段中,该重复值包括源向量的对应分段的所选数据元素位置处的数据值。

(10)如条款(1)-(9)中任一项所述的装置,其中,响应于加载复制形式的复制元素指令,指令解码器被配置为控制处理电路系统从数据存储库加载源向量的至少一部分并生成结果向量,在该结果向量中,在每个相应分段中,该重复值包括源向量的对应分段的所选数据元素位置处的数据值。

(11)如条款(1)-(10)中任一项所述的装置,其中,响应于索引生成形式的复制元素指令,指令解码器被配置为控制处理电路系统生成结果向量,在该结果向量中,在每个相应分段中,该重复值包括指示所述所选数据元素位置的元素索引。

(12)一种用于包括处理电路系统的装置的数据处理方法,该处理电路系统用以对包括多个数据元素的向量执行向量处理操作;该方法包括:

解码指定分段信息的复制元素指令,该分段信息定义多个可变大小分段在结果向量内的位置,每个分段包括结果向量的至少一个数据元素并且至少一个分段包括结果向量的多个相邻元素;并且

响应于复制元素指令,生成结果向量,在该结果向量中,在每个相应分段中,在结果向量的整个该分段中重复重复值,该重复值包括源向量的对应分段的所选数据元素位置处的数据值或包括指示所述所选数据元素位置的元素索引。

(13)一种存储虚拟机程序的计算机可读存储介质,该虚拟机程序用于控制计算机来提供对应于如条款(1)至(11)中任一项所述的装置的指令执行环境。

在本申请中,词语“被配置为……”用于表示装置的元件具有能够进行所定义操作的配置。在此上下文中,“配置”表示硬件或软件的互连的布置或方式。例如,装置可具有提供所定义的操作的专用硬件,或处理器或其他处理装置可被编程为执行该功能。“被配置为”不暗示需要以任何方式改变装置元件以便提供所定义的操作。

尽管已在本文中参考所附附图描述了本发明的说明性实施例,应理解,本发明不限于这些精确实施例,且本领域技术人员可在其中实现各种变化及修改而不偏离由所附权利要求书定义的本发明的范围及精神。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1