对基于高性能串的循环加速器中的加载做控制推测的方法与流程

文档序号:14860255发布日期:2018-07-04 06:47阅读:106来源:国知局
对基于高性能串的循环加速器中的加载做控制推测的方法与流程

本发明的实施例涉及计算领域;并且更具体地,涉及对基于串(strand)的循环加速器中的加载执行控制推测的领域。



背景技术:

推测性执行是一种优化技术,其中计算机系统在知道一些任务是否将被需要之前提前执行所述任务,以便防止将由在已经知道需要所述任务之后执行该任务所招致的任何延迟。现代流水线化微处理器采用推测性执行来使用基于分支执行的历史行为而预测程序的执行路径的方案减小条件分支指令的成本。例如,可以将加载指令提升(hoist)超过包括条件语句(例如,if-语句或if-then-else语句)的一些在前指令,来隐藏存储器访问等待时间。通过将加载指令提升超过条件语句,在知道是否将需要加载之前执行与加载指令对应的加载。将加载指令提升超过条件语句的这样的技术被称为控制推测。

为了确保在采用控制推测时的恰当的程序执行,需要解决以下问题以便确保正确的程序执行:(1)牢记加载指令在提升之前的原始位置;(2)在执行推测性加载时,保持包括潜在异常的所有结果达一些时间;(3)在控制流经过加载的原始位置时向架构状态公开推测性加载的结果;以及(4)如果控制流没有经过加载的原始位置,则丢弃推测性加载的结果。

附图说明

通过参考以下描述和用来图示本发明的实施例的附图,可以最好地理解本发明。在各图中:

图1是图示根据一些实施例的处理器的示意图,所述处理器实现控制推测以使能基于高度并行的串的架构中的高水平的迭代间并行性;

图2是图示根据一些实施例的系统的示意图,所述系统实现控制推测以使能基于高度并行的串的架构中的高水平的迭代间并行性;

图3是图示根据一些实施例的排序缓冲器的示意图;

图4a是图示根据一些实施例的可以应用控制推测的示例性源代码的示意图;

图4b是图示根据一些实施例的针对在应用控制推测之前的在图4a中示出的源代码的示例性汇编代码的示意图;

图4c是图示根据一些实施例的针对在应用控制推测之后的在图4a中示出的源代码的示例性汇编代码的示意图;

图5是根据一些实施例的用以实现控制推测的过程的流程图,所述控制推测使能基于高度并行的串的架构中的高水平的迭代间并行性;

图6a-6b是图示根据本发明的实施例的通用向量友好指令格式及其指令模板的框图;

图6a是图示根据本发明的实施例的通用向量友好指令格式及其类别a指令模板的框图;

图6b是图示根据本发明的实施例的通用向量友好指令格式及其类别b指令模板的框图;

图7a是图示根据本发明的实施例的示例性特定向量友好指令格式的框图;

图7b是图示根据本发明的一个实施例的组成全操作码字段674的特定向量友好指令格式700的字段的框图;

图7c是图示根据本发明的一个实施例的组成寄存器索引字段644的特定向量友好指令格式700的字段的框图;

图7d是图示根据本发明的一个实施例的组成扩增操作字段650的特定向量友好指令格式700的字段的框图;

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

图9a是图示根据本发明的实施例的示例性有序流水线和示例性寄存器重命名、无序发出/执行流水线二者的框图;

图9b是图示根据本发明的实施例的要被包括在处理器中的示例性寄存器重命名、无序发出/执行架构核心和有序架构核心的示例性实施例二者的框图;

图10a-b图示了更具体的示例性有序核心架构的框图,所述核心将是芯片中的(包括相同类型和/或不同类型的其它核心的)若干逻辑块中的一个;

图10a是根据本发明的实施例的单个处理器核心连同其到管芯上互连网络1002的连接并且连同其级别2(l2)高速缓存1004的本地子集的框图;

图10b是根据本发明的实施例的图10a中的处理器核心的部分的展开图;

图11是根据本发明的实施例的处理器1100的框图,所述处理器1100可能具有不止一个核心,可能具有集成存储器控制器,并且可能具有集成图形;

图12-15是示例性计算机架构的框图;

图12示出了依照本发明的一个实施例的系统的框图;

图13是依照本发明的实施例的第一个更具体的示例性系统的框图;

图14是依照本发明的实施例的第二个更具体的示例性系统的框图;

图15是依照本发明的实施例的soc的框图;以及

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

具体实施方式

在以下详细描述中,参考形成本申请的一部分的附图,其中相同的数字自始至终指定相同的部分,并且在所述附图中通过图示的方式示出了可以实践的实施例。要理解,在不脱离本公开的范围的情况下,可以利用其它实施例并且可以做出结构的或逻辑的改变。因此,将不在限制性的意义上理解以下详细描述,并且实施例的范围由所附权利要求及其等同物限定。

可以以最有助于理解所要求保护的主题的方式将各种操作依次描述为多个离散的动作或操作。然而,不应当将描述的顺序解释为暗示这些操作必然是依赖顺序的。特别地,这些操作可以不以呈现的顺序执行。所描述的操作可以以与所描述的实施例不同的顺序来执行。在附加实施例中,可以执行各种附加操作和/或可以省略所描述的操作。

出于本公开的目的,短语“a和/或b”意味着(a)、(b)或(a和b)。出于本公开的目的,短语“a、b和/或c”意味着(a)、(b)、(c)、(a和b)、(a和c)、(b和c)或(a、b和c)。

描述可以使用短语“在一个实施例中”或“在多个实施例中”,其每个可以表示相同或不同实施例中的一个或多个。此外,如关于本公开的实施例所使用的术语“包括”、“包含”、“具有”等是同义的。

为了确保在采用控制推测时的恰当的程序执行,需要解决以下问题:(1)牢记加载指令在提升之前的原始位置;(2)在执行推测性加载时,保持包括潜在异常的所有结果达一些时间;(3)在控制流经过加载的原始位置时向架构状态公开推测性加载的结果;以及(4)如果控制流没有经过加载的原始位置,则丢弃推测性加载的结果。

可以以若干不同的方式实现控制推测。在常规的具有单个指令流的通用处理器中,加载指令被分成两个指令:推测性加载(ld.s)和推测检查(chk.s)。ld.s指令被提升并且提前执行加载。作为结果,ld.s指令将正确的存储器值或异常令牌加载到架构寄存器(但不像常规加载指令将会的那样递送异常)。chk.s指令验证推测被确认,并且如果推测被确认,则向加载客户递送异常或正确的结果。

在本文中公开的实施例提供了二进制翻译器辅助的控制推测方案,其使能多串循环处理器中的高水平的迭代间并行性。根据一些实施例,二进制翻译器将条件语句的分支中的加载指令提升超过条件语句并且在条件语句的赠送分支(complimentarybranch)中插入特殊指令,所述特殊指令被称作加载的推测控制(scl)指令。(与经提升的加载指令对应的)加载的结果被保存在排序缓冲器中直到要有序地执行的引退。在推测被确认(控制流进入条件语句的包括原始加载指令的分支)的情况下,不需要采取其它动作。在推测不正确(控制流进入条件语句的赠送分支)的情况下,执行插入在赠送分支中的scl指令以从排序缓冲器丢弃加载的结果,这有效地取消了经提升的加载的结果,好像没有执行过加载一样。

在本文中公开的实施例的优点是在推测被确认时其没有向控制流路径中引入额外的指令(这与潜在地使关键路径不利的插入chk.s指令或类似指令的技术相反)。在本文中公开的实施例的另一优点是scl指令保证如果发生错误推测则取消经提升的加载的结果,这允许并行迭代的安全执行。根据在本文中提供的本公开,其它优点将对本领域普通技术人员显而易见。

如在本文中所使用的,串或微线程是(例如,在针对所标识的热循环的程序编译时间)由二进制翻译器布置的指令序列,其中属于相同串或微线程的指令要由硬件有序地执行。

如在本文中使用的,多串无序循环处理器(在本文中有时被简单地称为多串循环处理器或循环加速器)是加速器,其并行地处理由二进制翻译器创建的多个串或微线程使得:(1)可以关于不同串或微线程的指令脱离程序顺序地获取、发出和执行串或微线程的指令,以及(2)可以脱离程序顺序地提交(引退)除了存储器和可中断指令之外的所有指令。

图1是图示根据一些实施例的处理器的示意图,所述处理器实现控制推测以使能基于高度并行的串的架构中的高水平的迭代间并行性。如示意图中所示,处理器100包括二进制翻译器110、串文件编制缓冲器120、循环加速器130、寄存器文件(registerfile)140和排序缓冲器150。二进制翻译器110将程序代码(例如,x86二进制)翻译成可以在循环加速器130上运行的代码。二进制翻译器110可以执行对程序代码的静态分析以标识程序代码中的任何循环。基于该静态分析,二进制翻译器110可以将程序代码中的循环分解成一个或多个串。串(其也可以被称为微线程)是由二进制翻译器110布置的指令序列,其中属于相同串的指令要由硬件(例如,循环加速器130)有序地执行。如下面将以附加细节所描述的,循环加速器130可以并行地执行多个串以使循环执行加速,其中可以无序地执行来自不同串的指令。二进制翻译器110可以基于程序代码中的循环的特性而创建串。例如,二进制翻译器110可以创建串使得(例如,根据寄存器或存储器的)相关指令被放置在与它们根据的其它指令相同的串中,而独立指令被放置在分离的串中。这允许具有独立指令的串取得进展,即使具有相关指令的串(例如,因为其正在等待存储器访问操作完成)被停住。

