向量生成指令的制作方法

文档序号:18301878发布日期:2019-07-31 10:15阅读:449来源:国知局
向量生成指令的制作方法

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



背景技术:

一些数据处理系统支持向量指令的处理,对于向量指令,指令的源操作数或结果值是包括多个元素的向量。通过响应于单个指令来支持多个不同元素的处理,可以提高代码密度并减少指令的提取和解码的开销。待处理的数据值的阵列可以通过以下方式更高效地处理:将数据值加载到向量操作数的多个元素中,并使用单个向量指令一次处理多个元素的数据值。



技术实现要素:

至少一些示例提供了一种装置,包括:处理电路,用于执行向量处理操作;以及指令解码器,用于解码向量指令以控制处理电路,以执行由向量指令指定的向量处理操作;其中,指令解码器响应于向量生成指令,该向量生成指令标识标量起始值和包装控制信息,以控制处理电路生成包括多个元素的向量,处理电路被配置为生成向量,使得所述多个元素中的第一元素取决于标量起始值,并且所述多个元素的值遵循规则进行序列(regularlyprogressingsequence),该序列被约束为根据需要进行包装,以确保每个值在由包装控制信息确定的界限内。

至少一些示例提供了一种操作装置的方法,该装置具有处理电路和指令解码器,该处理电路用于执行向量处理操作,该指令解码器用于解码向量指令以控制处理电路,以执行由向量指令指定的向量处理操作,该方法包括:解码向量生成指令,该指令用于标识标量起始值和包装控制信息;响应于该解码,控制该处理电路以生成包括多个元素的向量,处理电路生成向量以使得所述多个元素中的第一元素取决于标量起始值,并且多个元素的值遵循规则进行序列,该序列被限制为根据需要进行包装,以确保每个值都在由包装控制信息确定的界限内。

至少一些示例提供了一种装置,包括:处理装置,用于执行向量处理操作;和指令解码器装置,用于解码向量指令以控制处理装置,以执行由向量指令指定的向量处理操作;指令解码器装置,用于响应于标识标量起始值和包装控制信息的向量生成指令,而控制该处理装置,以生成包括多个元素的向量,该处理装置用于生成向量,使得该多个元素中的第一元素取决于标量起始值,并且多个元素的值遵循规则进行序列,该序列被约束为根据需要进行包装,以确保每个值都在由包装控制信息确定的界限内。

至少一些示例提供了一种虚拟机计算机程序,该计算机程序包括程序指令,该程序指令用于控制主机数据处理装置,以提供与上述装置对应的指令执行环境。

还可以提供一种计算机可读存储介质,该计算机可读存储介质存储虚拟机计算机程序。该存储介质可以是非暂时性存储介质。

附图说明

本技术将仅通过举例的方式,参照如附图中所示的本技术的实施例进行进一步描述,其中:

图1是根据一个实施例的装置的框图;

图2示例性地示出了根据一个实施例的向量生成指令内提供的字段;

图3示例性地示出了根据一个实施例的可以为向量生成指令的特定示例生成的元素向量;

图4是示出根据一个实施例的当执行向量生成指令时执行的处理的流程图;

图5示例性示出了根据一个实施例的由向量生成指令生成的向量可以如何用作向量存取指令的输入,以标识存储器地址空间内的循环缓冲器;

图6是更详细地示出根据一个实施例的图1的向量生成电路的配置的框图;

图7a至图7c示例性示出了根据三个示例性实施例的图6的加法器电路和修改电路的布置;

图8示出了向量指令的交叠执行的示例;

图9示出了在不同处理器实施方式之间或在执行不同的指令示例之间在运行时在连续向量指令之间的交叠量缩放的三个示例;

图10是示例性示出根据一个实施例的可以如何选择性地禁用向量生成指令的包装功能的流程图;

图11示例性示出了根据一个实施例的可以与标量寄存器组相关联地使用的读取存取电路的布置;

图12是根据另一实施例的装置的框图;

图13a和图13b示出了根据所述实施例的图12中所示的标志信息存储器的两个示例性布置;

图14是示出根据一个实施例的在执行向量存储器存取操作时可以如何使用标志信息的流程图;

图15a至图15c示出了可以在所述实施例中使用的标志信息的不同示例性布置;

图16a和图16b是表示根据一个实施例的可以使标志信息无效的指定事件的流程图;

图17至图19是示出根据所述实施例的可用于填充标志信息的不同机制的流程图;以及

图20示出了可以使用的虚拟机实施方式。

具体实施方式

在参照附图讨论实施例之前,提供以下对实施例的描述。

大多数现用的数字信号处理器(dsp)支持某种形式的存储器循环(有时也称为模数)寻址模式。这样的特性很有用,因为其不需要算法来执行边界检查,并允许其他优化。

示例用例是fir滤波器。这是常见的dsp操作,其通过从前面n个结果的加权和来创建新结果。利用线性存储器布置,每次需要处理新的样本块时,需要存取先前的结果。这可以通过将n个最后结果复制到线性缓冲器的开始并从那里进行处理来完成。然而,当采用循环存储器时,不再需要这样的复制步骤,因为处理可以简单地从旧结果开始,并且在到达结束时包装回到缓冲器的开始处。因此,循环缓冲器使得能够以更有效的方式执行这样的操作。

一种用于支持向存储器循环寻址模式的已知方法是在处理器和存储器之间的路径中提供的地址生成单元(agu)内提供附加逻辑。然而,在向量处理系统中,其中可以通过以下方式提高处理效率:将多个数据值加载到向量操作数的各个元素中,并且每次多个元素的方式处理数据值,存储器的存取路径可以成为重要的时序约束,并且因此在该路径中维持额外的逻辑以支持循环寻址操作模式可能是困难的。因此,期望提供一种改进机制,用于在向量处理系统内支持存储器循环寻址。

根据一个实施例,提供了一种装置,该装置具有处理电路和指令解码器,该处理电路用于执行向量处理操作,该指令解码器用于解码向量指令,以控制处理电路以执行由向量指令指定的向量处理操作。指令解码器响应于标识标量起始值包装控制信息的向量生成指令,以控制处理电路来生成包括多个元素的向量。处理电路被配置为生成向量,使得第一元素取决于标量起始值,并且多个元素的值遵循规则进行序列,该序列被约束为根据需要并在需要时进行包装,以确保每个值在从包装控制信息确定的界限内。

这种向量生成指令的使用提供了一种用于生成元素向量的非常有效的机制,该向量随后可以用作后续存储器存取指令的输入操作数,以直接在存储器内实施循环寻址,而无需在存储器存取路径内提供额外的逻辑以支持这种循环寻址。通过在单独指令的整个使用中实施循环寻址模式,这在循环寻址的使用方面、以及可以在系统内使用的循环缓冲器的数量和大小方面提供了很大的灵活性。

根据所述实施例的向量生成指令,不需要将向量操作数作为向量生成指令的输入,并且相反,元素的整个输出向量是参照包装控制信息从输入标量起始值而生成的,该包装控制信息用于确定是否以及何时需要包装从标量起始值生成的规则进行序列,以确保序列中的每个值保持在从包装控制信息确定的界限内。

存在其中可以指定标量起始值的多种方式,但是在一个实施例中,向量生成指令指定提供标量起始值的第一标量寄存器。这为标量起始值的规格提供了很大的灵活性。此外,通过避免需要为指令指定输入向量,这可以减轻在装置内使用向量寄存器的限制,其中通常情况下,向量寄存器是需要最佳使用的稀缺资源。

当使用所述实施例的向量生成指令时,可以进一步优化向量寄存器的利用,因为向量生成指令可以与旨在消耗由向量生成指令生成的元素向量的指令紧密耦合,因此确保由向量生成指令生成的元素向量仅需要保持相对较短的时间段,直到后续指令消耗该元素向量作为源操作数为止。

存在许多方法,在这些方法中可以在向量生成指令中标识包装控制信息。例如,可以使用一个或多个立即值进行指定,但是在一个实施例中,参照寄存器的内容来指定。在此情况下,包装控制信息可以在向量寄存器内指定,但是在一个实施例中,由另一标量寄存器的内容来指定。

