首页> 中国专利> 用于实现具有迭代依赖条件的迭代的向量环路的指令

用于实现具有迭代依赖条件的迭代的向量环路的指令

摘要

本申请公开了用于实现具有迭代依赖条件的迭代的向量环路的指令。描述了具有指令执行流水线的处理器。该指令执行流水线包括用于取出指令的指令取出级。该指令标识输入向量操作数,该输入向量操作数的多个输入元素指定两个状态中的一个或另一个。该指令也标识指定基值的第二输入操作数。该指令也标识指定跨度的第三输入操作数。该指令执行流水线也包括用于解码该指令的指令解码器。该指令执行流水线也包括用于执行该指令并提供结果输出向量的功能单元。该功能单元包括逻辑电路,该逻辑电路用于:响应于两个状态中的一个但不是另一个存在于输入向量操作数的对应的元素位置中,通过使从基值导出的值递增跨度以在结果输出向量的特定元素位置中产生元素。

著录项

  • 公开/公告号CN105278920A

    专利类型发明专利

  • 公开/公告日2016-01-27

    原文格式PDF

  • 申请/专利权人 英特尔公司;

    申请/专利号CN201510313464.2

  • 发明设计人 M·普罗特尼科夫;

    申请日2015-06-09

  • 分类号G06F9/38;G06F15/16;

  • 代理机构上海专利商标事务所有限公司;

  • 代理人毛力

  • 地址 美国加利福尼亚州

  • 入库时间 2023-12-18 13:52:34

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-09-07

    授权

    授权

  • 2016-02-24

    实质审查的生效 IPC(主分类):G06F9/38 申请日:20150609

    实质审查的生效

  • 2016-01-27

    公开

    公开

说明书

技术领域

本发明的领域涉及计算科学,更具体地说,本发明的领域涉及用于消 除具有未对齐数据行的数组的处理期间的未对齐的存储器访问的指令集。

背景技术

图1示出了在半导体芯片上用逻辑电路实现的处理核100的高层级的 图。该处理核包括流水线101。该流水线由多个级组成,这些级各自被设计 成在完全执行程序代码指令所需的多步骤过程中执行特定步骤。这些级通 常至少包括:1)指令取出和解码;2)数据取出;3)执行;4)写回。执行级 对由指令标识的并且在先前级(例如,在上述步骤2)中所取出的数据执行 由在另一先前级(例如,在上述步骤1)中所取出并解码的相同指令所标识 的特定操作。被操作的数据通常是从(通用)寄存器存储空间102中取出 的。在该操作完成时所创建的新数据通常也被“写回”到寄存器存储空间(例 如,在上述级4)。

与执行级相关联的逻辑电路通常由多个“执行单元”或“功能单 元”103_1到103_N构成,这些单元各自被设计成用于执行其自身的唯一操 作子集(例如,第一功能单元执行整数数学操作,第二功能单元执行浮点 指令,第三功能单元执行来自/去往高速缓存/存储器的加载/存储操作,等 等)。由所有这些功能单元执行的所有操作的集合与处理核100所支持的“指 令集”相对应。

计算机科学领域中广泛认可两种类型的处理器架构:“标量”型和“向 量”型。标量处理器被设计成用于执行对单个数据集执行操作的指令,而向 量处理器被设计成用于执行对多个数据集执行操作的指令。图2A和2B呈 现了展示标量处理器与向量处理器之间的基本差异的比较示例。

图2A示出标量AND(与)指令的示例,其中单个操作数集A和B一 起进行“与”运算以产生单个(或“标量”)结果C(即,AB=C)。相比之下, 图2B示出向量AND指令的示例,其中两个操作数集A/B和D/E并行地分 别一起进行“与”运算以同时产生向量结果C和F(即,A.AND.B=C并且 D.AND.E=F)。根据术语,“向量”是具有多个“元素”的数据元素。例如, 向量V=Q,R,S,T,U具有五个不同的元素:Q、R、S、T和U。示例性 向量V的“尺寸”是5(因为它具有5个元素)。

图1也示出不同于通用寄存器空间102的向量寄存器空间104的存在。 具体而言,通用寄存器空间102名义上用于存储标量值。由此,当多个执 行单元中的任何执行单元执行标量操作时,它们名义上使用从通用寄存器 存储空间102调用的操作数(并且将结果写回到通用寄存器存储空间102)。 相比之下,当多个执行单元中的任何执行单元执行向量操作时,它们名义 上使用从向量寄存器空间104调用的操作数(并将结果写回到向量寄存器 空间104)。可类似地分配存储器的不同区域以存储标量值和向量值。

附图说明

结合以下附图,从以下具体实施方式中可获得对本发明更好的理解, 其中:

图1示出指令执行流水线;

图2a和2b将标量处理与向量处理进行比较;

图3示出确定每个迭代之内的条件的状态的迭代过程;

图4示出改进的指令序列的图,该改进的指令序列使用条件递增指令 以利用向量环路来实现确定每一个迭代之内的条件的状态的迭代过程;

图5a示出用于执行条件递增指令的功能单元的逻辑电路的第一实施 例;

图5b示出用于执行条件递增指令的功能单元的逻辑电路的第二实施 例;

图6A是示出根据本发明的多个实施例的通用向量友好指令格式及其A类 指令模板的框图。

图6B是示出根据本发明的多个实施例的通用向量友好指令格式及其B类 指令模板的框图。

图7是示出根据本发明的多个实施例的示例性专用向量友好指令格式的 框图。

图8是根据本发明的一个实施例的寄存器架构的框图。

图9A是根据本发明的多个实施例的单个CPU核以及它与管芯上互连网 络的连接及其第二级(L2)高速缓存的本地子集的框图。

图9B是根据本发明的多个实施例的图9A中的CPU核的部分的分解图。

图10是示出根据本发明的多个实施例的示例性无序架构的框图。

图11是根据本发明的一个实施例的系统的框图。

图12是根据本发明的实施例的第二系统的框图。

图13是根据本发明的实施例的第三系统的框图。

图14是根据本发明的实施例的SoC的框图。

图15是根据本发明的多个实施例的具有集成的存储器控制器和图形器件 的单核处理器和多核处理器的框图。

图16是根据本发明的多个实施例的对照使用软件指令转换器将源指令集 中的二进制指令转换成目标指令集中的二进制指令的框图。

具体实施方式

通过向量环路的实现,可频繁地“加速”替代过程或以其他方式使替代过 程更高效。为了实现向量环路(loop),创建一个或多个向量,其中,环路中 的多个元素表示不同的迭代循环(cycle)。例如,向量中的第一元素表示第一 迭代,第二元素表示第二迭代,等等。通过对这些向量执行多个向量操作,可 并行地(例如,并发地或同时地)有效执行多个迭代。

然而,当前不能够将图3中描绘的那种形式的迭代过程编译为向量环路 (vectorloop)。容易在各种应用中找到图3中描绘的迭代形式。

图3示出由变量“i”控制的迭代过程。也就是说,如301处所示,伴 随着每一次迭代,i递增(或递减)。在如306处所示的N次迭代之后,如 307处所示,该过程停止。作为每次迭代的部分,如302处所示,进行关于 条件是“真”还是“非真”的查询。该条件可以是作为i的函数的真或非真。 也就是说,对于一个迭代,该条件可以为真,而对于另一迭代,该条件可 以不为真。确定对于任何迭代(i的值)的该条件是否为真的情况和/或过 程的集合实际上可以是不受限的。

条件为真的迭代将以与条件不为真的迭代不同的方式表现。如果条件 为真,则如303处所示,使变量n递增跨度(stride)值s。在此,s可以是 任意值,并且n可具有任意初始值。例如,如果s=1并且n的初始值为0, 则每当条件为真时,n将根据模式0、1、2、3、…递增。相比之下,如果 s=3并且n的初始值为0,则每当条件为真时,n将根据模式0、3、6、9、… 递增。

同样,对于i的各个值,该条件可以为真。例如,对于第一迭代,该 条件可以为真,并且随后直到第十个迭代才再次为真。因此,对于第二到 第九个迭代,n将保持恒定。因此,n提供了在多个迭代的过程中,该条件 已经有多少次为真的某种反映。如上文所暗指的那样,在迭代序列的开始 之前,通常向变量n提供初始值(例如,n=0)。

无论该条件是否为真,如304处所示,每一个迭代将基于n确定变量 x。具体而言,理解存在数组A(例如,大型向量A),并且x取A中基于 n的位置的值(x=A[n])。因此,对于每一个迭代,n充当确定x的值的A 的索引。如果对于特定迭代,该条件不为真,则x将采用它在前一迭代中 所采用的相同的值(因为如果条件不为真,则n不递增为A的另一新索引 值)。

随着x被确定,如305处所示,最终执行对该迭代的结果的计算。也 就是说,该结果是x的函数。在其他情况下,该结果计算连同x一起,可 以是i(迭代计数)和/或n值(在迭代中真条件的数量的测量)的函数。 在此,就该条件而言,可利用实际不受限数目的计算过程中的任何过程来 实现结果计算305。当已执行了全部的迭代,该结果是i个计算结果。

遗憾的是,由于该迭代过程(尤其是对条件的查询302,如303处所 示在递增为真时使n递增s以及将n用作A的索引)的复杂性,编译器将 图3中那种形式的过程编译为向量环路是有困难的。因此,本申请描述允 许编译器能够更容易地将图3中的过程编译为向量环路的新指令。

图4示出利用用于将图3中的迭代过程实现为向量环路的新指令的程 序代码的结构的实施例。

如图4中所观察到的那样,如401处所示,程序代码创建被称为“环 路向量(LV)”的向量,该向量的多个元素表示经由多个迭代的进展。在 实施例中,相邻的元素位置表示相对于该位置所邻接的元素位置的“下一 个”迭代,并且环路向量的多个元素的值对应于“环路计数”。例如,在 其中环路向量被实现为八元素向量的实施例中,可利用下列内容使该环路 向量实例化以表示该迭代过程的前八个迭代:

LV<=76543210方程1

在多个迭代的过程中,将在第八个和第九个迭代之间更新该环路向量, 以便按如下方式表示第九到第十六个迭代:

LV<=15141312111098方程2

因此,至少在一些实现中,LV的内容可被视为多个顺序迭代的过程中 的i的值。

如402处所示,程序代码也创建第二向量(“条件向量”(CV)), 其多个元素指示任何特定迭代上的条件是否为真(或是否不为真)。与环 路向量LV相同,在实施例中,条件向量(CV)中的相邻元素位置表示相 对于该位置所邻接的元素位置的“下一个”迭代。然而,与环路向量LV 不同,CV的多个元素指示其各自迭代的条件是否为真。例如,在其中以1 表示真并且以0表示非真的实施例中,在其中对于前八个迭代中的第四个 和第七个迭代为真但对于其他迭代的条件不为真的过程中,条件向量可采 取以下形式:

CV<=01001000方程3

在这些迭代的过程中,将在第八和第九个迭代之间更新该条件向量以 反映紧接着的第九到第十六个迭代过程中的多个条件。例如,如果对于第 九到第十六个迭代中的第十和第十二迭代为真但对于其他迭代不为真,则 被更新的条件向量将采用以下形式:

CV<=00001010方程4

在如402处所示创建了条件向量之后,如403处所示执行以上所暗指 的新指令(CONDINC)。该CONDINC指令接受条件向量作为输入操作数, 并且将被称为“n向量”(NV)的第三向量作为结果返回,该向量的内容 表示这些迭代过程中的n的值。

在实施例中,与环路向量LV和条件向量CV相同,n向量NV中的相 邻元素位置表示相对于该位置所邻接的元素位置的“下一个”迭代。然而, 与环路向量LV和条件向量CV都不相同,每当横跨多个迭代的条件为真时, n向量NV呈现n递增了跨度s。例如,如果上文中方程3中指定的条件向 量CV横跨前八个迭代而应用,则CONDINC指令将提供针对初始n值0、 跨度3和方程4中所指定的输入向量操作数CV的下列结果:

NV<=66333000方程5。

继续该示例,如果方程4中的条件向量CV适用于第九到第十六个迭 代,则该CONDINC指令将提供下列结果:

NV<=1212121212996方程6。

注意,来自第八个迭代的n的值(方程5中的NV的最左边的值=6) 延续到(carryover)第九个迭代的n的值(方程6中的NV的最右边的值 =6)。如将在下文中更详细地描述的那样,可将通过来自CONDINC指令 的前一执行所确定的前一迭代的n值的“延续”接受为CONDINC指令的 输入操作数。

在该CONDINC指令的执行之后,如404处所示,执行一条或多条指 令(例如,向量指令)以确定被称为“x向量”(XV)的第四向量,其横 跨多个迭代的进展建立x的值。回想一下,n充当数组A的索引,如404 处所示,一条或多条指令实质上以向量格式返回对应于由n向量(NV)提 供的索引位置的A的值。例如,如果提供A的前八个值如下:

A[7:0]=1286432168421方程7

并且如果通过指令处理404获取方程5中的n向量NV作为对应的向 量输入操作数,则通过指令处理404产生的对应的x向量XV将如下:

XV<=6464888111方程8。

在执行过程404中所利用的一条或多条指令可包括例如聚集指令。聚 集指令是基于输入索引值从数组中提取多个元素的指令。

伴随着方程1中的环路向量LV、方程5中的n向量NV和方程7中的 x向量XV的创建,以向量形式设置用于图3中的过程的前八个迭代的输入 变量。为了方便起见,以下重复这些方程。

LV<=76543210方程1。

NV<=66333000方程5。

XV<=6464888111方程8。

在此,横跨上述三个向量的相同位置的元素集对应于它们表示的特定 迭代的正确的i、n和x值。也就是说,例如,横跨LV、NV和XV向量的 最右边的(第一)元素位置对应于图3中的过程的第一迭代的i、n和x值 的正确集合(i=0,n=0且x=1);横跨LV、NV和XV向量的第四元素位 置对应于图3中的过程的第四迭代的i、n和x值的正确集合(i=3,n=3且 x=8),等等。

由此,伴随着这些向量的创建,最终准备好指令序列以在需要时将结 果计算405作为向量操作来执行。同样,结果计算405实际上可以是不受 限数量的不同计算中的任何计算。然而最终在实施例中,结果计算405的 结果将是用于前八个迭代的向量格式的结果(i)。也就是说,如果句法RS (i)用于指定“结果(i)”(即,第i个迭代的结果),则来自由框405 执行的处理的结果将是如下的结果向量RV:

RV<=RS(7)RS(6)RS(5)RS(4)RS(3)RS(2)RS(1)RS(0)方程9。

在为图3中的过程的前八个迭代计算了以上所提供的RV之后,可执 行图4中的指令序列的下一向量环路,该下一向量环路将产生方程2以获 取多个i值,并且产生方程5以获取多个n值。将图5中的n向量用作用于 第二环路的过程404的下一计算的输入,这将生成用于第八到第十六个迭 代的对应的x向量XV。这将产生用于第二向量环路的结果计算405的LV、 NV和XV向量的另一集合。然后,图4中的环路向量如上所述重复,直到 所需要的迭代数目完成为止。

虽然参考八元素的向量尺寸描述了以上示例,但是应当理解,相同的 上述过程可容易地扩展到其他向量尺寸(例如,16、32、64、128、256、 512等的向量尺寸)。

上述讨论也作为正跨度的主实施例而被考虑。也就是说,s>0。在一个 实施例中,支持新的CONDINC指令的向量处理器支持两种不同形式的指 令:CONDINCFW和CONDINCBW。在此,CONDINCFW(“条件向前递 增”)对应于在以上在先示例(其中,将s的值增加到n的值,以便向上 递增到n的新值(n=n+S))中的上述操作。相比之下,CONDINCBW(“条 件向后递增”)对应于实质相同的指令过程,但是伴随着n递减跨度值 (n=n-S)。

在替代或进一步组合的实施例中,为从图3中的形式偏离到“后递增” (“postincrement”)形式的多个迭代过程提供两种其他形式的CONDINC 指令。也就是说,图3示出过程,在其中,对于第i个迭代,如果该第i个 迭代的条件为真,则在结果计算305之前使n递增。

相比之下,迭代过程的替代形式可以存在,其中,对于第i个迭代, 如果该第i个迭代的条件为真,则在结果计算305之后,使n递增。通过将 图3中的框304和305移动到框302和303之前,并且将图4中的框404 和405移动到框402和403之前,可容易地设想这种类型的过程。在这种 情况下,取决于i的条件,每一个迭代i以n的递增或没有n的递增结束。 这具有使下一迭代i+1使用相比用于迭代i的索引x被递增跨度s的数组A 的索引x的效果(如果迭代i利用索引n来索引数组A且第i个迭代的条件 为真,则迭代i+1将利用索引n+s来索引数组A)。

根据该后递增方法,为了产生用于第i个迭代的n的多个正确值,另 一指令CONDINCPOST将显示n向量结果NV中的第(i+1)个元素(而不 是(利用CONDINC指令进行的)第i个元素)中的n的递增。例如,回想 一下,对于条件向量CV,输入操作数

CV<=01001000方程3。

CONDINC指令产生NV结果

NV<=66333000方程5。

相比之下,如果CONDINCPOST指令接收到与以上方程3中所提供的 相同的CV输入向量(并且具有初始值n=0和跨度3),则NV结果将为:

NV<=63330000方程10。

在CONDINCPOST指令的实施例中,如果CV输入向量的最后的(最 高的)元素指示条件为真,则该指令被设计成用于将延续项(carryterm) 设置到控制寄存器空间中,使得下一条CONDINCPOST将知晓要递增其第 一个(最低的)输出NV向量元素。在进一步的实施例中,有CONDINCPOST 的正向和反向版本两者:CONDINCPOSTFW和CONDINCPOSTBW。与 CONDINCFW相同,CONDINCPOSTFW将跨度视为正值,并且伴随每一 个真条件向上递增s(n=n+s),但是利用后递增函数。同样,与CONDINCBW 相同,CONDINCPOSTBW将跨度视为负值,并且伴随每一个真条件向下递 减s(n=n-s),但是利用后递增函数。

因此,编译器可识别图3中的普通格式或上述后递增格式的存在,并 且将CONDINC指令插入到符合上述原则的指令流中。注意,图3中的一 些形式的迭代过程(或对应的后递增过程)可能不将i和/或n用作用于结 果计算305的显式的输入值(该结果计算仍然将x用作输入值)。

图5a示出用于设计为用于执行CONDINCFW指令的功能单元的核逻 辑电路的实施例。根据图5a的特定设计,在功能单元中仅实例化单个核逻 辑电路一次,使得结果向量的多个不同元素的每一个都各自由单个电路处 理。根据该方法,通过功能单元控制其自身经由电路迭代(每个输出向量 元素一次)的内部环路的序列,形成指令的输出向量。参照图5b更详细地 描述的其他更并行化的方法也是可能的。

如图5a中所观察到的那样,功能单元包括第一多路复用器501和第二 多路复用器502。两个多路复用器都馈送到加法器503。如果正在处理结果 向量的第一(最低阶的)元素,则第一多路复用器501将“基”(“base”) 值提供给加法器503。因此,如果指令正在处理迭代的第一序列,则该基值 对应于n的初始值,否则,该基值对应于来自被执行的前一条CONDINCFW 指令的被穿越传递的n值。一旦第一结果元素经处理,则加法器503的输 出经由第一多路复用器501被往回提供给加法器503。