在一个实施例中,二进制翻译器110通信地耦合到存储串文件编制的串文件编制缓冲器120。在一个实施例中,串文件编制缓冲器120存储针对正在由循环加速器130执行的每个串(每一串)的串文件编制。针对串的串文件编制包括关于串的属性的信息。尽管上面将串文件编制缓冲器120描述为包括针对所有串的串文件编制的单个缓冲器,但是应当理解,其它实施例可以每一串提供一个分离的串文件编制缓冲器120(硬件缓冲器),其要存储针对对应串的串文件编制。在一个实施例中,针对串的串文件编制包括对针对串的指令指针的指示。针对串的指令指针指示当前指令正在通过该串执行(取决于实现,或下一指令要通过该串来执行)。基于串的架构因此采用多个指令指针(每一串一个),其与仅采用单个指令指针的典型超标量处理器相反。在一个实施例中,针对串的串文件编制包括对针对串的迭代号码的指示。针对串的迭代号码指示正在通过该串执行的当前循环迭代。在一个实施例中,针对串的串文件编制包括对针对串的循环出口计数器的指示。针对串的循环出口计数器允许对所计算的出口的检测。在一个实施例中,针对串的串文件编制包括对针对串的寄存器基础的指示。针对串的寄存器基础指示在正在通过串执行的当前循环迭代内可以与该串一起工作的寄存器的集合。针对串的串文件编制因此可以包含限定串的当前执行状态的信息(例如,正在执行哪个指令,正在执行循环内的哪个迭代,以及串可以与哪些寄存器一起工作)。照此,不同的串可以并行地执行相同的程序代码(例如,循环体内的代码),但对于不同的循环迭代,取决于串文件编制的内容。

二进制翻译器110通信地耦合到循环加速器130并且可以向循环加速器130提供串以用于执行。循环加速器130是专用于使循环执行加速的硬件组件。循环加速器130包括多个执行电路135(执行电路135a-d),用以并行地处理多个串。如示意图中所示,循环加速器130包括四个执行电路135。照此,该循环加速器130能够并行地处理四个串。然而,应当理解,循环加速器130可以包括比在示意图中示出的执行电路135更多或更少的执行电路135。循环加速器130顺序地(有序地)执行属于相同串的指令。然而,循环加速器130可以非顺序地(无序地)执行属于不同串的指令,只要它们之间不存在阻止这样的并行化的相关性即可。循环加速器130通信地耦合到串文件编制缓冲器120。循环加速器130可以在处理串时访问并更新存储在串文件编制缓冲器120中的串文件编制(例如,以更新该串的当前执行状态)。循环加速器130还通信地耦合到包括多个寄存器的寄存器文件140。循环加速器130(并且更具体地,循环加速器130的执行电路135)可以在执行指令时与寄存器文件140的寄存器一起工作。循环加速器130还通信地耦合到排序缓冲器150。如下面在本文中将进一步详细地描述的,排序缓冲器150存储针对加载指令的条目以保存加载指令的结果直到加载指令准备被引退。

如上面提及的,循环加速器130可以无序地执行来自不同串的指令。尽管指令可以被无序地执行,但是副作用(例如,存储器状态改变、中断和故障)应该有序地出现,如在原始指令流中所编码的那样。在一个实施例中,二进制翻译器110向指令或指令的子集(例如,仅可排序(orderable)指令(例如,存储器访问指令和可中断指令))指派序列号码,在本文中被称为真实程序顺序(rpo)。rpo可以是以渐进顺序指派给指令(例如,可排序指令)的自然数,但不需要是连续的。在一个实施例中,rpo值随着指令变得更年轻而增加。不同地声明,相对于较年轻的指令,较老的指令被指派更小的rpo。rpo的指派保存关于原始程序顺序的信息,其允许循环加速器130以原始程序顺序恰当地引退可排序指令(以确保副作用有序地出现)。在一个实施例中,(例如,通过二进制翻译器110)将指令的rpo编码在指令本身中。

通过若干流水线阶段由循环加速器130处理每个指令。为了说明和简单起见,阶段可以缩减到解码阶段、读阶段、执行阶段、写回阶段和引退阶段。可以将指令分成两个类别:可排序指令(例如,存储器访问指令和可中断指令)和非可排序指令(例如,整数算术指令、逻辑指令和分支指令)。加载指令是可排序指令的一个示例。在一个实施例中,当加载指令被推测性地和无序地执行时,针对加载指令的条目被插入到排序缓冲器150中。在一个实施例中,针对加载指令的条目包括加载指令的rpo和加载的结果(其可能是实际值或异常)。该条目用来保存加载的结果直到有序的引退出现,其解决了上面关于控制推测提及的第二问题(在执行推测性加载时,保持包括潜在异常的所有结果达一些时间)。就所有加载指令具有(由二进制翻译器110指派的)可以根据对应的串执行来重构的rpo而言,该rpo可以用来以总体真实的程序顺序标识加载指令的原始位置和经提升的加载指令的位置二者。这解决了上面关于控制推测提及的第一和第三问题(牢记加载指令在提升之前的原始位置,以及在控制流经过加载的原始位置时向架构状态公开推测性加载的结果)。在一个实施例中,通过引入在本文中称为针对加载的推测控制(scl)指令的新指令来解决剩余的问题(第四问题——如果控制流没有经过原始加载的位置,则丢弃推测性加载的结果)。scl指令提供对原始加载指令在其被提升之前的rpo的指示(例如,作为scl指令的操作数)。如果控制流到达scl指令,则这意味着存在错误推测,并且因此原始加载指令本不需要被执行。执行scl指令以从排序缓冲器150丢弃针对加载指令的条目,以便取消通过加载指令执行的加载的结果。

在一个实施例中,scl指令具有以下格式:

<操作码>=scl,<op1_const>=rpo_控制_增量,<op2_const>=模式

scl指令的操作码是scl。第一操作数是rpo_控制_增量,其表示scl指令与原始加载指令之间的距离(例如,在rpo方面的差异)。第二操作数是模式,其指示加载指令的目的地寄存器应该被设置成空状态还是满状态(例如,寄存器可能包含用以指示空状态或满状态的位,其用来提供串之间的同步)。

在一个实施例中,循环加速器130如下执行scl指令。在解码阶段处,循环加速器130(或更具体地,循环加速器130的执行电路135)确定scl指令本身的rpo(rpo.cur)。在执行阶段处,循环加速器130确定在控制下的推测性加载的目标rpo(rpo.targ),其中rpo.targ=rpo.cur+rpo_控制_增量。循环加速器130然后针对匹配rpo.targ的条目而扫描排序缓冲器150。如果定位到这样的条目,则循环加速器130将该条目从排序缓冲器150丢弃。循环加速器130然后根据由scl指令提供的模式将加载指令的目的地寄存器的模式设置成空状态或满状态。

在一个实施例中,如下执行控制推测。二进制翻译器110将条件语句的分支中的加载指令提升超过条件语句(以使得加载指令被推测性地执行)并且在条件语句的一个或多个赠送分支中插入scl指令。条件语句的赠送分支是条件语句的与包括要被提升的加载指令的分支不同的分支。在一个实施例中,scl指令提供对原始加载指令(在该加载指令被提升之前)的rpo的指示。循环加速器130执行(经提升的)加载指令以实行加载并且使得针对加载指令的条目被插入在排序缓冲器150中。在一个实施例中,针对加载指令的条目包括加载指令的rpo和加载的结果。针对加载指令的条目被保存在排序缓冲器150中直到引退,所述引退要以rpo顺序来执行。在推测被确认(控制流进入条件语句的包括原始加载指令的分支)的情况下,不需要采取其它动作。在推测不正确(控制流进入条件语句的赠送分支)的情况下,循环加速器130执行插入在赠送分支中的scl指令以(基于扫描排序缓冲器150来定位具有与由scl指令提供的rpo匹配的rpo的条目)从排序缓冲器150丢弃针对加载指令的条目,这有效地取消了加载指令的结果,好像没有执行过加载一样(因为,其不再在排序缓冲器150中并且因此将不会被引退)。

图2是图示根据一些实施例的系统的示意图,所述系统实现控制推测以使能基于高度并行的串的架构中的高水平的迭代间并行性。系统具有与在图1中示出的处理器100类似的组件,除了二进制翻译器110被实现在处理器100外部(例如,作为软件实现)。应当理解,在示意图中示出的组件的布置被提供作为示例而非限制。不同的实施例可以采用与在示意图中示出的组件布置不同的组件布置。

图3是图示根据一些实施例的排序缓冲器的示意图。如所示,排序缓冲器150包括三个条目。第一条目是针对具有rpon+5和加载结果x的加载指令的条目。第二条目是针对具有rpon和加载结果y的加载指令的条目。第三条目是针对具有rpon+1和加载结果z的加载指令的条目。基于对应的加载指令(例如,推测性加载指令或常规加载指令)的执行,可能已经将条目插入在排序缓冲器150中。可能已经脱离rpo顺序地将条目插入在排序缓冲器150中。然而,为了引退,条目被在排序缓冲器150外以rpo顺序处理。这确保副作用有序地出现,如在原始指令流中编码的那样。

作为示例,假定针对具有rpon的加载指令的条目(排序缓冲器150中的第二条目)被插入在排序缓冲器150中,作为推测性地执行加载指令的结果。然而,如果发生错误推测,则提供对加载指令的rpo的指示(rpo为n)的scl指令将被执行(因为二进制翻译器110在条件语句的补充分支中放置了scl指令),并且这将使得针对具有rpon的加载指令的条目被从排序缓冲器150丢弃。作为结果,具有rpon的加载指令的结果被有效地取消,好像加载指令从未被执行过一样。