包装控制信息用于确定边界,当生成规则进行序列时,该边界内的值需要保留。当包装控制信息可以提供足够的信息以使得能够确定第一界限和第二界限时,在一个实施例中,处理电路使用包装控制信息来确定第一界限,而第二界限是预定的。例如,在一个实施例中,第二界限可以是零值。在这样的实施例中,包装控制信息可以提供用于确定第一界限的大小指示。大小指示可以采用多种形式。例如,其可用于标识由第一界限和第二界限定义的缓冲器的大小,从而使得处理电路能够确定规则进行序列将需要包装的点,以便确保每个值保持在由具有指定缓冲器大小的缓冲器定义的边界内。或者,大小指示可用于标识包装点指示符,以便更直接地标识规则进行序列中的值,这将导致该值包装为逻辑0值(对于规则递增序列而言),或标识此值,当值等于零时包装回此值(对于规则递减序列而言)。

在一个实施例中,可以预先确定规则进行序列中的每个值之间的差异。然而,在可选实施例中,向量生成指令标识调整量,该调整量用于确定规则进行序列中的相邻元素值之间的差异。通过使得能够在向量生成指令内指定调整量,这针对向量的生成提供了显着改进的灵活性,该向量随后适合于实施循环寻址。例如,可以改变调整量以考虑存储器中待存取的数据值的大小,从而使得待生成的元素向量可以容易地用于确定待存取的数据值的地址。

在一个实施例中,由向量生成指令生成的元素向量可以用于直接指定待存取的存储器地址。然而,在一个实施例中,元素向量改为指定偏移,然后将该偏移与基址进行组合以便标识待存取的实际存储器地址。通过生成偏移向量,这提供了进一步增强的灵活性,因为原则上可以使用相同的向量来标识存储器中的多个不同的循环缓冲器,仅通过将该偏移向量与不同的基地址组合。对循环缓冲区数量的唯一限制是可用于存储此种向量偏移的向量数量。此外,原则上可以布置缓冲器,使得它们在需要时交叠。

通过使用元素向量来指定来自基底寄存器的偏移,并且通过允许调整量根据需要变化,上述方法可用于在存储器中定义循环缓冲器,该循环缓冲器原则上可以是任何大小(在一个实施例中,大小被约束为调整量的倍数),并且在存储器中的任何位置。因此,这为循环缓冲器的使用提供了很大的灵活性。

如果需要,可以对向量生成指令设置各种约束。例如,通过将从包装控制信息确定的缓冲器大小约束为调整量的倍数,这可以在执行向量生成指令时简化生成元素向量所需的电路。在一个实施例中,标量起始值也可以被约束为调整量的倍数。通过使用这样的约束,这使得在执行向量生成指令时用于生成元素向量的电路的显著简化成为可能。特别地,检测包装点所需的组件可以使用相等检查电路来实现,而不需要检测大于或小于条件的电路。

此外,如果需要,可以约束缓冲器大小,以便限制在生成向量时可能遇到的潜在包装点的数量。例如,在一个实施例中,缓冲器大小被约束为超过通过将向量中的元素数量乘以调整量而确定的大小值。利用这种约束,可以确保在向量中将最多只发生一次包装。

在一个实施例中,通过解码器电路响应于向量生成指令来控制处理电路以生成所述向量,使得多个元素的值遵循规则递增序列,该序列被约束为根据需要进行包装,以确保每个值在利用包装控制信息确定的界限内。然而,可选地,可以通过解码器电路响应于向量生成指令来控制处理电路以生成该向量,使得多个元素的值遵循规则递减序列,该序列被约束为根据需要进行包装,以确保每个值在利用包装控制信息确定的边界内。通过提供可以检查何时遇到如由包装控制信息所定义的上边界或下边界的电路,可以创建某种向量,该向量的元素遵循正递增序列或负递增序列,以便那些向量可用于标识在任一方向“行走”的循环缓冲器。在一个实施例中,可以定义向量生成指令的两个不同变体,一个导致生成规则递增序列,该递增序列被约束为根据需要进行包装,而另一个用于生成规则递减序列,该递减序列被约束为根据需要进行包装。

所描述的实施例的向量生成指令可以在各种情况下使用。然而,如前所述,特定使用情况可以在存储器内实现循环寻址模式,其中向量生成指令可以与相关向量存储器存取指令耦合。特别地,在一个实施例中,解码器电路可以响应于向量存储器存取指令以控制处理电路,以在存储器中由包括多个地址元素的输入地址向量操作数确定的地址处存取多个数据值。在这样的布置中,该装置可以被配置为执行指令序列,该指令序列包括前面提到的向量生成指令和相关向量存储器存取指令,其中,相关向量存储器存取指令将由向量生成指令生成的向量标识为输入地址向量操作数。通过这种方法,这确保了在存储器内的循环缓冲器内存取多个数据值。

在一个特定实施例中,相关向量存储器存取指令标识基址,该基址提供循环缓冲器的起始地址,并且输入地址向量操作数将地址偏移向量指定为多个地址元素,该向量将与基址组合以便标识待存取的每个地址。如前所述,这种方法为循环缓冲器在存储器中的位置提供了很大的灵活性,因为循环缓冲区的位置由基址确定,其中由向量生成指令生成的元素向量然后用于标识序列,在该序列中,数据值在参照此基址而标识的循环缓冲器内被存取。

在一个实施例中,向量指令的执行可被分为被称为“节拍”的部分,其中,每个节拍对应于预定大小的向量的部分的处理。节拍是向量指令的原子部分,其被完全执行或根本不执行,并且不能部分执行。向量中在一个节拍中处理的部分的大小可由架构定义,并且可以是向量的任意部分。

在一个这样的实施例中,响应于给定的向量指令,处理电路被配置为执行多个处理节拍,每个节拍对应于向量值的部分,并且处理电路被配置为支持交叠执行所述向量生成指令和所述相关向量存储器存取指令,其中,相关向量存储器存取指令的第一节拍子集与向量生成指令的第二节拍子集并行执行。通过启用向量生成指令和相关向量存储器存取指令的交叠执行,这可以提供显著的性能改进。

虽然向量生成指令允许在生成元素向量时支持包装行为,但是在一个实施例中,可以选择性地禁用包装行为。特别地,在一个实施例中,指令解码器响应于在解码向量生成指令时检测到的特定条件,以禁止处理电路对包装控制信息的使用,使得处理电路被配置成生成向量,使得所述多个元素中的第一元素取决于标量起始值,并且多个元素的值遵循规则进行序列而不受任何包装约束。因此,在遇到指定条件时,向量生成指令可用于生成向量,该向量的元素遵循规则进行序列,无论是规则递增序列还是规则递减序列。这为使用向量生成指令提供了额外的灵活性。

指定条件可以采用各种形式,但是在一个实施例中,当使用保留值来标识向量生成指令内的包装控制信息时,检测到指定条件。因此,这有效地标识包装控制信息为无效。保留值可以采用多种形式。例如,在一个实施例中,保留值可以是不允许的立即值,而在可选实施例中,保留值可以采用被标识以用于包装控制信息的预定寄存器的形式,该预定寄存器是无法有效用于提供包装控制信息的寄存器。

在一个实施例中,标量起始值和包装控制信息是参照由装置提供的标量寄存器组内的标量寄存器而在向量生成指令内标识的。在一个特定实施例中,为了在执行指令时减少对所需信息的存取时间,用于标识标量起始值和包装控制信息的标量寄存器的选择受到约束。例如,在一个实施例中,用于标识标量起始值和包装控制信息的第一标量寄存器和第二标量寄存器的规格分别受到约束,使得第一标量寄存器选自该组标量寄存器中的第一组标量寄存器,该第一组标量寄存器与选出第二标量寄存器的该组标量寄存器中的第二组寄存器不交叠。通过以这种方式约束第一标量寄存器和第二标量寄存器的选择,用于存取标量寄存器组的存取电路可被配置以便:能够利用较少的读取端口同时存取第一标量寄存器和第二标量寄存器的内容,或者将寄存器文件分成两个独立的存储体,从而在硬件和可能在面积方面以较低的成本产生对两个寄存器的存取。

在一个实施例中,可以控制处理电路通过迭代地执行步骤序列来生成多个元素中的每个元素,以生成向量生成指令所需的向量。然而,在可选实施例中,可以并行化该过程,以便能够并行生成多个元素,从而提高性能。特别地,在一个实施例中,处理电路包括加法器电路和修改电路,该加法器电路用于使用从标量起始值和规则进行调整值序列导出的输入值,生成针对该向量的多个候选元素,该修改电路用于从每个候选元素生成输出元素,以用于包含在该向量内。对于每个候选元素,修改电路被配置为确定是否存在包装条件,并且在存在该包装条件的情况下基于包装控制信息来执行算术运算以修改候选元素,以便生成输出元素,以及以其他方式使用未修改的候选元素作为输出元素。