如果正在被处理的向量元素位置具有条件向量CV元素值1,则第二多 路复用器502将跨度值+s提供给加法器503。否则,第二多路复用器502 将值0提供给加法器503。通过这样做,在计算当前正在被处理的结果向量 元素位置的n值时,如果对应元素具有真条件,则多路复用器502使得前 一个n值递增+s,或者如果对应元素不为真,则多路复用器502保持前一 个n值。在此,功能单元接受条件向量CV作为输入操作数,并且伴随着 处理下一个结果向量元素位置的功能单元的每一个内部环路,连续地将CV 输入操作数中的下一元素提供给多路复用器502。

基值和跨度s各自可被接受为标量或分别作为附加的向量操作数的重 复基值的向量和跨度值的向量。例如,如果功能单元提供八元素向量作为 结果,并且跨度值为3,则可将跨度输入向量创建为33333333。在这 种情况下,如对条件向量输入操作数所做的那样,功能单元连续地从每一 个下一元素中获取每一个跨度值。同样,可将基值向量构建为bbbbbbb b。然而,在此将这些元素中的仅一个接受为输入操作数值并进行处理(以 便处理结果中的第一元素)。替代地,可提供基值和跨度值作为指令格式 中的立即数标量操作数,或者可将基值和跨度值作为向量输入格式中的多 个标量来传递(例如,针对提供跨度值的输入向量操作数的XXXXXXX s)。对于除先前所暗指的迭代的第一序列之外的多个迭代,可从将b值保 存为从前一条被执行的CONDINC指令提供的延续项的控制向量寄存器空 间提供基值。

参照图5a的上述讨论涉及以串行方式处理向量结果中的每一个元素的 的PREDINCFW指令的实现。上述相同的电路和方法也可用于实现 PREDINCBW指令,区别在于,第一多路复用器501提供-s值而不是+s值。

通过在第i个迭代的处理期间将来自条件向量输入操作数的第i-1个元 素的值提供给第二多路复用器502的通道选择输入,可(利用提供给第一 多路复用器501的对应的+s或-s值,向前或向后)实现PREDINCPOST指 令。例如,如果当前正在处理i=4的结果向量元素,则多路复用器501的 通道选择输入接收来自条件向量的i-1=3的元素位置的值。

图5b示出用于PREDINCFW指令的并行化实现的核逻辑电路。该并行 化电路的核电路与图5a中的电路类似,区别在于,加法器的输出被穿越链 接(chainover)到下一元素位置的第一多路复用器的输入。如果对于每一 个结果输出向量元素有一个核电路,则用于第一元素位置的核电路不需要 第一多路复用器(基值被直接传送到它的加法器)。如果存在比输出向量 元素更少的核电路(例如,有四个核电路和八个输出向量元素,使得两个 功能单元循环足以处理整个结果(第一循环产生输出元素0-3,并且第二循 环产生输出元素4-7)),则第一核电路可包括第一多路复用器,并且可接 收来自核电路块的另一侧的最远加法器的输出(以使n的最新值在链中正 向脉动传递(ripple))。电路可并行地从条件向量输入操作数接收多个元 素,并且按图5b中所描绘的对齐方式处理它们。

参照图5b的上述讨论涉及可潜在地同时处理向量结果的多个元素的 的PREDINCFW指令的实现。与以上图5中所描述的相同的电路和方法也 可用于实现PREDINCBW指令,区别在于,第二多路复用器提供-s值而不 是+s值。

通过将来自对第二多路复用器的通道选择输入的条件向量输入操作数 的第i-1个值提供给处理结果向量的第i个元素的核电路,可(利用提供给 第一多路复用器的对应的+s或-s值,向前或向后)实现PREDINCPOST指 令。例如,处理i=4的结果向量元素的核电路接收条件向量的i-1=3的元素 位置的内容。

在上述实施例中的任意/全部实施例中,即便不将条件向量作为传统掩码 来处理,也从掩码寄存器空间提供条件向量(由此,将所创建的条件向量存储 在掩码向量寄存器空间中)。在各种实施例中,跨度为正还是负被指定为输入 操作数(例如,立即数操作数)。

以上详述的指令的多个实施例可至少部分地按以下详述的“通用向量友好 指令格式”来具体化。另外,在下文中详述示例性系统、架构、以及流水线。 上文中指令的多个实施例可在此类系统、架构和流水线上执行,但是不限于详 述的那些系统、架构和流水线。

向量友好指令格式是适于向量指令(例如,存在专用于向量操作的某些字 段)的指令格式。尽管描述了其中通过向量友好指令格式支持向量和标量操作 两者的实施例,但是替代实施例仅使用通过向量友好指令格式的向量操作。

示例性通用向量友好执行格式——图6A-B

图6A-B是示出根据本发明的多个实施例的通用向量友好指令格式及其指 令模板的框图。图6A是示出根据本发明的多个实施例的通用向量友好指令格 式及其A类指令模板的框图;而图6B是示出根据本发明的多个实施例的通用 向量友好指令格式及其B类指令模板的框图。具体而言,针对通用向量友好指 令格式600定义A类和B类指令模板,两者包括无存储器访问605的指令模 板和存储器访问620的指令模板。在向量友好指令格式的上下文中的术语“通 用”指不束缚于任何专用指令集的指令格式。尽管将描述其中按向量友好指令 格式的指令对源自寄存器(无存储器访问605的指令模板)或寄存器/存储器(存 储器访问620的指令模板)的多个向量操作的多个实施例,但是本发明的替代 实施例可只支持这些中的仅一个。同样,尽管将描述其中存在按向量指令格式 的加载和存储指令的本发明的多个实施例,但是替代地或附加地,替代实施例 具有按照将向量移入和移出寄存器(例如,从存储器到寄存器,从寄存器到存 储器,在多个寄存器之间)的不同指令格式的指令。此外,尽管将描述支持两 类指令模板的本发明的多个实施例,但替代实施例可只支持这些中的仅一类或 多于两类。

尽管将描述其中向量友好指令格式支持下列各项的本发明的多个实施例, 但是替代实施例可支持更大、更小、和/或不同的向量操作数尺寸(例如,256 字节向量操作数)与更大、更小或不同的数据元素宽度(例如,128位(16字 节)数据元素宽度):64字节向量操作数长度(或尺寸)与32位(4字节) 或64位(8字节)数据元素宽度(或尺寸)(并且由此,64字节向量由16个 双字尺寸的元素或者替代地8个四字尺寸的元素组成);64字节向量操作数长 度(或尺寸)与16位(2字节)或8位(1字节)数据元素宽度(或尺寸); 32字节向量操作数长度(或尺寸)与32位(4字节)、64位(8字节);16 位(2字节)、或8位(1字节)数据元素宽度(或尺寸);以及16字节向量 操作数长度(或尺寸)与32位(4字节)、64位(8字节)、16位(2字节)、 或8位(1字节)数据元素宽度(或尺寸)。

图6A中的A类指令模板包括:1)在无存储器访问605的指令模板内,示 出无存储器访问的完整舍入控制型操作610的指令模板、以及无存储器访问的 数据变换型操作615的指令模板;以及2)在存储器访问620的指令模板内,示 出存储器访问的时效性625的指令模板和存储器访问的非时效性630的指令模 板。图6B中的B类指令模板包括:1)在无存储器访问605的指令模板内,示 出无存储器访问的写掩码控制的部分舍入控制型操作612的指令模板以及无存 储器访问的写掩码控制的vsize型操作617的指令模板;以及2)在存储器访问 620的指令模板内,示出存储器访问的写掩码控制627的指令模板。

格式

通用向量友好指令格式600包括以下列出的按照图6A-B中示出的顺序的 下列字段。结合以上涉及图4、5a和5b的讨论,在实施例中,参考下文在图 6A-B和图7中提供的格式细节,可利用非存储器访问指令类型605或存储器 访问指令类型620。可在以下描述的寄存器地址字段644中标识输入向量操作 数和目的地的地址。指令可被格式化为破坏性的或非破坏性的。

格式字段640——该字段中的专用值(指令格式标识符值)唯一地标识向 量友好指令格式,并且由此标识指令在指令流中以向量友好指令格式出现。因 此,格式字段640的内容将按照第一指令格式的指令的出现与按照其他指令格 式的指令的出现进行区分,从而允许将向量友好指令格式的指令引入具有其他 指令格式的指令集中。由此,该字段对于仅具有通用向量友好指令格式的指令 集是不需要的,在这个意义上该字段是任选的。

基础操作字段642——其内容区分不同的基础操作。如稍后在本文中描述 的那样,基础操作字段642可包括和/或是操作码字段的部分。

寄存器索引字段644——其内容直接或者通过地址生成来指定源或目的 地操作数在寄存器中或者在存储器中的位置。这些字段包括足够数量的位以从 PxQ(例如,32x1012)个寄存器组中选择N个寄存器。尽管在一个实施例中 N可高达三个源和一个目的地寄存器,但是替代实施例可支持更多或更少的源 和目的地寄存器(例如,可支持高达两个源,其中这些源中的一个源还用作目 的地;可支持高达三个源,其中这些源中的一个源还用作目的地;可支持高达 两个源和一个目的地)。尽管在一个实施例中P=32,但是替代实施例可支持 更多或更少的寄存器(例如,16)。尽管在一个实施例中Q=1012位,但是替 代实施例可支持更多或更少位(例如,128、1024)。

修饰符(modifier)字段646——其内容将指定存储器访问的以通用向量 指令格式出现的指令与不指定存储器访问的以通用向量指令格式出现的指令 区分开;也就是说,在无存储器访问605的指令模板与存储器访问620的指令 模板之间进行区分。存储器访问操作读取和/或写入到存储器层次结构(在一些 情况下,使用寄存器中的值来指定源和/或目的地地址),而非存储器访问操作 不这样(例如,源和/或目的地是寄存器)。尽管在一个实施例中,该字段还在 三种不同的方式之间选择以执行存储器地址计算,但是替代实施例可支持更 多、更少或不同的方式来执行存储器地址计算。