图4a是图示根据一些实施例的可以应用控制推测的示例性源代码的示意图。源代码指定条件语句(“if(p>0)”)。如果条件语句被满足,则控制流移动到条件语句的第一分支,所述第一分支包括指令“x=x+1”。否则,如果条件语句未被满足,则控制流移动到条件语句的第二分支,所述第二分支包括指令“y=0”。源代码进一步包括在条件语句的分支之后的指令“z=x”。图4b和图4c分别图示了针对在应用控制推测之前和在应用控制推测之后的源代码的汇编代码。

图4b是图示根据一些实施例的针对在应用控制推测之前的在图4a中示出的源代码的示例性汇编代码的示意图。如示意图中所示,第一分支(被标注为分支l0)包括加载指令(“ld[x]->r2”)。二进制翻译器110可以确定控制流可能到达该加载指令(例如,该控制流将进入分支l0),并且因此二进制翻译器110将该加载指令提升超过条件语句(例如,超过“cmpr1,0”指令和“bnel1”指令)。在该情况下,分支l1是赠送分支,因为其是条件语句的与包括原始加载指令的分支不同的分支。应当注意,在该示例中,加载指令被分派为4的rpo。

图4c是图示根据一些实施例的针对在应用控制推测之后的在图4a中示出的源代码的示例性汇编代码的示意图。如示意图中所示,已经从分支lo提升加载指令(“ld[x]->r2”)以放置超过条件语句。并且,二进制翻译器110在条件语句的赠送分支(分支l1)中插入了scl指令。scl指令的第一操作数指示原始加载指令与scl指令之间的距离。在该示例中,原始加载指令的rpo是4并且scl指令的rpo也是4。照此,原始加载指令与scl指令之间的距离为0。scl指令的第二操作数被设置成0以指示加载指令的目的地寄存器的模式应当被设置成空状态。

当循环加速器130执行经提升的指令时,其实行加载并且使得针对加载指令的条目被插入在排序缓冲器150中。在一个实施例中,针对加载指令的条目包括加载指令的rpo(其在该情况下为4)和加载的结果。如果发生错误推测(例如,控制流进入分支l1而不是分支l0),则循环加速器130执行scl指令。当循环加速器130执行scl指令时,其(例如,使用由scl指令提供的第一操作数)确定加载指令的rpo、扫描排序缓冲器150以(使用加载指令的rpo)定位针对加载指令的条目,并且从排序缓冲器150丢弃针对加载指令的条目。以该方式,当发生错误推测时,scl指令确保加载的结果被取消。

图5是根据一些实施例的用以实现控制推测的过程的流程图,所述控制推测使能基于高度并行的串的架构中的高水平的迭代间并行性。将参考其它图的示例性实施例来描述流程图中的操作。然而,应当理解,流程图的操作可以通过本发明的除了参考其它图论述的那些实施例之外的实施例来执行,并且本发明的参考这些其它图论述的实施例可以执行与参考流程图论述的那些操作不同的操作。

在块510处,二进制翻译器110将条件语句的分支中的加载指令提升超过条件语句。在块520处,二进制翻译器110然后在条件语句的补充分支(例如,在加载指令被提升之前条件语句的与包括加载指令的分支不同的分支)中插入scl指令,其中scl指令提供对在加载指令被提升之前的加载指令的rpo的指示。在一个实施例中,对加载指令的rpo的指示是增量值,其指示scl指令的rpo与加载指令的rpo之间的差异。在一个实施例中,scl指令进一步提供对加载指令的目的地寄存器的模式的指示。在块530处,循环加速器130(并且更具体地,循环加速器130的执行电路135)执行加载指令以实行加载并且使得针对加载指令的条目被插入在排序缓冲器150中,其中排序缓冲器150中的针对加载指令的条目包括加载指令的rpo和加载的结果。在块540处,循环加速器130执行scl指令以使用由scl指令提供的加载指令的rpo来定位排序缓冲器150中的针对加载指令的条目并且从排序缓冲器150丢弃针对加载指令的条目。在一个实施例中,循环加速器130基于确定排序缓冲器150是否包括具有与由scl指令提供的加载指令的rpo匹配的rpo的条目来确定针对加载指令的条目是否在排序缓冲器150中。在(由scl指令提供的)对加载指令的rpo的指示是增量值的实施例中,循环加速器130基于将增量值添加到scl指令的rpo来确定加载指令的rpo。在一个实施例中,循环加速器130在scl指令的解码阶段期间确定scl指令的rpo。在一个实施例中,循环加速器130以rpo顺序来处理排序缓冲器150中的条目以用于加载指令引退。在scl指令提供对加载指令的目的地寄存器的模式的指示的实施例中,循环加速器130根据由scl指令提供的对模式的指示将目的地寄存器的模式设置成空状态或满状态。

在本文中公开的实施例的优点是在推测被确认时其没有向控制流路径中引入额外的指令(这与潜在地使关键路径不利的插入chk.s指令或类似指令的技术相反)。在本文中公开的实施例的另一优点是scl指令保证如果发生错误推测则取消经提升的加载的结果,这允许并行迭代的安全执行。根据在本文中提供的本公开,其它优点将对本领域普通技术人员显而易见。

指令集

指令集可以包括一个或多个指令格式。给定的指令格式可以定义各种字段(例如,位的数目、位的位置)以除了其它东西之外还指定要被执行的操作(例如,操作码)和要对其执行该操作的(多个)操作数和/或(多个)其它数据字段(例如,掩码(mask))。一些指令格式通过指令模板(或子格式)的定义而被进一步分解。例如,给定的指令格式的指令模板可被定义成具有指令格式的字段的不同子集(所包括的字段通常以相同顺序,但至少一些具有不同位位置,因为有较少字段被包括)和/或定义成具有被不同地解释的给定字段。因此,isa的每个指令使用给定的指令格式(并且如果被定义,则以该指令格式的指令模板中的给定的一个)来表达,并包括用于指定操作和操作数的字段。例如,示例性add(添加)指令具有特定操作码和指令格式,所述指令格式包括用以指定该操作码的操作码字段和用以选择操作数(源1/目的地和源2)的操作数字段;并且指令流中的该add指令的出现将在操作数字段中具有选择特定操作数的特定内容。被称为高级向量扩展(avx)(avx1和avx2)并使用向量扩展(vex)编码方案的simd扩展的集合已被发布和/或公布(例如,参见intel®64andia-32architecturessoftwaredeveloper’smanual,2014年9月;以及参见intel®advancedvectorextensionsprogrammingreference,2014年10月)。

示例性指令格式

本文中描述的(多个)指令的实施例可以以不同的格式来具体化。另外,在下面详述了示例性系统、架构和流水线。(多个)指令的实施例可以被在这样的系统、架构和流水线上执行,但不限于所详述的那些。

通用向量友好指令格式

向量友好指令格式是适合于向量指令的指令格式(例如,存在特定于向量操作的某些字段)。虽然描述了向量和标量操作二者都通过向量友好指令格式来支持的实施例,但替代实施例仅使用向量友好指令格式的向量操作。

图6a-6b是图示根据本发明的实施例的通用向量友好指令格式及其指令模板的框图。图6a是图示根据本发明的实施例的通用向量友好指令格式及其类别a指令模板的框图;而图6b是图示根据本发明的实施例的通用向量友好指令格式及其类别b指令模板的框图。具体地,针对通用向量友好指令格式600,定义了类别a和类别b指令模板,它们二者都包括无存储器访问605指令模板和存储器访问620指令模板。向量友好指令格式的上下文中的术语“通用”指的是指令格式不被束缚到任何特定指令集。

虽然将描述向量友好指令格式支持以下各项的本发明的实施例:具有32位(4字节)或64位(8字节)数据元素宽度(或大小)的64字节向量操作数长度(或大小)(并且因此,64字节向量由16个双字大小的元素或替代地由8个四倍长字大小的元素组成);具有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字节)数据元素宽度)的更多、更少和/或不同的向量操作数大小(例如,256字节向量操作数)。

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

通用向量友好指令格式600包括图6a-6b中图示的在下面按顺序列出的以下字段。

格式字段640——该字段中的特定值(指令格式标识符值)唯一地标识向量友好指令格式,并因此标识指令流中的以向量友好指令格式的指令的出现。照此,该字段在它不被仅具有通用向量友好指令格式的指令集需要的意义上而言是可选的。

基础操作字段642——其内容区分不同的基础操作。

寄存器索引字段644——其内容直接地或通过地址生成来指定源和目的地操作数的位置,如果它们在寄存器中或在存储器中的话。这些包括用以从pxq(例如32x512、16x128、32x1024、64x1024)寄存器文件选择n个寄存器的足够数目的位。虽然在一个实施例中n可多至三个源和一个目的地寄存器,但替代实施例可支持更多或更少的源和目的地寄存器(例如,可支持多至两个源,其中这些源中的一个还充当目的地,可支持多至三个源,其中这些源中的一个还充当目的地,可支持多至两个源和一个目的地)。

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

扩增操作字段650——其内容区分除了基础操作之外还要执行的多种不同操作中哪一个。该字段是上下文特定的。在本发明的一个实施例中,该字段被划分成类别字段668、阿尔法字段652和贝塔字段654。扩增操作字段650允许在单个指令而不是2、3或4个指令中执行操作的公共组。

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

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

位移因数字段662b(注意,直接在位移因数字段662b上的位移字段662a的并列指示一个或另一个被使用)——其内容用作地址生成的部分;其指定要通过存储器访问的大小(n)缩放的位移因数——其中n是(例如,用于使用2规模*索引+基址+经缩放的位移的地址生成的)存储器访问中的字节的数目。冗余的低顺序位被忽略,并且因此,位移因数字段的内容乘以存储器操作数总大小(n)以便生成要在计算有效地址中使用的最终位移。n的值由处理器硬件在运行时间基于(在本文中稍后描述的)全操作码字段674和数据操纵字段654c来确定。位移字段662a和位移因数字段662b在它们不被用于无存储器访问605指令模板和/或不同实施例可实现这两个中的仅一个或没有一个的意义上是可选的。

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