通过这种方法,可以并行执行多个计算。实际上,如果需要,可以配置加法器电路和修改电路,以便能够并行生成向量的所有元素。或者,可以使用较小尺寸的加法器电路和修改电路,允许并行确定多个元素,并且通过加法器电路和修改电路实施附加迭代以计算向量所需的任何剩余元素。

在一个特定实施例中,解码器电路响应于向量生成指令来控制处理电路以生成向量,使得多个元素的值遵循规则递减序列,该递减序列受约束为根据需要进行包装,以确保每个值在由包装控制信息确定的边界内,并且加法器电路包括单独加法器块,以通过从输入值中减去调整值中的相关一个来生成每个候选元素。来自每个加法器块的进位输出(carryout)信号用于确定相关候选元素是否存在包装条件。因此,在这样的实施例中,可以显著简化修改电路,因为可从来自每个加法器块的进位输出信号直接推断出是否存在包装条件的决定。这避免了需要在修改电路中包括更复杂的比较电路,以检测何时存在包装条件。

在一个实施例中,当向量生成指令的执行导致生成其中遵循规则递增序列的多个元素再次受约束为根据需要进行包装的向量时,可以采用类似的原理。特别地,在一个实施例中,通过从标量起始值中减去从包装控制信息导出的上界限值,以从标量起始值导出输入值。加法器电路包括单独加法器块,用于通过将调整值中的相关一个添加到输入值来生成每个候选元素,并且来自每个加法器块的进位输出信号用于确定相关候选元素是否存在包装条件。

因此,在该实施例中,通过实施从标量起始值减去上界限值的初始减法来修改输入值。通过执行该初始减法,当加法器电路然后用于将调整值中的相关一个添加到输入值时,来自每个加法器块的进位输出信号可以再次用于确定是否存在包装条件。在存在包装条件的情况下,修改电路然后将修改候选元素。因此,通过适当调整输入值,即使在产生规则递增序列时,也可以保持通过使用进位输出信号实现的修改电路的简化。

在一个实施例中,在存在包装条件的情况下,修改电路被配置为执行将从包装控制信息导出的上界限值添加到候选元素的加法作为该算术运算以便生成输出元素。因此,在其中处理电路生成规则递增序列或规则递减序列的两种情况下,修改电路可以以相同方式进行配置,以便当设置进位输出信号时,将从包装控制信息导出的上界限值添加到相关候选元素。

现在将参考附图来描述特定实施例。

图1示例性地示出了支持向量指令的处理的数据处理装置2的示例。应当理解,这是为了便于解释的简化图,并且在实践中该装置可以具有许多元件,为了简明起见,在图1中未示出。装置2包括处理电路4,用于响应于由指令解码器6解码的指令来执行数据处理。程序指令从存储器系统8取出并由指令解码器进行解码以生成控制信号,该控制信号控制处理电路4以由架构定义的方式处理指令。例如,解码器6可以解释解码指令的操作码和指令的任何附加控制字段以生成控制信号,该控制信号使处理电路4激活适当的硬件单元以执行如下操作,例如算术运算、加载/存储操作、或逻辑运算。该装置具有一组标量寄存器10和一组向量寄存器12。其还可以具有其他寄存器(未示出),以用于存储用于配置处理电路的操作的控制信息。响应于算术或逻辑指令,处理电路通常从寄存器10、12读取源操作数,并将指令的结果写回寄存器10、12。响应于加载/存储指令,数据值被由加载/存储单元18在寄存器10、12与存储器系统18之间传送,该加载/存储单元18位于处理电路4内。存储器系统8可以包括一级或更多级高速缓存和主存储器。

标量寄存器组10包括多个标量寄存器,用于存储包括单个数据元素的标量值。指令解码器6和处理电路4支持的一些指令可以是标量指令,该标量指令处理从标量寄存器10读取的标量操作数以生成标量结果,该标量结果写回标量寄存器。

向量寄存器组12包括多个向量寄存器,每个向量寄存器被配置为存储包括多个元素的向量值。响应于向量指令,指令解码器6可以控制处理电路4对从向量寄存器12中的一个读取的向量操作数的各个元素执行多个向量处理路径,以生成待写入标量寄存器10的标量结果或待写入向量寄存器12的另一向量结果。一些向量指令可以从一个或多个标量操作数生成向量结果,或者可以对标量寄存器文件中的标量操作数执行附加标量运算,以及对从向量寄存器文件12读取的向量操作数执行向量处理路径。因此,一些指令可以是混合的标量向量指令,其中指令的一个或多个源寄存器和指令的目的寄存器中的至少一个是向量寄存器12,并且一个或多个源寄存器和目的寄存器中的另一个是标量寄存器10。

向量指令还可以包括向量加载/存储指令,该指令使得数据值在向量寄存器12和存储器系统8中的位置之间传送。加载/存储指令可以包括连续的加载/存储指令、或分散/收集类型向量加载/存储指令,加载/存储指令在存储器中的位置对应于连续的地址范围,该分散/收集类型向量加载/存储指令指定多个离散地址,并控制处理电路4将来自那些地址中的每一地址的数据加载到向量寄存器的相应元素中,或者将来自向量寄存器的各个元素的数据存储到离散地址。

处理电路4可以支持向量的处理,该向量具有不同数据元素大小的范围。例如,128位向量寄存器12可以被划分为16个8位数据元素、8个16位数据元素、4个32位数据元素、或2个64位数据元素。控制寄存器可以用于指定当前正在使用的数据元素大小,或者可选地,这可以是待执行的给定向量指令的参数。

处理电路4可以包括多个不同的硬件块,以用于处理不同类别的指令。例如,与存储器系统8交互的加载/存储指令可以由专用加载/存储单元18处理,而算术或逻辑指令可以由算术逻辑单元(alu)处理。alu本身还可以划分为乘法累积单元(mac)和另一单元,该mac用于执行涉及乘法的运算,该另一单元用于处理另一种alu运算。还可以提供浮点单元来处理浮点指令。与向量指令相比,不涉及任何向量处理的纯标量指令也可以由单独的硬件块处理,或者重新使用相同的硬件块。

如将参考其余附图更详细地讨论的,根据一个实施例,在处理电路4内提供向量生成电路16,该向量生成电路16被配置为执行向量生成指令所需的操作,该向量生成指令可包括在由装置2执行的指令序列中。向量生成电路16可在处理电路4内包含专用块,或者可以包含在诸如alu的其他电路块中的一个电路块内。

根据本文描述的一些实施例,可以定义新类型的向量生成指令,该指令标识标量起始值和包装控制信息。当由指令解码器6解码这样的指令时,将控制信号发送到处理电路4,以使向量生成电路16生成包括多个元素的向量,并且然后该生成的向量通常存储在向量寄存器12中的一个内。向量生成电路16被配置为生成向量,使得向量中的第一元素取决于标量起始值,并且然后多个元素的值遵循规则进行序列,该规则进行序列受约束为根据需要进行包装,以确保每个值在从包装控制信息确定的界限内。规则进行序列可以是规则递增序列或规则递减序列,并且在一个实施例中,规定向量生成指令的不同变体以用于递增序列和递减序列。

元素的这种生成向量可用于多种情况。然而,这种向量非常有用的一个特定使用情况是作为前面提到的向量收集/分散加载/存储指令的输入操作数。特别地,在一个实施例中,由向量生成指令生成的向量可以用作偏移向量,该偏移向量被提供作为用于导致执行收集/分散操作的这种向量加载/存储指令的输入操作数。这些指令通常还接收指定基址的标量输入,并且偏移向量然后用以生成参照该基址在存储器中存取的地址中的每个地址。虽然这种向量加载或存储指令可用于存取存储器内的任意一组地址,但是当使用由上述向量生成指令生成的偏移向量时,这使得能够标识位于存储器内的循环缓冲器内的地址序列。因此,这种机制提供了非常有效的技术,用于在存储器中采用循环寻址模式,而不需要在存储器存取路径中增加额外的电路,并且因此避免了这种额外的电路将在该路径中引入的潜在性能影响。这在向量处理系统中提供了显著的益处,在此系统中,存储器存取路径通常是系统内的关键定时路径。

还如图1所示,如果需要,可以提供节拍控制电路20以控制指令解码器6和处理电路4的操作。具体地,在一些实施例中,向量指令的执行可被分为被称为“节拍”的部分,其中,每个节拍对应于预定大小的向量的部分的处理。如下文将参照图8和图9更详细地讨论的,这可以允许向量指令的交叠执行,从而提高性能。