扩充操作字段650——其内容区分除基础操作以外还要执行各种不同操 作中的哪一个操作。该字段是针对上下文的。在本发明的一个实施例中,该字 段被分成类字段668、α字段652以及β字段654。扩充操作字段允许在单条指 令而非2、3或4条指令中执行多组共同的操作。以下是使用扩充字段650来 减少所需指令的数量的指令(稍后在本文中更详细地描述其命名法)的一些示 例。

其中[rax]是要用于地址生成的基址指针,并且其中{}指示由数据操纵字段 (稍后在本文中更详细地描述)所指定的转换操作。

比例字段660——其内容允许用于存储器地址生成(例如,用于使用2比例 *索引+基址的地址生成)的索引字段的内容的按比例缩放。

位移字段662A——其内容用作存储器地址生成的部分(例如,用于使用 2比例*索引+基址+位移的地址生成)。

位移因数字段662B(注意,位移字段662A直接在位移因数字段662B上 的并置指示使用一个或另一个)——其内容用作地址生成的部分;它指定通过 存储器访问的尺寸(N)按比例缩放的位移因数,其中N是存储器访问中的字 节数量(例如,用于使用2比例*索引+基址+按比例缩放的位移的地址生成)。 忽略冗余的低阶位,并且因此将位移因数字段的内容乘以存储器操作数总尺寸 (N)以生成在计算有效地址中使用的最终位移。N的值由处理器硬件在运行 时基于完整操作码字段674(稍后在本文中描述)和稍后在本文中描述的数据 操纵字段654C确定。位移字段662A和位移因数字段662B可以不用于无存储 器访问605的指令模板并且/或者不同的实施例可实现两者中的仅一个或不实 现两者中的任一个,在这个意义上,位移字段662A和位移因数字段662B是 任选的。

数据元素宽度字段664——其内容区分使用多个数据元素宽度中的哪一 个(在一些实施例中用于所有指令;在其他实施例中仅用于指令中的一些)。 如果支持仅一个数据元素宽度和/或使用操作码的某一方面来支持数据元素宽 度,则该字段是不需要的,在这个意义上该字段是任选的。

写掩码字段670——其内容在每一数据元素位置的基础上控制目的地向 量操作数中的数据元素位置是否反映基础操作和扩充操作的结果。A类指令模 板支持合并-写掩码操作,而B类指令模板支持合并写掩码操作和归零写掩码 操作两者。当合并时,向量掩码允许在执行任何操作期间保护目的地中的任何 元素集免于更新(由基础操作和扩充操作指定);在另一实施例中,保持其中 对应掩码位具有0的目的地的每一个元素的旧值。相比之下,当归零时,向量 掩码允许在执行任何操作期间使目的地中的任何元素集归零(由基础操作和扩 充操作指定);在一个实施例中,目的地的元素在对应掩码位具有0值时被设 为0。该功能的子集是控制执行的操作的向量长度的能力(即,从第一个到最 后一个要修改的元素的跨度),然而,被修改的元素不一定要是连续的。由此, 写掩码字段670允许部分向量操作,这包括加载、存储、算术、逻辑等。同样, 该掩码可用于出错避免(即,通过将目的地的数据元素位置进行掩码操作以防 止接收可/将造成出错的任何操作的结果——例如,假定存储器中的向量跨越页 边界并且第一页而非第二页会造成页面出错,则如果由写掩码对该向量的位于 第一页上的所有数据元素进行写掩码操作,则可忽略该页面出错)。此外,写 掩码允许包含某些类型的条件语句的“向量化环路”。尽管描述了其中写掩码字 段670的内容选择多个写掩码寄存器中的包含要使用的写掩码的一个写掩码寄 存器(并且由此,写掩码字段670的内容间接地标识了要执行的掩码操作)的 本发明的多个实施例,但是替代地或附加地,替代实施例允许掩码写字段670 的内容直接地指定要执行的掩码操作。此外,在以下情况下归零允许性能改进: 1)寄存器重命名被用在其目的地操作数并非也是源的指令上(也称为非三元指 令),因为在寄存器重命名流水线级期间,该目的地不再是隐式源(没有来自 当前目的地寄存器的数据元素需要被复制到经重命名的目的地寄存器或以某 种方式与该操作一起被携带,因为不是操作结果的任何数据元素(任何经掩码 的数据元素)将被归零);以及2)在写回级期间,因为零被写入。

立即数字段672——其内容允许对立即数的指定。该字段在实现不支持立 即数的通用向量友好格式中不存在且在不使用立即数的指令中不存在,在这个 意义上该字段是任选的。

指令模板类选择

类字段668——其内容在不同类的指令之间进行区分。参考图2A-B,该 字段的内容在A类和B类指令之间进行选择。在图6A-B中,圆角方形用于指 示专用值存在于字段中(例如,在图6A-B中分别用于类字段668的A类668A 和B类668B)。

A类无存储器访问指令模板

在A类非存储器访问605的指令模板的情况下,α字段652被解释为其内 容区分要执行不同扩充操作类型中的哪一种(例如,针对无存储器访问的舍入 型操作610和无存储器访问的数据变换型操作615的指令模板分别指定的舍入 652A.1和数据变换652A.2)的RS字段652A,而β字段654区分要执行指定 类型的操作中的哪一种。在图6中,圆角块被用来指示存在专用值(例如,修 饰符字段646中的无存储器访问646A;α字段652/rs字段652A的舍入652A.1 和数据变换652A.2)。在无存储器访问605指令模板中,比例字段660、位移 字段662A以及位移比例字段662B不存在。

无存储器访问的指令模板-完整舍入控制型操作

在无存储器访问的完整舍入控制型操作610的指令模板中,β字段654被 解释为其内容提供静态舍入的舍入控制字段654A。尽管在本发明的所描述的 多个实施例中舍入控制字段654A包括避免所有浮点异常(SAE)字段656和 舍入操作控制字段658,但是替代实施例可支持、可将这些概念两者都编码成 相同的字段或者仅具有这些概念/字段中的一个或另一个(例如,可仅有舍入操 作控制字段658)。

SAE字段656——其内容区分是否停用异常事件报告;当SAE字段656 的内容指示启用避免时,给定的指令不报告任何种类的浮点异常标志且不唤起 任何浮点异常处理程序。

舍入操作控制字段658——其内容区分要执行一组舍入操作中的哪一个 (例如,向上舍入、向下舍入、向零舍入以及就近舍入)。由此,舍入操作控 制字段658允许在每一指令的基础上改变舍入模式,并且因而在需要这一点时 是特别有用的。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的 一个实施例中,舍入操作控制字段650的内容覆盖该寄存器值(能够选择舍入 模式而不必在此类控制寄存器上执行保存-修改-恢复是有利的)。

无存储器访问的指令模板-数据变换型操作

在无存储器访问的数据变换型操作615的指令模板中,β字段654被解释 为数据变换字段654B,其内容区分要执行多个数据变换中的哪一个(例如, 无数据变换、混合、广播)。

存储器访问的A类指令模板

在A类存储器访问620的指令模板的情况下,α字段652被解释为驱逐提 示字段652B,其内容区分要使用驱逐提示中的哪一个(在图6A中,对于存储 器访问时效性625的指令模板和存储器访问非时效性630的指令模板分别指定 时效性的652B.1和非时效性的652B.2),而β字段654被解释为数据操纵字 段654C,其内容区分要执行多个数据操纵操作(也称为基元(primitive))中 的哪一个(例如,无操纵、广播、源的向上转换以及目的地的向下转换)。存 储器访问620的指令模板包括比例字段660以及任选的位移字段662A或位移 比例字段662B。

向量存储器指令利用转换支持来执行来自存储器的向量加载和去往存储 器的向量存储。如同寻常的向量指令,向量存储器指令以数据元素式的方式往 /返于存储器传输数据,其中实际传输的元素由被选为写掩码的向量掩码的内容 规定。在图6A中,圆角方形被用来指示字段中存在专用值(例如,针对修饰 符字段646的存储器访问646B;针对α字段652/驱逐提示字段652B的时效性 的652B.1和非时效性的652B.2)。

存储器访问的指令模板——时效性的

时效性的数据是可能足够快地被重新使用以从高速缓存操作中受益的数 据。然而,这是提示,且不同的处理器能以不同的方式实现它,包括完全忽略 该提示。

存储器访问的指令模板——非时效性的

非时效性的数据是不可能足够快地被重新使用以从第一级高速缓存中的 高速缓存操作中受益且应当被给予驱逐优先级的数据。然而,这是提示,且不 同的处理器能以不同的方式实现它,包括完全忽略该提示。

B类指令模板

在B类指令模板的情况下,α字段652被解释为写掩码控制(Z)字段652C, 其内容区分由写掩码字段670控制的写掩码操作应当是合并还是归零。

无存储器访问的B类指令模板

在B类非存储器访问605的指令模板的情况下,β字段654的部分被解释 为RL字段657A,其内容区分要执行不同扩充操作类型中的哪一种(例如,针 对无存储器访问的写掩码控制部分舍入控制类型操作612的指令模板和无存储 器访问的写掩码控制VSIZE型操作617的指令模板分别指定舍入657A.1和向 量长度(VSIZE)657A.2),而β字段654的其余部分区分要执行指定类型的 操作中的哪一种。在图6中,圆角块用于指示存在专用值(例如,修饰符字段 646中的无存储器访问646A;针对RL字段657A的舍入657A.1和VSIZE 657A.2)。在无存储器访问605指令模板中,比例字段660、位移字段662A 以及位移比例字段662B不存在。

无存储器访问的指令模板——写掩码控制的部分舍入控制型操作