写掩码字段670——其内容在每一数据元素位置的基础上控制目的地向量操作数中的该数据元素位置是否反映基础操作和扩增操作的结果。类别a指令模板支持合并写掩蔽(writemasking),而类别b指令模板支持合并和归零写掩蔽二者。在合并时,向量掩码允许目的地中的元素的任何集合被保护免于在(由基础操作和扩增操作所指定的)任何操作的执行期间的更新;在另一个实施例中,保存对应掩码位具有0的目的地的每个元素的旧值。相比之下,在归零时,向量掩码允许目的地中的元素的任何集合在(由基础操作和扩增操作所指定的)任何操作的执行期间被归零;在一个实施例中,在对应掩码位具有0值时,目的地的元素被设置成0。该功能性的子集是控制正被执行的操作的向量长度(即,正被修改的元素的跨度,从第一个到最后一个)的能力;然而,被修改的元素不必要是连续的。因此,写掩码字段670允许部分向量操作,包括加载、存储、算术、逻辑等。虽然描述了其中写掩码字段670的内容选择包含要被使用的写掩码的多个写掩码寄存器中的一个(并且因此写掩码字段670的内容间接标识要被执行的该掩蔽)的本发明的实施例,但替代实施例代之以或附加允许掩码写字段670的内容直接指定要被执行的掩蔽。

立即数(immediate)字段672——其内容允许立即数的规格。该字段在它不存在于不支持立即数的通用向量友好格式的实现中和它不存在于不使用立即数的指令中的意义上是可选的。

类别字段668——其内容在指令的不同类别之间进行区分。参考图6a-b,该字段的内容在类别a和类别b指令之间进行选择。在图6a-b中,圆角方形用来指示存在于字段中的特定值(例如,分别在图6a-b中针对类别字段668的类别a668a和类别b668b)。

类别a的指令模板

在类别a的非存储器访问605指令模板的情况下,阿尔法字段652被解释为rs字段652a,其内容区分不同扩增操作类型的哪一个要被执行(例如,取整652a.1和数据变换652a.2分别被指定用于无存储器访问、取整类型操作610和无存储器访问、数据变换类型操作665指令模板),而贝塔字段654区分所指定的类型的操作中的哪个要被执行。在无存储器访问605指令模板中,规模字段660、位移字段662a和位移规模字段662b不存在。

无存储器访问指令模板——全取整控制类型操作

在无存储器访问全取整控制类型操作610指令模板中,贝塔字段654被解释为取整控制字段654a,其(多个)内容提供静态取整。虽然在本发明的所描述的实施例中,取整控制字段654a包括抑制所有浮点异常(sae)字段656和取整操作控制字段658,但替代实施例可支持可将这些概念二者编码成相同字段,或仅具有这些概念/字段的一个或另一个(例如,可仅具有取整操作控制字段658)。

sae字段656——其内容区分是否禁用异常事件报告;在sae字段656的内容指示抑制被启用时,给定的指令不报告任何种类的浮点异常标志且不增加任何浮点异常处置器。

取整操作控制字段658——其内容区分要执行一组取整操作中的哪一个(例如,向上取整、向下取整、朝零取整和向最近取整)。因此,取整操作控制字段658允许在每一指令的基础上的取整模式的改变。在本发明的一个实施例中,其中处理器包括用于指定取整模式的控制寄存器,取整操作控制字段650的内容覆写该寄存器值。

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

在无存储器访问数据变换类型操作665指令模板中,贝塔字段654被解释为数据变换字段654b,其内容区分要执行多个数据变换中的哪一个(例如,无数据变换、拌和(swizzle)、广播)。

在类别a的存储器访问620指令模板的情况下,阿尔法字段652被解释为驱逐提示字段652b,其内容区分要使用驱逐提示中的哪一个(在图6a中,暂时652b.1和非暂时652b.2分别被指定用于存储器访问、暂时625指令模板和存储器访问、非暂时630指令模板),而贝塔字段654被解释为数据操纵字段654c,其内容区分要执行多个数据操纵操作(还被称为原语(primitive))中的哪一个(例如,无操纵;广播;源的向上转换;以及目的地的向下转换)。存储器访问620指令模板包括规模字段660,并可选地包括位移字段662a或位移规模字段662b。

向量存储器指令利用转换支持来执行自存储器的向量加载和到存储器的向量存储。与常规向量指令一样,向量存储器指令以按数据元素的方式从/向存储器传送数据,其中实际上被传送的元素由被选择作为写掩码的向量掩码的内容来指示。

存储器访问指令模板——暂时

暂时数据是可能被足够快地再使用以受益于进行高速缓存的数据。然而,这是提示,并且不同处理器可以以不同方式来实现它,包括完全忽略该提示。

存储器访问指令模板——非暂时

非暂时数据是不太可能被足够快地再使用以受益于在第1级别高速缓存中进行高速缓存并应被给定用于驱逐的优先权的数据。然而,这是提示,并且不同处理器可以以不同方式来实现它,包括完全忽略该提示。

类别b的指令模板

在类别b的指令模板的情况下,阿尔法字段652被解释为写掩码控制(z)字段652c,其内容区分由写掩码字段670所控制的写掩蔽应是合并还是归零。

在类别b的非存储器访问605指令模板的情况下,贝塔字段654的部分被解释为rl字段657a,其内容区分要执行不同扩增操作类型中的哪一个(例如,取整657a.1和向量长度(vsize)657a.2分别被指定用于无存储器访问、写掩码控制、部分取整控制类型操作612指令模板和无存储器访问、写掩码控制、vsize类型操作617指令模板被相应指定),而贝塔字段654的其余区分要执行所指定的类型的操作中的哪个。在无存储器访问605指令模板中,规模字段660、位移字段662a和位移规模字段662b不存在。

在无存储器访问、写掩码控制、部分取整控制类型操作610指令模板中,贝塔字段654的其余被解释为取整操作字段659a,并且异常事件报告被禁用(给定的指令不报告任何种类的浮点异常标记且不增加任何浮点异常处置器)。

取整操作控制字段659a——正如取整操作控制字段658,其内容区分要执行一组取整操作中的哪一个(例如,向上取整、向下取整、朝零取整和向最近取整)。因此,取整操作控制字段659a允许在每一指令的基础上的取整模式的改变。在本发明的一个实施例中,其中处理器包括用于指定取整模式的控制寄存器,取整操作控制字段650的内容覆写该寄存器值。

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

在类别b的存储器访问620指令模板的情况下,贝塔字段654的部分被解释为广播字段657b,其内容区分广播类型数据操纵操作是否要被执行,而贝塔字段654的其余被解释为向量长度字段659b。存储器访问620指令模板包括规模字段660,并可选地包括位移字段662a或位移规模字段662b。

关于通用向量友好指令格式600,全操作码字段674被示出包括格式字段640、基础操作字段642和数据元素宽度字段664。虽然示出一个实施例,其中全操作码字段674包括所有这些字段,但在不支持所有这些字段的实施例中,全操作码字段674包括少于所有这些字段。全操作码字段674提供操作代码(操作码)。

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

写掩码字段和数据元素宽度字段的组合创建类型化指令,因为它们允许基于不同数据元素宽度来应用掩码。

在类别a和类别b内发现的各种指令模板在不同情境中是有益的。在本发明的一些实施例中,不同处理器或处理器内的不同核心可仅支持类别a、仅支持类别b或支持两个类别。例如,意图用于通用计算的高性能通用无序核心可仅支持类别b,意图主要用于图形和/或科学(吞吐量)计算的核心可仅支持类别a,并且意图用于二者的核心可支持两个类别(当然,具有来自两个类别的模板和指令但并非来自两个类别的所有模板和指令的一些混合的核心在本发明的范围内)。并且,单个处理器可包括多个核心,其全部支持相同类别或其中不同核心支持不同类别。例如,在具有分离的图形和通用核心的处理器中,意图主要用于图形和/或科学计算的图形核心中的一个可仅支持类别a,而通用核心中的一个或多个可以是仅支持类别b的意图用于通用计算的具有无序执行和寄存器重命名的高性能通用核心。不具有分离的图形核心的另一处理器可包括支持类别a和类别b二者的一个更通用的有序或无序核心。当然,来自一个类别的特征可还被实现在本发明的不同实施例中的另一类别中。以高级语言所写的程序将被翻译(例如,正好及时编译或静态编译)成多种不同的可执行形式,包括:1)仅具有用于执行的由目标处理器所支持的(多个)类别的指令的形式;或2)具有使用所有类别的指令的不同组合所写的替代例程并具有控制流代码的形式,所述控制流代码基于由当前正在执行代码的处理器所支持的指令选择要执行的例程。

示例性特定向量友好指令格式

图7a是图示根据本发明的实施例的示例性特定向量友好指令格式的框图。图7a示出特定向量友好指令格式700,它在它指定字段的位置、大小、解释和顺序以及那些字段中的一些的值的意义上是特定的。特定向量友好指令格式700可被用来扩展x86指令集,并且因此字段中的一些与现存x86指令集和其扩展(例如,avx)中所使用的那些字段类似或相同。此格式与具有扩展的现存x86指令集的前缀编码字段、真实操作码字节字段、modr/m字段、sib字段、位移字段和立即数字段保持一致。图示了来自图7a的字段映射成的来自图6的字段。