图2是示例性地示出可以在上述类型的向量生成指令内提供的字段的图。特别地,指令50可以包括指定指令的操作码的第一字段52。这可以用于标识此指令是向量生成指令,并且还可以用于标识不同的指令变体,例如递增变体或递减变体。在一个特定实施例中,向量生成指令的递增变体被称为向量递增和包装复制(viwdup)指令,而递减版本被称为向量递减和包装复制(vdwdup)指令。“复制”引用仅用于标识:为每一向量元素确定的值是从标量种子值导出的,在这种情况下每一元素的实际值是前面元素值的递增或递减版本,使用从标量种子值导出初始元素值。

在一个实施例中,在指令内提供大小信息字段53以标识向量内的数据值的大小。特别地,在处理电路允许在向量内处理不同大小的数据值的情况下,则这样的字段可以用于标识当前指令所涉及的特定数据值大小。在可选实施例中,可能不需要这样的大小信息,因为可预订数据值大小。

目标向量寄存器字段54标识向量寄存器(例如,在图2中称为寄存器qd),其中通过执行指令而生成的元素向量将被写入该向量寄存器。字段55提供标量起始值,在一个实施例中,参照标量寄存器(在图2的示例中,被称为标量寄存器rn)中的一个来标识标量起始值。

还提供包装控制信息字段56以标识包装信息,该包装信息用于标识界限,即,值的规则递增序列或规则递减序列将需要包装时所在的点。在一个特定实施例中,包装控制信息用于确定第一界限,并且第二界限是预定的。更具体地,在一个实施例中,假设第二界限是零值。在这样的实施例中,包装控制信息可以诸如提供大小信息,在本文中称为缓冲器大小或“bufsize”,并且假定第二界限是预定的,这使得能够标识第一界限的值。包装控制信息可以被指定为指令内的立即值,或者反之可以参照寄存器来标识,该寄存器为标量寄存器10中的一个或向量寄存器12中的一个。在一个实施例中,由另一标量寄存器指定包装控制信息,并且在图2的示例中,该标量寄存器被称为标量寄存器rm。

在一个实施例中,经过向量处理的数据值可以具有预定大小,但是在可选实施例中,数据值大小可以改变,使得当执行一些指令时,假设数据值具有第一大小,而在执行其他指令时,假设数据值具有不同大小。在支持不同数据值大小的实施例中,则向量生成指令50可以包括调整量字段57,在一个实施例中,该字段被指定为立即值,但是该字段可替换地由寄存器的内容来指定。当执行指令时,调整量将确定每个元素在规则进行序列内增加或减少的量。如前所述,在一个实施例中,由向量生成指令生成的向量将用作后续向量加载或存储指令的地址偏移向量,并且因此可以根据数据值的大小来设置调整量,该数据值将由后续向量加载或存储指令存取。例如,在一个实施例中,如果随后将被存取的数据值是字节大小数据值,则调整量将被设置为1,如果数据值是16位实体,则调整量将被设置为2,并且如果数据值是32位实体,则调整量将被设置为4。

参照图3的特定示例更详细地示出在执行向量生成指令时生成元素向量的方式。在该示例中,假设向量生成指令是viwdup指令,即递增变体。如图3所示,逻辑缓冲器70标识有第二界限和第一界限,该第二界限假设具有零值,该参照缓冲器大小80标识第一界限。标量起始值75标识该逻辑缓冲器中的特定点,此点用作起始值。在图3所示的示例中,假设缓冲区大小为16,即16字节,并且假设向量长度是128位。缓冲器大小已选择为相对较小仅仅是为了说明,因为这有助于说明图3所示的三个示例中每个示例的操作的包装行为。实际上,缓冲器大小可显著更大,使得当生成任何特定向量示例时,包装的出现次数将会减少。

如示例1所示,假设调整量被设置为1,即指示关联数据值大小是8位,并且标量起始值被设置为9,这导致示例1中所示的向量的生成,示例1包含16个条目,每个8位大小数据值具有一个条目。可以看出,向量内的元素遵循规则递增序列,但是在值将增加到第一界限值的点处包装,在该点处序列返回到零,并且然后增大。

示例2示出了调整量被设置为2的情况,即,标识关联数据值的大小为16位。假设在这种情况下标量起始值是10,并且这导致生成图3中所示的具有8个元素的向量,128位向量内的16位大小的数据值中的每一个具有一个元素。同样,包装点将在该值原本将递增至第一界限值的位置出现,但随后被包装回到逻辑零值。

示例3示出了调整量被设置为4的示例,指示数据值大小是32位。在此示例中,初始标量起始值为8,并且这导致生成图3中所示的元素向量,其中向量中有四个元素,128位向量内的32位数据值中的每一个具有一个元素。再次,可以看出包装发生在适当的点。

使用特定指令生成这种类型的向量在存储器中的循环缓冲器的规格方面提供了很大的灵活性。原则上,这种循环缓冲器可以具有任何大小,并且处于存储器内的任何位置,并且实际上如果需要,可以定义在存储器地址空间内交叠的多个缓冲器。

在一个实施例中,可以对缓冲器大小和标量起始值的规格施加许多约束,以便简化实现向量生成操作所需的电路。例如,在一个实施例中,缓冲器大小可以受约束为调整量的倍数。此外,如果需要,可以将标量起始值约束为调整量的倍数。对于图3中所示的三个示例,可以看出这两个约束已经到位。通过使用这样的约束,在至少一些实施例中,用于检测包装点所需的电路可以使用相等检查电路来实现,而不需要检查大于或小于条件的电路。

当执行viwdup或vdwdup指令时实现的功能可说明如下:

参照图4的流程图更详细地讨论上述功能。在步骤100处,执行具有包装功能的向量生成指令,之后在步骤105处,读取标量寄存器rn以获得初始偏移,即,标量起始值。此外,在步骤110处,读取标量寄存器rm以获得缓冲器大小信息。此后,在步骤115处,将变量“e”设置为等于零,并且然后在步骤120处,将结果向量寄存器内的第e个元素设置为等于当前偏移值。然后,后续执行步骤取决于执行的向量生成指令是递增版本还是递减版本。

如果在步骤125处确定其为递增版本,则在步骤130,偏移以立即值(即调整量)递增,之后在步骤135处,确定偏移目前是否等于缓冲器大小。如果是,则在进行到步骤145之前,在步骤140处将偏移重置为零,而如果不是,则过程直接进行到步骤145。在步骤145处,确定e的值是否已达到最大值,这取决于预定长度的向量内的数据值的数量(根据数据值大小确定)。如果e尚未达到最大值,则在该过程返回到步骤120之前,e在步骤150处递增。

如果在步骤125处确定正在执行的指令是递减版本,则在步骤155处确定偏移当前是否等于零。如果是,则在步骤160处将偏移调整为等于从缓冲器大小减去立即值的值。然而,如果在步骤155处未确定等于零,则在步骤165处,将偏移以立即值递减。在步骤160或165之后,过程继续进行到步骤145。

一旦在步骤145处确定e已达到其最大值,则将生成向量的所有元素,并且因此结果向量qd将包含所需的多个元素。然后,该过程进行到步骤170,其中,在一个实施例中,更新寄存器rn内的偏移值。步骤170是可选的,但是如果要迭代地执行向量生成指令时可能是有用的,例如在循环体内,因为在下一次迭代中,寄存器rn然后将已包含此下一迭代的适当起始值。

作为图4中所示方法的替代,在一些实施例中,可以在每次迭代期间更新标量寄存器rn。因此,在该实施例中,可以认为框170位于始于步骤145的“否”路径内。在确定e等于其最大值的最终迭代之后,然后该过程将遵循“是”路径,并将再次按照图4所示的每个程序更新寄存器rn的内容。

虽然在一个实施例中,源寄存器rm指定缓冲器大小,但在可选实施例中,它可以通过提供等于用缓冲器的大小减去立即值的值来直接指定包装点值。在这种配置中,viwdup指令的先前所述功能变为如下:

该方法可以潜在地降低硬件要求,并且将能够与偏移递增并行地执行确定是否包装。

vdwdup指令的相应功能如下:

vdwdup.<size>qd,rn,rm,#immimm限制为{1,2,4,8}

offset=rn;//rn规定当前偏移

wrap=rm;//rm规定缓冲器大小(单位:字节)-imm

fore=0...n

qd[e]=offset;

ifoffset==0^offset=wrap;

else^offset=offset-imm;

