用于执行冲突检测并将寄存器的内容广播到另一个寄存器的数据元素位置的系统、装置...的制作方法_2

文档序号:8926990阅读:来源:国知局
用于掩码,当向量的数据元素尺寸是32位时8位可以用于掩码,当向量的数据元素 尺寸是64位时4位可以用于掩码。当向量尺寸是512位时,当向量的数据元素尺寸是8位 时64位可以用于掩码,当向量的数据元素尺寸是16位时32位可以用于掩码,当向量的数 据元素尺寸是32位时16位可以用于掩码,且当向量的数据元素尺寸是64位时,8位可以用 于掩码。
[0032] 依赖于向量尺寸和数据元素尺寸的组合,可将所有64位、或仅64位的子集用作写 掩码。一般而言,当使用单个、每元素掩码控制位时,用于掩码(有效位)的向量写掩码寄 存器中的位的数量等于向量尺寸(以位为单位)除以向量的数据元素尺寸(以位为单位)。
[0033] 如上文所指出的,写掩码寄存器包含掩码位,其对应于向量寄存器(或存储器位 置)中的元素并跟踪应该对其执行操作的元素。因此,希望具有共同的操作,这些操作就向 量寄存器而论在这些掩码位上复制类似的行为,并且通常允许调整写掩码寄存器内的这些 掩码位。
[0034] 我们希望有效地向量化的一种重要的算法模式是"稀疏更新"。此处,我们在间接 寻址的存储器位置上执行读-修改-写操作(例如,加载A[B[i]],向其增加一些东西,并 且将该值存储回A[B[i]])。对此进行向量化包括进行聚集-修改-分散操作,这是我们的 ISA和硬件直接支持的--对于i的16个连续值,聚集16个A[B[i]],进行SMD计算,并 且将新的值分散回去。然而,该向量化假设单个聚集/分散指令访问每个存储器位置不会 超过一次。例如,如果B[i]的两个连续值是相同的,则对于第二个值的读-修改-写依赖 于第一个一一以SMD方式同时进行这些动作违背该依赖性并且可导致不正确的结果。
[0035] 可能会对向量寄存器中的每个值与"较早"(较接近LSB)元素的等同性进行比较。 该指令输出这些比较的结果作为一组位向量。这在图18中示出。假设将存在复制信息,代 码可被向量化且还通过确定具有独特索引的元素子集、以SMD方式计算这些、然后循环回 去以对其余元素再次尝试,来增强贯穿存储器的依赖性,。在伪代码中,这是:
[0037]函数 Compute_Mask_of_Unique_Remaining_Indices 是本公开的一个焦点。该操 作应该进行以下:
[0038] (1)将elements_left_mask零扩展成与索引相同的尺寸,然后将结果与"多个比 较"的每个元素进行逻辑AND。这放弃了在先前的do-while循环迭代中已经计算的任何元 素上的冲突。目前,为此,我们需要将掩码移动到通用寄存器,然后将其广播到向量寄存器。
[0039] (2)测试(1)的结果的每个元素是否与零相等。如果元素是零,则它不具有冲突, 我们在输出掩码寄存器中设置与该元素对应的位。
[0040] (3)将⑵的结果与elements_left_mask进行逻辑AND。这放弃了任何已经被处 理的元素。这可能会使用5个指令。
[0041] 以下的详细描述是执行全部以上的功能的单个指令(vptestconf kl, k2, zmml)。 该指令代替在本公开开始处示出的伪代码中的整个Compute_Mask_of_Unique_Remaining_ Indices函数。这将伪代码改变为:
[0043]
[0044] 该指令可用于计算与能并行进行(彼此不冲突)的迭代的连续向量对应的掩码。 换言之,第一组对应于掩码,该掩码中与先前迭代没有冲突(读至写)的所有元素被设置为 1,这些可并行进行。第二迭代仅需要考虑与未被第一掩码等覆盖的迭代对应的元素。
[0045] 以下是指令集中通常称为向量紧缩测试冲突("VPTESTCONF")指令的指令的实 施例,以及可用于执行将在若干不同方面获益的这种指令的系统、架构、指令格式等的实施 例。VPTESTCONF的执行导致来自源掩码操作数的数据与源紧缩数据操作数的每个数据元素 进行逻辑"AND",之后判断这些逻辑"AND"操作中的哪些指示冲突以形成冲突检查结果,以 及将冲突检查结果与来自源掩码操作数的数据进行逻辑"AND"。第二"AND"的结果被存储 在诸如目的地掩码操作数之类的目的地位置中。在一些实施例中,掩码操作数是如上详细 描述的写掩码寄存器。在一些实施例中,对源掩码操作数进行零扩展以与源紧缩数据操作 数的每个数据元素尺寸相同。
[0046] 图1示出VPTESTCONF的操作的示例性图示。在所示的示例中,利用AND逻辑 105(0)-(N)将来自源掩码寄存器101的数据与紧缩数据源103(0)-(N)的数据元素进行逻 辑"AND"。源寄存器101不必须是写掩码寄存器,且可以是任何其它存储实体,诸如通用寄 存器或紧缩数据寄存器。然而,为了便于理解,在本文中将使用源写掩码寄存器。尽管图示 示出了单独的源写掩码寄存器,但在一些实施例中,该数据被存储在临时紧缩数据寄存器 中,该临时紧缩数据寄存器的尺寸与紧缩数据源103相同。可通过广播指令完成对该寄存 器的写入,稍后在本说明中详细描述该广播指令。在一些实施例中,将源写掩码寄存器的数 据零扩展为与紧缩数据源103的每个紧缩数据元素尺寸相同的数据。这种AND放弃了在先 前详细描述的示例性场景中已经计算的任何元素上的冲突。
[0047] 每个AND操作的结果然后经历逻辑107(0)-107 (N),这些逻辑判断AND的结果是否 为零。如果结果是零,则在该元素和其它数据元素之间没有冲突。这些判断的结果被存储 在临时结果寄存器109的对应位位置中。例如,当紧缩数据源103的数据元素0与源写掩 码寄存器101的数据进行AND,然后通过逻辑107(0)进行冲突判断时,这是数据元素位置0 的冲突结果。因此,这种冲突判断被存储在临时结果寄存器109的位位置0中。在一些实 施例中,当没有冲突时设置" 1"且其它情况下使用"0"。
[0048] 利用逻辑111使临时结果寄存器109的内容与来自源写掩码寄存器101的数据进 行逻辑AND,以放弃已经被处理的任何元素。该AND的结果被存储在目的地写掩码寄存器 113 中。
[0049] VPTESTCONF的示例件格式
[0050] 该指令的示例性格式是"VPTESTCONF Kl,K2, R2",其中目的地操作数K1是写掩码 寄存器,K2是源写掩码寄存器,且源操作数R2是向量(紧缩数据)寄存器(诸如128、256、 512位寄存器等等)且VPTESTCONF是指令的操作码。如先前所注意到的,指令还与其它寄 存器合作,并非仅仅是写掩码寄存器。
[0051] 执行VPTESTCONF的示例件方法
[0052] 图2示出处理器中VPTESTCONF指令的执行的实施例。在201,取出VPTESTCONF指 令,该指令具有源写掩码寄存器操作数、源向量寄存器操作数、操作数和目的地写掩码寄存 器。
[0053] 在203,通过解码逻辑解码VPTESTCONF指令。依赖于指令的格式,在该阶段可解释 各种数据,诸如是否有数据变换,写入和/或检索哪些寄存器、访问哪些存储器地址等。
[0054] 在205,检索/读取源操作数值。例如,读取源向量寄存器。如果源操作数之一或 两者是存储器操作数,则检索与该操作数相关联的数据元素。在一些实施例中,将来自存储 器的数据元素存储在临时寄存器中。在该阶段,在一些实施例中,如果必要,对源写掩码数 据进行零扩展,使其与源向量寄存器中的数据元素尺寸相同。在一些实施例中,(经零扩展 的)源写掩码数据被广播到与源向量寄存器尺寸相同的临时向量寄存器。
[0055] 在207,通过诸如一个或多个功能单元之类的执行资源执行VPTESTCONF指令(或 构成这一指令的操作,诸如微操作),以将来自源掩码操作数的数据与源紧缩数据操作数的 每个数据元素进行逻辑"AND",然后判断逻辑"AND"操作中的哪些指示冲突以形成冲突检 查结果,以及将冲突检查结果与来自源掩码操作数的数据进行逻辑"AND"。
[0056] 在209,第二"AND"的结果被存储在诸如目的地掩码操作数之类的目的地位置中。 虽然分别示出了 207和209,但在一些实施例中,它们作为指令执行的一部分一起执行。
[0057] 图3示出用于处理VPTESTCONF指令的方法的实施例。在该实施例中,假定先前已 经执行了操作201-205中的一些(若不是全部),然而未示出那些操作,以免模糊下文呈现 的细节。例如,未示出取出和解码,也未示出操作数检索。
[0058] 在301,将源写掩码寄存器的数据零扩展(如果需要的话)成与紧缩数据源和目的 地操作数的紧缩数据元素相同的尺寸。例如,如果源写掩码寄存器是8位且具有值 X〇l且 紧缩数据源和目的地的数据元素是16位,则源写掩码寄存器的数据被扩展8位为X0001。 在该阶段,还可完成广播。
[0059] 图4示出用于该广播的示例性过程。在一些实施例中,在401,源写掩码寄存器的 (经零扩展的)数据被移动到通用寄存器。在403,源写掩码寄存器的(经零扩展的)数据 被广播到与源紧缩数据元素寄存器尺寸相同的临时紧缩数据元素(向量)寄存器。
[0060] 在303,执行(经零扩展的)源写掩码寄存器的内容与紧缩数据源的每个数据元素 的逻辑AND。如果执行广播,则在303,进行临时紧缩数据元素寄存器与源紧缩数据元素寄 存器的相应的逐数据元素位置的AND。
[0061 ] 在305,判断每个AND操作的结果是否为零值。对于从AND操作得到的每个零值,在 307,将" 1"写入临时存储位置的相应位位置。对于从AND操作得到的每个非零值,在309, 将"0"写入临时存储位置的相应位位置。"
[0062] 在311,将临时存储位置的值与源写掩码寄存器的(经零扩展的)数据进行AND, 并且在313,该AND的结果被存储到目的地写掩码寄存器中。
[0063] 以下是指令集中通常称为向量紧缩测试冲突("VPBROADCASTM")指令的指令的实 施例,以及可用于执行将在若干不同方面获益的这种指令的系统、架构、指令格式等的实施 例。VPBROADCASTM的执行导致尺寸为M的掩码寄存器被广播到具有尺寸为N的元素的向量 寄存器(N>M)。例如,VPBROADCASTMW2D将16位掩码广播到向量寄存器目的地的全部双字 紧缩数据元素。可存在很多形式的这种指令,诸如字节至字节(B2B)、字节至字(B2W)、字至 字(W2W)、字至四字(W2Q)、双字至双字(D2D)、双字至四字(D2W)、以及四字至四字(Q2Q)等 等。
[0064] 图5示出VPBROADCASTM的操作的示例性图示。在所示的示例中,来自(经零扩展 的)源写掩码寄存器501的数据被广播到紧缩数据(向量)寄存器目的地503的多个数据 元素位置。
[0065]示例件 VPBOADCASTM 格式
[0066] 该指令的示例性格式是"VPBROADCASTM {k2}Rl,K1",其中源操作数K1是写掩码寄 存器,目的地操作数R2是向量(紧缩数据)寄存器(诸如128、256、512位寄存器等等)且 VPBROADCASTM是指令的操作码。如先前所提到的,指令还与其它寄存器合作,并非仅仅是写 掩码寄存器。K2是可按照以上详细描述的方式使用的可选写掩码。具体地,该写掩码的每 个位位置可用于阻挡广播的写入。例如,如果最低有效位的位置为0,则目的地寄存器的最 低有效数据元素位置不会被来自源写掩码寄存器的(经零扩展的)数据写入。操作码可另 外具有数据传送类型的指示,B2B、B2W等。这可用于判断要进行的零扩展的量。
[0067] 执行VPBROADCASTM的示例件方法
[0068] 图6示出处理器中VPBROADCASTM指令的执行的实施例。在601,取出具有源写掩
当前第2页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1