在无存储器访问的写掩码控制的部分舍入控制型操作610的指令模板中, β字段654的其余部分被解释为舍入操作字段659A,并且停用异常事件报告(给 定的指令不报告任何种类的浮点异常标志且不唤起任何浮点异常处理程序)。

舍入操作控制字段659A——正如舍入操作控制字段658,其内容区分要 执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入以及就 近舍入)。由此,舍入操作控制字段659A允许在每一指令的基础上改变舍入 模式,并且因而在需要这一点时是特别有用的。在其中处理器包括用于指定舍 入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段650的内容 覆盖该寄存器值(能够选择舍入模式而不必在这样的控制寄存器上执行保存- 修改-恢复是有利的)。

无存储器访问的指令模板——写掩码控制的VSIZE型操作

在无存储器访问的写掩码控制VSIZE型操作617的指令模板中,β字段 654的其余部分被解释为向量长度字段659B,其内容区分要执行多个数据向量 长度中的哪一个(例如,128字节、856字节、或1012字节)。

存储器访问的B类指令模板

在B类存储器访问620的指令模板的情况下,β字段654的部分被解释为 广播字段657B,其内容区分是否要执行广播型数据操纵操作,而β字段654 的其余部分被解释为向量长度字段659B。存储器访问620的指令模板包括比 例字段660以及任选的位移字段662A或位移比例字段662B。

关于字段的附加评论

针对通用向量友好指令格式600,示出完整操作码字段674包括格式字段 640、基础操作字段642以及数据元素宽度字段664。尽管示出了其中完整操作 码字段674包括所有这些字段的一个实施例,但是在不是支持所有这些字段的 实施例中,完整操作码字段674包括少于所有的这些字段。完整操作码字段674 提供操作码。

扩充操作字段650、数据元素宽度字段664以及写掩码字段670允许在每 一指令的基础上以通用向量友好指令格式指定这些特征。

写掩码字段和数据元素宽度字段的组合创建各种类型的指令,因为这些指 令允许基于不同的数据元素宽度应用该掩码。

该指令格式需要相对少量的位,因为它基于其他字段的内容、出于不同的 目的来重新使用不同的字段。例如,一个观点是,修饰符字段的内容在图6A-B 上的无存储器访问605指令模板和图6A-B上的存储器访问620指令模板之间 选择;而类字段668的内容在图6A的指令模板610/615和图6B的612/617之 间的那些无存储器访问605的指令模板内选择;并且类字段668的内容在图6A 的指令模板625/630和图6B的627之间的那些存储器访问620指令模板内选 择。从另一观点看,类字段668的内容分别从图6A和图B的A类和B类指令 模板之间选择;而修饰符字段的内容在图6A的指令模板605和620之间的那 些A类指令模板内选择;并且修饰符字段的内容在图6B的指令模板605和620 之间的那些B类指令模板内选择。在类字段的内容指示A类指令模板的情况 下,修饰符字段646的内容(在rs字段652A和EH字段652B之间)选择α 字段652的解释。以相关的方式,修饰符字段646和类字段668的内容选择α 字段是被解释为rs字段652A、EH字段652B还是写掩码控制(Z)字段652C。 在类和修饰符字段指示A类无存储器访问操作的情况下,扩充字段的β字段的 解释基于rs字段的内容而变化;而在类和修饰符字段指示B类无存储器访问 操作的情况下,β字段的解释取决于RL字段的内容。在类和修饰符字段指示 A类存储器访问操作的情况下,扩充字段的β字段的解释基于基础操作字段的 内容而变化;而在类和修饰符字段指示B类存储器访问操作的情况下,扩充字 段的β字段的广播字段657B的解释基于基础操作字段的内容而变化。因而, 基础操作字段、修饰符字段、以及扩充操作字段的组合允许指定更多种扩充操 作。

在A类和B类内发现的各种指令模板在不同的情形下是有益的。在出于 性能原因而需要归零-写掩码操作或较小的向量长度时,A类是有用的。例如, 归零允许在使用重命名时避免假依赖,因为不再需要人工归并目的地;作为另 一示例,在利用向量掩码仿真较短的向量尺寸时,向量长度控制使存储-加载 转发问题变得容易。B类在以下合乎需要的情况下是有用的:1)在使用舍入模 式控制的同时允许浮点异常(即,当SAE字段的内容指示否时);2)能够使 用上转换、混合、交换和/或下转换;3)对图形数据类型进行操作。例如,向 上转换、混合、交换、向下转换以及图形数据类型减少了在与不同格式的源一 起工作时所需的指令的数量;作为另一示例,允许异常的能力提供了与有向舍 入模式的完全IEEE符合。

示例性专用向量友好指令格式

图7是示出根据本发明的多个实施例的示例性专用向量友好指令格式的 框图。图7示出专用向量友好指令格式700,其指定位置、尺寸、解释和字段 的次序、以及那些字段中的一些字段的值,在这个意义上向量友好指令格式700 是专用的。专用向量友好指令格式700可用于扩展x86指令集,并且由此这些 字段中的一些与在现有x86指令集及其扩展(例如,AVX)中使用的那些字段 类似或相同。该格式与具有扩展的现有x86指令集的前缀编码字段、实操作码 字节字段、MODR/M字段、SIB字段、位移字段、以及立即数字段保持一致。 示出来自图6的字段,来自图7的字段映射到来自图6的字段。

应当理解,虽然出于说明的目的在通用向量友好指令格式600的上下文中 参照专用向量友好指令格式700描述了本发明的多个实施例,但是本发明不限 于专用向量友好指令格式700,除非另有声明。例如,通用向量友好指令格式 600构想各种字段的各种可能的尺寸,而专用向量友好指令格式700被示为具 有特定尺寸的字段。作为具体示例,尽管在专用向量友好指令格式700中数据 元素宽度字段664被示为一位字段,但是本发明不限于此(即,通用向量友好 指令格式600构想数据元素宽度字段664的其他尺寸)。

格式——图7

通用向量友好指令格式600包括以下列出的按照图7中示出的顺序的如下 字段。

EVEX前缀(字节0-3)

EVEX前缀702——以四字节形式进行编码。

格式字段640(EVEX字节0,位[7:0])——第一字节(EVEX字节0)是 格式字段640,并且它包含0x62(在本发明的一个实施例中用于区分向量友好 指令格式的唯一值)。

第二-第四字节(EVEX字节1-3)包括提供专用能力的多个位字段。

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 位字段相同的功能,并且使用1补码的形式进行编码,即ZMM0被编码为 1111B,ZMM15被编码为0000B。这些指令的其他字段对如在本领域中已知的 寄存器索引的较低三个位(rrr、xxx和bbb)进行编码,由此可通过增加EVEX.R、 EVEX.X以及EVEX.B来形成Rrrr、Xxxx以及Bbbb。

REX’字段710——这是REX’字段710的第一部分,并且是用于对扩展的 32个寄存器集合的较高16个或较低16个寄存器进行编码的EVEX.R’位字段 (EVEX字节1,位[4]–R’)。在本发明的一个实施例中,该位与以下所指示 的其他位一起以位反转的格式存储以(在公知x86的32位模式下)与实操作 码字节是62的BOUND指令进行区分,但是在MODR/M字段(在下文中描 述)中不接受MOD字段中的值11;本发明的替代实施例不以反转的格式存储 该指示的位以及以下其他指示的位。值1用于对较低的16个寄存器进行编码。 换句话说,通过组合EVEX.R’、EVEX.R以及来自其他字段的其他RRR来形 成R’Rrrr。

操作码映射字段715(EVEX字节1,位[3:0]–mmmm)——其内容对隐含 的前导操作码字节(0F、0F38、或0F3)进行编码。

数据元素宽度字段664(EVEX字节2,位[7]–W)——由记号EVEX.W 表示。EVEX.W用于定义数据类型(32位数据元素或64位数据元素)的粒度 (尺寸)。

EVEX.vvvv720(EVEX字节2,位[6:3]-vvvv)——EVEX.vvvv的作用可 包括如下:1)EVEX.vvvv编码第一源寄存器操作数且对具有两个或更多源操作 数的指令有效,第一源寄存器操作数以反转(1补码)的形式被指定;2) EVEX.vvvv编码目的地寄存器操作数,目的地寄存器操作数针对某些向量位移 以1补码的形式被指定;或者3)EVEX.vvvv不编码任何操作数,保留该字段, 并且应当包含1111b。由此,EVEX.vvvv字段720对以反转(1补码)的形式 存储的第一源寄存器指定符的4个低阶位进行编码。取决于该指令,额外不同 的EVEX位字段用于将指定符尺寸扩展到32个寄存器。

EVEX.U668类字段(EVEX字节2,位[2]-U)——如果EVEX.U=0,则 它指示A类或EVEX.U0;如果EVEX.U=1,则它指示B类或EVEX.U1。

前缀编码字段725(EVEX字节2,位[1:0]-pp)——提供了用于基础操作 字段的附加位。除了对以EVEX前缀格式的传统SSE指令提供支持以外,这 也具有压缩SIMD前缀的益处(EVEX前缀只需要2位,而不是需要字节来表 达SIMD前缀)。在一个实施例中,为了支持使用以传统格式和以EVEX前缀 格式两者的SIMD前缀(66H、F2H、F3H)的传统SSE指令,将这些传统SIMD 前缀编码成SIMD前缀编码字段;并且在运行时在提供给解码器的PLA之前 被扩展成传统SIMD前缀(因此,PLA可执行传统和EVEX格式的这些传统 指令,而无需修改)。虽然较新的指令可将EVEX前缀编码字段的内容直接用 作操作码扩展,但是为了一致性,某些实施例以类似的方式扩展,但允许由这 些传统SIMD前缀指定不同的含义。替代实施例可重新设计PLA以支持2位 的SIMD前缀编码,并且由此不需要扩展。