rn=offset;

图5示出了可以如何将以上述方式生成的元素向量用作向量存储器存取指令的输入操作数。特别地,在图5的示例中,假设向量存储器存取指令是向量加载指令,该指令被配置为以从存储器中由地址偏移向量qm规定的位置执行数据值的收集。然后,将得到的数据值作为元素存储在结果向量qd内。标量寄存器rn在存储器中包含基址,该基址与偏移向量组合以标识待存取的各个地址。与向量生成指令一样,向量存取指令可以包括大小字段以标识正在处理的数据值的大小。

虽然这种向量加载指令可用于从存储器中的任意地址收集数据值,但当向量源寄存器qm被设置为通过执行viwdup或vdwdup指令而生成的向量时,则将理解,存取的地址实际上对应于存储器中的循环缓冲器。因此,如果我们考虑到以下情况:例如由先前的viwdup指令生成的元素向量如图5中的元素200所示,即与前面讨论的图3的示例3中的结果相同,其中向量的长度为128位,并且数据值为32位数据值,则如图5所示,将在存储器地址空间内存取循环缓冲器,其中,该循环缓冲器的起始位置取决于寄存器rn内提供的标量值。因此,如果该标量值具有第一值205,则循环缓冲器采用元素210所示的形式,而如果在另一示例中标量值具有值215,则循环缓冲器由元素220示出。因此,这种方法对于在存储器地址空间内定义循环缓冲器的位置提供了很大的灵活性。当使用偏移向量200时,则从相关循环缓冲器中检索数据,并将其存储在结果向量寄存器qd中以采用图5中所示的形式225。

虽然如前面参照图4所讨论的,当执行viwdup或vdwdup指令时实施的功能可以实现为迭代序列,其中在每次迭代中生成向量的一个元素,在一些实施例中,可以布置向量生成电路,以便能够并行生成多个元素。

图6是示出向量生成电路的一种这种配置的框图。在该示例中,提供加法器电路250,该加法器电路在一个实施例中可以包含多个单独加法器块,每个加法器块被布置为生成输出向量的候选元素。然后提供修改电路260,该修改电路具有对应于每个加法器块的单独修改块,每个修改块根据是否检测到候选元素的值的包装条件,选择性地修改由相应的加法器块输出的候选元素。加法器电路接收标量起始值250和多个立即值倍数。修改电路260接收包装控制信息。

在一个实施例中,加法器电路250和相关修改电路260都可以包含足够的块以使得能够并行地计算向量的所有元素的值。或者,对于至少一些数据值大小,加法器电路和修改电路可能没有足够的块来并行计算所有元素的值,但是可以将所有元素的值计算为通过加法器电路和修改电路的两次或多次的结果。

在图6所示的示例中,假设向量具有m个元素,并且加法器电路250和修改电路260可以并行地生成向量的所有元素。

图7a示出了在处理viwdup指令(即指令的递增版本)时使用的图6的向量生成电路16的一个示例性形式。在这种情况下,加法器电路包括加法器块300、302、304、306序列,每个加法器块具有相关的立即值倍数和当前偏移,即标量起始值。应当理解,所需的加法器块的数量(假设向量的所有元素将并行生成)取决于数据值大小。对于前面参照图3讨论的三个示例,将明白,待生成的向量将具有四个元素、八个元素或十六个元素,这取决于数据值大小(并且假设向量长度为128位),并且因此,序列中的最终加法器306将接收对应于立即值三倍、立即值七倍或立即值十五倍的第二输入。

在一个实施例中,可以提供具有16个加法器块和16个修改块的单个向量生成电路,并且在并非所有块都为必需的情况下,可以关闭某些块。因此,当生成具有四个元素的向量时,将仅需要激活四分之一的块,当生成具有八个元素的向量时,将需要激活一半块,并且在生成具有16个元素的向量时,将激活所有块。

然后,每个加法器块300将指定倍数的立即值添加到当前偏移,以便生成候选元素,将该候选元素作为一个输入转发到修改电路260内的相关比较块310、312、314、316。在该示例性实施例中,每个比较块的另一输入是缓冲器大小值。然后,每个比较块确定来自相关加法器块的输出是否大于或等于缓冲器大小。此外,它计算一值,该值相当于由相关加法器块接收的输入减去缓冲器大小的值(在图7a中表示为“a-b”)。然后,每个多路复用器电路320、322、324、326接收来自相关加法器块的输出和来自相关修改块的“a-b”输出,并且根据由比较块执行的比较的输出而被控制。因此,如果确定加法器的输出不大于或等于缓冲器大小,则从相关多路复用器输出来自加法器的输出,而如果确定来自加法器的输出大于或者等于缓冲器大小,然后从多路复用器输出来自修改块的输出,即对应于由从相关加法器块输出的值减去缓冲器大小的输出。

图7b中示出了在一个实施例中可用于执行vdwdup指令所需的操作的电路的示例。再次,提供一系列加法器块330、332、334、336,并且这些加法器块再次接收当前偏移作为一个输入,并且接收立即值倍数作为另一输入。然而,在该示例中,所接收的倍数是立即值的负数倍,使得加法器执行用当前偏移值减去立即值倍数的减法。将来自加法器块的输出转发到修改电路上,并且此外,进位输出信号也传播到修改电路上。在该示例中,修改电路不需要包括比较块,但是反之可以包括另外的加法器块340、342、344、346,其接收来自相关加法器块330、332、334、336的输出作为一个输入,并且接收缓冲区大小信息作为第二输入。然后,另外的加法器块中的每一个将缓冲器大小值加到来自加法器块的输出,并将该值作为第二输入提供给相关多路复用器350、352、354、356,每个多路复用器的第一输入是来自加法器电路250的加法器块330、332、334、336的输出。如果来自加法器块330、332、334、336中任意一个的输出是负值,则进位位将指示此情况,并且此情况可以用于相应地控制多路复用器,使得如果进位位指示负值,则多路复用器选择来自相关修改电路块340、342、344、346的输出,而不是来自加法器块330、332、334、336的原始输出。

从图7a和图7b的上述比较可以看出,当实施vdwdup指令时使用的电路可以通过使用来自加法器的进位信号而显著简化,从而避免了对比较电路的需要。图7c示出了在实施viwdup指令时可以使用的电路的可选布置,其还使得能够使用进位信号,从而避免比较电路。如图7c所示,加法器块360、362、364、366中的每一个如根据图7a的示例性电路接收当前偏移和立即值倍数,但另外接收第三输入“-bufsize”。结果,这有效地使得加法器在开始时由当前偏移减去缓冲器大小,并且结果是来自加法器的一些输出将可能是负的,这将通过进位位信号而指示。组件370、372、374、376对应于图7b的组件340、342、344、346。对于任何负的输出,相关多路复用器380、382、384、386将选择来自组件370、372、374、376的调整输出,而非来自加法器块360、362、364、366的原始输出。

因此,当采用图7c的电路时,可以非常有效地实施viwdup指令的执行,以便并行地生成向量元素,而不需要比较电路。通过使用一行全加器将三个输入“减少”到两个加数以输入进位传播加法器,添加三个数而不是两个数在加法器360、362、364、366内易于适应。

此外,应该注意,可以使用相同的电路来执行vdwdup操作,仅将“-bufsize”输入设置为零,并且配置减去而非加上立即值倍数。

在诸如数字信号处理(dsp)的一些应用中,可能存在大致相等数量的alu和加载/存储指令,并且因此诸如mac的一些大块可以在相当长的时间内保持空闲。在执行资源与向量路径数量一起缩放以获得更高的性能时,这种低效率可能会在向量架构上加剧。在较小的处理器上(例如,单次发出,依序核心),完全缩放的向量流水线的面积开销可能是禁止的。最小化面积,同时使可用执行资源的利用率更佳的一种方法是交叠指令的执行,如图8所示。在该示例中,三个向量指令包括加载指令vldr、乘法指令vmul和移位指令vshr,并且所有这些指令可以同时执行,即使这些指令之间存在数据依赖。这是因为vmul的元素1仅依赖于q1的元素1,而非整个q1寄存器,因此可以在vldr的执行已结束之前开始vmul的执行。通过允许指令交叠,像乘法器这样的昂贵块可以保持活动达更长时间。

因此,可能期望使得微架构实施方式与向量指令的执行交叠。但是,如果架构假定存在固定的指令交叠量,那么尽管这可以在微架构实施方式实际上匹配架构采用的指令交叠量时提供高效率,但是其可在按比例缩放到不同的微架构时导致问题,该微架构使用不同的交叠或根本不交叠。

