用于确定两个最小值和两个最大值的处理器指令的制作方法

文档序号:14835383发布日期:2018-06-30 12:10阅读:443来源:国知局
用于确定两个最小值和两个最大值的处理器指令的制作方法

霍夫曼代码(https://en.wikipedia.org/wiki/Huffman_coding)是可变长度代码,其表示具有使表示一连串符号所需要的位的总数目最小化的目标的一组符号。它们通过向较频繁地发生的符号指派较短长度的代码并且向较罕见的符号指派较长的代码来实现这一点。

霍夫曼代码的使用的一个示例在“DEFLATE”压缩算法中,其形成诸如gzip和Zlib以及Winzip和PKZIP之类的格式的基础。DEFLATE数据格式包括使用LZ77算法和霍夫曼编码的组合进行压缩的一系列块。霍夫曼编码还被用于其它目的,诸如用在JPEG、MPEG和MP3编解码器中。

至少在DEFLATE压缩的背景内,霍夫曼代码的生成包括取得直方图数据(权重)的数组,其中每个条目是符号或令牌出现在输出中的次数的计数,以及然后计算使权重和令牌长度的点积最小化的该令牌的对应代码长度。通常,保证权重的和小于64k,因此可以将权重存储为16位整数。计算代码所需要的时间是存在多少非零权重的函数。在DEFLATE中,对于距离代码(D树)而言存在多达30个值,但对于文字长度代码(LL树)而言存在多达286个值,因此用于LL数生成的时间一般是最大的。

计算霍夫曼代码的经典方式使用堆数据结构(https://en.wikipedia.org/wiki/Heap_(data_structure))。这是相当高效的,但传统的软件实现包含许多分支,其是数据相关的并且因此对于通用CPU硬件而言难以进行预测。在利用深度流水线或超标量执行的现代处理器上,这些分支误预测的代价可能变成性能限制者。

附图说明

在结合附图理解时,本发明的前述方面和许多伴随的优点将随着其通过参考以下具体实施方式变得更好理解而变得更容易领会,其中贯穿各种视图相同的参考数字指代相同的部分,除非另外指定:

图1是图示根据一个实施例的用来有序地返回三个输入值之中的最小的两个值的Compute-2MIN-v1 r64 srcdst, r32 src2指令的基于硬件的实现的示意图;

图1a是图示根据一个实施例的用来有返回三个输入值之中的最大的两个有序值的Compute-2MAX-v1 r64 srcdst, r32 src2指令的基于硬件的实现的示意图;

图2是图示根据一个实施例的用来有序地返回四个输入值之中的最小的两个值的Compute-2MIN-v2 r64 srcdst, r64 src2指令的基于硬件的实现的示意图;

图2a是图示根据一个实施例的用来有序地返回四个输入值之中的最大的两个值的Compute-2MAX-v2 r64 srcdst, r64 src2指令的基于硬件的实现的示意图;

图3是图示根据一个实施例的用来返回四个输入值之中(无序的)最小的两个值的Compute-2MIN-v3 r64 srcdst, r32 src2指令的基于硬件的实现的示意图;

图3a是图示根据一个实施例的用来返回四个输入值之中的最大的两个值的Compute-2MAX-v3 r64 srcdst, r32 src2指令的基于硬件的实现的示意图;

图4是图示基于Arm的微架构的示例的示意框图;

图5是图示根据一个实施例的用来有序地返回三个输入值之中的最小的两个值的A64_Compute-2MIN-v1_GPR Xd, Dm指令的基于64位ARM的硬件实现的示意图;

图5a是图示根据一个实施例的用来有序地返回三个输入值之中的最大的两个值的A64_Compute-2MAX-v1_GPR Xd, Dm指令的基于64位ARM的硬件实现的示意图;

图6是图示根据一个实施例的用来并行地针对两个64位数据路径有序地返回三个输入值之中的最小的两个值的A64_Compute-2MIN-v1_VFP Vd.2D, Vm.2D SIMD指令的基于64位ARM的硬件实现的示意图;

图6a是图示根据一个实施例的用来并行地针对两个64位数据路径有序地返回三个输入值之中的最大的两个值的A64_Compute-2MAX-v1_VFP Vd.2D, Vm.2D SIMD指令的基于64位ARM的硬件实现的示意图;

图7是图示用于通过使用由A64_Compute-2MIN-v1_VFP Vd.2D, Vm.2D SIMD指令处理的两个64位数据路径来并行地处理数组元素而确定数组中的两个最小值的方法的图;以及

图7a是图示对图7的方法的增强的图,根据其使用A64_Compute-2MIN-v1_GPR Xd, Dm指令来从自并行处理阶段输出的一对两个最小值之中确定两个最小值。

具体实施方式

在本文中描述了用于确定两个最小值和两个最大值的处理器指令以及关联的装置和方法的实施例。在以下描述中,阐述了众多特定细节以提供对本发明的实施例的透彻理解。然而,相关领域技术人员将认识到,可以在没有特定细节中的一个或多个的情况下或者利用其它方法、组件、材料等实践本发明。在其它实例中,未详细地示出或描述公知的结构、材料或操作以避免模糊本发明的各方面。

贯穿本说明书对“一个实施例”或“实施例”的引用意味着结合实施例描述的特定特征、结构或特性被包括在本发明的至少一个实施例中。因此,短语“在一个实施例中”或“在实施例中”在贯穿本说明书的各种地方中的出现不一定都指代相同实施例。此外,可以在一个或多个实施例中以任何适合的方式组合特定特征、结构或特性。

为了清楚,本文中的图中的单独组件还可以通过其在图中的标签而不是通过特定参考号码来指代。另外,可以用随后是意味着“典型”的“(typ)”的参考号码示出指代(如与特定组件相对的)特定组件类型的参考号码。将理解,这些组件的配置将是可能存在但为了简单和清楚而未在绘图中示出的类似组件或没有被标注单独的参考号码的别的类似组件的特征。相反地,“(typ)”将不被解释为意味着通常将组件、元件等用于其公开的功能、实现、目的等。

可以将基本霍夫曼算法概括为:

1. 将具有非零权重的条目插入到堆数组中。

2. 添加(每个具有权重1的)额外元素直到堆具有至少两个元素为止。

3. 将数组转换成堆。

4. 当在堆中存在不止一个元素时:

a. 从堆中移除两个元素(具有两个最小权重的元素)。

b. 创建新元素,所述新元素是这些元素的父母。

c. 将该新元素添加到堆。

5. 计算每个元素的代码长度,作为其在树中的深度。

6. 如果最大(max)代码长度太大,则调整树以使得其深度在限制内。

7. 根据长度而生成代码值。

4.a中的主要步骤要求找到集合中的两个最小元素。比如堆之类的结构保持数据以使得易于访问最小(min)元素的方式组织;然而,添加/删除和更新堆要求遍历数据结构和执行操作,所述操作因为其趋向于是非常数据相关的而没有被良好地预测。

代之以,我们仅保持元素列表作为数组未排序。这意味着在每个步骤(4.a)处,我们将需要找到未排序数组中的两个最小元素。虽然这要求更多操作,但是操作被良好地预测并且不是数据相关的,如将是具有堆或其它排序的结构的情况那样。

我们因此定义可以找到元素数组中的两个最小元素的指令。当前指令仅必须支持找到集合的最小元素,暗示在用以找到两个最小元素的每个步骤处的两遍扫描算法和最小值计算。

用于计算两个最小值的指令

在大部分应用中,用于符号的权重可以适应16位整数。为了使得能够包括其它位字段连同权重,我们可以假定每个元素是32位宽。假定64位标量指令,我们可以定义保存一对32位元素min1||min2的64位寄存器。到目前为止发现了两个最小元素。随着我们循环访问列表中的紧接在后的元素,该两个最小元素得到更新,如果适用的话。

清单(LISTING)1示出了可以被迭代地执行以返回集合或数组中的两个最小元素的第一指令Compute-2MIN-v1的伪代码。

如图1中所示,将用于与指令相关联的软件函数的三个参数min1、min2和src2存储在两个寄存器中。第一寄存器r64是64位寄存器,其存储源(src)和目的地(dst)参数值。当调用指令时,针对值min1和min2的先前并置的(concatenated)32位二进制数据被加载到64位寄存器r64的一半较高(src[63:32])和较低(dst[31:0])32位。第二个是存储第二源参数值(src2)的32位寄存器r32。图1还示出了第一和第二比较器100和102以及多路复用器(MUX)104。

如图1中进一步所示,逻辑如下进行。如本文中描绘的,一些寄存器具有指示对应时间的寄存器状态的tn下标,其中t0与初始时间对应,t1与初始时间之后的第一时间对应,并且tn与初始时间之后的第二时间对应。在在时间t0处将min1、min2和src2参数加载到寄存器r64和r32中之后,将寄存器r64 dst[31:0] min2和寄存器r32 src2参数加载到第一比较器100中。如通过判定块106所描绘的,第一比较器100被配置成如果src2 < min2则输出‘1’或者如果min2 ≤ src2则输出‘0’。第二比较器102执行类似的比较操作,其将寄存器r64 src[63:32] min1参数与src2进行比较。如果src2 < min1,则第二比较器102输出‘1’,否则其输出‘0’。

如果从第一比较器100到MUX 104的控制输入110是‘0’,则寄存器r64中的min1和min2值将保持相同。(来自第二比较器102的MUX输入是‘X’,意味着不在乎。)如果来自第一比较器100的控制输入是‘1’并且来自第二比较器102的控制输入112是‘0’,则src2将被拷贝到寄存器r64的第二个32位(dst[31:0])中,替换min2。如果来自第一比较器100的控制输入110是‘1’并且来自第二比较器102的控制输入112是‘1’,则min1将被从寄存器r64的第一个32位(src[63:32])拷贝到寄存器r64的第二个32位(dst[31:0]),并且src2将被拷贝到寄存器r64的第一个32位中,替换min2。Compute-2MIN-v1 r64 srcdst, r32 src2指令然后返回寄存器r64中的64位值,其将有序地表示三个输入参数min1、min2和src2中的两个最小值。

除了使用比较器、MUX等以硬件日志来实现之外,指令Compute-2MIN-v1还可以使用微代码来实现,所述微代码是处理器的指令集架构(ISA)的部分。在该方法下,通过清单1中的伪代码所描绘的逻辑经由对应的微代码指令来实现。作为另一替代,指令Compute-2MIN-v1可以经由硬件逻辑和微代码的组合来实现。

清单2示出了可以被迭代地执行以返回集合或数组中的两个最小元素的第二指令Compute-2MIN-v2的伪代码。在该实施例中,src2被扩展成包含2个新数组元素。

图2中示出了用于实现指令Compute-2MIN-v2 r64 srcdst, r64 src2的硬件组件和逻辑的一个实施例。硬件组件和逻辑包括一对两个64位寄存器r64-1和r64-2、第一和第二比较器200和202、MUX 204和选择逻辑205。图2还示出了逻辑判定块206、208、210和212,其被用来图示比较器200和202的逻辑输出。

指令逻辑如下进行。如通过寄存器r64-1的r64-1t0、r64-1t1和r64-1t2状态所描绘的,指令Compute-2MIN-v2 r64 srcdst, r64 src2使用时间级联的过程,其中第一个经过在图2的左手部分上示出的硬件逻辑并且第二个经过在右手部分上示出的硬件逻辑。初始,在时间t0处,将先前并置的32位min1和min2参数值加载到寄存器r64-1中,如通过r64-1寄存器状态r64-1t0所描绘的。类似地,将与操作数src2对应的先前并置的32位el1和el2参数值加载到寄存器r64-2中,如通过src2[63:32]和src2[31:0]所描绘的。

接下来,将寄存器r64-1 dst[31:0] min2参数和寄存器r64-2 el1 32位参数值加载到第一比较器200中。选择逻辑205被配置成选择或者src2[63:32]或者src2[31:0](el2或el1)到第一比较器200中,这取决于其接收src2(低)输入(针对阶段1)还是src2(高)输入(针对阶段2)。如通过判定块206所图示的,第一比较器200被配置成如果el1 < min2则输出‘1’或者如果min2 ≤ el1则输出‘0’。第二比较器202执行类似的比较操作,其将寄存器r64-1 src[63:32] min1参数与el1进行比较。如果el1 < min1,则第二比较器202输出‘1’,否则其输出‘0’。

如果从第一比较器200到MUX 204的输入是‘0’,则寄存器r64-1中的min1和min2值将保持相同。如果从第一比较器200到MUX 204的输入是‘1’并且来自第二比较器202的输出是‘0’,则el1将被拷贝到寄存器r64-1的第二个32位(dst[31:0])中,替换min2。如果来自第一比较器200的输出是‘1’并且来自第二比较器202的输出是‘1’,则min1将被从寄存器r64-1的第一个32位(src[63:32])拷贝到寄存器r64-1的第二个32位(dst[31:0]),并且el1将被拷贝到寄存器r64-1的第一个32位中,替换min2。这些结果中的每个由与时间t1对应的寄存器r64-1状态r64-1t1描绘。

在寄存器r64-1状态r64-1t1下,逻辑继续进行到图2的右手部分的顶部。为了说明性目的和与清单2一致,寄存器r64-1中的参数被再次描绘为min1和min2。然而,这些可能是或可能不是与在寄存器r64-1状态r64-1t0中所示相同的min1和min2值,这取决于el1小于min1还是min2;相反,min1和min2表示在状态r64-1t1下无论什么数据被包含在寄存器r64-1中。

以与针对图2的左手部分所描述的方式类似的方式,逻辑通过将寄存器r64-1 dst[31:0] min2参数和寄存器r64-2 src2[63:32] el2 32位参数值加载到第一比较器200中而进行,其中经由src2(高)输入通过选择205而选择el2。如通过判定块212所图示的,第一比较器200被配置成如果el2 < min2则输出‘1’或者如果min2 ≤ el2则输出‘0’。第二比较器202执行类似的比较操作,其将寄存器r64-1 src[63:32] min1参数与el2进行比较。如果el2 < min1,则第二比较器202输出‘1’,否则其输出‘0’。

如果从第一比较器200到MUX 204的输入是‘0’,则寄存器r64-1中的min1和min2值将保持相同。如果从第一比较器200到MUX 204的输入是‘1’并且来自第二比较器202的输出是‘0’,则el2将被拷贝到寄存器r64-1的第二个32位(dst[31:0])中,替换min2。如果来自第一比较器200的输出是‘1’并且来自第二比较器202的输出是‘1’,则min1将被从寄存器r64-1 的第一个32位(src[63:32])拷贝到寄存器r64-1 的第二个32位(dst[31:0]),并且el2将被拷贝到寄存器r64-1的第一个32位中,替换min2。这些结果中的每个由与时间t2对应的寄存器r64-1状态r64-1t2来描绘。Compute-2MIN-v2 r64 srcdst, r64 src2指令然后返回寄存器r64-1中的64位值,其将有序地表示四个输入参数min1、min2以及两个新并置的src2参数el1和el2中的两个最小值。

和指令Compute-2MIN-v1 r64 srcdst, r32 src2一样,Compute-2MIN-v2 r64 srcdst, r64 src2指令也可以使用经由处理器ISA提供的微代码指令或使用硬件逻辑和微代码指令的组合来实现。

定义2MIN指令的另一方式是不假定min1和min2之间的任何排序,只是到目前为止它们是两个最小元素。诸如进位标志(carry flag)(CF)之类的算术标志(条件代码)指向最小元素;例如CF=1意味着min1是更小的元素,否则min2是更小的元素。指令还将相应地基于这两个最小元素(min1和min2)之间的顺序来设置CF;在一些情况下,该指令可以许可更高效的电路实现。下面在清单3中示出了使用该方法的2MIN指令Compute-2MIN-v3 r64 srcdst, r32 src2的一个实施例。

如行4中所示,并置的min1和min2参数被作为srcdst操作数加载到64位寄存器r64中,其中min1占用寄存器r64的较高32位并且min2占用寄存器r64的较低32位。第二操作数是32位src2,其被加载到32位寄存器r32中。

接下来,在行5和6中,基于src2是否小于min1(寄存器r64的较高32位)和min2(寄存器r64的较低32位)而输出两个布尔值p1和p2。在一个实施例中,使用比较器来确定布尔型p1和p2输出。在另一实施例中,使用两个比较器,使得能够并行地确定p1和p2。

如行7中所示,如果p1或p2中的任一为真(即,逻辑‘1’),则src2应当被包括作为两个最小值中的一个。在行8和9中,使用进位标志(CF)来确定在寄存器r64中的srcdst操作数中min1还是min2将由src2替换。如果p1和p2二者为假(即,逻辑‘0’),则min1和min2都不由src2替换。

如以前,可以使用硬件、微代码指令或者这两个的组合来实现Compute-2MIN-v3 r64 srcdst, r32 src2指令。图3示出了Compute-2MIN-v3 r64 srcdst, r32 src2指令的硬件实现的一个实施例。硬件电路包括64位寄存器r64、32位寄存器r32、第一和第二比较器300和302、MUX 304、或(OR)门306和进位标志(CF)308。图3进一步示出了判定块310和312,它们分别描绘了通过比较器300和302实现的逻辑。

如以前,min1和min2占用srcdst寄存器r64的较高和较低32位,而src2被加载到寄存器r32中。比较器300接收min1和src2作为输入并且如果src2 < min1则输出为‘1’的p1值,否则其输出为‘0’的p1值。类似地,比较器302接收min2和src2作为输入并且如果src2 < min2则输出为‘1’的p2值,否则其输出为‘0’的p2值。p1和p2值是或门306的输入,所述或门306执行逻辑或功能,如果p1和p2二者都为‘0’则输出0,否则针对p1:p2值1:0、0:1或1:1输出‘1’。在MUX 304上的控制输入314处接收或门306的输出。CF 308提供MUX 304的第二控制输入316。

如时间t1处所示,如果src2大于或等于min1和min2二者,则p1和p2将都为‘0’并且srcdst寄存器r64中的数据将保持不变。否则,如果p1和/或p2位‘1’,则或者min1或者min2将由src2替换,这取决于CF的值。在时间t0处,CF的值将是‘1’或‘0’。如果在t0处CF = ‘1’,则min2将由src2替换并且CF的值将被设置成使得其为非p1(!p1)。如果CF = ‘0’,则min1将由src2替换,并且CF的值将被设置成使得其等于p2。

用于计算两个最大值的指令

除了返回两个最小值的指令之外,具有类似逻辑的指令还可以被实现成返回两个最大值。例如,这样的指令可以被用来通过循环访问数组以将每个数组元素与srcdst寄存器中的当前两个最大值进行比较而确定数组等中的最大的两个值。

清单4示出了可以被迭代地执行以返回集合或数组中的两个最大元素的第一指令Compute-2MAX-v1的伪代码。

用于实现指令Compute-2MAX-v1的逻辑与用于实现Compute-2MIN-v1的逻辑类似,除了用max1和max2替换min1和min2,并且与src2的比较是大于而不是小于。在图1a的判定块106a和108a中图示了该比较逻辑。以与在图1中示出和上面讨论的方式类似的方式,将max1和max2加载到srcdst寄存器r64的较高和较低32位一半[63:32]和[31:0]中,将src2加载到寄存器r32中。第一比较器100接收max2和src2作为输入并且如果src2 > max2则输出‘1’,否则输出‘0’。第二比较器102接收max1和src2作为输入并且如果src2 > max1则输出‘1’,否则输出‘0’。在图1a的较低部分中将在时间t1处在srcdst寄存器r64中的值示出为分别作为第一比较器100和第二比较器102的输出而接收的MUX控制输入110和112的函数。

清单5示出了可以被迭代地执行以返回集合或数组中的两个最大元素的第二指令Compute-2MAX-v2的伪代码。在该实施例中,src2被扩展成包含2个新数组元素。

图2a中示出了用于实现指令Compute-2MAX-v2 r64 srcdst, r64 src2的硬件组件和逻辑的一个实施例。该硬件组件和逻辑与在图2中针对指令Compute-2MIN-v2 r64 srcdst, r64 src2示出的那些类似,其中相同编号的组件执行类似的功能。差异是已经分别用max1和max2替换min1和min2,并且已经由判定块206a、208a、210a和212a替换图2的判定块206、208、210和212,判定块206a、208a、210a和212a是被用来图示比较器200和202的逻辑输出的判定块。

如进一步图示的,在判定块206a中,做出el是否大于max2的确定;如果为真,则在时间t0期间,比较器200将输出‘1’,其被提供作为MUX 204的控制输入中的一个;否则控制输入将为‘0’。针对判定块208a(el1 > max1)、210a(在时间t1期间,el2 > max2)和212a(在时间t1期间,el2 > max1)中的每个描绘了类似的逻辑。

和指令Compute-2MIN-v2 r64 srcdst, r64 src2一样,指令Compute-2MAX-v2 r64 srcdst, r64 src2也可以使用微代码指令或者硬件逻辑和微代码指令的组合来实现。

下面在清单6中示出了不考虑两个当前最大值的顺序的2MAX指令Compute-2MAX-v3 r64 srcdst, r32 src2的一个实施例。

图3a示出了指令Compute-2MAX-v3 r64 srcdst, r32 src2的硬件实现的一个实施例。如由图3和3a中相同编号的组件所指示的,用于实现指令Compute-2MIN-v3 r64 srcdst, r32 src2的硬件组件和逻辑与用于实现指令Compute-2MAX-v3 r64 srcdst, r32 src2的硬件组件和逻辑类似,除了已经分别用max1和max2替换min1和min2,并且已经用判定块310a和312a替换判定块310和312。

比较器300接收max1和src2作为输入,并且如果src2 > max1则输出为‘1’的p1值,否则输出为‘0’的p1值,如在判定块310a中所描绘的。比较器302接收max2和src2作为输入,并且如果src2 > max2则输出为‘1’的p2值,否则输出为‘0’的p2值,如在判定块312a中所描绘的。如以前,p1和p2值被经由或门306进行逻辑或并且输入到MUX控制输入314,而第二MUX控制输入316由CF 308提供。

在图3a的较低部分中在时间t1处描绘了srcdst寄存器r64的src[63:32]和dst[31:0]的值。如果src2小于或等于max1和max2二者,则p1和p2将都为‘0’并且srcdst寄存器r64中的数据将保持不变。否则,如果p1和/或p2为‘1’,则或者max1或者max2将由src2替换,这取决于CF的值。在时间t0处,CF的值将是‘1’或‘0’。如果在t0处CF = ‘1’,则max2将由src2替换并且CF的值将被设置成使得其为非p1(!p1)。如果CF = ‘0’,则max1将由src2替换,并且CF的值将被设置成使得其等于p2。

用于Arm处理器微架构的2MIN和2MAX指令

可以在采用x86 ISA的处理器中实现前述2MIN和2MAX指令。然而,这仅是示例性的和非限制性的,因为可以在各种处理器架构上实现前述指令的变体。例如,考虑RISC样式Arm处理器。指令一般容许3个操作数。它们具有对通用寄存器(GPR)(例如,16或32寄存器)起作用的整数标量指令,以及对128位SIMD(被称作Neon)寄存器起作用的向量/浮点指令。

图4中示出了Arm处理器微架构400的一个实施例的示例。微架构400包括分支预测单元(BPU)402,获取单元404,指令翻译旁视缓冲器(ITLB)406,64Kb(千字节)指令贮存器408,获取队列410,多个解码器(DEC)412,寄存器重命名块414,重排序缓冲器(ROB)416,保留站单元(RSU)418、420和422,分支算术逻辑单元(BR/ALU)424,ALU/MUL(乘法器)/BR 426, 移位/ALU 428和430,以及加载/存储块432和434。微架构400进一步包括向量/浮点(VFP)Neon块436和438以及VFP Neon密码块440、L2控制块442、整数寄存器444、128位VFP和Neon寄存器446、ITLB 448和64KB指令贮存器450。

清单7示出了与利用64位Arm微架构实现的64位2MIN指令A64_Compute-2MIN-v1_GPR Xd, Dm的一个实施例对应的伪代码。

图5示出了指令A64_Compute-2MIN-v1_GPR Xd, Dm的硬件实现的一个实施例。硬件组件包括64位GPR Xd、32位GPR Dm、第一和第二比较器500和502,所述第一和第二比较器500和502具有被耦合作为MUX 504的控制输入510和512的相应输出。如所图示的,在时间t0处将32位min1和min2值的并置加载到64位GPR Xd中,而将32位src2加载到32位GPR Dm中。比较器500接收min2和src2作为输入并且如果src2 < min2则输出逻辑‘1’,如通过判定块506所描绘的。如果src2 ≥ min2,则比较器500输出‘0’。同时,比较器502接收min1和src2作为输入并且如果src2 < min1则输出逻辑‘1’,如通过判定块508所描绘的。如果src2 ≥ min1,则比较器502输出‘0’。

将比较器500和502的输出用作MUX 504的控制输入510和512。如果相应的控制输入510和512为0:X,则GPR Xd中的min1和min2值保持不变。如果相应的控制输入510和512为1:0,则在GPR Xd中用src2替换min2。如果相应的控制输入510和512为1:1,则在GPR Xd中用src2替换min1并且用min1替换min2。

清单8示出了与利用64位Arm微架构实现的2MIN指令A64_Compute-2MIN-v1_VFP Vd.2D, Vm.2D的SIMD向量128位寄存器变体的一个实施例对应的伪代码。

图6示出了根据一个实施例的A64_Compute-2MIN-v1_VFP Vd.2D, Vm.2D SIMD指令的示例性基于64位ARM的硬件实现。该实现被配置成并行地针对两个64位数据路径有序地返回三个输入值之中的最小的两个值。其使用与A64_Compute-2MIN-v1_GPR Xd, Dm类似的逻辑,但在两个64位数据路径而不是一个上进行操作。

图6中示出的硬件实现包括一对128位寄存器Vd和Vm。Vd被配置成存储与这两个64位数据路径中的每个的min1和min2输入参数对应的四个32位值。如所示,将被标注min11和min21的第一组min1和min2值分别加载到寄存器Vd的32位部分[63:32]和[31:0]中,而将被标注min12和min22的第二组min1和min2值加载到寄存器Vd的32位部分[127:96]和[95:64]中。出于说明性目的,将寄存器Vd一分为二;然而,本领域技术人员将认识到,在实际实现中Vd是单个128位寄存器。在一个实施例中,编译器针对第一数据路径将min11 +min21并置,并且针对第二数据路径将min12 + min22并置。

使用128位寄存器Vm来存储用于每个64位数据路径的src2输入。如所示,将被标注src21的用于第一数据路径的src2加载到寄存器Vm的32位部分[31:0]中,而将被标注src22的用于第二数据路径的src2加载到寄存器Vm的32位部分[95:64]中。

如图6中所示,用于处理用于第一和第二数据路径中的每个的min1、min2和src2的逻辑相同并且被并行地执行。用于第一数据路径1的处理被示出在左手侧上,而用于第二数据路径2的处理被示出在右手侧上。

第一数据路径的处理如下进行。将min21和src21加载到第一比较器600中,而将min11和src21加载到第二比较器602中。如通过判定块612所描绘的,如果src21 < min21则比较器600输出‘1’(是),否则其输出‘0’(否)。类似地,并且如通过判定块614所描绘的,如果src21 < min11则比较器602输出‘1’,否则其输出‘0’。比较器600和602的输出被提供作为MUX 604的控制输入。如图6的较低左手部分中所示,如果判定块612的答案为否(‘0’,即src21 ≥ min21),则min11和min21保持不变。如果判定块612的答案为是并且判定块614的答案为否,则用src21替换min21。如果判定块612和614二者的答案都为是,则用src21替换min11,而用min11替换min21。

第二数据路径的处理如下进行。将min22和src22加载到第三比较器606中,而将min12和src22加载到第四比较器608中。如通过判定块618所描绘的,如果src22 < min22则比较器606输出‘1’(是),否则其输出‘0’(否)。类似地,并且如通过判定块620所描绘的,如果src22 < min12则比较器608输出‘1’,否则其输出‘0’。比较器606和608的输出被提供作为MUX 610的控制输入。如图6的较低右手部分中所示,如果判定块618的答案为否,则min12和min22保持不变。如果判定块618的答案为是并且判定块620的答案为否,则用src22替换min22。如果判定块618和620二者的答案都为是,则用src22替换min12,而用min12替换min22。

图7示出了使用用以返回最小的两个值的A64_Compute-2MIN-v1_VFP Vd.2D, Vm.2D SIMD指令对n元素数组700的并行处理。如所图示的,将数组700中的元素分成两个子数组700a和700b,每个具有n/2个元素。然后并行地处理每个子数组700a和700b,循环访问子数组元素直到达到子数组的末端为止。如所示,在处理子数组700a的结束时,min11和min21为6和8,而在处理子数组700b的结束时,min12和min22为5和12。

此时,两个最小值有四个候选。如所示,数据路径1和1的并行处理被完成,并且使用单个数据路径来完成该处理。在所图示的实施例中,A64_Compute-2MIN-v1_VFP Vd.2D, Vm.2D SIMD指令被调用两次,首次加载5作为scr21并且然后加载12作为scr21。最终结果返回5和6作为两个最小值。

作为另一选项,如果在处理器中实现A64_Compute-2MIN-v1_VFP Vd.2D, Vm.2D SIMD指令和A64_Compute-2MIN-v1_GPR Xd, Dm指令二者,则可以使用A64_Compute-2MIN-v1_GPR Xd, Dm来执行单个路径操作。在图7a中图示了这一点,在完成并行部分并且执行两个A64_Compute-2MIN-v1_GPR Xd, Dm指令之后,其中第一指令使用(并置的)min11和min21值6和8作为Xd操作数值并且使用min12值5作为第一src2值并且使用min22值12作为第二src2值用于指令的第二执行。

清单9示出了与利用64位Arm微架构实现的64位2MAX指令A64_Compute-2MAX-v1_GPR Xd, Dm的一个实施例对应的伪代码。

图5a示出了指令A64_Compute-2MAX-v1_GPR Xd, Dm的硬件实现的一个实施例。硬件组件包括64位GPR Xd、32位GPR Dm、第一和第二比较器500a和502a,所述第一和第二比较器500a和502a具有被耦合作为MUX 504的控制输入510和512的相应输出。如所图示的,在时间t0处将32位min1和min2值的并置加载到64位GPR Xd中,而将32位src2加载到32位GPR Dm中。比较器500a接收min2和src2作为输入并且如果src2 > max2则输出逻辑‘1’,如通过判定块506a所描绘的。如果src2 ≤ max2,则比较器500a输出‘0’。同时,比较器502a接收max1和src2作为输入并且如果src2 > max1则输出逻辑‘1’,如通过判定块508a所描绘的。如果src2 ≤ max1,则比较器502输出‘0’。

比较器500a和502a的输出被用作MUX 504的控制输入510和512。如果相应的控制输入510和512为0:X,则GPR Xd中的max1和max2值保持不变。如果相应的控制输入510和512为1:0,则在GPR Xd中用src2替换max2。如果相应的控制输入510和512为1:1,则在GPR Xd中用src2替换max1并且用max1替换max2。

清单10示出了与利用64位Arm微架构实现的2MAX指令A64_Compute-2MAX-v1_VFP Vd.2D, Vm.2D的SIMD向量128位寄存器变体的一个实施例对应的伪代码。

图6a示出了根据一个实施例的A64_Compute-2MAX-v1_VFP Vd.2D, Vm.2D SIMD指令的示例性基于64位ARM的硬件实现。该实现被配置成并行地针对两个64位数据路径有序地返回三个输入值之中的两个最大值。其使用与A64_Compute-2MAX-v1_GPR Xd, Dm类似的逻辑,但在两个64位数据路径而不是一个上进行操作。总体结构也与在图6中针对A64_Compute-2MIN-v1_VFP Vd.2D, Vm.2D示出的结构类似,但确定max11、max21、max12和max22而不是min11、min21、min12和min22。

一般地,可以以迭代的或递归的方式来实现在本文中描述的2MIN和2MAX指令,以为诸如数组或堆之类的数据集合确定两个最小值或两个最大值。例如,可以结合循环访问元素数组等来迭代地调用2MIN或2MAX指令,在元素数组等下存在应用源代码级处的三个或四个参数(min1、min2和src2,或min1、min2、el1和el2)。在一个实施例中,编译器将提取2MIN和2MAX指令的机器代码级操作数映射,其中诸如min1和min2之类的各种参数将被编译器并置为上面描述的MIN2和MAX2操作数。在另一实施例中,写应用级源代码,使得min1和min2在源代码级处并置并且作为单个参数(例如,srcdst)传递,在应用级代码和机器指令级代码之间创建用于编译器的更直接的映射。

由于在应用源代码级处的功能一般返回单个值,或者将会将从机器级2MIN指令的执行输出的并置的min1和min2返回到功能调用者,或者将会返回指向包含min1和min2的数据结构的指针。例如,如果以C、C++或支持指针的另一语言来写应用,则在应用源代码级处的结果可能是指向包含min1和min2的并置的数据结构的指针。针对不支持指针的诸如Java之类的语言,Java源代码将一般包括具有min1和min2的并置被写到的数据结构的返回值。

在递归算法下,函数结果或输出常常被用作函数的下一递归调用的输入。利用2MIN和2MAX指令的该方法的优点是结合2MIN或2MAX指令的修改版本的智能编译器可以对机器级指令进行编码以使得每当指令被调用时不需要将新的min1和min2(或max1和max2)加载到寄存器中以用于指令的第一操作数;相反,由于min1和min2的新值将与min1和min2的返回值相同,经修改的指令将仅需要加载src2值,用于与已经在第一操作数寄存器中的min1和min2值的比较。

在以下经编号的条款(clause)中阐述了在本文中描述的主题的其它方面:

1. 一种具有包括2MIN指令的指令集架构(ISA)的处理器,所述2MIN指令具有两个操作数,其中在2MIN指令的执行期间加载包括第一和第二当前最小值以及至少一个比较值的数据参数,其中2MIN指令输出在第一和第二当前最小值以及所述至少一个比较值之中的两个最小值。

2. 条款1的处理器,其中有序地输出两个最小值。

3. 条款1或2的处理器,其中无序地输出两个最小值。

4. 前述条款中的任一个的处理器,其中将第一和第二当前最小值加载到单个寄存器中,作为第一当前最小值之后是第二最小值的并置。

5. 前述条款中的任一个的处理器,其中ISA包括多个微代码指令,并且其中经由从所述多个微代码指令之中的微代码指令的使用而至少部分地实现2MIN指令。

6. 前述条款中的任一个的处理器,其中所述至少一个比较值是第一和第二比较值,并且2MIN指令输出在第一和第二当前最小值以及第一和第二比较值之中的两个最小值。

7. 前述条款中的任一个的处理器,其中在硬件电路中实现2MIN指令,所述硬件电路包括:

具有较高[63:32]和较低[31:0]32位部分的64位寄存器,64位寄存器用以将第一最小值min1存储在较高[63:32]部分中并且将第二最小值min2存储在较低[31:0]部分中;

32位寄存器,用以存储比较值src2;

第一比较器,其耦合到32位寄存器以接收src2值并且耦合到64位寄存器的较低[31:0]部分以接收min2值;

第二比较器,其耦合到32位寄存器以接收src2值并且耦合到64位寄存器的较高[63:32]部分以接收min1值;以及

多路复用器,其具有耦合到64位寄存器的较高[63:32]部分以接收min1值的第一输入、耦合到32位寄存器以接收src2值的第二输入、分别耦合到第一和第二比较器的输出的第一和第二控制输入、耦合到64位寄存器的较高[63:32]部分的第一输出,以及耦合到64位寄存器的较低[31:0]部分的第二输出。

8. 条款7的处理器,其中min1 ≤ min2,指令的输出被存储作为存储在64位寄存器中的第一和第二输出最小值的并置,并且硬件电路包括逻辑,所述逻辑被配置成:

如果src2 ≥ min2,则输出min1并上min2;

如果src2 < min2且src2 ≥ min1,则输出min1并上src2;以及

如果src2 < min2且src2 < min1,则输出src2并上min1。

9. 前述条款中的任一个的处理器,其中在硬件电路中实现2MIN指令,所述硬件电路包括:

具有较高[63:32]和较低[31:0]32位部分的64位srcdst寄存器,srcdst寄存器用以将第一最小值min1存储在较高[63:32]部分中并且将第二最小值min2存储在较低[31:0]部分中;

具有较高[63:32]和较低[31:0]32位部分的64位src2寄存器,src2寄存器用以将第一比较值el1存储在较低32位部分[31:0]中并且将第二比较值el2存储在较高32位[63:32]中;

src2选择器逻辑,其耦合到第二64位寄存器以选择src2寄存器的或者较高[63:32]部分或者较低[31:0]部分;

第一比较器,其耦合到src2选择器逻辑的输出以接收el1或el2值并且耦合到64位srcdst寄存器的较低[31:0]部分以接收min2;

第二比较器,其耦合到src2选择器逻辑的输出以接收el1或el2值并且耦合到64位srcdst寄存器的较高[63:32]部分以接收min1值;以及

多路复用器,其具有耦合到64位srcdst寄存器的较高[63:32]部分以接收min1的第一输入、耦合到src2寄存器的较高[63:32]部分以接收el2值的第二输入、耦合到src2寄存器的较低[31:0]部分以接收el1值的第三输入、分别耦合到第一和第二比较器的输出的第一和第二控制输入、用以接收src2低或src2高信号的第三控制输入、耦合到64位srcdst寄存器的较高[63:32]部分的第一输出,以及耦合到64位srcdst寄存器的较低[31:0]部分的第二输出。

10. 条款9的处理器,其中min1 ≤ min2,指令的输出被存储作为存储在64位srcdst寄存器中的第一和第二输出最小值的并置,并且硬件电路包括逻辑,所述逻辑被配置成:

在第一时间帧期间,

如果el1 ≥ min2,则输出min1并上min2;

如果el1 < min2且el1 ≥ min1,则输出min1并上src2;以及

如果el1 < min2且el1 < min1,则输出src2并上min1;

将min1和min2设置成与64位srcdst寄存器的较高[63:32]部分和较低[31:0]部分对应;

在第二时间帧期间,

如果el2 ≥ min2,则输出min1并上min2;

如果el2<min2且el2≥min1,则输出min1并上src2;以及

如果el2<min2且el2<min1,则输出src2并上min1。

11. 前述条款中的任一个的处理器,其中在硬件电路中实现2MIN指令,所述硬件电路包括:

具有较高[63:32]和较低[31:0]32位部分的64位寄存器,64位寄存器用以将第一最小值min1存储在较高[63:32]部分中并且将第二最小值min2存储在较低[31:0]部分中;

32位寄存器,用以存储比较值src2;

第一比较器,其耦合到32位寄存器以接收src2值并且耦合到64位寄存器的较低[31:0]部分以接收min2值;

第二比较器,其耦合到32位寄存器以接收src2值并且耦合到64位寄存器的较高[63:32]部分以接收min1值;

逻辑或门,其耦合到第一比较器的输出和第二比较器的输出;

进位标志(CF);以及

多路复用器,其具有耦合到64位寄存器的较高[63:32]部分以接收min1值的第一输入、耦合到32位寄存器以接收src2值的第二输入、分别耦合到逻辑或门和进位标志的输出的第一和第二控制输入;耦合到64位寄存器的较高[63:32]部分的第一输出,以及耦合到64位寄存器的较低[31:0]部分的第二输出。

12. 条款11的处理器,其中指令的输出被存储作为存储在64位寄存器中的第一和第二输出最小值的并置,并且硬件电路包括逻辑,所述逻辑被配置成:

如果src2 ≥ min2且src2 ≥ min1,则输出min1并上min2;

如果src2小于min1和min2中的至少一个并且CF = ‘0’则输出min1并上src2,并且将CF设置成不等于第一比较器的输出;以及

如果src2小于min1和min2中的至少一个并且CF = ‘1’则输出src2并上min2,并且将CF设置成等于第二比较器的输出。

13. 前述条款中的任一个的处理器,其中处理器采用基于Arm的微架构,并且其中在硬件电路中实现2MIN指令,所述硬件电路包括:

具有较高[63:32]和较低[31:0]32位部分的64位通用寄存器(GPR),64位GPR用以将第一最小值min1存储在较高[63:32]部分中并且将第二最小值min2存储在较低[31:0]部分中;

32位GPR,用以存储比较值src2;

第一比较器,其耦合到32位GPR以接收src2值并且耦合到64位GPR的较低[31:0]部分以接收min2值;

第二比较器,其耦合到32位GPR以接收src2值并且耦合到64位GPR的较高[63:32]部分以接收min1值;以及

多路复用器,其具有耦合到64位GPR的较高[63:32]部分以接收min1值的第一输入、耦合到32位寄存器以接收src2值的第二输入、分别耦合到第一和第二比较器的输出的第一和第二控制输入、耦合到64位GPR的较高[63:32]部分的第一输出,以及耦合到64位GPR的较低[31:0]部分的第二输出。

14. 条款13的处理器,其中min1 ≤ min2,指令的输出被存储作为存储在64位GPR中的第一和第二输出最小值的并置,并且硬件电路包括逻辑,所述逻辑被配置成:

如果src2 ≥ min2,则输出min1并上min2;

如果src2 < min2且src2 ≥ min1,则输出min1并上src2;以及

如果src2 < min2且src2 < min1,则输出src2并上min1。

15. 一种具有包括128位SIMD(单指令多数据)指令的指令集架构(ISA)的处理器,所述指令被配置成在被执行时输出:

在包括第一对当前最小值和第一比较值的第一组输入值之中的第一对最小值;以及

在包括第二对当前最小值和第二比较值的第二组输入值之中的第二对最小值。

16. 条款15的处理器,其中第一对最小值和第二对最小值中的每个是有序的。

17. 条款15或16的处理器,其中128位SIMD指令被配置成并行地处理来自两个64位数据路径的第一组和第二组输入值。

18. 条款15-17中的任一个的处理器,其中128位SIMD指令包括第一操作数和第二操作数,所述第一操作数包括第一对当前最小值和第二对最小值的并置,所述第二操作数包括第一比较值和第二比较值的并置。

19. 条款18的处理器,其中,在128位SIMD指令的执行期间,将与第一操作数对应的数据的128位加载到第一128位寄存器中作为包括第一对和第二对最小值的四个32位参数,并且将与第二操作数对应的数据加载到第二128位寄存器中作为包括第一和第二比较值的两个32位参数。

20. 条款19的处理器,其中将包括第一对最小值并上第二对最小值的128位SIMD指令的输出存储在第一128位寄存器中。

21. 条款15-20中的任一个的处理器,其中处理器采用基于Arm的微架构,并且其中在硬件电路中实现2MIN指令,所述硬件电路包括:

第一128位寄存器,用以存储与第一对最小值对应的第一min1和min2值以及存储与第二对最小值对应的第二min1和min2值;

第二128位寄存器,用以存储与第一比较值对应的第一src2值和与第二比较值对应的第二src2值;

第一比较器,其耦合到第二128位寄存器以接收第一src2值并且耦合到第一128位寄存器以接收第一min2值;

第二比较器,其耦合到第二128位寄存器以接收第一src2值并且耦合到第一128位寄存器以接收第一min1值;

第一多路复用器,其具有耦合到第一和第二128位寄存器中的每个的数据输入以及分别耦合到来自第一和第二比较器的输出的控制输入;

第三比较器,其耦合到第二128位寄存器以接收第二src2值并且耦合到第一128位寄存器以接收第二min2值;

第四比较器,其耦合到第二128位寄存器以接收第二src2值并且耦合到第一128位寄存器以接收第二min1值;

第二多路复用器,其具有耦合到第一和第二128位寄存器中的每个的数据输入以及分别耦合到来自第三和第四比较器的输出的控制输入。

22. 条款21的处理器,其中硬件电路被配置成并行地处理从两个64位数据路径接收的数据。

23. 一种用于确定具有多个数据元素的数据集合中的最小的两个值的方法,包括:

结合循环访问所述多个数据元素对处理器指令集架构中的2MIN指令进行迭代地或递归地执行中的一个,其中2MIN指令具有两个操作数,其中在2MIN指令的执行期间加载包括第一和第二当前最小值以及至少一个比较值的数据参数,其中2MIN指令输出在第一和第二当前最小值以及所述至少一个比较值之中的两个最小值。

24. 条款23的方法,其中将第一和第二当前最小值加载到单个寄存器中,作为第一当前最小值之后是第二最小值的并置。

25. 条款23或24的方法,其中所述至少一个比较值是第一和第二比较值,并且2MIN指令输出在第一和第二当前最小值以及第一和第二比较值之中的两个最小值。

26. 条款23-25中的任一个的方法,其中处理器采用基于Arm的微架构,并且2MIN指令包括在2MIN指令的执行期间存储在64位通用寄存器(GPR)和32位GPR中的两个操作数。

27. 一种用于确定具有多个数据元素的数据集合中的最小的两个值的方法,包括:

将数据集合划分成数据集合的第一和第二半;

确定与数据集合的第一半对应的第一对最小值;

确定与数据集合的第二半对应的第二对最小值;以及

确定在第一对最小值和第二对最小值之中的两个最小值,

其中通过结合循环访问数据集合的第一和第二半对处理器指令集中的128位SIMD(单指令多数据)指令进行迭代地或递归地执行中的一个而并行地确定第一对和第二对最小值。

28. 条款27的方法,其中使用128位SIMD指令来确定在第一对最小值和第二对最小值之中的两个最小值。

29. 条款27或28的方法,其中使用处理器指令集中包括的64位指令来确定在第一对最小值和第二对最小值之中的两个最小值。

30. 条款27-29中的任一个的方法,其中处理器采用基于Arm的微架构。

31. 一种具有包括2MAX指令的指令集架构(ISA)的处理器,所述2MAX指令具有两个操作数,其中在2MAX指令的执行期间加载包括第一和第二当前最大值以及至少一个比较值的数据参数,其中2MAX指令输出在第一和第二当前最大值以及所述至少一个比较值之中的两个最大值。

32. 条款31的处理器,其中有序地输出两个最大值。

33. 条款31或32的处理器,其中无序地输出两个最大值。

34. 条款31-33中的任一个的处理器,其中将第一和第二当前最大值加载到单个寄存器中,作为第一当前最大值之后是第二最大值的并置。

35. 条款31-34中的任一个的处理器,其中ISA包括多个微代码指令,并且其中经由从所述多个微代码指令之中的微代码指令的使用而至少部分地实现2MAX指令。

36. 条款31-35中的任一个的处理器,其中所述至少一个比较值是第一和第二比较值,并且2MAX指令输出在第一和第二当前最大值以及第一和第二比较值之中的两个最大值。

37. 条款31-36中的任一个的处理器,其中在硬件电路中实现2MAX指令,所述硬件电路包括:

具有较高[63:32]和较低[31:0]32位部分的64位寄存器,64位寄存器用以将第一最大值max1存储在较高[63:32]部分中并且将第二最大值max2存储在较低[31:0]部分中;

32位寄存器,用以存储比较值src2;

第一比较器,其耦合到32位寄存器以接收src2值并且耦合到64位寄存器的较低[31:0]部分以接收max2值;

第二比较器,其耦合到32位寄存器以接收src2值并且耦合到64位寄存器的较高[63:32]部分以接收max1值;以及

多路复用器,其具有耦合到64位寄存器的较高[63:32]部分以接收max1值的第一输入、耦合到32位寄存器以接收src2值的第二输入、分别耦合到第一和第二比较器的输出的第一和第二控制输入、耦合到64位寄存器的较高[63:32]部分的第一输出,以及耦合到64位寄存器的较低[31:0]部分的第二输出。

38. 条款37的处理器,其中max1 ≥ max2,指令的输出被存储作为存储在64位寄存器中的第一和第二输出最大值的并置,并且硬件电路包括逻辑,所述逻辑被配置成:

如果src2 ≤ max2,则输出max1并上max2;

如果src2 > max2且src2 ≤ max1,则输出max1并上src2;以及

如果src2 > max2且src2 > max1,则输出src2并上max1。

39. 条款31-38中的任一个的处理器,其中在硬件电路中实现2MAX指令,所述硬件电路包括:

具有较高[63:32]和较低[31:0]32位部分的64位srcdst寄存器,srcdst寄存器用以将第一最大值max1存储在较高[63:32]部分中并且将第二最大值max2存储在较低[31:0]部分中;

具有较高[63:32]和较低[31:0]32位部分的64位src2寄存器,src2寄存器用以将第一比较值el1存储在较低32位部分[31:0]中并且将第二比较值el2存储在较高32位[63:32]中;

src2选择器逻辑,其耦合到第二64位寄存器以选择src2寄存器的或者较高[63:32]部分或者较低[31:0]部分;

第一比较器,其耦合到src2选择器逻辑的输出以接收el1或el2值并且耦合到64位srcdst寄存器的较低[31:0]部分以接收max2;

第二比较器,其耦合到src2选择器逻辑的输出以接收el1或el2值并且耦合到64位srcdst寄存器的较高[63:32]部分以接收max1值;以及

多路复用器,其具有耦合到64位srcdst寄存器的较高[63:32]部分以接收max1的第一输入、耦合到src2寄存器的较高[63:32]部分以接收el2值的第二输入、耦合到src2寄存器的较低[31:0]部分以接收el1值的第三输入、分别耦合到第一和第二比较器的输出的第一和第二控制输入、用以接收src2低或src2高信号的第三控制输入、耦合到64位srcdst寄存器的较高[63:32]部分的第一输出,以及耦合到64位srcdst寄存器的较低[31:0]部分的第二输出。

40. 条款39的处理器,其中max1 ≥ max2,指令的输出被存储作为存储在64位srcdst寄存器中的第一和第二输出最大值的并置,并且硬件电路包括逻辑,所述逻辑被配置成:

在第一时间帧期间,

如果el1 ≤ max2,则输出max1并上max2;

如果el1 > max2且el1 ≤ max1,则输出max1并上src2;以及

如果el1 > max2且el1 > max1,则输出src2并上max1;

将max1和max2设置成与64位srcdst寄存器的较高[63:32]部分和较低[31:0]部分对应;

在第二时间帧期间,

如果el2 ≤ max2,则输出max1并上max2;

如果el2 > max2且el2 ≤ max1,则输出max1并上src2;以及

如果el2 > max2且el2 > max1,则输出src2并上max1。

41. 条款31-40中的任一个的处理器,其中在硬件电路中实现2MAX指令,所述硬件电路包括:

具有较高[63:32]和较低[31:0]32位部分的64位寄存器,64位寄存器用以将第一最大值max1存储在较高[63:32]部分中并且将第二最大值max2存储在较低[31:0]部分中;

32位寄存器,用以存储比较值src2;

第一比较器,其耦合到32位寄存器以接收src2值并且耦合到64位寄存器的较低[31:0]部分以接收max2值;

第二比较器,其耦合到32位寄存器以接收src2值并且耦合到64位寄存器的较高[63:32]部分以接收max1值;

逻辑或门,其耦合到第一比较器的输出和第二比较器的输出;

进位标志(CF);以及

多路复用器,其具有耦合到64位寄存器的较高[63:32]部分以接收max1值的第一输入、耦合到32位寄存器以接收src2值的第二输入、分别耦合到逻辑或门和进位标志的输出的第一和第二控制输入;耦合到64位寄存器的较高[63:32]部分的第一输出,以及耦合到64位寄存器的较低[31:0]部分的第二输出。

42. 条款41的处理器,其中指令的输出被存储作为存储在64位寄存器中的第一和第二输出最大值的并置,并且硬件电路包括逻辑,所述逻辑被配置成:

如果src2 ≤ max2且src2 ≤ max1,则输出max1并上max2;

如果src2大于max1和max2中的至少一个并且CF = ‘0’则输出max1并上src2,并且将CF设置成不等于第一比较器的输出;以及

如果src2大于max1和max2中的至少一个并且CF = ‘1’则输出src2并上max2,并且将CF设置成等于第二比较器的输出。

43. 条款31-42中的任一个的处理器,其中处理器采用基于Arm的微架构,并且其中在硬件电路中实现2MAX指令,所述硬件电路包括:

具有较高[63:32]和较低[31:0]32位部分的64位通用寄存器(GPR),64位GPR用以将第一最大值max1存储在较高[63:32]部分中并且将第二最大值max2存储在较低[31:0]部分中;

32位GPR,用以存储比较值src2;

第一比较器,其耦合到32位GPR以接收src2值并且耦合到64位GPR的较低[31:0]部分以接收max2值;

第二比较器,其耦合到32位GPR以接收src2值并且耦合到64位GPR的较高[63:32]部分以接收max1值;以及

多路复用器,其具有耦合到64位GPR的较高[63:32]部分以接收max1值的第一输入、耦合到32位寄存器以接收src2值的第二输入、分别耦合到第一和第二比较器的输出的第一和第二控制输入、耦合到64位GPR的较高[63:32]部分的第一输出,以及耦合到64位GPR的较低[31:0]部分的第二输出。

44. 条款43的处理器,其中max1 ≥ max2,指令的输出被存储作为存储在64位GPR中的第一和第二输出最大值的并置,并且硬件电路包括逻辑,所述逻辑被配置成:

如果src2 ≤ max2,则输出max1并上max2;

如果src2 > max2且src2 ≤ max1,则输出max1并上src2;以及

如果src2 > max2且src2 > max1,则输出src2并上max1。

45. 一种具有包括128位SIMD(单指令多数据)指令的指令集架构(ISA)的处理器,所述指令被配置成在被执行时输出:

在包括第一对当前最大值和第一比较值的第一组输入值之中的第一对最大值;以及

在包括第二对当前最大值和第二比较值的第二组输入值之中的第二对最大值。

46. 条款45的处理器,其中第一对最大值和第二对最大值中的每个是有序的。

47. 条款45或46的处理器,其中128位SIMD指令被配置成并行地处理来自两个64位数据路径的第一组和第二组输入值。

48. 条款45-47中的任一个的处理器,其中128位SIMD指令包括第一操作数和第二操作数,所述第一操作数包括第一对当前最大值和第二对最大值的并置,所述第二操作数包括第一比较值和第二比较值的并置。

49. 条款48的处理器,其中,在128位SIMD指令的执行期间,将与第一操作数对应的数据的128位加载到第一128位寄存器中作为包括第一对和第二对最大值的四个32位参数,并且将与第二操作数对应的数据加载到第二128位寄存器中作为包括第一和第二比较值的两个32位参数。

50. 条款49的处理器,其中将包括第一对最大值并上第二对最大值的128位SIMD指令的输出存储在第一128位寄存器中。

51. 条款45-50中的任一个的处理器,其中处理器采用基于Arm的微架构,并且其中在硬件电路中实现2MAX指令,所述硬件电路包括:

第一128位寄存器,用以存储与第一对最大值对应的第一max1和max2值以及存储与第二对最大值对应的第二max1和max2值;

第二128位寄存器,用以存储与第一比较值对应的第一src2值和与第二比较值对应的第二src2值;

第一比较器,其耦合到第二128位寄存器以接收第一src2值并且耦合到第一128位寄存器以接收第一max2值;

第二比较器,其耦合到第二128位寄存器以接收第一src2值并且耦合到第一128位寄存器以接收第一max1值;

第一多路复用器,其具有耦合到第一和第二128位寄存器中的每个的数据输入以及分别耦合到来自第一和第二比较器的输出的控制输入;

第三比较器,其耦合到第二128位寄存器以接收第二src2值并且耦合到第一128位寄存器以接收第二max2值;

第四比较器,其耦合到第二128位寄存器以接收第二src2值并且耦合到第一128位寄存器以接收第二max1值;

第二多路复用器,其具有耦合到第一和第二128位寄存器中的每个的数据输入以及分别耦合到来自第三和第四比较器的输出的控制输入。

52. 条款51的处理器,其中硬件电路被配置成并行地处理从两个64位数据路径接收的数据。

53. 一种用于确定具有多个数据元素的数据集合中的最大的两个值的方法,包括:

结合循环访问所述多个数据元素对处理器指令集架构中的2MAX指令进行迭代地或递归地执行中的一个,其中2MAX指令具有两个操作数,其中在2MAX指令的执行期间加载包括第一和第二当前最大值以及至少一个比较值的数据参数,其中2MAX指令输出在第一和第二当前最大值以及所述至少一个比较值之中的两个最大值。

54. 条款53的方法,其中将第一和第二当前最大值加载到单个寄存器中,作为第一当前最大值之后是第二最大值的并置。

55. 条款53或54的方法,其中所述至少一个比较值是第一和第二比较值,并且2MAX指令输出在第一和第二当前最大值以及第一和第二比较值之中的两个最大值。

56. 条款53-55中的任一个的方法,其中处理器采用基于Arm的微架构,并且2MAX指令包括在2MAX指令的执行期间存储在64位通用寄存器(GPR)和32位GPR中的两个操作数。

57. 一种用于确定具有多个数据元素的数据集合中的最大的两个值的方法,包括:

将数据集合划分成数据集合的第一和第二半;

确定与数据集合的第一半对应的第一对最大值;

确定与数据集合的第二半对应的第二对最大值;以及

确定在第一对最大值和第二对最大值之中的两个最大值,

其中通过结合循环访问数据集合的第一和第二半对处理器指令集中的128位SIMD(单指令多数据)指令进行迭代地或递归地执行中的一个而并行地确定第一对和第二对最大值。

58. 条款57的方法,其中使用128位SIMD指令来确定在第一对最大值和第二对最大值之中的两个最大值。

59. 条款57或58的方法,其中使用处理器指令集中包括的64位指令来确定在第一对最大值和第二对最大值之中的两个最大值。

60. 条款57-59中的任一个的方法,其中处理器采用基于Arm的微架构。

另外,本说明书的实施例不仅可以在半导体芯片内而且可以在机器可读介质内实现。例如,上面描述的设计可以被存储在与用于设计半导体器件的设计工具相关联的机器可读介质上和/或嵌入在所述机器可读介质内。示例包括以VHSIC硬件描述语言(VHDL)语言、Verilog语言或SPICE语言格式化的网表。一些网表示例包括:行为级网表、寄存器传送级(RTL)网表、门级网表和晶体管级网表。机器可读介质还包括具有诸如GDS-II文件之类的布局信息的介质。此外,可以将网表文件或用于半导体芯片设计的其它机器可读介质用在仿真环境中以执行上面描述的教导的方法。

尽管已经参考特定实现描述了一些实施例,但是根据一些实施例的其它实现是可能的。另外,在附图中图示的和/或在本文中描述的元件的布置和/或顺序或者其它特征不需要以图示和描述的特定方式布置。根据一些实施例的许多其它布置是可能的。

在图中示出的每个系统中,元件在一些情况下可能每个具有相同的参考号码或不同的参考号码以暗示所表示的元件可能不同和/或类似。然而,元件可能足够灵活以具有不同的实现并与本文中示出或描述的系统中的一些或全部一起工作。图中示出的各种元件可能相同或不同。哪一个称为第一元件和哪个称作第二元件是任意的。

在说明书和权利要求书中,可能使用了术语“耦合”和 “连接”连同其派生词。应当理解,这些术语不意图作为彼此的同义词。倒不如说,在特定实施例中,“连接”可以用来指示两个或更多个元件彼此直接物理或电接触。“耦合”可以意味着两个或更多个元件直接物理或电接触。然而,“耦合”还可以意味着两个或更多个元件彼此不直接接触,但是还仍然彼此合作或交互。

实施例是本发明的实现或示例。在说明书中对“实施例”、“一个实施例”、“一些实施例”或“其它实施例”的引用意味着结合实施例所描述的特定特征、结构或特性被包括在本发明的至少一些实施例、但不一定所有实施例中。“实施例”、“一个实施例”或“一些实施例”的各种出现不一定都指代相同实施例。

并非本文中描述和图示的所有组件、特征、结构、特性等需要被包括在一个或多个特定实施例中。如果本说明书例如声明组件、特征、结构或特性“可能”、“也许”、“可以”或“能够”被包括,则不要求包括该特定组件、特征、结构或特性。如果本说明书或权利要求书提到“一”或“一个”元件,则那不意味着仅存在一个元件。如果本说明书或权利要求书提到“附加”元件,则那不排除存在不止一个附加元件。

如上面所讨论的,本文中的实施例的各种方面可以通过诸如由嵌入式处理器等执行的软件和/或固件之类的对应的软件和/或固件组件以及应用来促进。因此,本发明的实施例可以被用作或将支持在一些形式的处理器、处理核或嵌入式逻辑上执行的软件程序、软件模块、固件和/或分布式软件,在处理器或核上运行或以其它方式在计算机可读或机器可读非瞬时存储介质上或内实施或实现的虚拟机。计算机可读或机器可读非瞬时存储介质包括用于存储或传输以由机器(例如,计算机)可读的形式的信息的任何机构。例如,计算机可读或机器可读非瞬时存储介质包括提供(即,存储和/或传输)以可由计算机或计算机器(例如,计算设备、电子系统等)访问的形式的信息的任何机构,诸如可记录/不可记录介质(例如,只读存储器(ROM)、随机存取存储器(RAM)、磁盘存储介质、光学存储介质、闪存设备等)。内容可以是可直接执行的(“对象”或“可执行”形式)、源代码或差异代码(“增量”或“补丁”代码)。计算机可读或机器可读非瞬时存储介质还可以包括可以从其下载内容的记忆装置或数据库。计算机可读或机器可读非瞬时存储介质还可以包括具有在销售或递送时存储在其上的内容的设备或产品。因此,可以将向设备递送所存储的内容或提供内容以用于通过通信介质下载理解为向包括计算机可读或机器可读非瞬时存储介质的制品提供在本文中描述的这样的内容。

在本文中描述的上面称为过程、服务器或工具的各种组件可以是用于执行所描述的功能的部件。在本文中描述的各种组件执行的操作和功能可以通过在处理元件上运行的软件、经由嵌入式硬件等或硬件和软件的任何组合来实现。可以将这样的组件实现为软件模块、硬件模块、专用硬件(例如,应用特定的硬件、ASIC、DSP等)、嵌入式控制器、硬接线电路、硬件逻辑等。可以经由包括计算机可读或机器可读非瞬时存储介质的制品来提供软件内容(例如,数据、指令、配置信息等),所述计算机可读或机器可读非瞬时存储介质提供表示可以被执行的指令的内容。该内容可能导致计算机执行在本文中描述的各种功能/操作。

如在本文中使用的,通过术语“……的至少一个”连接的项目的列表可以意味着所列术语的任何组合。例如,短语“A、B或C中的至少一个”可以意味着 A;B;C;A和B;A和C;B和C;或A、B和C。

本发明的所图示的实施例的上面的描述,包括在摘要中描述的东西,不意图是详尽的或将本发明限于所公开的精确形式。虽然出于说明性目的而在本文中描述了本发明的特定实施例和用于本发明的示例,但是在本发明的范围内的各种等同修改是可能的,如相关领域技术人员将认识到的那样。

根据上面的详细描述,可以对本发明做出这些修改。不应当将在以下权利要求书中使用的术语解释成将本发明限于在说明书和附图中公开的特定实施例。相反,本发明的范围将完全由将依照所建立的权利要求解释教条来解释的以下权利要求限制。

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