α字段652(EVEX字节3,位[7]–EH,也称为EVEX.EH、EVEX.rs、 EVEX.RL、EVEX.写掩码控制、以及EVEX.N;也以α示出)——如先前所述, 该字段是针对上下文的。稍后在本文中提供附加描述。

β字段654(EVEX字节3,位[6:4]-SSS,也称为EVEX.s2-0、EVEX.r2-0、 EVEX.rr1、EVEX.LL0、EVEX.LLB;也以βββ示出)——如先前所述,该字 段是针对上下文的。稍后在本文中提供附加描述。

REX’字段710——这是REX’字段的其余部分,并且是可用于对扩展的32 个寄存器集合的较高16个或较低16个寄存器进行编码的EVEX.V’位字段 (EVEX字节3,位[3]–V’)。该位以位反转的格式存储。值1用于对较低16 个寄存器进行编码。换句话说,通过组合EVEX.V’、EVEX.vvvv来形成 V’VVVV。

写掩码字段670(EVEX字节3,位[2:0]-kkk)-其内容指定先前所描述 的写掩码寄存器中的寄存器索引。在本发明的一个实施例中,专用值 EVEX.kkk=000具有暗示没有写掩码用于特定指令的特殊行为(这能以各种方 式实现,包括使用硬连线到所有的写掩码或者旁路掩码硬件的硬件来实现)。

实操作码字段730(字节4)

这也被称为操作码字节。操作码的部分在该字段中被指定。

MODR/M字段740(字节5)

修饰符字段646(MODR/M.MOD,位[7-6]——MOD字段742)——如先 前所述,MOD字段742的内容将存储器访问和非存储器访问操作区分开。稍 后在本文中将进一步描述该字段。

MODR/M.reg字段744,位[5-3]——ModR/M.reg字段的作用可被概括为 两种情况:ModR/M.reg对目的地寄存器操作数或源寄存器操作数进行编码; 或者ModR/M.reg被视为操作码扩展且不用于对任何指令操作数进行编码。

MODR/M.r/m字段746,位[2-0]——ModR/M.r/m字段的作用可包括如下: ModR/M.r/m对引用存储器地址的指令操作数进行编码;或者ModR/M.r/m对 目的地寄存器操作数或源寄存器操作数进行编码。

比例、索引、基址(SIB)字节(字节6)