相反,架构可以支持一系列不同的交叠,如图9的示例所示。向量指令的执行被分为被称为“节拍”的部分,其中每个节拍对应于预定大小的向量的部分的处理。节拍是向量指令的原子部分,其完全执行或完全不执行,并且不能部分地执行。向量的在一个节拍中处理的部分的大小由架构定义,并且可以是向量的任意部分。在图9的示例中,节拍被定义为对应于向量宽度的四分之一的处理,使得每个向量指令有四个节拍。显然,这只是一个示例,并且其他架构可能使用不同的节拍数量,例如,两个或八个。向量的对应于一个节拍的部分可以与正在处理的向量的元素大小是相同大小、大于或小于该元素大小。因此,即使元素大小在不同实施方式之间变化,或在运行时在不同指令之间变化,节拍是向量处理的某个固定宽度。如果正在处理的向量的在一个节拍中的部分包括多个元素,则可以在各个元素之间的边界处禁用进位信号,以确保每个元素独立地处理。如果向量在一个节拍中处理的部分仅对应于元素的部分,并且硬件不足以并行计算多个节拍,则在一个处理节拍期间生成的进位输出可输入作为向随后的处理节拍的进位输入,以使得这两个节拍的结果共同形成元素。

如图9所示,处理电路4的不同微架构实施方式可以在抽象架构时钟的一次“滴答”中执行不同数量的节拍。这里,一次“滴答”对应于架构状态前进单元(例如,在简单架构上,每次滴答可以对应于更新与执行指令相关联的所有架构状态的示例,包括更新程序计数器以指向下一指令)。本领域技术人员将理解,诸如流水线的已知微架构技术可能意味着单次滴答可能需要多个时钟周期以在硬件级别执行,并且实际上硬件级别的单个时钟周期可以处理多个指令的多个部分。然而,这种微架构技术对于软件是不可见的,因为滴答在架构级别是原子的。为了简明起见,在本公开的进一步描述期间忽略了这种微架构。

如图9的下方示例所示,一些实施方式可以通过提供足够的硬件资源来在一次滴答内并行处理所有节拍,而向量指令的四个节拍全部安排在同一次滴答中。这可能适用于更高性能的实施方式。在这种情况下,架构级别在指令之间不需要任何交叠,因为整个指令可以在一个滴答中完成。

另一方面,面积效率更高的实施方式可以提供更窄的处理单元,该单元每次滴答尽可处理两个节拍,并且如图9的中间示例所示,指令执行可以与第二向量指令的第一节拍和第二节拍交叠,该第一节拍和第二节拍与第一指令的第三节拍或第四节拍并行执行,其中那些指令在处理电路内的不同执行单元上执行(例如,在图9中,第一指令是提供向量生成电路的在单元内执行的向量递增和包装指令,并且第二指令是使用加载/存储单元执行的加载指令)。

又一更有能量/面积效率的实施方式可以提供硬件单元,该硬件单元更窄并且一次只能处理一个节拍,并且在这种情况下,每次滴答可以处理一个节拍,其中,指令执行诸如由两个节拍而交叠和交错,如图9的顶部示例所示。

应当理解,图9中所示的交叠仅仅是一些示例,并且其他实施方式也是可能的。例如,处理电路4的一些实施方式可以支持在相同滴答中并行双重发出多个指令,以使存在更大的指令吞吐量。在这种情况下,在一个循环中一起开始的两个或多个向量指令可以具有一些与在下一循环开始的两个或多个向量指令交叠的节拍。

改变实施方式之间的交叠量以按比例缩放至不同的性能点亦是如此,向量指令之间的交叠量也可以在运行时在程序内的向量指令的不同执行示例之间改变。因此,处理电路4和指令解码器6可以参照节拍控制电路20,如图1所示,节拍控制电路20用于控制相对于先前指令而执行给定指令的时序。这给予微架构选择不在某些更难以实施或者取决于指令可用资源的拐角情况下交叠指令的自由。例如,如果存在给定类型的背对背指令(例如,乘法累积),该指令需要相同资源并且所有可用mac或alu资源正在被另一指令使用,则可能没有足够的空闲资源以开始执行下一指令,并且因此,第二指令并非交叠,而是可能等到第一指令已经完成时才发出。

因此,从图9的上述描述可以看出,关于如何执行向量生成指令和相关存储器存取指令存在很大的灵活性,但是这些指令可以紧密耦合以使向量存储器存取指令相对快速地消耗由向量生成指令生成的向量。这可能很有用,因为向量寄存器的数量通常是稀缺资源,并且因此由于不需要将向量生成指令生成的向量长时间保留在向量寄存器中,这可以释放向量寄存器资源。向量生成指令本身的形式也有助于实现这一好处,因为不需要向量操作数作为向量生成指令的源操作数,并且反之,向量生成指令从立即值或标量寄存器获取其输入。

在一些实施例中,可以选择性地禁用由向量生成指令提供的包装功能,并且这以示例方式参照图10的流程图进行说明。具体地,在步骤400处,执行向量生成指令,并且在步骤405处,确定标量寄存器rm(即,指定包装控制信息的寄存器)是否被设置为保留值。例如,标量寄存器中的一个或多个可能不是有效标量寄存器来指定这种包装控制信息,并且因此通过将寄存器rm设置为这些寄存器中的一个,这标识了包装功能将被禁用。在一个特定示例中,这可以通过将程序计数器寄存器指定为寄存器rm来实现。如果寄存器rm没有指定保留值,则如步骤410所示,该过程照常继续,例如实施先前描述的图4的过程。但是,如果寄存器rm是保留值,则在步骤415处禁用包装,并且在步骤420处向量生成电路使用偏移和立即值(即调整量)生成值的递增或递减序列,但是不受任何包装约束。这可以在使用viwdup和vdwdup指令时提供额外的灵活性(该指令在包装禁用变体中可以被称为vidup和vddup指令)。

通过约束标量寄存器rm和rn的规格可以实现更多性能和效率益处。特别是,如果一个标量寄存器被限制在第一组标量寄存器内,该第一组标量寄存器未与选出另一标量寄存器的标量寄存器组交叠,则可能可以使用标量寄存器文件10的读取存取电路同时存取两个寄存器的内容,如果寄存器没有以这种方式受到约束,则读取端口的数量将少于所需数量,或者将寄存器文件分成两个独立的存储体。这在图11中示意性地示出,其中,两组是偶数和奇数寄存器。因此,所有偶数寄存器r0455、r2465等都在一个组内,并且所有奇数寄存器r1460,r3470等都在另一组内。如果标量起始值受约束以由这些组中的一个组内的寄存器来指定,而包装控制信息由另一组内的寄存器来指定,则如图11中的读取存取电路450所示,有可能使用来自多路复用器475和480的输出来通过单个读取端口存取奇数寄存器和偶数寄存器的内容。这是通过在其输入到最终多路复用器485之前触发这些值来实现的,如果需要,最终多路复用器485仍然允许读取单个寄存器输出。

虽然在图11中针对偶数寄存器组和奇数寄存器组来示出示例,但是更一般地,通过约束指定偏移的寄存器和指定缓冲器大小的寄存器来实现相同益处,该偏移和缓冲器大小来自于标量寄存器组的非交叠部分。

以下是示例性代码序列,该序列示出上面讨论的建议指令可以如何用于高效地允许循环存储器的使用:

前三个移动指令用于将标量寄存器r8、r9和r10的内容初始化为逻辑0值,并且wlstp指令随后设置回路,将循环次数存储到链路寄存器中。然后,vldrw指令从标量寄存器(表示为“srccoeff”)中指定的地址执行连续的数据加载,并将所得数据值存储在向量寄存器q0中,然后该指令也在标量寄存器中递增地址。然后viwdup指令如前所述,操作以生成存储在向量寄存器q7内的偏移向量。由于数据值大小为32位,则立即值为4。然后,随后的vldrw指令使用向量寄存器q7的内容和源寄存器(称为“srcsamplescircular”)中指定的基址来在存储器中存取数据值,然后该数据值存储在向量寄存器q1中。然后执行向量乘法累积运算,其中q0中的每个元素与q1中的相应元素相乘,并且然后在寄存器r8和r9内保持的标量值内累计。该过程继续经由多个回路迭代,直到已实施所需的回路次数。