应当理解,尽管为了说明性目的而参考通用向量友好指令格式600的上下文中的特定向量友好指令格式700描述了本发明的实施例,但除非在声明处,否则本发明不限于特定向量友好指令格式700。例如,通用向量友好指令格式600针对各种字段设想多种可能大小,而特定向量友好指令格式700被示出为具有特定大小的字段。作为特定示例,虽然数据元素宽度字段664被图示为特定向量友好指令格式700中的一位字段,但本发明不被如此限制(即,通用向量友好指令格式600设想数据元素宽度字段664的其它大小)。

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

evex前缀(字节0-3)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位字段相同的功能性,并使用1s补码形式来编码,即zmm0被编码为1116b,zmm15被编码为0000b。指令的其它字段对如本领域中已知的寄存器索引的较低三位(rrr、xxx和bbb)进行编码,使得rrrr、xxxx和bbbb可通过添加evex.r、evex.x和evex.b来形成。

rex'字段610——这是rex'字段610的第一部分并且是用来对扩展的32寄存器集合的较高16个寄存器或较低16个寄存器进行编码的evex.r'位字段(evex字节1,位[4]-r')。在本发明的一个实施例中,以位倒置的格式存储该位连同如下面所指示的其它位以(在公知的x8632位模式中)与bound指令区分开,其真实操作码字节是62,但在(下面描述的)modr/m字段中不接受mod字段中的值11;本发明的替代实施例不以倒置的格式来存储该位和下面所指示的其它位。使用值1对较低的16个寄存器进行编码。换言之,r'rrrr通过组合evex.r'、evex.r和来自其它字段的另一个rrr形成。

操作码映射字段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编码第一源寄存器操作数,其被指定以倒置(1s补码)的形式,并对于具有2个或更多源操作数的指令有效;2)evex.vvvv编码目的地寄存器操作数,其针对某些向量移位被指定以1s补码形式;或者3)evex.vvvv不编码任何操作数,字段被保留并应包含1116b。因此,evex.vvvv字段720编码以倒置(1s补码)的形式所存储的第一源寄存器指定符的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前缀格式的遗留(legacy)sse指令提供支持之外,这还具有紧致simd前缀(而不是要求字节来表达simd前缀,evex前缀仅要求2位)的益处。在一个实施例中,为了支持在遗留格式中和在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'字段610——这是rex'字段的其余部分并且是可用来对扩展的32寄存器集合的较高16个寄存器或较低16个寄存器进行编码的evex.v'位字段(evex字节3,位[3]-v)。该位被以位倒置的格式存储。值1用来对较低16个寄存器进行编码。换言之,v'vvvv通过组合evex.v、evex.vvvv而形成。

写掩码字段670(evex字节3,位[2:0]-kkk)——其内容指定如之前所描述的写掩码寄存器中寄存器的索引。在本发明的一个实施例中,特定值evex.kkk=000具有暗示没有写掩码被用于特定指令的特殊行为(这可以以包括使用硬接线到所有寄存器的写掩码或绕过掩蔽硬件的硬件的多种方式来实现)。

真实操作码字段730(字节4)还被称为操作码字节。操作码的部分在该字段中被指定。

modr/m字段740(字节5)包括mod字段742、reg字段744和r/m字段746。如之前所描述的,mod字段742的内容在存储器访问和非存储器访问操作之间进行区分。reg字段744的角色可以被概括成两种情境:对目的地寄存器操作数或源寄存器操作数进行编码,或被视为操作码扩展并不被用于对任何指令操作数进行编码。r/m字段746的角色可包括以下:对引用存储器地址的指令操作数进行编码,或者对目的地寄存器操作数或源寄存器操作数进行编码。

规模、索引、基址(sib)字节(字节6)——如之前所描述的,规模字段650的内容被用于存储器地址生成。sib.xxx754和sib.bbb756——这些字段的内容之前已关于寄存器索引xxxx和bbbb被提到。

位移字段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如之前所描述地那样进行操作。

全操作码字段

图7b是图示根据本发明的一个实施例的组成全操作码字段674的特定向量友好指令格式700的字段的框图。具体地,全操作码字段674包括格式字段640、基础操作字段642和数据元素宽度(w)字段664。基础操作字段642包括前缀编码字段725、操作码映射字段715和真实操作码字段730。

寄存器索引字段

图7c是图示根据本发明的一个实施例的组成寄存器索引字段644的特定向量友好指令格式700的字段的框图。具体地,寄存器索引字段644包括rex字段705、rex'字段710、modr/m.reg字段744、modr/m.r/m字段746、vvvv字段720、xxx字段754和bbb字段756。

扩增操作字段

图7d是图示根据本发明的一个实施例的组成扩增操作字段650的特定向量友好指令格式700的字段的框图。在类别(u)字段668包含0时,它意味着evex.u0(类别a668a);在它包含1时,它意味着evex.u1(类别b668b)。在u=0并且mod字段742包含11(意味着无存储器访问操作)时,阿尔法字段652(evex字节3,位[7]-eh)被解释为rs字段652a。在rs字段652a包含1(取整652a.1)时,贝塔字段654(evex字节3,位[6:4]-sss)被解释为取整控制字段654a。取整控制字段654a包括一位sae字段656和两位取整操作字段658。在rs字段652a包含0(数据变换652a.2)时,贝塔字段654(evex字节3,位[6:4]-sss)被解释为三位数据变换字段654b。在u=0并且mod字段742包含00、01或10(意味着存储器访问操作)时,阿尔法字段652(evex字节3,位[7]-eh)被解释为驱逐提示(eh)字段652b并且贝塔字段654(evex字节3,位[6:4]-sss)被解释为三位数据操纵字段654c。

在u=1时,阿尔法字段652(evex字节3,位[7]-eh)被解释为写掩码控制(z)字段652c。在u=1并且mod字段742包含11(意味着无存储器访问操作)时,贝塔字段654的部分(evex字节3,位[4]-s0)被解释为rl字段657a;在它包含1(取整657a.1)时,贝塔字段654的其余(evex字节3,位[6-5]-s2-1)被解释为取整操作字段659a,而在rl字段657a包含0(vsize657.a2)时,贝塔字段654的其余(evex字节3,位[6-5]-s2-1)被解释为向量长度字段659b(evex字节3,位[6-5]-l1-0)。在u=1并且mod字段742包含00、01或10(意味着存储器访问操作)时,贝塔字段654(evex字节3,位[6:4]-sss)被解释为向量长度字段659b(evex字节3,位[6-5]-l1-0)和广播字段657b(evex字节3,位[4]-b)。

示例性寄存器架构

图8是根据本发明的一个实施例的寄存器架构800的框图。在图示的实施例中,存在512位宽的32个向量寄存器810;这些寄存器被引用为zmm0直到zmm31。较低的16个zmm寄存器的较低顺序256位被覆盖在寄存器ymm0-16上。较低的16个zmm寄存器的较低顺序128位(ymm寄存器的较低顺序128位)被覆盖在寄存器xmm0-15上。特定向量友好指令格式700在如在下表中图示的这些经覆盖的寄存器文件上操作。

换言之,向量长度字段659b在最大长度和一个或多个其它较短长度之间进行选择,其中每个这样的较短长度是在前长度的一半长度;并且不具有向量长度字段659b的指令模板在最大向量长度上操作。进一步地,在一个实施例中,特定向量友好指令格式700的类别b指令模板在压紧的(packed)或标量的单/双精度浮点数据以及压紧的或标量的整数数据上操作。标量操作是在zmm/ymm/xmm寄存器中的最低顺序数据元素位置上执行的操作;取决于实施例,使较高顺序数据元素位置与它们在该指令之前一样或被归零。

写掩码寄存器815——在图示的实施例中,存在8个写掩码寄存器(k0直到k7),每个在大小上是64位。在替代实施例中,写掩码寄存器815在大小上是16位。如之前所描述的,在本发明的一个实施例中,向量掩码寄存器k0不能被用作写掩码;在将正常地指示k0的编码被用于写掩码时,它选择硬接线写掩码0xffff,针对该指令有效地禁用写掩蔽。

通用寄存器825——在图示的实施例中,存在连同用以对存储器操作数进行寻址的现存x86寻址模式一起使用的十六个64位通用寄存器。通过名称rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp和r8直到r15来引用这些寄存器。

标量浮点栈寄存器文件(x87栈)845,其上别名mmx压紧的整数平寄存器文件850——在图示的实施例中,x87栈是用来使用x87指令集扩展在32/64/80位浮点数据上执行标量浮点操作的八元素栈;而mmx寄存器用来在64位压紧的整数数据上执行操作,以及用来为在mmx和xmm寄存器之间执行的一些操作保存操作数。

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

示例性核心架构、处理器和计算机架构

可以以不同方式、为了不同目的和在不同处理器中实现处理器核心。例如,这样的核心的实现可包括:1)意图用于通用计算的通用有序核心;2)意图用于通用计算的高性能通用无序核心;3)意图主要用于图形和/或科学(吞吐量)计算的专用核心。不同处理器的实现可包括:1)包括意图用于通用计算的一个或多个通用有序核心和/或意图用于通用计算的一个或多个通用无序核心的cpu;以及2)包括意图主要用于图形和/或科学(吞吐量)的一个或多个专用核心的协处理器。这样的不同处理器导致不同的计算机系统架构,其可包括:1)在与cpu分离的芯片上的协处理器;2)在与cpu相同的封装中的分离管芯上的协处理器;3)在与cpu相同的管芯上的协处理器(在该情况下,这样的协处理器有时被称为专用逻辑,诸如集成的图形和/或科学(吞吐量)逻辑,或被称为专用核心);以及4)芯片上系统,其可在相同管芯上包括所描述的cpu(有时被称为(多个)应用核心或(多个)应用处理器)、上面所描述的协处理器和附加功能性。接下来描述示例性核心架构,之后是对示例性处理器和计算机架构的描述。