比例字段660(SIB.SS,位[7-6]——如先前所述,比例字段660的内容用于 存储器地址生成。稍后在本文中将进一步描述该字段。

SIB.xxx754(位[5-3])和SIB.bbb756(位[2-0])——先前已经针对寄存 器索引Xxxx和Bbbb参考了这些字段的内容。

位移字节(字节7或字节7-10)

位移字段662A(字节7-10)——当MOD字段742包含10时,字节7-10 是位移字段662A,并且它与传统32位位移(disp32)一样地工作,并且以字 节粒度工作。

位移因数字段662B(字节7)——当MOD字段742包含01时,字节7 是位移因数字段662B。该字段的位置与传统x86指令集8位位移(disp8)的 位置相同,它以字节粒度工作。由于disp8是符号扩展的,因此它仅能在-128 和127字节偏移量之间寻址;在64字节高速缓存行的方面,disp8使用可被设 为仅四个真正有用的值-128、-64、0和64的8位;由于常常需要更大的范围, 所以使用disp32;然而,disp32需要4个字节。与disp8和disp32对比,位移 因数字段662B是disp8的重新解释;当使用位移因数字段662B时,通过将位 移因数字段的内容乘以存储器操作数访问的尺寸(N)来确定实际位移。该类 型的位移被称为disp8*N。这减小了平均指令长度(单个字节用于位移,但具 有大得多的范围)。此类压缩位移基于有效位移是存储器访问的粒度的倍数的 假设,并且由此地址偏移量的冗余低阶位不需要被编码。换句话说,位移因数 字段662B替代传统x86指令集8位位移。由此,位移因数字段662B以与x86 指令集8位位移相同的方式(因此在ModRM/SIB编码规则中没有变化)进行 编码,唯一的不同在于,将disp8超载至disp8*N。换句话说,在编码规则或 编码长度中没有变化,而仅在通过硬件对位移值的解释中有变化(这需要按存 储器操作数的尺寸按比例缩放位移量以获得字节式地址偏移量)。

立即数

立即数字段672如先前所述地操作。

示例性寄存器架构——图8

图8是根据本发明的一个实施例的寄存器架构800的框图。以下列出该寄 存器架构的寄存器组和寄存器:

向量寄存器组810——在所示出的实施例中,有32个512位宽的向量寄 存器;这些寄存器被引用为zmm0到zmm31。较低的16个zmm寄存器的较 低阶的256个位覆盖在寄存器ymm0-16上。较低的16个zmm寄存器的较低 阶的128个位(ymm寄存器的较低阶的128个位)覆盖在寄存器xmm0-15上。 专用向量友好指令格式700对这些覆盖的寄存器组操作,如下表格中所示。

换句话说,向量长度字段659B在最大长度与一个或多个其他较短长度之 间进行选择,其中每一此类较短的长度是前一长度的一半;并且不具有向量长 度字段659B的指令模板在最大向量长度上操作。此外,在一个实施例中,专 用向量友好指令格式700的B类指令模板对紧缩或标量单/双精度浮点数据以 及紧缩或标量整数数据操作。标量操作是对zmm/ymm/xmm寄存器中的最低阶 数据元素位置执行的操作;取决于本实施例,较高阶数据元素位置保持与在指 令之前相同或者归零。

写掩码寄存器815——在所示的实施例中,存在8个写掩码寄存器(k0 至k7),每一写掩码寄存器的尺寸是64位。如先前所述,在本发明的一个实 施例中,向量掩码寄存器k0无法用作写掩码;当正常指示k0的编码用作写掩 码时,它选择硬连线的写掩码0xFFFF,从而有效地停用该指令的写掩码操作。

多媒体扩展控制状态寄存器(MXCSR)820——在所示实施例中,此32 位寄存器提供在浮点操作中使用的状态和控制位。

通用寄存器825——在所示出的实施例中,有十六个64位通用寄存器, 这些寄存器与现有的x86寻址模式一起使用对存储器操作数寻址。这些寄存器 通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8到R15 来引用。

扩展标志(EFLAGS)寄存器830——在所示实施例中,此32位寄存器被 用来记录许多指令的结果。

浮点控制字(FCW)寄存器835和浮点状态字(FSW)寄存器840——在 所示实施例中,由x87指令集扩展将这些寄存器用于在FCW的情况下设置舍 入模式、异常掩码和标志,并且在FSW的情况下跟踪异常。

标量浮点栈寄存器组(x87栈)845,在其上面重叠了MMX紧缩整数平 坦寄存器组850——在所示出的实施例中,x87栈是用于使用x87指令集扩展 来对32/64/80位浮点数据执行标量浮点操作的八元素栈;而使用MMX寄存器 来对64位紧缩整数数据执行操作,以及为在MMX和XMM寄存器之间执行 的一些操作保存操作数。

段寄存器855——在所示实施例中,存在用来存储用于分段地址生成的数 据的六个16位寄存器。

RIP寄存器865——在所示实施例中,此64位寄存器存储指令指针。

本发明的替代实施例可使用更宽的或更窄的寄存器。另外,本发明的替代 实施例可以使用更多、更少或不同的寄存器组和寄存器。

示例性有序处理器架构——图9A-9B

图9A-B示出示例性有序处理器架构的框图。这些示例性实施例是围绕用 宽向量处理器(VPU)扩充的有序CPU核的多个实例设计的。取决于e13t应 用,核通过高带宽的互连网络与一些固定功能逻辑、存储器I/O接口和其他必 要的I/O逻辑通信。例如,该实施例作为独立GPU的实现通常包括PCIe总线。

图9A是根据本发明的多个实施例的单个CPU核以及它与管芯上互连网 络902的连接及其第二级(L2)高速缓存的本地子集904的框图。指令解码器900 支持带有包括专用向量指令格式700的扩展的x86指令集。尽管在本发明的一 个实施例中(为了简化设计),标量单元908和向量单元910使用分开的寄存器 集合(分别为标量寄存器912和向量寄存器914),并且在这些寄存器之间转移 的数据被写入到存储器并随后从第一级(L1)高速缓存906读回,但是本发明的 替代实施例可使用不同的方法(例如,使用单个寄存器集合或包括允许数据在 这两个寄存器组之间传输而无需被写入和读回的通信路径)。

L1高速缓存906允许对进入标量和向量单元中的高速缓存存储器的低等 待时间访问。与按照该向量友好指令格式的load-op(加载操作)指令一起, 这意味着在某种程度上可以像对扩展寄存器组那样来对待L1高速缓存906。 这显著提改善了许多算法(尤其是利用驱逐提示字段652B的算法)的性能。

L2高速缓存的本地子集904是全局L2高速缓存的部分,该全局L2高速 缓存被划分成多个分开的本地子集,对于每个CPU核有一个本地子集。每个 CPU具有去往其自身的L2高速缓存的本地子集904的直接访问路径。由CPU 核读取的数据被存储在其L2高速缓存子集904中,并且可并行于其他CPU访 问它们自身的本地L2高速缓存子集,迅速地访问该数据。由CPU核写入的数 据被存储在其自身的L2高速缓存子集904中,并在必要的情况下从其他子集 转储清除。环形网络确保共享数据的一致性。

图9B是根据本发明的多个实施例的图9A中的CPU核的部分的分解图。 图9B包括L1高速缓存904的L1数据高速缓存906A部分,以及涉及向量单 元910和向量寄存器914的更多细节。具体而言,向量单元910是16宽向量 处理单元(VPU)(见16宽ALU928),该单元执行整数、单精度浮点以及双精度 浮点指令。该VPU通过混合单元920支持对寄存器输入的混合、通过数值转 换单元922A-B支持数值转换并通过复制单元924支持对存储器输入的复制。 写掩码寄存器926允许预测得到的向量写入。

能以各种方式混合寄存器数据,以例如支持矩阵乘法。可横跨多个VPU 通道复制来自存储器的数据。这是图形和非图形并行数据处理中的共同操作, 这显著增加了高速缓存效率。

环形网络是双向的,以允许诸如CPU核、L2高速缓存和其他逻辑块之类 的代理在芯片内彼此通信。每个环形数据路径为每个方向512位宽。

示例性无序架构——图10

图10是示出根据本发明的多个实施例的示例性无序体系结构的框图,并 且可视为诸如上文在图1中讨论的流水线之类的流水线的更具体描述。具体而 言,图10示出已被修改为结合了向量友好指令格式以及其执行的公知的示例 性无序架构。在图10中,箭头指示两个或更多个单元之间的耦合,且箭头的 方向指示那些单元之间的数据流的方向。图10包括耦合到执行引擎单元1010 和存储器单元1015的前端单元1005;执行引擎单元1010还耦合到存储器单元 1015。

前端单元1005包括耦合到第二级(L2)分支预测单元1022的第一级(L1) 分支预测单元1020。L1和L2分支预测单元1020和1022耦合到L1指令高速 缓存单元1024。L1指令高速缓存单元1024耦合至指令转换后备缓冲器(TLB) 1026,该指令转换后备缓冲器进一步耦合至指令取回和预解码单元1028。指令 取回和预解码单元1028耦合至指令队列单元1030,该指令队列单元进一步耦 合至解码单元1032。解码单元1032包括复杂解码器单元1034和三个简单解码 器单元1036、1038和1040。解码单元1032包括微代码ROM单元1042。该解 码单元1032可如上文在解码级章节中所描述的那样操作。L1指令高速缓存单 元1024还耦合到存储器单元1015中的L2高速缓存单元1048。指令TLB单元 1026还耦合到存储器单元1015中的第二级TLB单元1046。解码单元1032、 微代码ROM单元1042和环路流检测器(LSD)单元1044各自耦合到执行引 擎单元1010中的重命名/分配器单元1056。

执行引擎单元1010包括耦合到引退单元1074和统一调度器单元1058的 重命名/分配器单元1056。引退单元1074还耦合到执行单元1060且包括重排 序器缓冲器单元1078。统一调度器单元1058还耦合到物理寄存器组单元1076, 物理寄存器组单元1076耦合到执行单元1060。物理寄存器组单元1076包括向 量寄存器单元1077A、写掩码寄存器单元1077B和标量寄存器单元1077C;这 些寄存器单元可提供向量寄存器810、向量掩码寄存器815以及通用寄存器 825;并且物理寄存器组单元1076可包括未示出的附加寄存器组(例如,重叠 在MMX紧缩整数平坦寄存器组850上的标量浮点栈寄存器组845)。执行单 元1060包括三个混合标量和向量单元1062、1064和1072;加载单元1066; 存储地址单元1068;存储数据单元1070。加载单元1066、存储地址单元1068 和存储数据单元1070各自进一步耦合到存储器单元1015中的数据TLB单元 1052。

存储器单元1015包括耦合到数据TLB单元1052的第二级TLB单元1046。 数据TLB单元1052耦合到L1数据高速缓存单元1054。L1数据高速缓存单元 1054还耦合到L2高速缓存单元1048。在一些实施例中,L2高速缓存单元1048 还耦合到存储器单元1015内部和/或外部的L3和更高层级的高速缓存单元 1050。

作为示例,示例性无序体系结构按下列方式实现进程流水线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执行提交级。

示例性单核和多核处理器——图15

图15是根据本发明的多个实施例的具有集成存储器控制器和图形器件的 单核处理器和多核处理器1500的框图。图15中的实线框示出具有单个核 1502A、系统代理1510、一个或多个总线控制器单元的集合1516的处理器1500, 而可选附加的虚线框示出了具有多个核1502A-N、系统代理单元1510中的一 个或多个集成存储器控制器单元的集合1514和集成图形逻辑1508的替代处理 器1500。

存储器层次结构包括多个核内的一个或多个层级的高速缓存、一个或多个 共享高速缓存单元的集合1506以及耦合至该集成存储器控制器单元集合1514 的外部存储器(未示出)。共享高速缓存单元1506的集合可包括一个或多个 中级高速缓存,诸如,第二级(L2)、第三级(L3)、第四级(L4)或其他 层级的高速缓存、末级高速缓存(LLC)和/或以上的组合。虽然在一个实施例 中,基于环的互连单元1512将集成图形逻辑1508、共享高速缓存单元的集合 1506和系统代理单元1510进行互连,但替代的实施例也使用任何数量的公知 技术来互连此类单元。

在一些实施例中,一个或多个核1502A-N能够实现多线程操作。系统代 理1510包括协调并操作核1502A-N的那些组件。系统代理单元1510可包括例 如功率控制单元(PCU)和显示单元。PCU可以是或可包括调节核1502A-N以及 集成图形逻辑1508的功率状态进行调节所需的逻辑和组件。显示单元用于驱 动一个或多个外部连接的显示器。

核1502A-N在架构和/或指令集方面可以是同构的或异构的。例如,核 1502A-N中的一些可以是有序的(例如,像在图9A和9B中所示出的),而 其他的是无序的(例如,像在图10中所示出的)。作为另一个示例,核1502A-N 中的两个或更多可能能够执行相同的指令集,而其他核可能能够执行该指令集 中仅仅子集或执行不同的指令集。这些核中的至少一个能够执行本文描述的向 量友好指令格式。

处理器可以是通用处理器,诸如酷睿(CoreTM)i3、i5、i7、2Duo和Quad、 至强(XeonTM)、安腾(ItaniumTM),这些均可以从加利福尼亚圣克拉拉市的 英特尔公司获得。或者,处理器可以来自另一公司。处理器可以是专用处理器, 诸如,例如,网络或通信处理器、压缩引擎、图形处理器、协处理器、嵌入式 处理器,等等。该处理器可以被实现在一个或多个芯片上。处理器1500可以 是一个或多个基板的部分,或者可使用诸如BiCMOS、CMOS或NMOS之类 的多个工艺技术中的任意技术将处理器1500实现在一个或多个基板上。

示例性计算机系统和处理器——图11-13

图11-13是适于包括处理器1500的示例性系统,而图15是可包括一个或 多个核1502的示例性芯片上系统(SoC)。本领域已知的对膝上型设备、台式 机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、 交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、 机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其他电 子设备的其他系统设计和配置也是合适的。通常,能够涵盖本文中所公开的处 理器和/或其他执行逻辑的多个系统或电子设备一般都是合适的。

现在参照图11,所示为根据本发明的一个实施例的系统1100的框图。系 统1100可包括耦合至图形存储器控制器中枢(GMCH)1120的一个或多个处 理器1110、1115。附加的处理器1115的可选性在图11中通过虚线来表示。

每一个处理器1110、1115可以是处理器1500的某个版本。然而,应当注 意,集成图形逻辑和集成存储器控制单元不太可能出现在处理器1110、1115 中。

图11示出GMCH1120可耦合至存储器1140,该存储器1140可以是例如 动态随机存取存储器(DRAM)。对于至少一个实施例,DRAM可以与非易失 性高速缓存相关联。

GMCH1120可以是芯片组或芯片组的部分。GMCH1120可以与处理器 1110、1115进行通信,并控制处理器1110、1115与存储器1140之间的交互。 GMCH1120还可担当处理器1110、1115和系统1100的其他元件之间的加速 总线接口。对于至少一个实施例,GMCH1120经由诸如前端总线(FSB)1195 之类的多点分支总线与处理器1110、1115进行通信。

此外,GMCH1120耦合至显示器1145(诸如平板显示器)。GMCH1120 可包括集成图形加速器。GMCH1120还耦合至输入/输出(I/O)控制器中枢 (ICH)1150,该输入/输出(I/O)控制器中枢(ICH)1150可用于将各种外 围设备耦合至系统1100。在图11的实施例中作为示例示出了外部图形设备 1160以及另一外围设备1170,该外部图形设备1160可以是耦合至ICH1150 的分立图形设备。

替代地,附加的或不同的处理器也可存在于系统1100中。例如,附加处 理器1115可包括与处理器1110相同的附加处理器、与处理器1110异构的或 不对称的附加处理器、加速器(例如,图形加速器或数字信号处理(DSP)单 元)、现场可编程门阵列或任何其他处理器。在物理资源1110、1115之间可 以存在包括架构、微架构、热、和功耗特征等的一系列品质度量方面的各种差 异。这些差异会有效地显示为处理器1110、1115之间的不对称性和异构性。 对于至少一个实施例,各种处理元件1110、1115可驻留在同一管芯封装中。

现在参照图12,所示出的是根据本发明实施例的第二系统1200的框图。 如图12中所示,多处理器系统1200是点对点互连系统,且包括经由点对点互 连1250耦合的第一处理器1270和第二处理器1280。如图12中所示,处理器 1270和1280中的每一个可以是处理器1500的某个版本。

或者,处理器1270、1280中的一个或多个可以是除处理器之外的元件, 诸如加速器或现场可编程门阵列。

虽然仅以两个处理器1270、1280来示出,但是应当理解本发明的范围不 限于此。在其他实施例中,一个或多个附加处理元件可存在于给定的处理器中。

处理器1270还可包括集成存储器控制器中枢(IMC)1272和点对点(P-P) 接口1276和1278。类似地,第二处理器1280可包括IMC1282和P-P接口1286 和1288。处理器1270、1280可经由使用点对点(PtP)接口电路1278、1288的 点对点(PtP)接口1250来交换数据。如图12中所示,IMC1272和1282将多个 处理器耦合到各自的存储器,即存储器1242和存储器1244,这些存储器可以 是本地附连到各自处理器的主存储器的多个部分。

处理器1270、1280可各自经由使用点对点接口电路1276、1294、1286、 1298的各个P-P接口1252、1254与芯片组1290交换数据。芯片组1290还可 经由高性能图形接口1239与高性能图形电路1238交换数据。

共享高速缓存(未示出)可以被包括在任一处理器之内,或被包括在两个 处理器外部但仍经由P-P互连与这些处理器连接,从而如果将处理器置于低功 率模式时,可将任一处理器或两个处理器的本地高速缓存信息存储在该共享高 速缓存中。

芯片组1290可经由接口1296耦合至第一总线1216。在一个实施例中, 第一总线1216可以是外围组件互连(PCI)总线或诸如PCI高速总线或另一第 三代I/O互连总线之类的总线,但是本发明的范围不限于此。

如图12中所示,各种I/O设备1214可连同总线桥1218一起耦合到第一 总线1216,总线桥1218将第一总线1216耦合到第二总线1220。在一个实施 例中,第二总线1220可以是低引脚计数(LPC)总线。各种设备可以被耦合至第 二总线1220,在一个实施例中,这些设备包括例如键盘/鼠标1222、通信设备 1226以及诸如可包括代码1230的盘驱动器或其他大容量存储设备的存储单元 1228。此外,音频I/O1224可耦合至第二总线1220。注意,其他架构是可能 的。例如,代替图12的点对点架构,系统可以实现多点分支总线或其他此类 架构。

现在参照图13,所示出的是根据本发明实施例的第三系统1300的框图。 图12和图13中的相同部件用相同附图标记表示,并从图13中省去了图12中 的某些方面,以避免使图13的其他方面变得模糊。

图13示出处理元件1270、1280可分别包括集成存储器和I/O控制逻辑 (“CL”)1272和1282。对于至少一个实施例,CL1272、1282可包括诸如以 上联系图89和12所描述的存储器控制器中枢逻辑(IMC)。此外,CL1272、 1282还可包括I/O控制逻辑。图13示出不仅存储器1242、1244耦合至CL1272、 1282,而且I/O设备1314也耦合至控制逻辑1272、1282。传统I/O设备1315 耦合至芯片组1290。

现在参照图14,所示出的是根据本发明实施例的SoC1400的框图。图15 中的相似部件具有同样的附图标记。另外,虚线框是更先进的SoC上的可选特 征。在图14中,互连单元1402被耦合至:应用处理器1410,其包括一个或多 个核1502A-N的集合以及共享高速缓存单元1506;系统代理单元1510;总线 控制器单元1516;集成存储器控制器单元1514;一个或多个媒体处理器的集 合1420,其可包括集成图形逻辑1508、用于提供静止和/或视频相机功能的图 像处理器1424、用于提供硬件音频加速的音频处理器1426和用于提供视频编 码/解码加速的视频处理器1428;静态随机存取存储器(SRAM)单元1430;直接 存储器存取(DMA)单元1432;以及用于耦合至一个或多个外部显示器的显示单 元1440。

本文公开的机制的多个实施例可以被实现在硬件、软件、固件或此类实现 方案的组合中。本发明的多个实施例可实现为在可编程系统上执行的计算机程 序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和 非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。

可将程序代码应用至输入数据以执行本文描述的多个功能并产生输出信 息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本申请的目 的,处理系统包括具有诸如例如数字信号处理器(DSP)、微控制器、专用集成 电路(ASIC)或微处理器之类的处理器的任何系统。

程序代码可用高级程序化语言或面向对象的编程语言来实现,以便与处理 系统通信。在需要时,也可用汇编语言或机器语言来实现程序代码。事实上, 本文中描述的多个机制不限于任何特定编程语言的范围。在任何情形下,该语 言可以是编译语言或解释语言。

至少一个实施例的一个或多个方面可由存储在机器可读介质上的表示性 指令来实现,指令表示处理器中的各种逻辑,当由机器读取该指令时,该指令 使得该机器制作用于执行本文所述的技术的逻辑。被称为“IP核”的此类表示可 以被存储在有形的机器可读介质上,并被提供给多个客户或生产设施以加载到 实际制造该逻辑或处理器的制造机器中。

此类机器可读存储介质可以包括但不限于通过机器或设备制造或形成的 制品的非瞬态的有形安排,其包括存储介质,诸如:硬盘;任何其他类型的盘, 包括软盘、光盘(紧致盘只读存储器(CD-ROM)、紧致盘可重写(CD-RW))以 及磁光盘;半导体器件,例如只读存储器(ROM)、诸如动态随机存取存储器 (DRAM)和静态随机存取存储器(SRAM)之类的随机存取存储器(RAM)、可擦除 可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM);; 磁卡或光卡;或适于存储电子指令的任何其他类型的介质。