如前所述,可以执行的一种类型的向量存储器存取操作以在存储器中从地址向量操作数确定的地址处存取多个数据值,该地址向量操作数包括多个地址元素。虽然地址向量操作数可以直接指定待存取的单个地址,但是地址向量操作数通常指定偏移向量,该偏移向量与基址组合以便标识待存取的地址。这样的操作允许在任意存储器位置中存取数据,并且通常在从存储器中的地址将数据加载到向量的单个元素中时被称为收集操作,或者在将来自向量的单个元素存储至标识的地址位置中时被称为分散操作。

由于这种分散或收集操作中涉及的地址可以是任意的的事实,因此这种操作的处理通常需要串行化多种存取请求,使得执行一系列独立的加载或存储操作。在存取确实是任意的情况下,这是合理且必要的。然而,已经意识到存在数目不断增多的情况,其中使用了这种分散或收集类型的存储器存取操作,但是至少一些待存取的地址实际上是连续的,并且因此,可以经由对存储器中连续地址的单次存取来存取多个数据值。此情况的一个特定的示例是当使用前面描述的向量递增和包装或向量递减和包装指令来生成偏移向量,该偏移向量随后用于执行收集或分散操作时,因为除了到达包装点的位置之外,地址将是连续的。

然而,在向量处理系统中,到存储器的存取路径通常是关键时序路径,并且因此,在存储器存取路径内提供电路以在处理向量存储器存取操作时分析地址通常是不实际的。

如将参照其余附图描述的,某些实施例可以提供用于缓解该问题的机制。图12示例性地示出了包含组件的示例性实施例,该组件旨在标识某些地址序列何时将是连续的,因此有助于加载/存储单元减少在这种情况下需要的存取次数。从图12与图1的比较将可以看出,图12示出了装置2’,装置2’基本上是图1的装置2,但具有一些附加组件。特别地,处理电路4’包括在图1的处理电路4内提供的所有组件,但另外具有标志设置电路500,标志设置电路500可以被配置为设置标志信息,该标志信息是关于确定为存储在向量寄存器12中的一个向量寄存器而生成的向量包括多个元素,该多个元素满足指定连续标准。由标志设置电路生成的标志信息可以存储在各种位置中。例如,可以提供与标志设置电路相关联的标志信息存储器505,用于存储标志信息。或者,通过提供与每个向量寄存器相关联的多个附加位来有效地将标志信息存储器510合并到向量寄存器文件12中,以捕获必要的标志信息。

如果对于特定向量寄存器,标志设置电路500设置标志信息以标识该向量寄存器的至少一部分具有某种元素,该元素的值满足特定连续标准,则当加载/存储单元随后使用参照该寄存器指定的偏移向量来执行收集或分散操作时,其可以利用标志信息来确定哪些地址元素是连续的,并且因此,可能减少了对存储器系统8的存取次数,以便执行收集或分散操作。在没有设置标志信息的情况下,则加载/存储单元将以标准方式处理收集或分散操作。这可能涉及要求加载/存储单元18将每个地址元素视为标识不连续的地址,并因此对每个地址元素执行单独的存取。或者,可以在存储器存取路径内提供一些其他组件,以寻求至少部分地优化存取。在提供这种附加电路的程度上,其可以与本文描述的标志信息机制一起使用。

标志设置电路500试图确定存在或不存在的指定连续标准可以采用多种形式,但是在一个实施例中,要求向量中的至少一个元素子集具有一值,该值遵循规则进行序列。然后设置标志信息,以使处理电路能够确定向量中的哪些元素具有遵循规则进行序列的值。

图13a示出了根据一个实施例的可以在标志信息存储器505内提供的条目。在该示例中,提供多个条目,每个条目具有寄存器id字段515和有效标志字段517,寄存器id字段515用于标识条目所涉及的寄存器,有效标志字段517包括一个或多个有效标志。在一个实施例中,单个有效标志可以与整个向量相关联地使用,并且仅在向量中的所有元素都遵循规则进行序列时才被设置。或者,有效标志字段517内可以提供多个有效标志,每个标志与向量的不同部分相关联,并且根据相关联的部分是否包含遵循规则进行序列的元素而设置。如果需要,还可以捕获附加信息以标识规则进行序列是否在多个部分之间延伸。因此,举例来说,如果存在与向量中的四个部分有关的四个有效标志,并且有效标志指示部分2和部分3都包含遵循规则进行序列的元素,则标志信息可以另外捕获(如果需要)部分3中的规则进行序列是否是部分2中的规则进行序列的不间断延续。

要查找的规则进行序列可以采用各种形式,但是在一个实施例中,规则进行序列使得连续存储器地址将由遵循规则进行序列的值生成,前提是这些值在存储器存取操作中被用作地址元素。如前所述,可能仅支持单个数据值大小,并且因此,规则进行序列将在参照数据值大小的情况下,涉及标识连续地址的值。然而,在可选实施例中,可以支持多个不同数据值大小,并且在该示例中,可以在每个条目内提供大小字段519以标识标志信息所涉及的数据值的大小。特别地,应当理解,当数据值具有一个大小时,可以使用值序列来表示连续地址,但是如果数据值具有不同的大小时,则相同的值序列将不必表示连续的地址。

作为另一示例,系统可能支持多个数据值大小,但是所描述的实施例的标志设置机制仅针对特定大小的数据值来实施。例如,当正在处理的数据值是字节大小的数据值时,可以决定实施标志设置技术,但是当数据值为任何更大的大小时,则不实施标志设置技术。在这种情况下,可能不需要大小信息字段519。

类似地,标志设置技术的使用可能受限于一个或多个特定向量寄存器,并且标志信息存储器中的每个条目可以直接与特定寄存器相关联。在这种情况下,可能没有必要提供寄存器标识符字段515。

在另一可选实施例中,仅可以保留单个寄存器的标志信息,特别是为上次使用的向量提供标志信息。在这样的实施例中,如果代码以如下方式构造:紧接在存储器存取指令之前的指令生成元素向量,该元素向量可以表示连续偏移,则实施方式仅检查相同的向量被用作存储器存取指令的偏移寄存器,并且然后相应地读取标志信息。同样,这避免了在标志信息内捕获寄存器标识符的任何特定需要。

图13b示出了与向量寄存器文件12的向量寄存器组合提供的可选标志信息存储器510的示例性布置。对于每个向量寄存器520,可以提供相应的有效标志字段522以存储一个或多个有效标志,该有效标志与该寄存器相关联。如果需要,还可以提供大小信息字段524。利用这种方法,每个向量寄存器的有效标志信息可以同时保留在向量寄存器文件12中。

图14是示出在执行向量存储器存取操作时如何使用标志信息的流程图。在步骤550处,确定将执行向量存储器存取操作。特别地,在一个实施例中,此时加载/存储单元18确定其具有待执行的向量存储器收集或分散操作。对于固有地标识存储器中的连续地址的其他类型的向量加载或存储指令,不需要标志信息,并且可以利用地址的已知连续性质以标准方式来处理那些存取。然而,如前所述,对于分散或收集类型操作,这些指令可能是存储器中的任意地址,但是存在与用于提供地址偏移信息的向量寄存器相关联的标志信息可以使得加载/存储单元能够确定任何地址元素是否确实涉及连续地址,并使用该信息来潜在地减少所需的存取次数。

因此,在步骤555处,确定标志信息是否与向量寄存器相关联,该向量寄存器提供地址向量操作数,在一个实施例中,该地址向量操作数为地址偏移的向量,然后将其与基址进行组合以便标识待存取的地址。如果标志信息与向量寄存器相关联,则在步骤560处,由加载/存储单元18在确定为存取数据值而对存储器需要的存取次数时使用标志信息。然而,否则,过程进行到步骤565,其中以标准方式执行收集或分散操作,以便存取数据值。

图15a至图15c示出了作为输入提供到向量加载指令的偏移值的多个示例,该向量负载指令指定向量收集操作。在该示例中,假设向量加载指令正在将四个32位数据值加载到128位目的寄存器qd中,其中,偏移信息在源向量寄存器qm内提供,并且基址在标量寄存器rn中指定。在图15a所示的示例中,假设偏移向量570提供值的规则递增序列,该规则递增序列可用于生成四个32位数据值的连续地址。同样在该示例中,假设标志信息572具有单个有效标志,该标志被设置为标识规则进行序列涉及整个向量宽度。大小信息字段也被设置为标识假定数据大小是32位,并且寄存器id字段被设置为标识标志信息涉及寄存器qm。由于向量加载指令正在32位数量上操作,因此当参照标志信息时,确定大小信息匹配,并且寄存器id与源寄存器qm匹配。由于设置了有效标志,因此加载/存储单元知道所有地址元素遵循规则进行序列,该规则进行序列将使得存储器中的连续地址在与基址组合时进行标识。