示例性核心架构

有序和无序的核心框图

图9a是图示根据本发明的实施例的示例性有序流水线和示例性寄存器重命名、无序发出/执行流水线二者的框图。图9b是图示根据本发明的实施例的要被包括在处理器中的示例性寄存器重命名、无序发出/执行架构核心和有序架构核心的示例性实施例二者的框图。图9a-b中的实线框图示有序流水线和有序核心,而虚线框的可选附加图示寄存器重命名、无序发出/执行流水线和核心。假定有序方面是无序方面的子集,将描述无序方面。

在图9a中,处理器流水线900包括获取阶段902、长度解码阶段904、解码阶段906、分配阶段908、重命名阶段910、调度(还被称为分派或发出)阶段912、寄存器读/存储器读阶段914、执行阶段916、写回/存储器写阶段918、异常处置阶段922和提交阶段924。

图9b示出处理器核心990,其包括耦合到执行引擎单元950的前端单元930,并且二者被耦合到存储器单元970。核心990可以是精简指令集计算(risc)核心、复杂指令集计算(cisc)核心、极长指令字(vliw)核心,或者混合或替代核心类型。作为又一选项,核心990可以是专用核心,诸如例如网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(gpgpu)核心、图形核心或类似物。

前端单元930包括耦合到指令高速缓存单元934的分支预测单元932,指令高速缓存单元934被耦合到指令翻译旁视缓冲器(tlb)936,指令翻译旁视缓冲器(tlb)936被耦合到指令获取单元938,指令获取单元938被耦合到解码单元940。解码单元940(或解码器)可对指令进行解码,并生成一个或多个微操作、微代码入口点、微指令、其它指令或其它控制信号作为输出,它们被解码自或其以其它方式反映或被推导自原始指令。可使用各种不同的机制来实现解码单元940。适合的机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(pla)、微代码只读存储器(rom)等。在一个实施例中,核心990包括存储用于(例如,在解码单元940中或否则在前端单元930内的)某些宏指令的微代码的微代码rom或其它介质。解码单元940被耦合到执行引擎单元950中的重命名/分配器单元952。

执行引擎单元950包括耦合到引退单元954和一个或多个调度器单元956的集合的重命名/分配器单元952。(多个)调度器单元956表示任何数目的不同调度器,包括保留站、中央指令窗口等。(多个)调度器单元956被耦合到(多个)物理寄存器文件单元958。(多个)物理寄存器文件单元958中的每个表示一个或多个物理寄存器文件,其中的不同的物理寄存器文件存储一个或多个不同的数据类型,诸如标量整数、标量浮点、压紧的整数、压紧的浮点、向量整数、向量浮点、状态(例如,是要被执行的下一指令的地址的指令指针)等。在一个实施例中,(多个)物理寄存器文件单元958包括向量寄存器单元、写掩码寄存器单元和标量寄存器单元。这些寄存器单元可提供架构向量寄存器、向量掩码寄存器和通用寄存器。(多个)物理寄存器文件单元958与引退单元954重叠以图示可实现寄存器重命名和无序执行的各种方式(例如,使用(多个)重排序缓冲器和(多个)引退寄存器文件;使用(多个)将来文件、(多个)历史缓冲器和(多个)引退寄存器文件;使用寄存器映射和寄存器的池;等等)。引退单元954和(多个)物理寄存器文件单元958被耦合到(多个)执行集群960。(多个)执行集群960包括一个或多个执行单元962的集合和一个或多个存储器访问单元964的集合。执行单元962可执行各种操作(例如,移位、加法、减法、乘法)并且对各种类型的数据(例如,标量浮点、压紧的整数、压紧的浮点、向量整数、向量浮点)执行所述各种操作。虽然一些实施例可包括专用于特定功能或功能的集合的多个执行单元,但是其它实施例仅可包括一个执行单元或都执行所有功能的多个执行单元。(多个)调度器单元956、(多个)物理寄存器文件单元958和(多个)执行集群960被示出为可能是复数的,因为某些实施例针对某些类型的数据/操作创建分离流水线(例如,标量整数流水线、标量浮点/压紧的整数/压紧的浮点/向量整数/向量浮点流水线和/或存储器访问流水线,其每个具有它们自己的调度器单元、(多个)物理寄存器文件单元和/或执行集群——并且在分离的存储器访问流水线的情况下,实现其中该流水线的仅执行集群具有(多个)存储器访问单元964的某些实施例)。还应当理解,在使用分离流水线的情况下,这些流水线中的一个或多个可以是无序的发出/执行,并且其余是有序的。

存储器访问单元964的集合被耦合到存储器单元970,存储器单元970包括耦合到数据高速缓存单元974的数据tlb单元972,数据高速缓存单元974耦合到级别2(l2)高速缓存单元976。在一个示例性实施例中,存储器访问单元964可包括加载单元、存储地址单元和存储数据单元,其中的每个被耦合到存储器单元970中的数据tlb单元972。指令高速缓存单元934被进一步耦合到存储器单元970中的级别2(l2)高速缓存单元976。l2高速缓存单元976被耦合到一个或多个其它级别的高速缓存并最终到主存储器。

作为示例,示例性寄存器重命名、无序发出/执行核心架构可如下实现流水线900:1)指令获取938执行获取及长度解码阶段902和904;2)解码单元940执行解码阶段906;3)重命名/分配器单元952执行分配阶段908和重命名阶段910;4)(多个)调度器单元956执行调度阶段912;5)(多个)物理寄存器文件单元958和存储器单元970执行寄存器读/存储器读阶段914;执行集群960执行执行阶段916;6)存储器单元970和(多个)物理寄存器文件单元958执行写回/存储器写阶段918;7)各种单元可能在异常处置阶段922中被涉及;以及8)引退单元954和(多个)物理寄存器文件单元958执行提交阶段924。

核心990可支持一个或多个指令集(例如,(具有已随较新版本添加的一些扩展的)x86指令集;mipstechnologiesofsunnyvale,ca的mips指令集;armholdingsofsunnyvale,ca的(具有诸如neon的可选附加扩展的)arm指令集),其包括本文中描述的(多个)指令。在一个实施例中,核心990包括用以支持压紧的数据指令集扩展(例如,avx1、avx2)的逻辑,从而允许使用压紧的数据来执行由许多多媒体应用使用的操作。

应当理解,核心可支持多线程(执行操作或线程的两个或更多并行集合),并可以以多种方式来如此做,所述多种方式包括时间切片的多线程、同时多线程(其中单个物理核心为物理核心同时进行多线程的每个线程提供逻辑核心,或其组合(例如,诸如在intel®超线程技术中的时间切片的获取和解码以及其后的同时多线程)。

虽然在无序执行的上下文中描述寄存器重命名,但是应当理解,寄存器重命名可用于有序架构中。虽然处理器的图示实施例还包括分离的指令和数据高速缓存单元934/974以及共享的l2高速缓存单元976,但替代实施例可具有用于指令和数据二者的单个内部高速缓存,诸如例如级别1(l1)内部高速缓存或多个级别的内部高速缓存。在一些实施例中,系统可包括内部高速缓存和在核心和/或处理器外部的外部高速缓存的组合。替代地,所有高速缓存可在核心和/或处理器外部。

具体的示例性有序核心架构

图10a-b图示了更具体的示例性有序核心架构的框图,所述核心将是芯片中的(包括相同类型和/或不同类型的其它核心的)若干逻辑块中的一个。逻辑块根据应用、通过高带宽互连网络(例如,环形网络)与一些固定的功能逻辑、存储器i/o接口和其它必要i/o逻辑进行通信。

图10a是根据本发明的实施例的单个处理器核心连同其到管芯上互连网络1002的连接并且连同其级别2(l2)高速缓存1004的本地子集的框图。在一个实施例中,指令解码器1000支持具有压紧的数据指令集扩展的x86指令集。l1高速缓存1006允许低等待时间访问以将存储器高速缓存到标量和向量单元中。虽然在一个实施例中(为了简化设计),标量单元1008和向量单元1010使用分离的寄存器集合(分别是标量寄存器1012和向量寄存器1014),并且在它们之间传送的数据被写到存储器并然后从级别1(l1)高速缓存1006读回,但本发明的替代实施例可使用不同的方法(例如,使用单个寄存器集合或包括允许数据被在这两个寄存器文件之间传送而不被写和读回的通信路径)。

l2高速缓存1004的本地子集是全局l2高速缓存的部分,所述全局l2高速缓存被划分成分离的本地子集,每一处理器核心一个。每个处理器核心具有到l2高速缓存1004的它自己的本地子集的直接访问路径。由处理器核心所读的数据被存储在其l2高速缓存子集1004中并可以被与其它处理器核心访问它们自己的本地l2高速缓存子集并行地快速地访问。由处理器核心所写的数据被存储在它自己的l2高速缓存子集1004中并且如果必要则从其它子集中来刷新(flush)。环形网络确保共享的数据的一致性。环形网络是双向的以允许诸如处理器核心、l2高速缓存和其它逻辑块之类的代理在芯片内互相通信。每个环形数据-路径每一方向为1012位宽。

图10b是根据本发明的实施例的图10a中的处理器核心的部分的展开图。图10b包括l1高速缓存1004的l1数据高速缓存1006a部分,以及关于向量单元1010和向量寄存器1014的更多细节。具体地,向量单元1010是16宽向量处理单元(vpu)(参见16宽alu1028),其执行整数、单精度浮点和双精度浮点指令中的一个或多个。vpu支持利用拌和单元1020来拌和寄存器输入、利用数值转换单元1022a-b的数值转换,以及利用复制单元1024对存储器输入的复制。写掩码寄存器1026允许预测所得到的向量写。

图11是根据本发明的实施例的处理器1100的框图,所述处理器1100可能具有不止一个核心,可能具有集成存储器控制器,并且可能具有集成图形。图11中的实线框图示具有单个核心1102a、系统代理1110、一个或多个总线控制器单元1116的集合的处理器1100,而虚线框的可选附加图示具有多个核心1102a-n、系统代理单元1110中的一个或多个集成存储器控制器单元1114的集合以及专用逻辑1108的替代处理器1100。

因此,处理器1100的不同实现可包括:1)cpu,其具有是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核心)的专用逻辑1108、以及是一个或多个通用核心(例如,通用有序核心、通用无序核心、所述两个核心的组合)的核心1102a-n;2)具有是意图主要用于图形和/或科学(吞吐量)的大量专用核心的核心1102a-n的协处理器;以及3)具有是大量通用有序核心的核心1102a-n的协处理器。因此,处理器1100可以是通用处理器、协处理器或专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、gpgpu(通用图形处理单元)、(包括30个或更多核心的)高吞吐量许多集成核心(mic)协处理器、嵌入式处理器或类似物。处理器可被实现在一个或多个芯片上。处理器1100可以是一个或多个衬底的一部分和/或可以使用多个工艺技术中的任何(诸如例如bicmos、cmos或nmos)而实现在一个或多个衬底上。