相应地,本发明的多个实施例还包括非瞬态的有形机器可读介质,该介质 包含向量友好指令格式或包含设计数据,诸如硬件描述语言(HDL),它定义本 文中描述的结构、电路、装置、处理器和/或系统特征。此类实施例也被称为程 序产品。

在一些情况下,指令转换器可用来将指令从源指令集转换至目标指令集。 例如,指令转换器可变换(例如,使用静态二进制变换、包括动态编译的动态 二进制变换)、变形、仿真或以其他方式将指令转换成将由核来处理的一条或 多条其他指令。指令转换器可在软件、硬件、固件、或其组合中实现。指令转 换器可在处理器上、在处理器外、或者部分在处理器上且部分在处理器外。

图16是根据本发明的多个实施例的对照使用软件指令转换器将源指令集 中的二进制指令转换成目标指令集中的二进制指令的框图。在所示的实施例 中,指令转换器是软件指令转换器,但作为替代,该指令转换器可在软件、固 件、硬件或其各种组合中实现。图16示出可使用x86编译器1604来编译按照 高级语言1602的程序,以便生成可以由具有至少一个x86指令集核的处理器 1616原生执行的x86二进制代码1606(假定被编译的指令中的一些是按照向 量友好指令格式的)。具有至少一个x86指令集核的处理器1616表示任何处 理器,这些处理器能通过兼容地执行或以其他方式处理以下内容来执行与具有 至少一个x86指令集核的英特尔处理器基本相同的功能:1)英特尔x86指令集 核的指令集的本质部分,或2)目标为在具有至少一个x86指令集核的英特尔处 理器上运行以取得与具有至少一个x86指令集核的英特尔处理器基本相同的结 果的应用或其他程序的目标代码版本,。x86编译器1604表示用于生成x86 二进制代码1606(例如,目标代码)的编译器,该二进制代码可通过或不通过 附加的链接处理在具有至少一个x86指令集核的处理器1616上被执行。类似 地,图16示出可使用替代的指令集编译器1608来编译利用高级语言1602的 程序,以生成可由不具有至少一个x86指令集核的处理器1614(例如,具有执 行加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集和/或执行加利福 尼亚州桑尼维尔市的ARM控股公司的ARM指令集的核的处理器)原生执行 的替代指令集二进制代码1610。指令转换器1612用来将x86二进制代码1606 转换成可由不具有x86指令集核的处理器1614原生执行的代码。该转换后的 代码不大可能与替代性指令集二进制代码1610相同,因为能够这样做的指令 转换器难以制造;然而,转换后的代码将完成一般操作并由来自替代指令集的 指令构成。因此,指令转换器1612通过仿真、模拟或任何其他过程来表示允 许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码 1606的软件、固件、硬件或其组合。

按照本文中公开的向量友好指令格式的指令的某些操作可由硬件组件执 行,并且可在机器可执行指令中具体化,这些机器可执行指令用于使得或至少 致使以这些指令编程的电路或其他硬件组件执行多个操作。电路可包括通用或 专用处理器、或逻辑电路,此处仅是列举数例。这些操作还可任选地由硬件和 软件的组合执行。执行逻辑和/或处理器可包括响应于从机器指令导出的机器指 令或一个或多个控制信号以存储指令指定的结果操作数的专用或特定电路或 其他逻辑。例如,本文中公开的指令的多个实施例可在图11-16中的一个或多 个系统中执行,并且向量友好指令格式的指令的多个实施例可存储在将在系统 中执行的程序代码中。此外,这些附图中的多个处理元件可利用本文中详述的 流水线和/或架构(例如,有序和无序架构)中的一个。例如,有序架构的解码 单元可解码指令、将经解码的指令传送到向量或标量单元等。

上述描述旨在示出本发明的优选实施例。根据上述讨论,还应当显而易见 的是,在发展迅速且进一步的进展难以预见的此技术领域中,本领域技术人员 可在安排和细节上对本发明进行修改,而不背离落在所附权利要求及其等价方 案的范围内的本发明的原理。例如,方法的一个或多个操作可组合或进一步分 开。

替代实施例

尽管已经描述了将原生执行向量友好指令格式的多个实施例,但本发明的 替代实施例可通过在执行不同指令集的处理器(例如,执行美国加利福亚州桑 尼维尔的MIPS技术公司的MIPS指令集的处理器、执行加利福亚州桑尼维尔 的ARM控股公司的ARM指令集的处理器)上运行的仿真层来执行向量友好 指令格式。同样,尽管附图中的流程图示出本发明的某些实施例的特定操作顺 序,但是,应当理解此类顺序是示例性的(例如,替代实施例可按不同顺序执 行操作,可组合某些操作,可使某些操作重叠,等等)。

在以上描述中,为了进行解释,阐明了众多具体细节以提供对本发明 的实施例的透彻理解。然而,将对本领域技术人员明显的是,没有这些具 体细节中的一些也可实施一个或多个其他实施例。提供所描述的具体实施 例不是为了限制本发明,而是为了说明本发明的多个实施例。本发明的范 围不是由以上所提供的具体示例确定的,而仅由所附权利要求来确定。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号