加载/存储单元18如何使用该信息将取决于许多因素,包括可用的存储器存取带宽。例如,如果支持64位存储器存取带宽,则根据图15a中所示的信息,加载/存储单元可以执行两个64位存取,每个存取指向两个连续地址,因此使得每次存取都可以检索两个数据值。相反,如果支持128位存储器存取带宽,则加载/存储单元18可以执行指向四个连续地址的128位存取,以便通过单个存取来检索所有四个数据值。

图15b示出了第二示例,其中标志信息在有效标志字段内具有两个有效标志,并且因此标志信息针对元素574的特定示例性向量而采用形式576。因此,在该示例中,如果至少支持64位存储器存取,加载/存储单元可以发出单个存取以检索前两个数据值。然后,通常将需要单独的存取以获得第三数据值和第四数据值。

如果设置了两个有效标志,由于源向量寄存器qm的下半部分和上半部分都包含遵循所需进行序列的元素,则可选地可以捕获一些附加信息以标识这两半之间是否存在连续性。例如,如果qm容纳元素20、16、4、0,则将设置两个有效标志,但将不会设置该附加信息,然而如果qm容纳值12、8、4、0,则将设置两个有效标志,并且此外,该另一标志将被设置为标识两半之间的连续性。这在某些情况下很有用。例如,如果存储器存取路径具有128位的带宽,则可以使用该附加信息来确定是否需要发出两个64位连续存取,或者是否可以发出单个128位连续存取。

图15c示出了又一示例,其中,偏移的源向量采用形式580,并且标志信息采用形式582。在这种情况下,标志信息字段不仅仅包含一系列标志,而是提供足够的信息,以标识元素中的哪些元素代表连续地址。在该示例中,向量中的前三个元素具有所需图案,并且可以在标志字段内捕获该信息。应当理解,可以以多种方式捕获该信息。例如,可以标识连续性的起始元素和结束元素,或者可以标识连续序列的起始元素,以及随后连续的多个元素。

在一个实施例中,标志设置电路500可以被配置为在一个或多个指定事件发生时使标志信息无效。特别地,在一个实施例中,如图16a所示,如果在步骤600处确定发生异常,则在步骤605处使标志信息无效。因此,异常形成指定事件中的一个,该指定事件导致标志信息失效。

图16b示出了指定事件的另一示例,在这种情况下,指定事件是当处理电路写入具有与之关联的标志信息的向量寄存器时的情况。假定已经发生写入操作,则不再假设标志信息是准确的,并且因此无效。在步骤610处,确定当前指令是否写入向量寄存器,并且如果是,则在步骤615处确定是否为该向量寄存器存储了有效标志信息。如果是,则在步骤620处,使得用于该向量寄存器的标志信息无效。此后,在步骤625处执行该指令。如果没有遵循步骤610或步骤615的路径,则过程直接进行到步骤625以执行指令,并且保留任何标志信息。

通过在发生这样的事件时将标志信息配置为无效,这意味着标志信息不必在架构上可见,并且因此不需要在异常周围保存和恢复。这简化了标志设置机制的实施方式。

存在许多机制可用于触发标志设置电路500以生成标志信息以用于元素向量。图17示出了一个示例性配置,其中,在执行先前描述的viwdup指令或vdwdup指令中的一个时,触发标志设置电路。特别地,如果在步骤650处确定执行这些指令中的一个,则在步骤655处,当向量生成电路16执行该指令时,该向量生成电路向标志设置电路500提供信息以标识在生成向量内是否发生包装,并且如果发生包装,则标识该包装在向量中出现的位置。

在步骤660处,标志设置电路然后分析该信息并相应地针对相关寄存器来设置标志信息。特别是,如果没有发生包装,则已知对于为该viwdup或vdwdup指令标识的数据值大小,如果该向量用作涉及相同数据值大小的后续收集或分散操作的输入,则元素向量将表示连续地址,并且因此可以设置一个或多个有效标志。类似地,如果存在包装点,则仍然可以确定向量内的哪些元素表示连续地址,并且因此可以设置标志信息。在这种情况下,其将取决于标志信息的性质和粒度,该标志信息针对是否有任何有效标志可以被设置为标识向量的至少部分而生成,该部分包含涉及连续地址的元素。

图18示出了代替图17的方法,或者联合使用图17的方法可用于调用标志设置电路500的另一机制。在步骤665处,确定是否存在新指令以解码,并且如果存在,则在步骤670处,解码电路确定该指令的执行是否将创建向量,该向量的元素具有遵循规则进行序列的值。例如,可能存在某些指令,当执行这些指令时已知将创建规则进行序列,该规则进行序列可用于以特定数据值大小表示连续地址的地址偏移。如果在步骤670处做出这样的决定,则在步骤675处,解码器电路向标志设置电路发送控制信号,以当随后在处理电路4’内执行该指令时,使得标志设置电路为相关向量寄存器设置标志信息。此外,在步骤680处,在过程返回到步骤665之前,生成控制信号以使处理电路执行指令所需的操作。如果在步骤670处,确定指令的执行将不保证创建向量,该向量的元素具有遵循规则进行序列的值,则该过程直接进行到步骤680,绕过步骤675。

图19示出了代替或者联合图17和图18中讨论的机制可用于调用标志设置电路的又一机制。在该示例中,在步骤685处,确定是否已从存储器中加载了向量。当确定向量已经从存储器加载到向量寄存器中的一个中时,则在步骤690处,可以调用标志设置电路内的比较电路,以分析向量元素以标识至少一个元素子集是否具有遵循规则进行序列的值(这可以针对各种可能的不同数据值大小进行分析)。然后,标志信息可以按照由标志设置电路执行的分析结果来相应地设置。应当理解,图19中标识的比较操作可以由不在存储器的关键存取路径上的电路执行,并且在系统操作中的方便点处执行,这将不会影响处理电路的性能。一旦已经生成了标志信息,那么如果该向量随后在收集或分散操作中被用作地址偏移的输入向量,则可以参照标志信息以便潜在地减少处理收集或分散操作时对存储器的所需存取次数。

以下代码序列示出了标志设置机制可以如何提高性能的示例:

viwdup.8q7,r0,r2,#1//q0=[0,1,2,...,15]

vldrw.8q1,[%[baseptr],q7]

执行viwdup指令会创建单调递增向量值,只有极少数情况下发生包装。在一个示例性实施方式中,标志设置电路可以设置每个字(即32位)的标志,表明该字内的所有元素都是单调递增的。当随后执行向量加载指令时,可以读取这些标志,而不是正常处理收集加载,而是可以在这些标志指示连续元素的任何位置发出连续加载。

图20示出了可以使用的虚拟机实施方式。虽然前面描述的实施例在用于操作特定处理硬件的装置和方法方面实现了本技术,该特定处理硬件支持所涉及的技术,但是也可以提供硬件设备的所谓虚拟机实施方式。这些虚拟机实施方式在主机处理器750上运行,该主机处理器750运行主机操作系统740,该主机操作系统740支持虚拟机程序730。通常,需要大型强大的处理器来提供虚拟机实施方式,该虚拟机实施方式以合理的速度执行,但是这样的方法在某些情况下可能是合理的,例如当出于兼容性或重复使用原因而希望将本地代码运行到另一个处理器时。虚拟机程序730向访客程序720提供虚拟硬件接口,该接口与将由真实硬件提供的硬件接口相同,该真实硬件是由虚拟机程序730建模的设备。因此,程序指令(包括用于控制上述存储器存取的那些指令)可以使用虚拟机程序730在访客程序720内执行,以模拟它们与虚拟机硬件的交互。访客程序720可以是裸金属程序,或者可选地,其可以是以与主机os740如何运行虚拟机应用程序730类似的方式运行应用程序的访客操作系统。还将理解,存在不同类型的虚拟机,并且在某些类型中,虚拟机直接在主机硬件750上运行,而不需要主机os740。

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

尽管本文已经参照附图详细描述了本发明的示例性实施例,但是应该理解,本发明不限于那些精确的实施例,并且本领域技术人员在不脱离本发明的范围和精神的情况下,可以在本发明中实现各种改变、添加和修改,本发明的范围和精神由所附权利要求限定。例如,在不脱离本发明的范围的情况下,可以利用独立权利要求的特征对从属权利要求的特征进行各种组合。

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