存储器层级包括核心内的一个或多个级别的高速缓存、一个或多个共享的高速缓存单元1106的集合,以及耦合到集成存储器控制器单元1114的集合的(未示出的)外部存储器。共享的高速缓存单元1106的集合可包括一个或多个中级高速缓存,诸如级别2(l2)、级别3(l3)、级别4(l4)或其它级别的高速缓存、末级高速缓存(llc)和/或其组合。虽然在一个实施例中,基于环的互连单元1112将集成图形逻辑1108(集成图形逻辑1108是专用逻辑的示例并且在本文中还被称为专用逻辑)、共享的高速缓存单元1106的集合,以及系统代理单元1110/(多个)集成存储器控制器单元1114互连,但替代实施例可使用任何数目的公知技术用于互连这样的单元。在一个实施例中,一个或多个高速缓存单元1106和核心1102-a-n之间的一致性被维持。

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

核心1102a-n在架构指令集方面可以是同构或异构的;即,核心1102a-n中的两个或更多可能能够执行相同指令集,而其它核心可能能够仅执行不同指令集或该指令集的子集。

示例性计算机架构

图12-15是示例性计算机架构的框图。在膝上型计算机、台式机、手持pc、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(dsp)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其它电子设备的领域中已知的其它系统设计和配置也是适合的。一般地,能够合并如本文中所公开的处理器和/或其它执行逻辑的种类繁多的系统或电子设备一般是适合的。

现在参考图12,所示出的是依照本发明的一个实施例的系统1200的框图。系统1200可包括被耦合到控制器集线器1220的一个或多个处理器1210、1215。在一个实施例中,控制器集线器1220包括图形存储器控制器集线器(gmch)1290和输入/输出集线器(ioh)1250(其可在分离的芯片上);gmch1290包括存储器1240和协处理器1245被耦合到的存储器和图形控制器;ioh1250将输入/输出(i/o)设备1260耦合到gmch1290。替代地,存储器和图形控制器中的一个或二者被集成在处理器内(如本文中描述的),存储器1240和协处理器1245被直接耦合到处理器1210和具有ioh1250的单个芯片中的控制器集线器1220。

在图12中用虚线来表示附加处理器1215的可选性质。每个处理器1210、1215可包括本文中描述的处理核心中的一个或多个,并可以是处理器1100的某一版本。

存储器1240可以是例如动态随机存取存储器(dram)、相变存储器(pcm)或这两个存储器的组合。对于至少一个实施例,控制器集线器1220经由诸如前侧总线(fsb)的多点总线、诸如快速路径互连(qpi)的点对点接口或类似连接1295与(多个)处理器1210、1215通信。

在一个实施例中,协处理器1245是专用处理器,诸如例如高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器或类似物。在一个实施例中,控制器集线器1220可包括集成图形加速器。

在包括架构、微架构、热、功率消耗特性和类似物的指标的量度范围方面,在物理资源1210、1215之间可能存在多种差异。

在一个实施例中,处理器1210执行控制一般类型的数据处理操作的指令。指令内嵌入的可以是协处理器指令。处理器1210将这些协处理器指令识别为具有应由附连的协处理器1245执行的类型。相应地,处理器1210在协处理器总线或其它互连上将这些协处理器指令(或表示协处理器指令的控制信号)发出到协处理器1245。(多个)协处理器1245接受并执行所接收的协处理器指令。

现在参考图13,所示出的是依照本发明的实施例的第一更具体的示例性系统1300的框图。如图13中所示,多处理器系统1300是点对点互连系统,并包括经由点对点互连1350耦合的第一处理器1370和第二处理器1380。处理器1370和1380中的每个可以是处理器1100的某一版本。在本发明的一个实施例中,处理器1370和1380分别是处理器1210和1215,而协处理器1338是协处理器1245。在另一个实施例中,处理器1370和1380分别是处理器1210、协处理器1245。

处理器1370和1380被示出分别包括集成存储器控制器(imc)单元1372和1382。处理器1370还包括点对点(p-p)接口1376和1378,作为它的总线控制器单元的部分;类似地,第二处理器1380包括p-p接口1386和1388。处理器1370、1380可使用p-p接口电路1378、1388经由点对点(p-p)接口1350交换信息。如图13中所示,imc1372和1382将处理器耦合到相应存储器,也就是存储器1332和存储器1334,其可以是本地地附连到相应处理器的主存储器的部分。

处理器1370、1380可每个使用点对点接口电路1376、1394、1386、1398经由单独的p-p接口1352、1354与芯片组1390交换信息。芯片组1390可以可选地经由高性能接口1392与协处理器1338交换信息。在一个实施例中,协处理器1338是专用处理器,诸如例如高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器或类似物。

(未示出的)共享的高速缓存可被包括在任一处理器中或在两个处理器外部,还经由p-p互连与处理器连接,使得如果处理器被置于低功率模式中,则任一或两个处理器的本地高速缓存信息可被存储在共享的高速缓存中。

芯片组1390可经由接口1396耦合到第一总线1316。在一个实施例中,第一总线1316可以是外围组件互连(pci)总线或诸如pci快速总线或另一第三代i/o互连总线之类的总线,但是本发明的范围未被如此限制。

