用于滑动窗口编码算法的指令的制作方法

xiaoxiao2020-10-23  14

用于滑动窗口编码算法的指令的制作方法
【技术领域】
[0001] 发明的领域通常涉及计算系统,并且更具体而言,涉及用于滑动窗口编码算法的 指令。
【背景技术】
[0002] 矢量处理
[0003] 图1示出在半导体芯片上用逻辑电路实现的处理核心100的高层图。处理核心包 含流水线101。流水线包括多个阶段,每个设计为执行完全执行程序代码指令所需要的多 步骤处理中的特定步骤。这些典型地至少包含:1)指令获取和解码;2)数据获取3)执行; 4)写回。当数据由相同的指令标识并在之前阶段中获取(例如,在上述步骤2)中)时,执 行特定操作的执行阶段由指令标识,该指令在另一个之前阶段中被获取并解码(例如,在 上述步骤1)中)。被操作的数据典型地从(通用)寄存器存储空间102获取。在操作完成 时创建的新数据也典型地"写回"到寄存器存储空间(例如,在上述4)阶段处)。关联于执 行阶段的逻辑电路典型地由多个"执行单元"或者"功能单元"1〇3_1至103_N组成,其每个 设计为执行其自身的操作的唯一子集(例如,第一功能单元执行整数数学操作,第二功能 单元执行浮点指令,第三功能单元执行从/向缓存/存储器的加载/存储操作等)。由所有 功能单元执行的所有操作的集合对应于处理核心100支持的"指令集"。
[0004] 在计算机科学领域广泛知晓2个类型的处理器架构:"标量"和"矢量"。标量处理 器被设计为执行对单集合数据执行操作的指令,而矢量处理器被设计为执行对多集合数据 执行操作的指令。图2A和2B呈现展示了标量处理器与矢量处理器之间的基本差异的比较 例。
[0005] 图2A示出标量AND指令的示例,其中,单个操作数集A和B被AND在一起来生成单 数(singular)(或者"标量")结果C(即,AB = C)。与此相反,图2B示出矢量AND指令的 示例,其中,2个操作数集A/B和D/E分别被平行AND在一起,以同时生成矢量结果C,F (即, A. AND. B = C且D. AND. E = F)。关于术语,"矢量"是具有多个"元素"的数据元素。例如, 矢量V = Q、R、S、T、U具有5个不同元素:Q、R、S、T和U。示例性矢量V的"尺寸"是5 (因 为其具有5个元素)。
[0006] 图1还示出不同于通用寄存器空间102的矢量寄存器空间107的存在。具体而言, 通用寄存器空间102在名义上被用于存储标量值。这样,当任何执行单元执行标量操作时, 其在名义上使用从(并将结果写回)通用寄存器存储空间102调用的操作数。与此相反, 当任何执行单元执行矢量操作时,其在名义上使用从(并将结果写回)矢量寄存器空间107 调用的操作数。存储器的不同区域可以同样被分配用于存储标量值和矢量值。
[0007] 还要注意的是,在向功能单元103_1至103_N的输入处和从功能单元103_1至 l〇3_N的输出处相应存在掩码操作(masking)逻辑104_1至104_N* 105_1至105_N。在各 种实施方式中,对于矢量操作,实际上仅实现这些层中的一个一尽管不是严格要求(尽管 在图1中未绘出,但可想象地,仅执行标量而非矢量操作的执行单元不需要具有任何掩码 操作层)。对于采用掩码操作的任何矢量指令,输入掩码操作逻辑1〇4_1至104_N* /或输 出掩码操作逻辑1〇5_1至105_N可以被用于控制:针对矢量指令,哪些元素被有效地操作。 此处,掩码矢量从掩码寄存器空间106读出(例如,连同从矢量寄存器存储空间107读出的 输入操作数矢量),并且被呈现给掩码操作逻辑104、105层中的至少一个。
[0008] 在执行矢量程序代码的过程中,每个矢量指令不需要要求全数据字。例如,用于一 些指令的输入矢量可以仅是8个元素,用于其他指令的输入矢量可以是16个元素,用于其 他指令的输入矢量可以是32个元素等。因此,掩码操作层104/105被用于标识适用于特定 指令的全矢量数据字的元素的集合,以便跨指令影响不同的矢量尺寸。典型地,对于每个矢 量指令而言,保持在掩码寄存器空间106中的特定掩码模式由指令调出、从掩码寄存器空 间获取并被提供至掩码层104/105中的一个或者两个,来"启用"对于特定矢量操作的元素 的正确集合。
[0009] LZ77压缩算法
[0010] 压缩算法努力减小数据的量而不牺牲数据内的信息。一个类型的压缩算法被称为 LZ77算法,通过参考输入(未压缩的)数据流中更早存在的数据的单个拷贝来替代数据的 重复出现,以实现压缩。匹配由一对称作"长度距离对"的数字进行编码,其等同于以下陈 述:"在未压缩的流中,每个接下来的"长度"字符等于恰好其后有"距离"个字符的字符"。 ("距离"有时替代地称作"偏移"。)
[0011] 为了认出匹配,编码器对一些量的最近数据(诸如最后2kB、4kB、或者32kB)保持 追踪。其中保持了该数据的构造称作"滑动窗口",因此LZ77有时称作滑动窗口压缩。编码 器保持滑动窗口内最近的数据,来寻找匹配(并且解码器也将保持该数据来解释编码器参 考的匹配)。
[0012] 图3示出基本处理LZ77编码方案的简单示例。如图3所示,比特流300的之前(更 早或者更晚)部分301的位模式与比特流的当前部分302的位模式进行比较。如果当前部 分302中发现与之前部分301中的序列位匹配的序列位,那么参考更早部分301中相同序 列的位来替代当前部分302中的位的序列。例如,参考更早部分301中的位序列303来替 代当前部分302中的位序列。对位序列302插入的参考将标识出位序列302的长度(其也 与位序列303的长度相同)以及位序列303的位置。因此,当对压缩的流解码时,当解码器 到达该参考时,其仅"参考"回位序列303来再现用于解码的流的部分302的正确位序列。
[0013] 编码处理的更复杂但更有效的版本将计算当前部分的引导字节(例如,3个引导 字节)的散列(被称为"前缀"),并使用其作为向一些数据结构的索引,该数据结构保持被 散列至相同值的更早部分的位串(或者这样的位串的位置)。
[0014] LZ77压缩算法被用作DEFLATE压缩算法的部分,其被用于压缩gzip、Zlib、PKZip 和WinZip压缩方案。
【附图说明】
[0015] 在附图的图中以示例的方式,而非以限制的方式示出本发明,其中相似的参考标 记指代类似的元件,其中:
[0016] 图1示出指令执行流水线;
[0017] 图2A和2B涉及矢量处理;
[0018] 图3示出滑动窗口编码处理的示例;
[0019] 图4A示出指令的方法;
[0020] 图4B示出指令的流的方法;
[0021] 图5A和5B示出对图4的指令的电路设计;
[0022] 图6A是示出根据本发明的实施例的通用矢量友好指令格式及其A级别指令模板 的框图。
[0023] 图6B是示出根据本发明的实施例的通用矢量友好指令格式及其B级别指令模板 的框图。
[0024]图7A-C是示出根据本发明的实施例的示例性特定矢量友好指令格式的框图。
[0025] 图8是根据本发明的一个实施例的寄存器架构的框图。
[0026] 图9A是根据本发明的实施例的单个CPU核心的框图,连同其至管芯上互连网络的 连接,及其2级(L2)缓存的本地子集。
[0027] 图9B是根据本发明的实施例的图9A中的CPU核心的部分的分解图。
[0028] 图10是示出根据本发明的实施例的示例性乱序架构的框图。
[0029] 图11是依据本发明的一个实施例的系统的框图。
[0030] 图12是依据本发明的实施例的第二系统的框图。
[0031] 图13是依据本发明的实施例的第三系统的框图。
[0032] 图14是依据本发明的实施例的SoC的框图。
[0033] 图15是根据本发明的实施例的具有集成存储器控制器和图形的单核处理器和多 核处理器的框图。
[0034] 图16是根据本发明的实施例的对照使用软件指令转换器将源指令集中的二进制 指令转换至目标指令集中的二进制指令的框图。
【具体实施方式】
[0035] 图4a示出适于加速位匹配标识处理(诸如LZ77编码处理的位匹配标识处理)的 矢量指令(VC0MPCPM)的实施例的操作。图4a示出512位第一输入操作数400。如图4所 示,第一输入操作数400被分割为4个128位元素401_1至401_4。每个元素401_1至401_4 对应于要根据比特流匹配处理进行编码的比特流的段。
[0036] 128位元素401_1至401_4中的每个含有4字节的"位置头部"402_1至402_4以 及12字节的连续段的数据403_1至403_4。4字节位置头部指明在被编码的数据中,在哪 能够发现其12字节的连续数据。因此,512位数据结构含有4个12字节的数据的段以及在 数据内的每个的位置。
[0037] 第二(例如标量)输入操作数404还具有数据的不同段的位置头部405和12个 连续字节406。
[0038] 如图4a所示,指令将第二输入操作数404的数据406的12字节与第一输入操作 数400的每个12字节数据元素403_1至403_4进行比较,并取出其相应的位置头部信息 402_1至402_4与第二输入操作数404的位置头部405之间的差异。在比较2个12字节序 列中,指令在两个序列的一端(例如,最右端)开始,并朝另一端移动(例如,移动到左侧) 来逐字节比较。一旦观察到一对均等定位的不同字节,比较停止,均等定位的字节的数量导 致:第一对不均等的字节被建立为对于2个12字节序列的比较结果的均等字节的数量。
[0039] 因此,结果407是矢量,其元素对应于能够被直接或者间接使用(作为对每个比较 的参考插入信息)的信息。即,结果407对第一操作数400中的每个元素指明:该元素的位 置与用于第二输入操作数404的数据406的位置之间的距离;以及数据的2个12字节段之 间的长度(以匹配字节的数量)。在图4的实施例中,结果的每个元素对于匹配字节的数量 预留4位(但是仅能够指明12个匹配字节的最大值),并且预留16位来指明1的补码形式 的位置差异。
[0040] 理论上,第一输入操作数400能够被用于保持被压缩的数据的"更早的"段,并且 第二输入操作数404能够用于被压缩的数据的当前段,或者第一输入操作数400能够用于 被压缩的数据的当前段,并且第二输入操作数404能够用于被压缩的数据的更早的段。为 了简洁起见,本说明书中将大多引用前一方法。
[0041] 在图4a的指令的实施例中,立即操作数408_1的第一字段被用于基本指明压缩算 法的滑动窗口的尺寸。换言之,立即操作数408的第一字段408_1指明允许在输入矢量400 内发现输入操作数404的当前数据的匹配领先于先前的数据多少。如果任何位置差异计算 超过由立即操作数408的第一字段408_1指明的距离,那么对应的元素是设置有表明比较 无效的固定代码(例如,比较结果固定来示出没有字节匹配)的结果407。
[0042] 例如,在实施例中,第一字段408_1是4位来指明比较的数据段之间的最大距离。 这对应于16的最大距离,其中该最大距离的1/16对应于最小距离设定。例如,如果最小距 离设定是2千字节(KB),那么4位的第一字段408_1位长度提供32KB的最大滑动窗口尺 寸。
[0043] 另外在图4的指令的实施例中,立即操作数的第二字段408_2指明结果矢量407 中结果元素的位置。此处,每个结果元素能够被看作是长度为128位,然而,每个元素仅提 供20位的信息(4位标识比较中有多少字节匹配,并且16位(2字节)指明1的补码形式 的位置距离)。在实施例中,每个128位元素的32位被标识为双字词或者DWORD,并且立即 操作数的第二字段408_2指明每个元素4个DWORD中的哪个DWORD含有结果信息。例如, 在实施例中,立即操作数408_2中的第二字段是2位宽,并且"01"的值表明每个元素最右 边的DWORD含有结果(即,512中的位415:484 ;387:256 ;159:128以及31:0,输出矢量407 除外)。
[0044] 指明每个矢量4个不同位置的能力允许结果矢量407由4个连续指令写入,每个 连续指令指明不同DWORD结果位置,以便一个矢量含有16个不同比较的比较结果。
[0045] 图4b更具体地来示出序列。如图4b所示,第一 VC0MPCPM指令412_1将当前数据 序列410与4个先前的数据序列的第一输入矢量411_1进行比较。第一指令的立即操作 数(的第一字段)指明结果应该被写入第一指令的结果413_1中每个矢量元素的最右边的 DWORD〇
[0046] 接下来执行第二VC0MPCPM指令412_2,其比较当前数据序列410与4个先前的数 据序列的第二输入矢量411_2。然而,第二指令412_2的立即操作数指明结果应该被写入与 第一指令412_1相同的目的地寄存器(即,相同的结果413_1)中每个矢量元素的第二最右 边的DWORD。这样,即使相同的寄存器被写入以具有第一指令412_1的结果,第一指令412_1 的结果也不被第二指令412_2的结果改写。
[0047] 序列持续2个更多的VCOMPCPM指令412_3、412_4,具有4个之前的数据序列的2 个更多的不同相应的输入矢量411_3、411_4,以及指明结果413_1的第三和第四DWORD的相 应的立即操作数。在第四指令412_4的结束处,结果413_1含有与当前输入数据序列410 的16个比较的结果。
[0048] 在执行了第四VCOMPCPM指令412_4之后,执行另一个矢量指令VPHMAXPOSUD 414 , 其接受第四VCOMPCPM指令412_4的结果413 j作为输入矢量,并视其为16个元素矢量。 VPHMAXPOSUD矢量指令414返回结果416,其识别16个比较中的哪个具有:对输入数据序列 410的最高数量的匹配数据字节。
[0049] 此处,VPHMAXPOSUD指令414被设计为仅比较其输入矢量元素的每个的匹配字节 部分的数量(其从图4a的上述讨论想起,仅指明有20位比较结果的4位),而返回指明匹 配字节的数量和距离信息的整个20位字段。来自VPHMAXPOSUD指令结果416的信息然后 被用于(直接或者间接)在输入矢量410的数据序列所属的、正被编码的数据的地点插入 参考。
[0050] 在附加的或者替代的实施方式中,立即操作数字段中能够被增强来指明最小匹配 长度。例如,如果最小匹配长度指明为3,并且2个12字节序列之间的比较仅产生2字节序 列匹配,那么该比较的结果将固定为示出没有匹配。
[0051] 在其他实施例中,立即操作数中能够进一步指明2或者3字节的最小匹配长度。此 处,不同的编码实施方式可以对于有效编码插入具有不同的标准。增强指令功能单元逻辑 电路来响应于指明不同"规则"或者"策略"的立即操作数,允许指令支持各种不同的滑动 窗口编码实施方式。符合该观点,在另一个附加的或者替代的实施方式中,如果当前数据序 列与先前的数据序列之间的距离超过一些距离,那么立即操作数中可以指明仅3字节序列 匹配应该被固定来示出没有匹配(其例如可以进一步在立即操作数中指明或者硬编码到 指令执行逻辑电路)。
[0052] 图5A示出执行VCOMPCPM指令的功能单元的逻辑电路设计。如图5A所示,功能单 元逻辑电路包含比较逻辑电路520的库,其比较第一输入矢量500的元素的字节(其可以 源于矢量寄存器或者存储器)与标量输入504的字节。逻辑上从一端执行通过比较对齐的 字节,并且比较结果被视为在每个字节位置处的相同字节的数量,直至观察到第一对非匹 配字节。
[0053] 差异逻辑电路530取出输入矢量500内标量输入504的位置信息与单独元素的位 置信息502_1至502_4之间的差异。距离检查逻辑电路540确认由不同逻辑电路530确定 的数据序列之间的任何距离不超过由立即操作数的第一段503_1指明的最大距离。如果任 何特定距离超过最大距离,那么距离检查电路540通过复用器库560中其对应的复用器迫 使0通过违规输入矢量元素的道(lane),从而迫使无效比较(或者没有匹配)。如果距离在 最大内,那么对于特定输入矢量500元素的起因于比较库520的比较结果和起因于差异逻 辑电路530的差异被允许:对于其对应的道,传递至解复用器电路库570的解复用器电路。 解复用器电路将结果路由至由立即操作数的第二段确定的其道的适当的DWORD。
[0054] 尽管图5A未示出,但掩码操作层电路可以接收掩码矢量来用在其相应的库520、 530、560、570中启用/禁用的差异单元、比较单元、复用器和解复用器的对应数量,容纳1、 2、3和4个元素的输入矢量500尺寸。
[0055] 图5B示出被设计为执行VPHMAXPOSUD指令的功能单元的电路设计。如图5B所 示,逻辑电路接受由高达16个元素583_1至583_16组成的输入矢量580,每个元素在输入 矢量的对应的DWORD中向右取向。每个元素被理解为20位宽,由4位的第一字段(其识别 匹配的数量)和识别距离的16位组成。比较电路581比较输入矢量580彼此的匹配数据 值的数量,来确定其中最大的。确定为具有匹配的最大数的输入矢量元素然后由比较电路 输出控制的复用器582选择,来作为指令的结果通过。如果输入矢量580字段少于16个输 入元素,掩码矢量输入584可以被用于控制要比较的匹配值的数量。
[0056] 分别由图5A和5B的功能单元接收的输入矢量500、580可以从矢量寄存器分别接 收,在执行阶段耦合至具有这些功能单元的指令执行流水线。替代地,其可以源于存储器。 指令格式可以指明矢量输入是否从矢量寄存器空间或者存储器取回。图5A的功能单元的 标量输入可以是从耦合至流水线的标量(通用)寄存器空间接收的真正标量、或者可以呈 现为从矢量寄存器空间接收的输入矢量的单个元素。输入掩码可以从掩码寄存器空间接 收。
[0057] 尽管上述具体实施例涉及特定矢量尺寸、矢量元素尺寸和结果尺寸(矢量元素或 者其他),但普通技术人员将理解这些尺寸只是很多其他可能的尺寸中的方法。
[0058] 上文详述的指令的实施例可以以"通用矢量友好指令格式"实施,其在下文中详 述。在其他实施例中,不利用这样的格式,并且使用另一个指令格式,然而,下文说明的写入 掩码寄存器、各种数据转换(拌合(swizzle)、广播等)、寻址等通常适用于说明上述指令的 实施例。另外,示例性系统、架构、以及流水线在下文详述。上述指令的实施例可以执行在 这样的系统、架构、以及流水线上,但是不限于详述的那些内容。
[0059] 矢量友好指令格式是适合矢量指令(例如,存在对于矢量操作特定的某些领域) 的指令格式。虽然说明的实施例是通过矢量友好指令格式来支持矢量和标量操作这两者, 但替代实施例仅使用矢量操作矢量友好指令格式。
[0060] 不例性通用矢量友好指令格式一图6A-B
[0061] 图6A-B是示出根据本发明的实施例的通用矢量友好指令格式及其指令模板的框 图。图6A是示出根据本发明的实施例的通用矢量友好指令格式及其A级别指令模板的框 图;而图6B是示出根据本发明的实施例的通用矢量友好指令格式及其B级别指令模板的框 图。具体而言,对其定义A级别和B级别指令模板的通用矢量友好指令格式600,这两者都 包含没有存储器访问605指令模板和存储器访问620指令模板。矢量友好指令格式的上下 文中通用的术语是指不绑定到任何特定指令集的指令格式。虽然将说明的实施例中,矢量 友好指令格式的指令对矢量进行操作,该矢量来源于:要么寄存器(没有存储器访问605指 令模板)要么寄存器/存储器(存储器访问620指令模板),但本发明的替代实施例可以 仅支持这些中的一个。另外,虽然将说明的本发明的实施例中,有矢量指令格式的加载和存 储指令,但替代实施例反而或者附加地具有不同指令格式的指令,其将矢量移动至/出寄 存器(例如,从存储器到寄存器,从寄存器到存储器,在寄存器之间)。此外,虽然将说明的 本发明的实施例支持2级别的指令模板,但替代实施例可以仅支持这些中的一个或者多于 2个。
[0062] 虽然将说明的本发明的实施例中,矢量友好指令格式支持如下:具有32位(4字 节)或者64位(8字节)数据元素宽度(或者尺寸)的64字节矢量操作数长度(或者尺 寸)(因此,包括16个双字长元素或者替代地8个四字长元素的64字节矢量);具有16位 (2字节)或者8位(1字节)数据元素宽度(或者尺寸)的64字节矢量操作数长度(或 者尺寸);具有32位(4字节)、64位(8字节)、16位(2字节)、或者8位(1字节)数据 元素宽度(或者尺寸)的32字节矢量操作数长度(或者尺寸);和具有32位(4字节)、64 位(8字节)、16位(2字节)、或者8位(1字节)数据元素宽度(或者尺寸)的16字节矢 量操作数长度(或者尺寸);替代实施例可以支持具有更多、更少、或者不同数据元素宽度 (例如,128位(16字节)数据元素宽度)的更多、更少和/或不同矢量操作数尺寸(例如, 656字节矢量操作数)。
[0063] 图6A中的A级别指令模板包含:1)在没有存储器访问605指令模板内,示出没有 存储器访问,完全舍入(round)控制类型操作610指令模板和没有存储器访问,数据转换类 型操作615指令模板;和2)在存储器访问620指令模板内,示出存储器访问,暂存625指令 模板和存储器访问,非暂存630指令模板。图6B中的B级别指令模板包含:1)在没有存储 器访问605指令模板内,示出没有存储器访问,写入掩码控制,部分舍入控制类型操作612 指令模板和没有存储器访问,写入掩码控制,vsize类型操作617指令模板;和2)在存储器 访问620指令模板内,示出存储器访问,写入掩码控制627指令模板。
[0064] 格式
[0065] 通用矢量友好指令格式600包含图6A-B示出的顺序的、下文列出的下面的字段。 结合上述讨论,在实施例中,参考下文图6A-B和7提供的格式细节,可以利用非存储器访问 指令类型605或者存储器访问指令类型620。用于读出掩码、输入矢量操作数和目的地的地 址可以在下面说明的寄存器地址字段644中标识。在进一步的实施例中,在写入掩码字段 670中指明写入掩码。
[0066] 格式字段640-该字段中的特定值(指令格式标识符值)唯一地标识矢量友好指 令格式,因此,在指令流中发生矢量友好指令格式的指令。因此,格式字段640的内容辨别: 发生的第一指令格式的指令与发生的其他指令格式的指令,因而,允许矢量友好指令格式 引入到具有其他指令格式的指令集。这样,在不需要指令集仅具有通用矢量友好指令格式 的意义上,该字段是可选的。
[0067] 基本操作字段642-其内容将不同基本操作辨别开。如本文之后说明的那样,基本 操作字段642可以包含和/或是操作码字段的部分。
[0068] 寄存器索引字段644-其内容(直接或者通过地址产生)指明源和目的地操作数 的位置,无论其在寄存器或者在存储器中。这些包含充分的位数来从PxQ (例如,32x1012) 寄存器文件选择N个寄存器。虽然在一个实施例中,N可以是高达3个源和一个目的地寄 存器,但替代实施例可以支持更多或更少的源和目的地寄存器(例如,可以支持高达2个 源,其中这些源中的一个还作为目的地;可以支持高达3个源,其中这些源中的一个还作为 目的地;可以支持高达2个源和一个目的地)。虽然在一个实施例中,P = 32,但替代实施 例可以支持更多或更少的寄存器(例如16个)。虽然在一个实施例中,Q= 1012位,但替 代实施例可以支持更多或更少的位(例如128、1024)。
[0069] 修改器字段646-其内容辨别:指明存储器访问的通用矢量指令格式的指令的发 生与不指明的那些;即,在没有存储器访问605指令模板和存储器访问620指令模板之间。 存储器访问操作读出和/或写入到存储器层次(在一些情况下,使用寄存器中的值来指明 源和/或目的地地址),而非存储器访问操作不这样做(例如,源和目的地是寄存器)。虽 然在一个实施例中,该字段还在3个不同方式之间进行选择,来执行存储器地址计算,但替 代实施例可以支持更多、更少、或者不同方式来执行存储器地址计算。
[0070] 增强操作字段650-其内容辨别:除了基本操作外,要执行各种不同操作的哪一 个。该字段是上下文特定的。在本发明的一个实施例中,该字段被分割为级别字段668、 alpha字段652和beta字段654。增强操作字段允许公共组的操作在单个指令中执行,而 非2、3或者4个指令。下文是使用增强字段650来减小要求的指令的数量的指令的一些示 例(其命名法在本文稍后更详细说明)。
[0072] 其中[rax]是用于地址产生的基本指针,并且{}表明由数据操作字段指明的转换 操作(本文稍后更具体说明)。
[0073] 按比例调整字段660-其内容允许按比例调整索引字段的内容,用于存储器地址 产生(例如,用于使用2seale*index+base的地址产生)。
[0074] 移位字段662A-其内容被用作存储器地址产生的部分(例如,用于使用 2scale*index+base+displacement 的地址产生)〇
[0075] 移位因子字段662B(要注意的是,直接在移位因子字段662B上的移位字段662A 的并列表明使用一个或者另一个)一其内容被用作地址产生的部分;其指明移位因子要由 存储器访问的尺寸(N)按比例调整一其中N是存储器访问中字节的数量(例如,对于使用 2 scale*index+base+scaled displacement的地址产生)。忽略了冗余的低阶位,因此,移位 因子字段的内容乘以存储器操作数总尺寸(N),以产生最终移位来用于计算有效地址。N的 值由处理器硬件在运行时基于全操作码字段674(本文稍后说明)和本文稍后说明的数据 操纵字段654C确定。移位字段662A和移位因子字段662B是可选的(在其不用于没有存 储器访问605指令模板和/或不同实施例可以仅实现2个中的1个或者0个的意义上)。
[0076] 数据元素宽度字段664-其内容辨别要使用多个数据元素宽度的哪一个(在一些 实施例中,对于所有指令;在其他实施例中,仅对于一些指令)。在如下的意义上,该字段 是可选的:如果仅支持一个数据元素宽度和/或使用操作码的一些方面来支持数据元素宽 度,那么其是不需要。
[0077] 写入掩码字段670-以每数据元素位置的形式,其内容控制目的地矢量操作数中 的数据元素位置是否反映基本操作和增强操作的结果。A级别指令模板支持合并写入掩码, 而B级别指令模板支持合并和归零写入掩码这两者。当合并时,矢量掩蔽允许在执行任何 操作(由基本操作和增强操作指明)期间保护目的地中的任何集合的元素不会更新;在其 他一个实施例中,保留对应的掩码位具有〇的目的地的每个元素的旧值。相比之下,当在 任何操作的执行期间(由基本操作和增强操作指明)归零矢量掩码允许目的地中的任何 集合的元素归零;在一个实施例中,当对应的掩码位具有0值时,目的地的元素被设定为0。 该功能的子集是控制正被执行的操作的矢量长度的能力(即,正被修改的元素从第一到最 后一个的跨度);然而,不一定修改的元素是连续的。因此,写入掩码字段670允许部分矢 量操作,包含负载、存储、算术、逻辑等。另外,该掩码操作能够用于故障抑制(即,通过对 目的地的数据元素位置进行掩码操作来防止收到可能/将导致故障的任何操作的结果一 例如,假定存储器中的矢量 跨页面边界,并且第一页面而非第二页面将导致页面故障,如果 处于第一页面的矢量的所有数据元素被写入掩码进行掩码操作,那么能够忽略页面故障)。 此外,写入掩码允许含有某些类型的条件陈述的"矢量化循环"。虽然说明的本发明的实施 例中,写入掩码字段670的内容选择含有要使用的写入掩码的多个写入掩码寄存器中的一 个,(并且因此,写入掩码字段670的内容间接标识出要执行的掩码操作),替代实施例反而 或者额外允许掩码写入字段670的内容直接指明要执行的掩码操作。此外,归零允许性能 改善,当:1)寄存器重命名用于其目的地操作数也不是源(还调用非三元指令)的指令,因 为在寄存器重命名流水线阶段,目的地是不再是隐含源(没有来自当前目的地寄存器的数 据元素需要被拷贝到重命名的目的地寄存器、或者以某种方式继续操作,因为不是操作的 结果的任何数据元素(任何掩码操作的数据元素)将归零);和2)在写回阶段期间,因为 零正被写入。
[0078] 立即数字段672-其内容允许立即的规范。在如下的意义上,该字段是可选的: 其不存在于不支持立即的通用矢量友好格式的实施方式,并且其不存在于不使用立即的指 令。
[0079] 指令模板级别选择
[0080] 级别字段668-其内容在不同级别的指令之间进行辨别。参考图2A-B,该字段的 内容在A级别与B级别指令之间选择。在图6A-B中,圆角正方形被用于表明特定值存在于 字段(例如,图6A-B中对于级别字段668A分别为级别A 668A和级别B 668B)。
[0081] A级别的没有存储器访问指令模板
[0082] 在A级别的非存储器访问605指令模板的情况下,alpha字段652被解释为RS字 段652A,其内容辨别要执行不同增强操作类型中的哪一个(例如,舍入652A. 1和数据转换 652A. 2分别对:没有存储器访问、舍入类型操作610和没有存储器访问、数据转换类型操作 615指令模板被指明),而beta字段654辨别要执行指明类型的哪些操作。在图6中,圆角 框被用于表明存在特定值(例如,修改器字段646中的没有存储器访问646A;对于alpha字 段652/rs字段652A的舍入652A. 1和数据转换652A. 2)。在没有存储器访问605指令模板 中,按比例调整字段660、移位字段662A、以及移位按比例调整字段662B不存在。
[0083] 没有存储器访问指令模板一完全舍入控制类型操作
[0084] 在没有存储器访问完全舍入控制类型操作610指令模板中,beta字段654被解 释为舍入控制字段654A,其内容提供静态舍入。在本发明说明的实施例中,舍入控制字段 654A包含抑制所有浮点异常(SAE)字段656和舍入操作控制字段658,但替代实施例可以 支持可以将这两个概念编码至相同的字段或者仅具有这些概念/字段的一个或者另一个 (例如,可以仅具有舍入操作控制字段658)。
[0085] SAE字段656-其内容辨别是否禁用异常事件报告;当SAE字段656的内容表明抑 制被启用时,给定的指令不报告任何类型的浮点异常标志并且不提出任何浮点异常处理程 序(handler)。
[0086] 舍入操作控制字段658-其内容辨别要执行一组舍入操作中的哪一个(例如向上 舍入、向下舍入、向零舍入、和舍入到最近)。因此,舍入操作控制字段658允许以每指令方 式来改变舍入模式,因此,当需要时特别有用。在处理器包含用于指明舍入模式的控制寄存 器的本发明的一个实施例中,舍入操作控制字段650的内容覆盖了该寄存器值(能够选择 舍入模式,而不需要对这样的控制寄存器执行节省-修改-恢复是有利的)。
[0087] 没有存储器访问指令模板一数据转换类型操作
[0088] 在没有存储器访问数据转换类型操作615指令模板中,beta字段654被解释为数 据转换字段654B,其内容辨别要执行多个数据转换中的哪一个(例如没有数据转换、拌合、 广播)。
[0089] A级别的存储器访问指令模板
[0090] 在A级别的存储器访问620指令模板的情况下,alpha字段652被解释为驱逐 (eviction)提示字段652B,其内容辨别要使用驱逐提示的哪一个(在图6A中,暂存652B. 1 和非暂存652B. 2分别对:存储器访问、暂存625指令模板和存储器访问、非暂存630指令模 板被指明),而beta字段654被解释为数据操纵字段654C,其内容辨别要执行多个数据操 纵操作的哪一个(也称为基元(primitive))(例如,没有操纵、广播、源的上转换、以及目的 地的下转换)。存储器访问620指令模板包含按比例调整字段660,并可选地包含移位字段 662A或者移位按比例调整字段662B。
[0091] 矢量存储器指令执行:从存储器的矢量加载和至存储器的矢量存储(带有转换支 持)。正如常规矢量指令那样,矢量存储器指令以数据元素的方式将数据从/向存储器传 输,带有(由被选择为写入掩码的矢量掩码的内容指示为实际传输的)元素。在图6A中,圆 角正方形被用于表明特定值存在于字段(例如,修改器字段646的存储器访问646B ;alpha 字段652/驱逐提示字段652B的暂存652B. 1和非暂存652B. 2)。
[0092] 存储器访问指令模板一暂存
[0093] 暂存数据是可能很快被再使用而受益于缓存的数据。然而,这是提示,不同的处理 器可以将其以不同方式实现,包含忽略整个提示。
[0094] 存储器访问指令模板一非暂存
[0095] 非暂存数据是不太可能很快被再使用而受益于1级缓存的缓存的数据,并应该被 给予驱逐的优先权。然而,这是提示,不同的处理器可以将其以不同方式实现,包含忽略整 个提示。
[0096] B级别的指令模板
[0097] 在B级别的指令模板的情况下,alpha字段652被解释为写入掩码控制⑵字段 652C,其内容辨别由写入掩码字段670控制的写入掩码操作是否应该合并或者归零。
[0098] B级别的没有存储器访问指令模板
[0099] 在B级别的非存储器访问605指令模板的情况下,beta字段654的部分被解释为 RL字段657A,其内容辨别要执行不同增强操作类型的哪一个(例如,舍入657A. 1和矢量长 度(VSIZE)657A. 2分别对于以下被指明:没有存储器访问、写入掩码控制、部分舍入控制类 型操作612指令模板和没有存储器访问、写入掩码控制、VSIZE类型操作617指令模板),而 beta字段654的其余部分辨别要执行指明的类型的哪些操作。在图6中,圆角框被用于表 明存在特定值(例如,修改器字段646中的没有存储器访问646A ;对于RL字段657A的舍 入657A. 1和VSIZE 657A. 2)。在没有存储器访问605指令模板中,按比例调整字段660、移 位字段662A、以及移位按比例调整字段662B不存在。
[0100] 没有存储器访问指令模板一写入掩码控制、部分舍入控制类型操作
[0101] 在没有存储器访问、写入掩码控制、部分舍入控制类型操作610指令模板中,beta 字段654的其余部分被解释为舍入操作字段659A,并且异常事件报告被禁用(给定的指令 不报告任何类型的浮点异常标志并且不提出任何浮点异常处理程序)。
[0102] 舍入操作控制字段659A-如图舍入操作控制字段658那样,其内容辨别要执行 一组舍入操作中的哪一个(例如向上舍入、向下舍入、向零舍入、和舍入到最近)。因此, 舍入操作控制字段659A允许以每指令方式来改变舍入模式,因此,当需要时特别有用。在 处理器包含用于指明舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段 650的内容覆盖了该寄存器值(能够选择舍入模式,而不需要对这样的控制寄存器执行节 省-修改-恢复是有利的)。
[0103] 没有存储器访问指令模板一写入掩码控制、VSIZE类型操作
[0104] 在没有存储器访问、写入掩码控制、VSIZE类型操作617指令模板中,beta字段654 的其余部分被解释为矢量长度字段659B,其内容辨别要执行多个数据矢量长度中的哪一个 (例如128、856、或者1012字节)。
[0105] B级别的存储器访问指令模板
[0106] 在A级别的存储器访问620指令模板的情况下,beta字段654的部分被解释为广 播字段657B,其内容辨别是否要执行广播类型数据操纵操作,而beta字段654的其余部分 被解释为矢量长度字段659B。存储器访问620指令模板包含按比例调整字段660,并可选 地包含移位字段662A或者移位按比例调整字段662B。
[0107] 关于字段的额外评论
[0108] 关于通用矢量友好指令格式600,全操作码字段674示出为包括格式字段640、基 本操作字段642、以及数据元素宽度字段664。虽然示出了全操作码字段674包含所有的这 些字段的一个实施例,但在不支持所有的这些字段的实施例中,全操作码字段674包含少 于所有的这些字段。全操作码字段674提供操作代码。
[0109] 增强操作字段650、数据元素宽度字段664、以及写入掩码字段670允许这些特征 在通用矢量友好指令格式中以每指令方式被指明。
[0110] 写入掩码字段和数据元素宽度字段的组合创建类型化的(typed)指令,因其允许 基于不同的数据元素宽度来应用掩码。
[0111] 指令格式要求相对小数量的位,因为其基于其他字段的内容,对于不同目的再使 用不同的字段。例如,一个观点是:修改器字段的内容在图6A-B上的没有存储器访问605 指令模板与图6A-B上的存储器访问6250指令模板之间选择;而级别字段668的内容在图 6A的指令模板610/615与图6B的612/617之间的那些非存储器访问605指令模板内选择; 并且级别字段668的内容在图6A的指令模板625/830与图6B的627之间的那些存储器访 问620指令模板内选择。从另一个观点,级别字段668的内容分别在图6A和B的A级别与 B级别指令模板之间选择;而修改器字段的内容在图6A的指令模板605和620之间的那些 A级别指令模板内选择;并且修改器字段的内容在图6B的指令模板605和620之间的那些 B级别指令模板内选择。在级别字段的内容表明A级别指令模板的情况下,修改器字段646 的内容选择alpha字段652(在rs字段652A与字段652B之间)的解释。在相关方式 中,修改器字段646以及级别字段668的内容选择是否alpha字段被解释为rs字段652A、 字段652B、或者写入掩码控制(Z)字段652C。在级别和修改器字段表明A级别没有存 储器访问操作的情况下,增强字段的beta字段的解释基于rs字段的内容而改变;而在级别 和修改器字段表明B级别没有存储器访问操作的情况下,beta字段的解释依赖于RL字段 的内容。在级别和修改器字段表明A级别存储器访问操作的情况下,增强字段的beta字段 的解释基于基本操作字段的内容而改变;而在级别和修改器字段表明B级别存储器访问操 作的情况下,增强字段的beta字段的广播字段657B的解释基于基本操作字段的内容而改 变。因此,基本操作字段、修改器字段和增强操作字段的组合允许指明甚至更宽种类的增强 操作。
[0112] A级别和B级别内发现的各种指令模板在不同情形下是有益的。当由于性能原因 期望归零写入掩码或者更小的矢量长度时,A级别是有用的。例如,由于不再需要人为地与 目的地合并,当使用重命名时归零允许避免假依赖;作为另一个示例,当用矢量掩码来模拟 更短的矢量尺寸时,矢量长度控制缓解了存储_加载转发问题。当有如下期望时B级别是有 用的:1)当同时使用舍入模式控制时允许浮点异常(即,当SAE字段的内容表明否);2)能 够使用上转换、拌合、互换、和/或下转换;3)在图形数据类型上操作。例如,上转换、拌合、 互换、下转换、以及图形数据类型减小当与不同的格式的源工作时要求的指令的数量;作为 另一个示例,允许异常的能力提供与指引的舍入模式的全IEEE合规。
[0113] 示例性特定矢量友好指令格式
[0114]图7A-C是示出根据本发明的实施例的示例性特定矢量友好指令格式的框图。图 7A-C示出特定矢量友好指令格式700,其在指明位置、尺寸、解释、以及字段的顺序、以及用 于那些字段中一些的值的意义上是特定的。特定矢量友好指令格式700可以被用于扩展 x86指令集,因此,一些字段类似于被用于现有x86指令集及其扩展(例如AVX)的那些或者 与其相同。该格式保持符合前缀编码字段、实际操作码字节字段、MODR/M字段、SIB字段、 移位字段、以及具有扩展的现有x86指令集的立即字段。示出了来自图6的字段,其中来自 图7A-C的字段映射到所述字段。
[0115] 应该理解的是,尽管出于示例性目的,参考通用矢量友好指令格式600的上下文 中的特定矢量友好指令格式700说明了本发明的实施例,但本发明不限于特定矢量友好指 令格式700,除了当要求保护时。例如,通用矢量友好指令格式600考虑对于各种字段的各 种可能的尺寸,而特定矢量友好指令格式700示出为具有特定尺寸的字段。通过特定示例 的方式,虽然数据元素宽度字段664被示出为特定矢量友好指令格式700中的1位字段,但 本发明不限于此(即,通用矢量友好指令格式600考虑其他尺寸的数据元素宽度字段664)。
[0116]格式一图7A-C
[0117] 通用矢量友好指令格式600包含以图7A-C示出的顺序的下文列出的下面的字段。
[0118] EVEX 前缀(字节0_3)
[0119] EVEX前缀702-以4字节形式编码。
[0120] 格式字段640 (EVEX字节0,位[7:0])-第一字节(EVEX字节0)是格式字段640, 并且 其含有0x62 (在本发明的一个实施例中,用于辨别矢量友好指令格式的唯一值)。
[0121] 第二至第四字节(EVEX字节1-3)包含提供特定能力的位字段的数量。
[0122] REX 字段 705 (EVEX 字节 1,位[7-5]) -包括 EVEX. R 位字段(EVEX 字节 1,位[7] - R)、EVEX. X 位字段(EVEX 字节 1,位[6] - X)、以及 657BEX 字节 1,位[5] - B)。EVEX. R、 EVEX. X、以及EVEX. B位字段提供与对应的VEX位字段相同的功能,并且使用Is补码形式被 编码,即,ZMM0被编码为1111B,ZMM15被编码为0000B。指令的其他字段对寄存器索引的更 低3个位进行编码,如本领域已知的那样(rrr、xxx、以及bbb),以便Rrrr、Xxxx、以及Bbbb 可以通过增加EVEX. R、EVEX. X、以及EVEX. B来形成。
[0123] REX'字段710-这是REX'字段710的第一部分,并且是EVEX. R'位字段(EVEX字 节1,位[4] 一R'),其被用于将扩展的32寄存器集合的高16或者低16编码。在本发明一个 实施例中,该位以及其他下文表明的位,存储为位反转格式,以从实际操作码字节是62的 BOUND指令辨别(在周知x86的32位模式中),但是不在MOD R/M字段(下述)中接受MOD 字段中的11的值;本发明的替代实施例不存储该位以及其他下文表明的反转格式的位。1 的值被用于编码低16个寄存器。换言之,R' Rrrr是通过合成EVEX. R'、EVEX. R、以及来自其 他字段的其他RRR形成的。
[0124] 操作码映射字段715(EVEX字节1,位[3:0]-_111) 一其内容对隐含的引导操作码 字节(0F、0F38,或者0F3)进行编码。
[0125] 数据元素宽度字段664 (EVEX字节2,位[7]-W)-表现为符号EVEX.W。EVEX.W被 用于定义数据类型(32位数据元素或者64位数据元素)的粒度(尺寸)。
[0126] EVEX. vvvv720(EVEX 字节 2,位[6:3] - vvvv) -EVEX. vvvv 的角色可以包含如下: 1)EVEX. vvvv对以反转(Is补码)形式指明的第一源寄存器操作数进行编码,并且对于具有 2或者更多的源操作数的指令有效;2)EVEX. vvvv对于某些矢量偏移对以Is补码形式指明 的目的地寄存器操作数进行编码;或者3)EVEX. vvvv不编码任何操作数,该字段被保留并 应该含有1111b。因此,EVEX. vvvv字段720对以反转(Is补码)形式存储的第一源寄存器 说明符的4低阶位进行编码。根据指令,额外的不同EVEX位字段被用于将说明符尺寸扩展 至32个寄存器。
[0127] EVEX.U668级别字段(EVEX字节2,位[2] -U)-如果EVEX.U=0,其表明A级别 或者EVEX.U0 ;如果EVEX.U= 1,其表明B级别或者EVEX.U1。
[0128] 前缀编码字段725 (EVEX字节2,位[1:0]-pp)-对于基本操作字段提供额外的 位。除了在EVEX前缀格式中提供对旧有SSE指令的支持,这还具有的好处是使SMD前缀紧 凑(并非要求字节来表达SMD前缀,EVEX前缀仅需要2位)。在一个实施例中,为了支持 在旧有格式和EVEX前缀格式中使用SMD前缀(66H,F2H,F3H)的旧有SSE指令,这些旧有 SMD前缀被编码为SMD前缀编码字段;并且在运行时在被提供给解码器的PLA之前被扩 展为旧有SMD前缀(使得PLA能够执行这些旧有的指令的旧有和EVEX格式这两者而不用 修改)。尽管更加新的指令能够直接使用EVEX前缀编码字段的内容作为操作码扩展,但某 些实施例为一致性以类似的方式扩展,但是允许由这些旧有的SMD前缀指明不同的意思。 替代的实施例可以重新设计PLA来支持2位SIMD前缀编码,因此,不需要该扩展。
[0129] alpha 字段 652(EVEX 字节 3,位[7] - ;也称为 EVEX. EH、EVEX. rs、EVEX. RL、 EVEX. write mask control、以及EVEX. N;也示出为a )-如前面描述的,该字段是上下文特 定的。本文稍后提供额外的说明。
[0130]匕6七3字段654出¥£父字节3,位[6:4]-555,也称为£¥£父.82_ (|、£¥£父.1'2_(|、£¥£父.1^1、 EVEX. LLO、EVEX. LLB ;也示出为0 0 0 ) -如前面描述的,该字段是上下文特定的。本文稍 后提供额外的说明。
[0131] REX'字段710-这是REX'字段的其余部分并且是EVEX. V'位字段(EVEX字节3, 位[3] - V'),其可以被用于对扩展的32寄存器集合的高16或者低16进行编码。该位以位 反转格式存储。1的值被用于编码低16个寄存器。换言之,V' VVVV通过将EVEX. V'、EVEX. VVVV组合而形成。
[0132] 写入掩码字段670(EVEX字节3,位[2:0] - kkk)一其内容指明写入掩码寄存器中 的寄存器的索引,如前面描述的。在本发明的一个实施例中,特定值EVEX. kkk = 000具有 特殊的行为,暗指没有写入掩码被用于特定指令(这可以以各种方式实现,包含使用硬连 线至全一(all ones)的写入掩码,或者绕开掩码操作硬件的硬件)。
[0133] 实际操作码字段730 (字节4)
[0134] 这也称为操作码字节。操作码的部分在该字段中指明。
[0135] MOD R/M 字段 740 (字节 5)
[0136] 修改器字段646 (MODR/M. MOD,位[7-6]-MOD字段742)-如前面描述的,MOD字段 742的内容在存储器访问和非存储器访问操作之间辨别。该字段将在本文稍后进一步说明。
[0137] MODR/M. reg字段744,位[5-3] - ModR/M. reg字段的角色能够总结为2个情形: ModR/M. reg对目的地寄存器操作数或者源寄存器操作数进行编码,或者ModR/M. reg被视 为操作码扩展,并且不被用于对任何指令操作数进行编码。
[0138] MODR/M. r/m字段746,位[2-0] - ModR/M. r/m字段的角色可以包含如下:ModR/ M. r/m对参考存储器地址的指令操作数进行编码,或者ModR/M. r/m对目的地寄存器操作数 或者源寄存器操作数进行编码。
[0139] 按比例调整、索引、基本(SIB)字节(字节6)
[0140] 按比例调整字段660(SIB.SS,位[7-6] -如前面描述的,按比例调整字段660的内 容用于存储器地址产生。该字段将在本文稍后进一步说明。
[0141] SIB.xxx 754(位[5-3]和SIB.bbb 756(位[2-0]) -这些字段的内容在前面关于 寄存器索引Xxxx和Bbbb被提及。
[0142] 移位字节(字节7或者字节7-10)
[0143] 移位字段662A (字节7-10) -当MOD字段742含有10时,字节7-10是移位字段 662A,其与旧有的32位移位(disp32)相同工作,并以字节粒度工作。
[0144] 移位因子字段662B(字节7)-当MOD字段742含有01时,字节7是移位因子字 段662B。该字段的位置与旧有的x86指令集8位移位(disp8)相同,旧有的x86指令集8 位移位(disp8)以字节粒度工作。由于disp8是签名扩展的,其仅能够在-128与127字节 偏移之间处理;在64字节缓存线方面,disp8使用8位,其能够仅被设定为4个真正有用的 值-128、_64、0、以及64 ;由于经常需要更大范围,使用disp32 ;然而,disp32要求4字节。 与disp8和disp32相反,移位因子字段662B是disp8的重新解释;当使用移位因子字段 662B时,实际的移位由移位因子字段的内容乘以存储器操作数访问的尺寸(N)来确定。这 种类型的移位称作disp8*N。这减小了平均指令长度(用于移位的单个字节但是具有更大 的范围)。这样的压缩的移位基于如下假定:有效移位是存储器访问的多个粒度,因此,地 址偏移的冗余的低阶位不需要被编码。换言之,移位因子字段662B替换旧有的x86指令 集8位移位。因此,移位因子字段662B以与x86指令集8位移位相同的方式被编码(所以 ModRM/SIB编码规则没有改变),例外仅是disp8过载至disp8*N。换言之,编码规则或者编 码长度没有改变,仅由硬件对移位值的解释改变了(其需要按照存储器操作数的尺寸,按 比例调整移位以获得字节方式的地址偏移)。
[0145] 立即
[0146] 立即字段672如前面描述地操作。
[0147] 示例性寄存器架构一图8
[0148] 图8是根据本发明的一个实施例的寄存器架构800的框图。寄存器文件和寄存器 架构的寄存器被列出如下:
[0149] 矢量寄存器文件810-在示出的实施例中,有812位宽的32个矢量寄存器;这些 寄存器称作zmmO至zmm31。较低16个的zmm寄存器的低阶656位叠加在寄存器ymm〇-16 上。较低16个zmm寄存器的低阶128位(ymm寄存器的低阶128位)叠加在寄存器xmmO-15 上。特定矢量友好指令格式700对这些叠加的寄存器文件进行操作,如下方表格示出的那 样。
[0151] 换言之,矢量长度字段659B在最大长度与一个或多个其他更短的长度之间选择, 每个这样的更短的长度是之前长度的一半长度;并且没有矢量长度字段659B的指令模板 对最大矢量长度进行操作。此外,在一个实施例中,特定矢量友好指令格式700的B级别指 令模板对打包的或者标量单/双精度浮点数据和打包的或者标量整数数据进行操作。标量 操作是在zmm/ymm/xmm寄存器中最低阶数据元素位置执行的操作;高阶数据元素位置要么 保持与在指令之前的相同,要么根据实施例被归零。
[0152] 写入掩码寄存器815-在示出的实施例中,有8个写入掩码寄存器(k0至k7),每 个尺寸为64位。如前面描述的,在本发明的一个实施例中,矢量掩码寄存器k0不能被用作 写入掩码,当通常表明k0的编码用于写入掩码时,其选择硬连线写入掩码OxFFFF,有效对 该指令禁用写入掩码操作。
[0153] 多媒体扩展控制状态寄存器(MXCSR) 820-在示出的实施例中,该32位寄存器提 供被用于浮点操作的状态和控制位。
[0154] 通用寄存器825-在示出的实施例中,有16个与现有x86寻址模式一起使用的64 位通用寄存器,以处理存储器操作数。这些寄存器用以下的名字参考:RAX、RBX、RCX、RDX、 1^\1?1、1?1、1??、以及1?8至1?15。
[0155] 扩展标志(EFLAGS)寄存器830-在示出的实施例中,该32位寄存器被用于记录很 多指令的结果。
[0156] 浮点控制字(FCW)寄存器835和浮点状态字(FSW)寄存器840-在示出的实施例 中,这些寄存器由x87指令集扩展使用来设定舍入模式、异常掩码以及FCW情况下的标志, 并在FSW的情况下对异常保持追踪。
[0157] 标量浮点堆栈寄存器文件(x87堆栈)845在其上混杂(aliased)有MMX打包的整 平寄存器文件850-在示出的实施例中,x87堆栈是被用于对32/64/80位浮点数据使用x87 指令集扩展来执行标量浮点操作的8个元素堆栈;而MMX寄存器被用于对64位打包的整数 数据执行操作,以及对在MMX与XMM寄存器之间执行的一些操作保持操作数。
[0158] 分段寄存器855-在示出的实施例中,有6个16位寄存器使用来存储用于分段的 地址产生的数据。
[0159] RIP寄存器865-在示出的实施例中,该64位寄存器存储指令指针。
[0160] 本发明的替代实施例可以使用更宽或者更窄的寄存器。另外,本发明的替代实施 例可以使用更多、更少、或者不同寄存器文件和寄存器。
[0161] 不例性按序处理器架构一图9A-9B
[0162] 图9A-B示出示例性按序处理器架构的框图。这些示例性实施例围绕用宽矢量处 理器(VPU)增强的按序CPU核心的多个例示而设计。核心通过高带宽互连网络与一些固定 功能逻辑、存储器I/O接口、以及其他必需的I/O逻辑进行通信,根据el3t应用。例如,作 为独立GPU的该实施例的实施方式将典型地包含PCIe总线。
[0163] 图9A是根据本发明的实施例的单个的CPU核心、连同其至管芯上互连网络902的 连接以及其2级(L2)缓存904的本地子集的框图。指令解码器900支持具有包含特定矢 量指令格式700的扩展的x86指令集。虽然在本发明的一个实施例中(为简化设计),标 量单元908和矢量单元910使用分离的寄存器集合(分别是标量寄存器912和矢量寄存器 914),并且其间传输的数据被写入至存储器,进而,从1级(L1)缓存906读回,但本发明的 替代实施例可以使用不同方法(例如,使用单个的寄存器集合或者包含允许数据在2个寄 存器文件之间传输而不用写入和读回的通信路径)。
[0164] L1缓存906允许低延时访问至缓存存储器至标量和矢量单元。连同矢量友好指令 格式的加载操作指令,这意味着L1缓存906能够有些像扩展的寄存器文件那样被处理。这 显著改善了很多算法的性能,尤其是带有驱逐提示字段652B。
[0165] L2缓存904的本地子集是全局L2缓存的部分,被分割为分离的本地子集,每个 CPU核心为一个。每个CPU具有向其自身的L2缓存904的本地子集 的直接存取路径。由 CPU核心读出的数据存储在其L2缓存子集904,并且能够与访问其自己的本地L2缓存子集 的其他CPU并行地快速访问。由CPU核心写入的数据存储在其自身的L2缓存子集904,并 且如果需要的话从其他子集刷入(flushed)。环形网络保证对于共享数据的相干性。
[0166] 图9B是根据本发明的实施例的图9A中的CPU核心的部分的分解图。图9B包含 L1缓存904的L1数据缓存906A部分、以及关于矢量单元910和矢量寄存器914的更多细 节。具体而言,矢量单元910是16宽矢量处理单元(VPU)(参见16宽ALU 928),其执行整 数、单精度浮点、以及双精度浮点指令。VPU支持将寄存器输入用拌合单元920拌合,用数 字转换单元922A-B的数字转换,以及用复制单元924复制到存储器输入。写入掩码寄存器 926允许预测得到的矢量写入。
[0167] 寄存器数据能够以各种方式拌合,例如支持矩阵乘法。来自存储器的数据能够跨 道被复制。这是图形和非图形并行数据处理中的通常操作,其显著增加了缓存效率。
[0168] 环形网络是双向的,以允许代理(诸如CPU核心、L2缓存和其他逻辑框)在芯片 内互相彼此通信。每个环数据路径在每个方向是812位宽。
[0169] 示例性乱序架构一图10
[0170]图10是示出根据本发明的实施例的示例性乱序架构的框图,并能够被看作是诸 如上述图1中的流水线的流水线的更具体说明。具体而言,图10示出已被修改为合并矢量 友好指令格式及其执行的周知的示例性乱序架构。在图10中,箭头标注两个或更多个单元 之间的耦合,并且箭头的方向表明在这些单元之间数据流的方向。图10包含耦合至执行引 擎单元1010的前端单元1005和存储器单元1015 ;执行引擎单元1010还親合至存储器单 元 1015。
[0171] 前端单元1005包含耦合至2级(L2)分支预测单元1022的1级(L1)分支预测单元 1020。L1和L2品牌预测单元1020和1022耦合至L1指令缓存单元1024。L1指令缓存单 元1024耦合至指令翻译后备缓冲器(TLB) 1026,其还耦合至指令获取和预解码单元1028。 指令获取和预解码单元1028耦合至指令队列单元1030,其还耦合至解码单元1032。解码 单元1032包括复杂解码器单元1034以及3个简单解码器单元1036、1038、以及1040。解 码单元1032包含微码ROM单元1042。解码单元1032可以如前所述,在解码阶段部分进行 操作。L1指令缓存单元1024还耦合至存储器单元1015中的L2缓存单元1048。指令TLB 单元1026还耦合至存储器单元1015中的第二级TLB单元1046。解码单元1032、微码ROM 单元1042、以及循环流检测器单元1044每个耦合至执行引擎单元1010中的重命名/分配 器单元1056。
[0172] 执行引擎单元1010包含重命名/分配器单元1056,其耦合至隐退单元 (retirement unit) 1074和统一调度器单元1058。隐退单元1074还親合至执行单元1060 并包含重新排序缓冲单元1078。统一调度器单元1058还耦合至物理寄存器文件单元1076, 其耦合至执行单元1060。物理寄存器文件单元1076包括矢量寄存器单元1077A、写入掩码 寄存器单元1077B、以及标量寄存器单元1077C ;这些寄存器单元可以提供矢量寄存器810、 矢量掩码寄存器815、以及通用寄存器825 ;并且物理寄存器文件单元1076可以包含额外的 未示出的寄存器文件(例如,混杂在MMX打包的整平的寄存器文件850上的标量浮点堆栈 寄存器文件845)。执行单元1060包含3个混合的标量和矢量单元1062、1064、以及1072 ; 负载单元1066 ;存储地址单元1068 ;存储数据单元1070。负载单元1066、存储地址单元 1068、以及存储数据单元1070每个还耦合至存储器单元1015中的数据TLB单元1052。
[0173] 存储器单元1015包含耦合至数据TLB单元1052的第二级TLB单元1046。数据 TLB单元1052耦合至L1数据缓存单元1054。L1数据缓存单元1054还耦合至L2缓存单元 1048。在一些实施例中,L2缓存单元1048还耦合至存储器单元1015内和/或外的L3和 更高的缓存单元1050。
[0174] 以示例的方式,示例性乱序架构可以实现处理流水线8200如下:1)指令获取和预 解码单元1028执行获取和长度解码阶段;2)解码单元1032执行解码阶段;3)重命名/分 配器单元1056执行分配阶段和重命名阶段;4)统一调度器1058执行调度阶段;5)物理寄 存器文件单元1076、重新排序缓冲单元1078、以及存储器单元1015执行寄存器读出/存储 器读出阶段;执行单元1060执行:执行/数据转换阶段;6)存储器单元1015和重新排序缓 冲单元1078执行写回/存储器写入阶段1960 ;7)隐退单元1074执行ROB读出阶段;8)各 种单元可以涉及异常处理阶段;和9)隐退单元1074和物理寄存器文件单元1076执行提交 (commit)阶段。
[0175] 示例性单核和多核处理器一图15
[0176] 图15是根据本发明的实施例的具有集成存储器控制器和图形的单核处理器和多 核处理器1500的框图。图15的实线框示出具有单核1502A、系统代理1510、一个或多个总 线控制器单元1516的集合的处理器1500,而可选的附加的虚线框示出具有系统代理单元 1510中的多个核心1502A-N、一个或多个集成存储器控制器单元1514的集合、以及集成图 形逻辑1508的替代处理器1500。
[0177] 存储器层次包含核心内的一级或多级缓存、一组或一个或多个共享的缓存单元 1506、以及耦合至集成存储器控制器单元1514的集合的外部存储器(未示出)。共享的缓 存单元1506的集合可以包含一个或多个中级缓存(诸如2级(L2)、3级(L3)、4级(L4)或 者其他级缓存、最后一级缓存(LLC)、和/或其组合)。虽然在一个实施例中,基于环的互连 单元1512将集成图形逻辑1508、共享的缓存单元1506的集合、以及系统代理单元1510互 连,但替代实施例可以使用任何数量的周知技术用于将这样的单元互连。
[0178] 在一些实施例中,一个或多个核心1502A-N能够多线程。系统代理1510包含协调 和操作核心1502A-N的那些部件。系统代理单元1510例如可以包含功率控制单元(P⑶) 和显示器单元。P⑶可以包含调节核心1502A-N的功率状态和集成图形逻辑1508所需要的 逻辑和部件。显示器单元用于驱动一个或多个外部连接的显示器。
[0179] 在架构和/或指令集方面,核心1502A-N可以是同构或者异构的。例如,一些核心 1502A-N可以按序(例如,如图9A和9B所示)而其他乱序(例如,如图10所示)。作为另 一个示例,两个或更多个核心1502A-N可以能够执行相同的指令集,而其他可以能够执行 该指令集的仅子集或者不同指令集。至少一个核心能够执行本文说明的矢量友好指令格 式。
[0180] 处理器可以是通用处理器,诸如可从加州圣克拉拉英特尔公司得到的Core TMi3、 i5、i7、2Duo和Quad、Xeon?、或者Itanium?处理器。替代地,处理器可以来自另一个公司。 处理器可以是特殊用途处理器,诸如例如网络或者通信处理器、压缩引擎、图形处理器、协 处理器、嵌入式处理器等。处理器可以在一个或多个芯片上实现。处理器1500可以是部分 和/或可以实现在一个或多个基底上,其使用任何多个处理技术(诸如例如BiCMOS、CMOS 或者NM0S)。
[0181] 示例性计算机系统和处理器一图11至13
[0182] 图11-13是适于包含处理器1500的示例性系统,而图14是可以包含一个或多个 核心1502的示例性片上系统(SoC)。本领域已知的用于膝上型计算机、台式机、手持PC、个 人数字助理、工程工作站、服务器、网络设备、网络集线器、开关、嵌入式处理器、数字信号处 理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携媒体播放器、手持 设备、以及各种其他电子设备的其他系统设计和配置也是适当的。一般而言,能够包含如本 文公开的处理器和/或其他执行逻辑的很多种类的系统或者电子设备是通常合适的。
[0183] 现在参考图11,示出的是依据本发明的一个实施例的系统1100的框图。系统1100 可以包含一个或多个处理器111〇、1115,其耦合至图形存储器控制器中心(GMCH)1120。额 外的处理器1115的可选本质在图11中用虚线表示。
[0184] 每个处理器1110U115可以是一些版本的处理器1500。然而,应该注意的是,集成 图形逻辑和集成存储器控制单元不大可能存在于处理器1110、1115中。
[0185] 图11示出了 GMCH 1120可以耦合至存储器1140,其例如可以是动态随机存取存储 器(DRAM)。对于至少一个实施例,DRAM可以与非易失性缓存相关联。
[0186] GMCH 1120可以是芯片组或者芯片组的一部分。GMCH 1120可以与处理器1110、 1115通信,并控制在处理器1110U115和存储器1140之间的交互。GMCH 1120还可以作为 处理器111〇、1115与系统1100的其他元素之间的加速的总线接口。对于至少一个实施例 而言,GMCH 1120经由多点分支总线(诸如前端总线(FSB) 1195)与处理器1110U115通信。
[0187] 此外,GMCH 1120耦合至显示器1145 (诸如平板显示器)。GMCH 1120可以包含集 成图形加速器。GMCH 1120还耦合至输入/输出(I/O)控制器中心(ICH) 1150,其可以被用 于将各种外围设备耦合至系统1100。例如图11的实施例示出的是外部图形设备1160,其 可以是耦合至ICH 1150的分立图形设备,以及另一个外围设备1170。
[0188] 替代地,额外的或者不同的处理器还可以存在于系统1100中。例如,额外的处理 器1115可以包含与处理器1110相同的额外的处理器、与处理器1110异构或者非对称的额 外的处理器、加速器(诸如例如图形加速器或者数字信号处理0SP)单元)、现场可编程门 阵列、或者任何其他处理器。在包含架构、微架构、热、功耗特征等的优点度量谱方面,在物 理资源1110、1115之间能够有各种差异。这些差异可以在处理元件1110、1115之间将其自 己有效地表现为不对称性和异构性。对于至少一个实施例而言,各种处理元件1110、1115 可以驻存在相同的管芯封装中。
[0189] 现在参考图12,示出的是依据本发明的实施例的第二系统1200的框图。如图12 所示,多处理器系统1200是点对点互连系统,并且包含第一处理器1270和经由点对点互连 1250耦合的第二处理器1280。如图12所示,每个处理器1270和1280可以是一些版本的 处理器1500。
[0190] 替代地,一个或多个处理器1270U280可以是除处理器外的元素,诸如加速器或 者现场可编程门阵列。
[0191] 虽然仅示出有2个处理器1270、1280,但要理解的是本发明的范围不限于此。在其 他实施例中,一个或多个额外的处理元件可以存在于给定的处理器中。
[0192] 处理器1270还可以包含集成存储器控制器中心(MC) 1272和点对点(P-P)接口 1276和1278。类似地,第二处理器1280可以包含頂C 1282和P-P接口 1286和1288。处 理器1270、1280可以使用点对点(PtP)接口电路1278、1288经由PtP接口 1250来交换数 据。如图12所示,MC的1272和1282将处理器耦合至相应存储器,即存储器1242和存储 器1244,其可以是本地附接至相应处理器的主存储器的部分。
[0193] 处理器1270、1280的每个可以经由单独P-P接口 1252、1254,使用点对点接口电路 1276、1294、1286、1298,与芯片组1290交换数据。芯片组1290还可以经由高性能图形接口 1239与高性能图形电路1238交换数据。
[0194] 共享的缓存(未示出)可以被包含在两个处理器外的任一处理器中,但经由P-P 互连与处理器连接,使得任一或者两个处理器的本地缓存信息可以存储在共享的缓存中, 如果处理器处于低功率模式。
[0195] 芯片组1290可以经由接口 1296耦合至第一总线1216。在一个实施例中,第一总 线1216可以是外围部件互连(PCI)总线,或者诸如PCI Express总线或者另一个第三代1/ 0互连总线的总线,尽管本发明的范围不限于此。
[0196] 如图12所示,各种I/O设备1214可以耦合至第一总线1216、以及将第一总线1216 耦合至第二总线1220的总线桥1218。在一个实施例中,第二总线1220可以是低针数(LPC) 总线。各种设备可以耦合至第二总线1220,例如在一个实施例中包含键盘/鼠标1222、通 信设备1226和数据存储单元1228 (诸如可以包含代码1230的盘驱动器或者其他海量存储 设备)。此外,音频I/O 1224可以耦合至第二总线1220。要注意的是,其他架构是可能的。 例如,不是图12的点对点架构,系统可以实现多点分支总线或者其他这样的架构。
[0197] 现在参考图13,示出的是依据本发明的实施例的第三系统1300的框图。图12和 13中相似的元素承载了相似的附图标记,并且图12的某些方面已从图13省略,以避免模糊 图13的其他方面。
[0198] 图13示出了处理元件1270U280可以分别包含集成存储器和I/O控 制逻辑 ("CL") 1272和1282。对于至少一个实施例,CL 1272U282可以包含存储器控制器中心逻 辑(頂〇,诸如结合图11和12上述的那样。此外,CL 1272U282还可以包含I/O控制逻 辑。图13示出了不仅存储器1242、1244耦合至CL 1272、1282,而且I/O设备1314也耦合 至控制逻辑1272、1282。旧有I/O设备1315耦合至芯片组1290。
[0199] 现在参考图14,示出的是依据本发明的实施例的SoC 1400的框图。图15中的类 似的元素承载了相似的附图标记。另外,虚线框是更高级SoC的可选的特征。在图14中, 互连单元1402耦合至:应用处理器1410,其包含一个或多个核心1502A-N和共享缓存单元 1506的集合;系统代理单元1510 ;总线控制器单元1516 ;集成存储器控制器单元1514 ; - 组或者一个或多个介质处理器1420,其可以包含集成图形逻辑1508、用于提供静止和/或 视频照相机功能的图像处理器1424、用于提供硬件音频加速的音频处理器1426、以及用于 提供视频编码/解码加速的视频处理器1428 ;静态随机存取存储器(SRAM)单元1430 ;直 接存储器存取(DMA)单元1432 ;以及用于耦合至一个或多个的外部显示器的显示器单元 1440 〇
[0200] 本文公开的机制的实施例可以实现在硬件、软件、固件、或者这样的实施方式方法 的组合中。本发明的实施例可以实现为在可编程系统上执行的计算机程序或者程序代码, 可编程系统至少包括一个处理器、存储系统(包含易失性和非易失性存储器和/或存储元 件)、至少一个输入设备、以及至少一个输出设备。
[0201] 程序代码可以适用到输入数据来执行本文说明的功能并产生输出信息。输出信息 可以以已知的方式应用到一个或多个输出设备。出于本申请的目的而言,处理系统包含具 有处理器(诸如例如数字信号处理器OSP)、微控制器、特定应用集成电路(ASIC)、或者微 处理器)的任何系统。
[0202] 程序代码可以用高级过程或者面向对象编程语言实现来与处理系统通信。如果需 要的话,程序代码还可以用汇编或者机器语言实现。实际上,本文说明的机构的范围不限于 任何特定编程语言。在任何情况下,语言可以是编译或解释的语言。
[0203] 至少一个实施例的一个或多个方面可以由存储在机器可读介质上的代表性指令 实现,其代表处理器内的各种逻辑,当由机器读出时,使机器生成执行本文说明的技术的逻 辑。该代表被称为"IP核",可以被存储在有形、机器可读介质中,并供应至各种客户或者制 造设施,以载入到实际上制作逻辑或者处理器的生成机器中。
[0204] 这样的机器可读存储介质可以包含但不限于:非暂时性、由机器或者设备制造或 形成的物品的有形布置,包含存储介质(诸如硬盘)、任何其他类型的盘(包含软盘、光盘 (压缩光盘只读存储器(CDROM)、压缩可重写光盘(CD-RW))、以及磁光盘)、半导体设备(诸 如只读存储器(ROM)、随机存取存储器(RAM)(诸如动态随机存取存储器(DRAM)、静态随机 存取存储器(SRAM))、可擦除可编程只读存储器(EPR0M)、闪存存储器、电可擦除可编程只 读存储器(EEPR0M))、磁或者光卡、或者适于存储电子指令的任何其他类型的介质。
[0205] 相应地,本发明的实施例还包含含有指令矢量友好指令格式或者含有设计数据的 非暂时性、有形机器可读介质,诸如定义了本文说明的构造、电路、装置、处理器和/或系统 特征的硬件描述语言(HDL)。这样的实施例还可以称作程序产品。
[0206] 在一些情况下,指令转换器可以被用于将指令从源指令集转换到目标指令集。例 如,指令转换器可以将指令翻译(例如使用静态二进制翻译、包含动态汇编的动态二进制 翻译)、变形、模拟、或者转换至通过核心处理的一个或多个其他指令。指令转换器可以实现 在软件、硬件、固件、或者其组合中。指令转换器可以在处理器上、在处理器外、或者部分在 处理器上部分在处理器外。
[0207] 图16是根据本发明的实施例的对比用于将源指令集中的二进制指令转换至目标 指令集中的二进制指令的软件指令转换器的使用的框图。在示出的实施例中,指令转换器 是软件指令转换器,尽管替代地指令转换器可以实现在软件、固件、硬件、或者各种其组合 中。图16示出以高级语言1602写的程序可以使用x86编译器1604编译,以产生可以由具 有至少一个x86指令集核心的处理器1616原生执行的x86二进制代码1606 (假定编译的 一些指令是矢量友好指令格式)。具有至少一个x86指令集核心的处理器1616代表:能够 执行与具有至少一个x86指令集核心的英特尔处理器实质上相同功能的任何处理器,是通 过兼容执行或者处理(1)英特尔x86指令集核心的指令集的实质部分,或者(2)目标为运 行在具有至少一个x86指令集核心的英特尔处理器上的应用或者其他软件的目标代码版 本,以实现与具有至少一个x86指令集核心的英特尔处理器实质上相同的结果。x86编译器 1604代表可操作来产生x86二进制代码1606 (例如目标代码)的编译器,无论是否有额外 的链接处理,其可以在具有至少一个x86指令集核心的处理器1616上执行。类似地,图16 示出以高级语言1602写的程序可以使用替代的指令集编译器1608来进行编译,以产生替 代的指令集二进制代码1610,其可以由没有至少一个x86指令集核心的处理器1614原生执 行(例如,具有执行MIPS Technologies of Sunnyvale,CA的MIPS指令集的核心和/或执 行ARM Holdings of Sunnyvale,CA的ARM指令集的核心的处理器)。指令转换器1612被 用于将x86二进制代码1606转换为可以由没有x86指令集核心的处理器1614原生执行的 代码。该转换的代码不太可能与替代的指令集二进制代码1610相同,因为难以做出能够进 行该操作的指令转换器;然而,转换的代码将完成一般操作,并由来自替代的指令集的指令 构成。因此,指令转换器1612代表软件、固件、硬件、或者其组合,通过模拟、仿真或者任何 其他处理,允许不具有x86指令集处理器或者核心的处理器或者其他电子设备执行x86二 进制代码1606。
[0208] 本文公开的矢量友好指令格式中的指令的某些操作可以由硬件部件执行,并可以 实施在机器可执行指令(其被用于使或者至少导致:用执行该操作的指令编程的电路或者 其他硬件部件)中。电路可以包含通用或者特殊用途处理器、或者逻辑电路,仅举几个例 子。操作还可以可选地由硬件和软件的组合执行。执行逻辑和/或处理器可以包含:响应 于从机器指令导出的机器指令或者一个或多个控制信号来存储指明指令的结果操作数的、 特定或者特别电路或者其他逻辑。例如,本文公开的指令的实施例可以在图11-16的一个 或多个系统中执行,并且矢量友好指令格式中的指令的实施例可以存储在系统中要执行的 程序代码中。另外,这些图的处理元件可以利用本文详述的一个详细的流水线和/或架构 (例如按序和乱序架构)。例如,按序架构的解码单元可以将指令解码,将解码指令传递至 矢量或者标量单元等
[0209] 上述说明旨在示出本发明的优选实施例。另外从上述讨论应该显而易见的是尤其 是在技术的这样的、成长快速且进一步的发展难以预料的领域中,本发明在布置中能够被 修改,并由本领域的技术人员细化,而不脱离所附的权利要求和其等同物的范围内的本发 明的原理。例如,方法的一个或多个操作可以合成或者进一步拆开。
[0210] 替代实施例
[0211] 虽然已说明的实施例将原生执行矢量友好指令格式,但本发明的替代实施例可以 通过运行在执行不同指令集的处理器(例如,执行MIPS Technologies of Sunnyvale,CA 的MIPS指令集的处理器、执行ARM Holdings of Sunnyvale,CA的ARM指令集的处理器) 上的模拟层来执行矢量友好指令格式。另外,虽然图中的流程图示出由本发明的某些实施 例执行的操作的特定顺序,但应该理解的是这样的顺序是示例性的(例如,替代实施例可 以以不同顺序执行操作,组合某些操作,重叠某些操作等)。
[0212] 在上述说明中,出于解释的目的,已叙述了大量具体细节,以提供对本发明的实施 例的彻底理解。然而,本领域的技术人员可以知晓的是一个或多个其他实施例可以被实践 而没有这些具体细节中的一些。说明的特定实施例被提供不是限制本发明,而是示出本发 明的实施例。本发明的范围不由上述特定示例确定,而仅由权利要求确定。
【主权项】
1. 一种处理器,包括: 指令执行流水线,其具有用来执行指令的功能单元,所述指令将多个矢量元素与一输 入值进行比较,每个所述矢量元素和所述输入值具有标识数据内的位置的第一相应的段和 具有所述数据的字节序列的第二相应的段,所述功能单元具有: 比较电路,用于将输入矢量元素的相应的字节序列与所述输入值的字节序列进行比 较,来识别每个比较的匹配字节的数量;以及 差异电路,用于确定所述数据内所述输入矢量的元素的字节序列与所述输入值的字节 序列之间的相应的距离。2. 如权利要求1所述的处理器,其中,所述指令具有标识立即操作数的格式。3. 如权利要求2所述的处理器,其中,所述立即操作数指明输入矢量元素的字节序列 与所述输入值的字节序列之间的最大允许距离。4. 如权利要求2所述的处理器,其中,所述立即操作数指明来自所述比较电路的最小 匹配数量。5. 如权利要求2所述的处理器,其中,所述立即操作数指明在所述指令的结果矢量的 元素内的位置,其中,匹配的数量以及每个所述矢量元素的距离位于该位置处。6. 如权利要求2所述的处理器,其中,所述功能单元具有输入端,用来接收标识所述输 入矢量的尺寸的掩码。7. -种处理器,包括: 指令执行流水线,其具有用来执行指令的功能单元,所述指令将多个矢量元素与一输 入值进行比较,每个所述矢量元素和所述输入值具有标识数据内的位置的第一相应的段和 具有所述数据的字节序列的第二相应的段,所述功能单元具有: i) 比较电路,用于将输入矢量元素的相应的字节序列与所述输入值的字节序列进行比 较,来识别每个比较的匹配字节的数量;以及 ii) 差异电路,用于确定所述输入矢量的元素的字节序列与所述数据内所述输入值的 字节序列之间的相应的距离,所述指令执行流水线具有功能单元比较电路,所述功能单元 比较电路用于比较第二输入矢量的元素内的值并识别所述值中的最大的一个。8. 如权利要求7所述的处理器,其中,所述指令具有标识立即操作数的格式。9. 如权利要求8所述的处理器,其中,所述立即操作数指明输入矢量元素的字节序列 与所述输入值的字节序列之间的最大允许距离。10. 如权利要求8所述的处理器,其中,所述立即操作数指明来自所述比较电路的最小 匹配数量。11. 如权利要求8所述的处理器,其中,所述立即操作数指明在所述指令的结果矢量的 元素内的位置,其中,匹配的数量以及每个所述矢量元素的距离位于该位置处。12. 如权利要求8所述的处理器,其中,所述功能单元具有输入端,用来接收标识所述 输入矢量的尺寸的掩码。13. -种方法,包括: 执行相同类型的多个指令,每个所述指令接收输入值,所述输入值具有标识数据内的 位置的第一段和所述数据的字节序列,每个所述指令具有相应的输入矢量,所述输入矢量 具有相应的元素,每个所述元素具有所述数据内的相应的位置和所述数据的相应的字节序 列,每个所述指令使其相应的结果被写入同一个矢量寄存器的不同段,每个所述结果提供 在所述输入值与所述输入矢量中的相应的一个的元素之间的距离和匹配的数量。14. 如权利要求13所述的方法,还包括在已执行所述指令之后执行另一个指令,该另 一个指令确定所述矢量寄存器内的最大匹配数量。15. 如权利要求13所述的方法,其中,每个所述指令具有包含立即操作数的指令格式, 所述立即操作数指明所述数据内所述输入值与所述输入矢量的所述元素之间的最大允许 距离。16. 如权利要求13所述的方法,其中,每个所述指令具有包含立即操作数的指令格式, 所述立即操作数指明在所述矢量寄存器内结果信息要写入的位置。17. -种具有程序代码的机器可读存储介质,所述程序代码当由处理器处理时,使所述 处理器执行方法,包括: 执行相同类型的多个指令,每个所述指令接收输入值,所述输入值具有标识数据内的 位置的第一段和所述数据的字节序列,每个所述指令具有相应的输入矢量,所述输入矢量 具有相应的元素,每个所述元素具有所述数据内的相应的位置和所述数据的相应的字节序 列,每个所述指令使其相应的结果被写入同一个矢量寄存器的不同段,每个所述结果提供 在所述输入值与所述输入矢量中的相应的一个的元素之间的距离和匹配的数量。18. -种处理器,包括: 指令执行流水线,其具有功能单元,所述功能单元具有比较电路,用来比较输入矢量的 元素内的值,并识别所述值中的最大的一个。
【专利摘要】说明的处理器具有指令执行流水线,其具有功能单元来执行比较矢量元素与输入值的指令。每个矢量元素和输入值具有标识数据内的位置的第一相应的段和具有数据的字节序列的第二相应的段。功能单元具有比较电路,用于比较输入矢量元素的相应的字节序列与输入值的字节序列,来识别每个比较的匹配字节的数量。功能单元还具有差异电路,用于确定所述输入矢量的元素的字节序列与所述数据内所述输入值的字节序列之间的相应的距离。
【IPC分类】G06F9/38, G06F9/46
【公开号】CN104903850
【申请号】CN201380062335
【发明人】V·戈帕尔, J·吉尔福德, G·M·沃尔里克
【申请人】英特尔公司
【公开日】2015年9月9日
【申请日】2013年6月27日
【公告号】DE112013005343T5, US20140189293, WO2014105195A1

最新回复(0)