如图13中所示,各种i/o设备1314连同总线桥接器1318可被耦合到第一总线1316,总线桥接器1318将第一总线1316耦合到第二总线1320。在一个实施例中,诸如协处理器、高吞吐量mic处理器、gpgpu、加速器(诸如例如图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列或任何其它处理器之类的一个或多个附加处理器1315被耦合到第一总线1316。在一个实施例中,第二总线1320可以是低引脚计数(lpc)总线。在一个实施例中,各种设备可被耦合到第二总线1320,包括例如键盘和/或鼠标1322、通信设备1327和诸如盘驱动器或其它大容量存储设备之类的存储单元1328,其可包括指令/代码和数据1330。进一步地,音频i/o1324可被耦合到第二总线1320。注意,其它架构是可能的。例如,代替图13的点对点架构,系统可实现多点总线或其它这样的架构。

现在参考图14,所示出的是依照本发明的实施例的第二更具体的示例性系统1400的框图。图13和14中的相同元件具有相同的参考数字,并且已从图14省略图13的某些方面以便避免模糊图14的其它方面。

图14图示了处理器1370、1380可分别包括集成存储器和i/o控制逻辑(“cl”)1372和1382。因此,cl1372、1382包括集成存储器控制器单元并包括i/o控制逻辑。图14图示了不但存储器1332、1334被耦合到cl1372、1382,而且i/o设备1414也被耦合到控制逻辑1372、1382。遗留i/o设备1415被耦合到芯片组1390。

现在参考图15,所示出的是依照本发明的实施例的soc1500的框图。图11中的类似元件具有相同的参考数字。并且,虚线框是更高级的soc上的可选特征。在图15中,(多个)互连单元1502被耦合到:应用处理器1510,其包括包含高速缓存单元1104a-n的一个或多个核心1102a-n的集合和(多个)共享的高速缓存单元1106;系统代理单元1110;(多个)总线控制器单元1116;(多个)集成存储器控制器单元1114;一个或多个协处理器1520的集合,其可包括集成图形逻辑、图像处理器、音频处理器以及视频处理器;静态随机存取存储器(sram)单元1530;直接存储器访问(dma)单元1532;以及用于耦合到一个或多个外部显示器的显示单元1540。在一个实施例中,(多个)协处理器1520包括专用处理器,诸如例如网络或通信处理器、压缩引擎、gpgpu、高吞吐量mic处理器、嵌入式处理器或类似物。

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

可以将诸如图13中图示的代码1330之类的程序代码应用于输入指令以执行本文中描述的功能并生成输出信息。输出信息可以以已知方式应用于一个或多个输出设备。出于本申请的目的,处理系统包括具有处理器的任何系统,所述处理器诸如例如数字信号处理器(dsp)、微控制器、专用集成电路(asic)或微处理器。

程序代码可以以高级过程或面向对象的编程语言来实现以与处理系统通信。如果期望,则程序代码还可以以汇编或机器语言来实现。事实上,本文中描述的机制在范围上不限于任何特定的编程语言。在任何情况下,语言可以是编译或解释语言。

至少一个实施例的一个或多个方面可通过存储在机器可读介质上的代表性指令来实现,所述代表性指令表示处理器内的各种逻辑,其当由机器读时使得机器制作用以执行本文中描述的技术的逻辑。这样的表示(被称为“ip核心”)可被存储在有形的机器可读介质上并被供应给各种客户或制造设施以加载到实际做出逻辑或处理器的制作机器中。

这样的机器可读存储介质可非限制性地包括由机器或设备所制造或形成的物品的非瞬时有形布置,其包括存储介质,诸如硬盘,包括软盘、光盘、紧致盘只读存储器(cd-rom)、可重写紧致盘(cd-rw)和磁光盘的任何其它类型的盘;半导体设备,诸如只读存储器(rom),诸如动态随机存取存储器(dram)、静态随机存取存储器(sram)之类的随机存取存储器(ram),可擦除可编程只读存储器(eprom)、闪速存储器、电可擦除可编程只读存储器(eeprom)、相变存储器(pcm);磁卡或光卡;或适合于存储电子指令的任何其它类型的介质。

相应地,本发明的实施例还包括非瞬时有形机器可读介质,所述介质包含指令或包含设计数据,诸如硬件描述语言(hdl),其定义本文中描述的结构、电路、装置、处理器和/或系统特征。这样的实施例还可被称为程序产品。

模拟(包括二进制翻译、代码变形等)

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

图16是根据本发明的实施例的对比软件指令转换器的使用的框图,所述软件指令转换器用以将源指令集中的二进制指令转换成目标指令集中的二进制指令。在图示的实施例中,指令转换器是软件指令转换器,但是替代地指令转换器可以以软件、硬件、固件或其各种组合来实现。图16示出可以使用x86编译器1604来编译用高级语言1602的程序以生成x86二进制代码1606,其可由具有至少一个x86指令集核心的处理器1616本机执行。具有至少一个x86指令集核心的处理器1616表示可以通过兼容地执行或以其它方式处理如下各项以便实现与具有至少一个x86指令集核心的intel处理器基本上相同的结果而执行与具有至少一个x86指令集核心的intel处理器基本上相同的功能的任何处理器:(1)intelx86指令集核心的指令集的实质部分,或(2)目标是在具有至少一个x86指令集核心的intel处理器上运行的应用或其它软件的对象代码版本。x86编译器1604表示可操作以生成x86二进制代码1606(例如,对象代码)的编译器,所述x86二进制代码1606可以被在利用或不利用附加联接处理的情况下在具有至少一个x86指令集核心的处理器1616上执行。类似地,图16示出了可以使用替代指令集编译器1608来编译用高级语言1602的程序以生成替代指令集二进制代码1610,其可由不具有至少一个x86指令集核心的处理器1614(例如,具有执行mipstechnologiesofsunnyvale,ca的mips指令集和/或执行armholdingsofsunnyvale,ca的arm指令集的核心的处理器)本机执行。可以使用指令转换器1612将x86二进制代码1606转换成可由不具有x86指令集核心的处理器1614本机执行的代码。该经转换的代码不太可能与替代指令集二进制代码1610相同,因为有此能力的指令转换器难以做出;然而,经转换的代码将完成一般操作并由来自替代指令集的指令组成。因此,指令转换器1612表示软件、固件、硬件或其组合,其通过模拟、仿真或任何其它过程而允许不具有x86指令集处理器或核心的处理器或其它电子设备执行x86二进制代码1606。

示例

示例1是一种装置。装置包括二进制翻译器,用以将条件语句的分支中的加载指令提升超过条件语句并且在条件语句的补充分支中插入scl指令,其中scl指令提供对在加载指令被提升之前的加载指令的rpo的指示。装置进一步包括排序缓冲器。装置进一步包括执行电路,用以执行加载指令以实行加载并且使得针对加载指令的条目被插入在排序缓冲器中,其中针对加载指令的条目包括加载指令的rpo和加载的结果,并且其中执行电路要执行scl指令以使用由scl指令提供的加载指令的rpo来定位排序缓冲器中的针对加载指令的条目并且从排序缓冲器丢弃针对加载指令的条目。

示例2包括示例1的实质。在该示例中,执行电路要基于确定排序缓冲器是否包括具有与由scl指令提供的加载指令的rpo匹配的rpo的条目来确定针对加载指令的条目是否在排序缓冲器中。

示例3包括示例1的实质。在该示例中,由scl指令提供的对加载指令的rpo的指示是增量值,其指示scl指令的rpo与加载指令的rpo之间的差异。

示例4包括示例3的实质。在该示例中,执行电路要基于将增量值添加到scl指令的rpo来确定加载指令的rpo。

示例5包括权利要求4的实质。在该示例中,执行电路要在scl指令的解码阶段期间确定scl指令的rpo。

示例6包括权利要求1的实质。在该示例中,执行电路要以rpo顺序来处理排序缓冲器中的条目以用于加载指令引退。

示例7包括权利要求1的实质。在该示例中,scl指令进一步提供对加载指令的目的地寄存器的模式的指示,其中执行电路要根据由scl指令提供的对模式的指示将目的地寄存器设置成空状态或满状态。

示例8是一种方法。方法包括将条件语句的分支中的加载指令提升超过条件语句;在条件语句的补充分支中插入scl指令,其中scl指令提供对在加载指令被提升之前的加载指令的rpo的指示;执行加载指令以实行加载并且使得针对加载指令的条目被插入在排序缓冲器中,其中针对加载指令的条目包括加载指令的rpo和加载的结果;以及执行scl指令以使用由scl指令提供的加载指令的rpo来定位排序缓冲器中的针对加载指令的条目并且从排序缓冲器丢弃针对加载指令的条目。

示例9包括权利要求8的实质。在该示例中,方法进一步包括基于确定排序缓冲器是否包括具有与由scl指令提供的加载指令的rpo匹配的rpo的条目来确定针对加载指令的条目是否在排序缓冲器中。

示例10包括权利要求8的实质。在该示例中,由scl指令提供的对加载指令的rpo的指示是增量值,其指示scl指令的rpo与加载指令的rpo之间的差异。

示例11包括权利要求10的实质。在该示例中,方法进一步包括基于将增量值添加到scl指令的rpo来确定加载指令的rpo。

示例12包括权利要求11的实质。在该示例中,方法进一步包括在scl指令的解码阶段期间确定scl指令的rpo。

示例13包括权利要求8的实质。在该示例中,方法进一步包括以rpo顺序来处理排序缓冲器中的条目以用于加载指令引退。

示例14包括权利要求8的实质。在该示例中,scl指令进一步提供对加载指令的目的地寄存器的模式的指示,其中模式是空状态或满状态中的任一个。

示例15是一种系统。系统包括二进制翻译器,用以将条件语句的分支中的加载指令提升超过条件语句并且在条件语句的补充分支中插入scl指令,其中scl指令提供对在加载指令被提升之前的加载指令的rpo的指示。系统进一步包括排序缓冲器。系统进一步包括包含多个执行电路的循环加速器,其中来自所述多个执行电路中的执行电路要执行加载指令以实行加载并且使得针对加载指令的条目被插入在排序缓冲器中,其中针对加载指令的条目包括加载指令的rpo和加载的结果,并且其中执行电路要执行scl指令以使用由scl指令提供的加载指令的rpo来定位排序缓冲器中的针对加载指令的条目并且从排序缓冲器丢弃针对加载指令的条目。

示例16包括示例15的实质。在该示例中,执行电路要基于确定排序缓冲器是否包括具有与由scl指令提供的加载指令的rpo匹配的rpo的条目来确定针对加载指令的条目是否在排序缓冲器中。

示例17包括示例15的实质。在该示例中,由scl指令提供的对加载指令的rpo的指示是增量值,其指示scl指令的rpo与加载指令的rpo之间的差异。

示例18包括示例17的实质。在该示例中,执行电路要基于将增量值添加到scl指令的rpo来确定加载指令的rpo。

示例19包括示例18的实质。在该示例中,执行电路要在scl指令的解码阶段期间确定scl指令的rpo。

示例20包括示例15的实质。在该示例中,执行电路要以rpo顺序来处理排序缓冲器中的条目以用于加载指令引退。

示例21包括示例15的实质。在该示例中,scl指令进一步提供对加载指令的目的地寄存器的模式的指示,其中执行电路要根据由scl指令提供的对模式的指示将目的地寄存器设置成空状态或满状态。

示例22是一种装置。装置包括二进制翻译部件,用以将条件语句的分支中的加载指令提升超过条件语句并且在条件语句的补充分支中插入scl指令,其中scl指令提供对在加载指令被提升之前的加载指令的rpo的指示。装置进一步包括排序缓冲器。装置进一步包括执行部件,用以执行加载指令以实行加载并且使得针对加载指令的条目被插入在排序缓冲器中,其中针对加载指令的条目包括加载指令的rpo和加载的结果,并且其中执行部件要执行scl指令以使用由scl指令提供的加载指令的rpo来定位排序缓冲器中的针对加载指令的条目并且从排序缓冲器丢弃针对加载指令的条目。

示例23包括示例22的实质。在该示例中,执行部件要基于确定排序缓冲器是否包括具有与由scl指令提供的加载指令的rpo匹配的rpo的条目来确定针对加载指令的条目是否在排序缓冲器中。

示例24包括示例22的实质。在该示例中,由scl指令提供的对加载指令的rpo的指示是增量值,其指示scl指令的rpo与加载指令的rpo之间的差异。

示例25包括示例24的实质。在该示例中,执行部件要基于将增量值添加到scl指令的rpo来确定加载指令的rpo。

虽然已经在若干实施例方面描述了本发明,但是本领域技术人员将认识到,本发明不限于所描述的实施例,可以利用在所附权利要求书的精神和范围内的修改和变更来实践。本说明书因此被认为是说明性的而不是限制性的。

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