用于向量紧缩有符号值的乘法和累加的系统、装置和方法与流程

文档序号:17337062发布日期:2019-04-05 22:37阅读:203来源:国知局
用于向量紧缩有符号值的乘法和累加的系统、装置和方法与流程

本发明的实施例涉及计算机处理器架构的领域。更具体地,实施例涉及在被执行时引起向量紧缩有符号数据值的乘法和累加的指令。



背景技术:

指令集或指令集架构(isa)是计算机架构中涉及编程的部分,包括原生数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置、以及外部输入和输出(i/o)。在此,术语“指令”一般是指宏指令——即,提供给处理器供执行的指令——而不是作为由处理器的解码器对宏指令解码而产生的结果的微指令或微操作。微指令或微操作可以被配置成用于指示处理器上的执行单元执行操作以实现与宏指令相关联的逻辑。

isa与微架构不同,微架构是用于实现指令集的处理器设计技术的集合。具有不同微架构的处理器可以共享公共指令集。例如,奔腾4(pentium4)处理器、酷睿tm(coretm)处理器、以及来自加利福尼亚州桑尼威尔(sunnyvale)的超微半导体有限公司(advancedmicrodevices,inc.)的多个处理器实现几乎相同版本的x86指令集(具有已随更新的版本加入的一些扩展),但具有不同的内部设计。例如,isa的相同寄存器架构在不同的微架构中可使用公知的技术以不同方法来实现,包括专用物理寄存器、使用寄存器重命名机制(例如,使用寄存器别名表(rat)、重排序缓冲器(rob)和引退寄存器堆)的一个或多个动态分配的物理寄存器。除非另外指定,否则短语“寄存器架构”、“寄存器堆”和“寄存器”在本文中用于指代对软件/编程者以及对指令指定寄存器的方式可见的寄存器架构、寄存器堆和寄存器。在需要区分的情况下,形容词“逻辑的”、“架构的”,或“软件可见的”将用于指示寄存器架构中的寄存器/寄存器堆,而不同的形容词将用于指定给定微架构中的寄存器(例如,物理寄存器、重排序缓冲器、引退寄存器、寄存器池)。

乘法-累加是常用的计算两个数的乘积并将该乘积加到累加值的数字信号处理操作。现有的单指令多数据(simd)微架构通过执行指令序列来实现乘法-累加操作。例如,可利用乘法指令、随后是4路加法、并且然后是与目的地四字数据的累加以生成两个64位饱和结果来执行乘法-累加。这导致较低的性能,因为对每个操作运行这些指令序列。

附图说明

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

图1图示根据实施例的向量紧缩有符号乘法和累加指令的示例性执行;

图2图示根据实施例的由处理器执行的用于处理乘法和累加指令的方法的实施例;

图3a-3c图示示例性指令格式;

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

图5a-5b图示有序流水线和有序核;

图6a-6b图示更具体的示例性有序核架构的框图,该核将是芯片中的若干逻辑块之一(包括相同类型和/或不同类型的其他核);

图7是根据本发明的实施例的可具有超过一个的核、可具有集成存储器控制器、并且可具有集成图形器件的处理器的框图;

图8-11是示例性计算机架构的框图;以及

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

具体实施方式

以下描述内容描述用于实现有符号字值的向量紧缩有符号乘法和累加的向量紧缩指令的方法和装置。在以下描述中,陈述了多个具体细节以提供对本发明的更透彻理解,这些细节诸如,逻辑实现、操作码、指定操作数的手段、资源划分/共享/复制实现、系统组件的类型和相互关系、以及逻辑划分/整合选择。然而,本领域技术人员应当领会,没有这些具体细节也可实践本发明。在其他实例中,未详细示出控制结构、门级电路以及完整的软件指令序列,以免使本发明变得模糊。本领域技术人员利用所包括的描述将能够在无需过度实验的情况下实现适当的功能。

说明书中对“一个实施例”、“实施例”、“示例实施例”等的引用表明所描述的实施例可以包括特定的特征、结构或特性,但是每个实施例可能不一定都包括该特定的特征、结构或特性。此外,此类短语不一定是指同一个实施例。此外,当结合实施例描述特定的特征、结构或特性时,认为结合无论是否被明确描述的其他实施例而影响此类特征、结构或特性是在本领域技术人员的知识范围之内的。

用括号括起来的文本以及具有虚线边界(例如,大虚线、小虚线、点虚线、点线)的框可在本文中用于示出向本发明的实施例添加附加特征的可任选操作。然而,此类记号不应当被认为意味着它们是仅有的选项或可任选操作,和/或具有实线边界的框在本发明的某些实施例中不是可任选的。

在以下描述和权利要求书中,可使用术语“耦合的”和“连接的”及其衍生词。应当理解,这些术语并不旨在作为彼此的同义词。“耦合的”用于指示两个或更多个元件彼此协作或相互作用,它们可以或可以不彼此直接物理或电接触。“连接的”用于指示在彼此耦合的两个或更多个元件之间通信的建立。

有符号字的向量乘法和累加

在实施例中,公开了实现有符号字值的乘法和累加的新的向量紧缩指令。先前的实现方式需要执行指令序列来生成对应于有符号字值的乘法和累加的输出,而本文公开的实施例提供单条指令和相关联的电路以对向量源寄存器的字值执行这些操作。这些实施例通过相对于执行多条单独的指令来加速这些操作的执行(并且因此通常使用更少功率)来改善计算机本身。

如上文所指示,本文公开的(多条)指令的执行使执行电路(或执行单元)对源数据执行乘法和累加操作。在一些实施例中,乘法和累加指令的执行使执行电路:将来自第一和第二紧缩数据源操作数中的多个紧缩数据元素位置的所选择的有符号数据值相乘以生成多个第一有符号结果值;对多个第一有符号结果值求和以生成一个或多个第二有符号结果值;将一个或多个第二有符号结果值与来自目的地操作数的一个或多个数据值累加以生成一个或多个第三有符号结果值;以及将一个或多个第三有符号结果值存储在目的地操作数中的一个或多个紧缩数据元素位置中。在一些实施例中,指令的执行进一步包括:使用饱和电路使一个或多个第三有符号结果值饱和;并且将饱和结果存储在目的地操作数中的一个或多个紧缩数据元素位置中。

图1图示用于执行引起向量紧缩有符号值的乘法和累加的指令的电路的一个实施例。乘法和累加指令格式包括用于目的地(紧缩数据目的地(src1/dest)120)和两个源(向量紧缩数据源2(src2)102和向量紧缩数据源3(src3)104)的字段。例如,src2102和src3104可各自包括八个字值。尽管在图1的所图示的示例中每个源为128位并且每个数据元素为16位,但是本文描述的基本原理不限于任何特定的源或数据元素尺寸。例如,在其他实施例中,可以使用128位、256位、512位等的数据源尺寸。类似地,可以使用32位、64位、128位等的向量数据元素尺寸。如上文所指示,指令的执行将存储在src2102和src3104源中的值相乘并累加。在该示例中,对输入值首先执行乘法、随后执行累加和可任选的饱和。

向量紧缩数据源2102包括八个紧缩数据元素(示出为紧缩数据元素位置a-h)。取决于实现方式,向量紧缩数据源2102是紧缩数据寄存器(例如,xmm、ymm、zmm、向量、simd、d或s寄存器)或存储器位置。类似地,向量紧缩数据源3104包括八个紧缩数据元素(也示出为紧缩数据元素位置a-h)。取决于实现方式,向量紧缩数据源3104是紧缩数据寄存器(例如,xmm、ymm、zmm、向量、simd、d或s寄存器)或存储器位置。

将这两个紧缩数据源102、104馈送到执行电路中以对其进行操作。如所示,执行电路可以包括输入复用器106,其将来自紧缩数据源102、104的值传递至多个乘法器107。如所讨论的,将紧缩数据源102、104的对应值相乘,并且然后将结果累加,并且可任选地使其饱和,如下文更详细地所描述。

乘法器107可以对数据源102、104执行向量乘法,其中每个乘法器将来自src2102的所选择的向量数据元素与来自src3104的所选择的向量数据元素相乘。在一些实施例中,每个输入值可以是有符号值。如图1所示,乘法器107生成下列值:s2(h)*s3(h)、s2(g)*s3(g)、s2(f)*s3(f)、s2(e)*s3(e)、s2(d)*s3(d)、s2(c)*s3(c)、s2(b)*s3(b)、s2(a)*s3(a),其中s2标识第一源102,并且s3标识第二源104,并且a、b、c、d、e、f、g和h标识从最低到最高数据元素位置排序的数据源102、104中的紧缩数据元素位置。注意,虽然示出了多个乘法器,但是在一些实施例中,同一乘法器用于将多个值对中的每一值对相乘。

在图1所示的实施例中,加法器网络108、110可以组合乘法器107的输出。由此,乘法和累加指令计算源中的对应的值对的乘积并对相应的乘积值求和。下文示出该计算的伪代码表示:

如所示,对src2和src3的较低64位中包含的字值进行相乘和求和的结果可以存储到第一临时寄存器temp0,并且对src2和src3的较高64位中包含的字值进行相乘和求和的结果可以存储到第二临时寄存器temp1。

向量紧缩数据目的地120经由累加器112、114存储来自加法器网络108和110的结果。取决于实现方式,紧缩数据源1/目的地120是紧缩数据寄存器(例如,xmm、ymm、zmm、向量、simd、d、s或其他寄存器)或存储器位置。在该示图中,紧缩数据目的地120与紧缩数据源1相同,然而,不是必须如此。在一些实施例中,在加到适当的累加器112、114之前,可以对结果中的每一个进行符号扩展并累加到目的地寄存器中的值的对应的64位。例如,如下列伪代码表示所示,可以对存储到第一临时寄存器temp0的结果进行符号扩展,然后存储到目的地120的较低64位,并且可以对存储到第二寄存器temp1的结果进行符号扩展并存储到目的地120的较高64位。

在一些实施例中,在将结果存储到向量紧缩数据目的地之前,可以使用饱和电路122、124使经符号扩展的结果饱和。

用于乘法和累加指令的格式的实施例是vpdpwssqdest1,src2,src3,其中dest1是用于紧缩数据目的地寄存器操作数的字段,src2和src3是用于诸如紧缩数据寄存器或存储器之类的源的字段。在一些实施例中,指令可以是vex编码的。

在一些实施例中,乘法和累加指令的编码包括比例-索引-基址(sib)型存储器寻址操作数,该sib型存储器寻址操作数间接地标识存储器中的多个被索引的目的地位置。在一个实施例中,sib型存储器操作数可以包括标识基址寄存器的编码。基址寄存器的内容可以表示存储器中的基址,根据该存储器中的基址计算存储器中的特定目的地位置的地址。例如,基址可以是扩展向量指令的可能的目的地位置块中的第一位置的地址。在一个实施例中,sib型存储器操作数可以包括标识索引寄存器的编码。索引寄存器的每个元素可以指定索引或偏移值,该索引或偏移值能用于根据基址计算可能的目的地位置块内的相应目的地位置的地址。在一个实施例中,sib型存储器操作数可以包括指定比例因数的编码,当计算相应的目的地地址时,将该比例因数应用到每个索引值。例如,如果将比例因数值4编码在sib型存储器操作数中,则可以将从索引寄存器的元素获得的每个索引值乘以4,并且然后加到基址以计算目的地地址。

在一个实施例中,具有vm32{x,y,z}的形式的sib型存储器操作数可以标识使用sib型存储器寻址指定的存储器操作数的向量数组。在该示例中,使用共同基址寄存器、常数比例因数和包括各个元素(其中的每个元素是32位的索引值)的向量索引寄存器来指定存储器地址的数组。向量索引寄存器可以是128位(例如,xmm)寄存器(vm32x)、256位(例如,ymm)寄存器(vm32y)或512位(例如,zmm)寄存器(vm32z)。在另一实施例中,具有vm64{x,y,z}的形式的sib型存储器操作数可以标识使用sib型存储器寻址指定的存储器操作数的向量数组。在该示例中,使用共同基址寄存器、常数比例因数和包括各个元素(其中的每个元素是64位的索引值)的向量索引寄存器来指定存储器地址的数组。向量索引寄存器可以是128位(例如,xmm)寄存器(vm64x)、256位(例如,ymm)寄存器(vm64y)或512位(例如,zmm)寄存器(vm64z)。

图2中图示根据一个实施例的方法。将参照其他附图中的示例性实施例来描述该流程图中的操作。然而,该流程图中的操作可由除参照其他附图所讨论的本发明的那些实施例之外的实施例来执行,并且参照这些其他附图所讨论的本发明的实施例可执行与参照该流程图所讨论的操作不同的操作。

在框202处,该过程通过取出电路从代码存储取出指令,该指令具有用于操作码、第一和第二紧缩数据源操作数、以及紧缩数据目的地操作数的字段。在实施例中,目的地操作数以及第一和第二源操作数是向量紧缩数据。

在框204处,解码电路对取出的指令解码。例如,由解码电路对诸如本文详述的取出的乘法和累加指令解码。

在框206处,调度由执行电路对由源操作数标识的数据执行经解码的指令。在实施例中,第一源操作数标识存储第一多个有符号输入值的第一源寄存器,并且第二源操作数标识存储第二多个有符号输入值的第二源寄存器。在一些实施例中,经解码的指令进一步指示是否要使有符号结果值饱和。

在框208处,执行电路执行经解码的指令以:将来自第一和第二紧缩数据源操作数中的多个紧缩数据元素位置的所选择的有符号数据值相乘以生成多个第一有符号结果值;对多个第一有符号结果值求和以生成一个或多个第二有符号结果值;将一个或多个第二结果与来自目的地操作数的一个或多个数据值累加以生成一个或多个第三有符号结果值;可任选地使一个或多个第三有符号结果值饱和;以及将一个或多个第三有符号结果值存储在目的地操作数中的一个或多个紧缩数据元素位置中。

例如,再次参考图1,多个乘法器107可以将来自第一和第二紧缩数据源操作数(例如,数据源102、104)中的多个紧缩数据元素位置的所选择的有符号数据值相乘以生成多个第一有符号结果值。可以由一个或多个加法器网络(例如,加法器网络108、110)对多个第一有符号结果值求和以生成一个或多个第二有符号结果值和加法器网络(或其他电路)。可以由一个或多个累加器112、114将一个或多个第二有符号结果值与来自目的地操作数(例如,向量紧缩数据目的地120)的一个或多个数据值累加。在一些实施例中,可以可任选地由饱和电路122、124使一个或多个第二结果饱和。一个或多个第二有符号结果值可以存储在目的地操作数中的一个或多个紧缩数据元素位置中,例如,存储在向量紧缩数据目的地120的数据元素位置中。

在实施例中,执行经解码的指令进一步包括将来自第一和第二紧缩数据源操作数中的多个紧缩数据元素位置的数据值复用到至少一个乘法器电路。例如,可以由输入复用器106将第一和第二紧缩数据源102、104的数据值复用到乘法器107。如图1所示,基于在第一和第二紧缩数据源操作数中共享相同的紧缩数据元素位置的数据值(例如,发送在紧缩数据源1104的位置h处的数据值以用于与在紧缩数据源2102的位置h处的对应的数据值相乘)来复用第一和第二紧缩数据源102、104的数据值。

在实施例中,存储一个或多个第三有符号结果值包括:将一个结果存储在紧缩数据目的地操作数的上半部中(例如,来自加法器网络108和累加器112的结果存储在紧缩数据目的地120的上半部中);并且将另一结果存储在紧缩数据目的地操作数的下半部中(例如,来自加法器网络110和累加器114的结果存储在紧缩数据目的地120的下半部中)。

下文详述示例性实施例。

1.一种用于执行指令的方法,该方法包括:由解码电路对指令解码,该指令具有用于第一紧缩数据源操作数、第二紧缩数据源操作数以及紧缩数据目的地操作数的字段;由执行电路通过以下操作执行经解码的指令:将来自第一紧缩数据源操作数和第二紧缩数据源操作数中的多个紧缩数据元素位置的所选择的有符号数据值相乘以生成多个第一有符号结果值;对多个第一有符号结果值求和以生成一个或多个第二有符号结果值;将一个或多个第二有符号结果值与来自目的地操作数的一个或多个数据值累加以生成一个或多个第三有符号结果值;以及将一个或多个第三有符号结果值存储在目的地操作数中的一个或多个紧缩数据元素位置中。

2.如示例1的方法,其中由执行电路执行经解码的指令进一步包括:将来自第一紧缩数据源操作数和第二紧缩数据源操作数中的多个紧缩数据元素位置的数据值复用到至少一个乘法器电路。

3.如示例2的方法,其中基于在第一紧缩数据源操作数和第二紧缩数据源操作数中共享相同的紧缩数据元素位置的数据值,将来自第一紧缩数据源操作数和第二紧缩数据源操作数中的多个紧缩数据元素位置的数据值复用到至少一个乘法器电路。

4.如示例1的方法,其中由一个或多个加法器网络生成一个或多个第二有符号结果值。

5.如示例1的方法,其中存储一个或多个第三有符号结果值包括:将结果值存储在紧缩数据目的地操作数的上半部中;并且将结果值存储在紧缩数据目的地操作数的下半部中。

6.如示例1的方法,其中将所选择的有符号数据值相乘包括:执行操作s1h*s2h、s1g*s2g、s1f*s2f和s1e*s2e以及操作s1d*s2d、s1c*s2c、s1b*s2b和s1a*s2a以生成多个第一有符号结果值,其中s1标识第一紧缩数据源操作数,s2标识第二紧缩数据源操作数,并且a、b、c、d、e、f、g和h标识从最低到最高数据元素位置排序的第一紧缩数据源操作数和第二紧缩数据源操作数中的紧缩数据元素位置。

7.如示例6的方法,其中对多个第一有符号结果值求和包括:执行操作(s1h*s2h)+(s1g*s2g)+(s1f*s2f)+(s1e*s2e)并且执行操作(s1d*s2d)+(s1c*s2c)+(s1b*s2b)+(s1a*s2a)以生成一个或多个第二有符号结果值。

8.如示例1的方法,进一步包括,响应于检测到一个或多个第三有符号结果值的值高于阈值,将最大值存储在目的地操作数的对应的位置中。

9.一种装置,包括:解码器,用于对指令解码,该指令具有用于第一紧缩数据源操作数、第二紧缩数据源操作数以及紧缩数据目的地操作数的字段;以及执行电路,用于执行经解码的指令以:将来自第一紧缩数据源操作数和第二紧缩数据源操作数中的多个紧缩数据元素位置的所选择的有符号数据值相乘以生成多个第一有符号结果值;对多个第一有符号结果值求和以生成一个或多个第二有符号结果值;将一个或多个第二有符号结果值与来自目的地操作数的一个或多个数据值累加以生成一个或多个第三有符号结果值;以及将一个或多个第三有符号结果值存储在目的地操作数中的一个或多个紧缩数据元素位置中。

10.如示例9的装置,其中由执行电路执行经解码的指令进一步包括:将来自第一紧缩数据源操作数和第二紧缩数据源操作数中的多个紧缩数据元素位置的数据值复用到至少一个乘法器电路。

11.如示例9的装置,其中基于在第一紧缩数据源操作数和第二紧缩数据源操作数中共享相同的紧缩数据元素位置的数据值,将来自第一紧缩数据源操作数和第二紧缩数据源操作数中的多个紧缩数据元素位置的数据值复用到至少一个乘法器电路。

12.如示例9的装置,其中由一个或多个加法器网络生成一个或多个第二有符号结果值。

13.如示例9的装置,其中存储一个或多个第三有符号结果值包括:将结果值存储在紧缩数据目的地操作数的上半部中;并且将结果值存储在紧缩数据目的地操作数的下半部中。

14.如示例9的装置,其中将所选择的有符号数据值相乘包括:执行操作s1h*s2h、s1g*s2g、s1f*s2f和s1e*s2e以及操作s1d*s2d、s1c*s2c、s1b*s2b和s1a*s2a以生成多个第一有符号结果值,其中s1标识第一紧缩数据源操作数,s2标识第二紧缩数据源操作数,并且a、b、c、d、e、f、g和h标识从最低到最高数据元素位置排序的第一紧缩数据源操作数和第二紧缩数据源操作数中的紧缩数据元素位置。

15.如示例9的装置,其中对多个第一有符号结果值求和包括:执行操作(s1h*s2h)+(s1g*s2g)+(s1f*s2f)+(s1e*s2e)并且执行操作(s1d*s2d)+(s1c*s2c)+(s1b*s2b)+(s1a*s2a)以生成一个或多个第二有符号结果值。

16.如示例9的装置,进一步包括,响应于检测到一个或多个第三有符号结果值的值高于阈值,将最大值存储在目的地操作数的对应的位置中。

17.一种非暂态机器可读介质,该非暂态机器可读介质存储指令,该指令当由处理器执行时使处理器执行方法,该方法包括:对指令解码,该指令具有用于第一紧缩数据源操作数、第二紧缩数据源操作数、以及紧缩数据目的地操作数的字段;以及由执行电路执行经解码的指令以:将来自第一紧缩数据源操作数和第二紧缩数据源操作数中的多个紧缩数据元素位置的所选择的有符号数据值相乘以生成多个第一有符号结果值;对多个第一有符号结果值求和以生成一个或多个第二有符号结果值;将一个或多个第二有符号结果值与来自目的地操作数的一个或多个数据值累加以生成一个或多个第三有符号结果值;以及将一个或多个第三有符号结果值存储在目的地操作数中的一个或多个紧缩数据元素位置中。

18.如示例17的非暂态机器可读介质,其中由执行电路执行经解码的指令进一步包括:将来自第一紧缩数据源操作数和第二紧缩数据源操作数中的多个紧缩数据元素位置的数据值复用到至少一个乘法器电路。

19.如示例18的非暂态机器可读介质,其中基于在第一紧缩数据源操作数和第二紧缩数据源操作数中共享相同的紧缩数据元素位置的数据值,将来自第一紧缩数据源操作数和第二紧缩数据源操作数中的多个紧缩数据元素位置的数据值复用到至少一个乘法器电路。

20.如示例17的非暂态机器可读介质,其中由一个或多个加法器网络生成一个或多个第二有符号结果值。

21.如示例17的非暂态机器可读介质,其中存储一个或多个第三有符号结果值包括:将结果值存储在紧缩数据目的地操作数的上半部中;并且将结果值存储在紧缩数据目的地操作数的下半部中。

22.如示例17的非暂态机器可读介质,其中将所选择的有符号数据值相乘包括:执行操作s1h*s2h、s1g*s2g、s1f*s2f和s1e*s2e以及操作s1d*s2d、s1c*s2c、s1b*s2b和s1a*s2a以生成多个第一有符号结果值,其中s1标识第一紧缩数据源操作数,s2标识第二紧缩数据源操作数,并且a、b、c、d、e、f、g和h标识从最低到最高数据元素位置排序的第一紧缩数据源操作数和第二紧缩数据源操作数中的紧缩数据元素位置。

23.如示例17的非暂态机器可读介质,其中对多个第一有符号结果值求和包括:执行操作(s1h*s2h)+(s1g*s2g)+(s1f*s2f)+(s1e*s2e)并且执行操作(s1d*s2d)+(s1c*s2c)+(s1b*s2b)+(s1a*s2a)以生成一个或多个第二有符号结果值。

24.如示例17的非暂态机器可读介质,进一步包括,响应于检测到一个或多个第三有符号结果值的值高于阈值,将最大值存储在目的地操作数的对应的位置中。

详细的示例性系统、处理器和仿真

本文详述了用于执行上文描述的指令的硬件、软件等的示例。例如,下文所描述的内容详述了指令执行的多个方面,包括诸如取出、解码、调度、执行、引退等之类的各种流水线级。

指令集包括一个或多个指令格式。给定指令格式定义各种字段(位的数量、位的位置)以指定将要执行的操作(操作码)以及将对其执行该操作的操作数,等等。通过指令模板(或子格式)的定义来进一步分解一些指令格式。例如,可将给定指令格式的指令模板定义为具有该指令格式的字段(所包括的字段通常按照相同顺序,但是至少一些字段具有不同的位的位置,因为较少的字段被包括)的不同子集,和/或定义为具有以不同方式进行解释的给定字段。由此,isa的每一条指令使用给定的指令格式(并且如果经定义,则按照该指令格式的指令模板中的给定的一个指令模板)来表达,并包括用于指定操作和操作数的字段。例如,示例性add(加法)指令具有特定的操作码和指令格式,该特定的指令格式包括用于指定该操作码的操作码字段和用于选择操作数(源1/目的地以及源2)的操作数字段。该add指令在指令流中出现将使得在操作数字段中具有选择特定操作数的特定的内容。

示例性指令格式

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

vex指令格式

vex编码允许指令具有多于两个的操作数,并且允许simd向量寄存器比128位长。vex前缀的使用提供了三操作数(或者更多操作数)句法。例如,先前的两操作数指令执行覆写源操作数的操作(诸如a=a+b)。vex前缀的使用使操作数能执行非破坏性操作,诸如a=b+c。

图3a图示示例性avx指令格式,包括vex前缀302、实操作码字段330、modr/m字节340、sib字节350、位移字段362以及imm8372。图3b图示来自图3a的哪些字段构成完整操作码字段374和基础操作字段341。图3c图示来自图3a的哪些字段构成寄存器索引字段344。

vex前缀(字节0-2)302以三字节形式进行编码。第一字节是格式字段390(vex字节0,位[7:0]),该格式字段390包含明确的c4字节值(用于区分c4指令格式的唯一值)。第二和第三字节(vex字节1和2)包括提供专用能力的若干位字段。具体地,rex字段305(vex字节1,位[7-5])由vex.r位字段(vex字节1,位[7]–r)、vex.x位字段(vex字节1,位[6]–x)以及vex.b位字段(vex字节1,位[5]–b)组成。这些指令的其他字段对如在本领域中已知的寄存器索引的较低三个位(rrr、xxx以及bbb)进行编码,由此可通过增加vex.r、vex.x以及vex.b来形成rrrr、xxxx以及bbbb。操作码映射字段315(vex字节1,位[4:0]–mmmmm)包括对隐含的前导操作码字节进行编码的内容。w字段364(vex字节2,位[7]–w)由记号vex.w表示,并且提供取决于该指令而不同的功能。vex.vvvv320(vex字节2,位[6:3]-vvvv)的作用可包括如下:1)vex.vvvv对第一源寄存器操作数编码,且对具有两个或更多个源操作数的指令有效,该第一源寄存器操作数以反转(1补码)形式被指定;2)vex.vvvv对目的地寄存器操作数编码,该目的地寄存器操作数针对某些向量位移以1补码的形式被指定;或者3)vex.vvvv不对任何操作数编码,保留该字段,并且该字段应当包含1111b。如果vex.l368尺寸字段(vex字节2,位[2]-l)=0,则它指示128位向量;如果vex.l=1,则它指示256位向量。前缀编码字段325(vex字节2,位[1:0]-pp)提供用于基础操作字段341的附加位。

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

modr/m字段340(字节4)包括mod字段342(位[7-6])、reg字段344(位[5-3])、以及r/m字段346(位[2-0])。reg字段344的作用可包括如下:对目的地寄存器操作数或源寄存器操作数(rrrr中的rrr)进行编码;或者被视为操作码扩展且不用于对任何指令操作数进行编码。r/m字段346的作用可包括如下:对引用存储器地址的指令操作数进行编码;或者对目的地寄存器操作数或源寄存器操作数进行编码。

比例、索引、基址(sib)-比例字段350(字节5)的内容包括用于存储器地址生成的ss352(位[7-6])。先前已经针对寄存器索引xxxx和bbbb参考了sib.xxx354(位[5-3])和sib.bbb356(位[2-0])的内容。

位移字段362和立即数字段(imm8)372包含数据。

示例性寄存器架构

图4是根据本发明的一个实施例的寄存器架构400的框图。在所图示的实施例中,有32个各自512位宽的向量寄存器410;这些寄存器被引用为zmm0到zmm31。较低的16个zmm寄存器的较低阶256个位覆盖(overlay)在寄存器ymm0-15上。较低的16个zmm寄存器的较低阶128个位(ymm寄存器的较低阶128个位)覆盖在寄存器xmm0-15上。

通用寄存器425——在所示出的实施例中,有十六个64位通用寄存器,这些寄存器与现有的x86寻址模式一起使用以对存储器操作数寻址。这些寄存器通过名称rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp以及r8到r15来引用。

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

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

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

处理器核能以不同方式、出于不同的目的、在不同的处理器中实现。例如,此类核的实现可以包括:1)旨在用于通用计算的通用有序核;2)旨在用于通用计算的高性能通用乱序核;3)旨在主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现可包括:1)cpu,其包括旨在用于通用计算的一个或多个通用有序核和/或旨在用于通用计算的一个或多个通用乱序核;以及2)协处理器,其包括旨在主要用于图形和/或科学(吞吐量)的一个或多个专用核。此类不同的处理器导致不同的计算机系统架构,这些计算机系统架构可包括:1)在与cpu分开的芯片上的协处理器;2)在与cpu相同的封装中但在分开的管芯上的协处理器;3)与cpu在相同管芯上的协处理器(在该情况下,此类协处理器有时被称为专用逻辑或被称为专用核,该专用逻辑诸如,集成图形和/或科学(吞吐量)逻辑);以及4)芯片上系统,其可以将所描述的cpu(有时被称为(多个)应用核或(多个)应用处理器)、以上描述的协处理器和附加功能包括在同一管芯上。接着描述示例性核架构,随后描述示例性处理器和计算机架构。本文中详述了包括示例性核、处理器等的电路(单元)。

示例性核架构

有序和乱序核框图

图5a是图示根据本发明的各实施例的示例性有序流水线和示例性的寄存器重命名的乱序发布/执行流水线的框图。图5b是示出根据本发明的各实施例的要包括在处理器中的有序架构核的示例性实施例和示例性的寄存器重命名的乱序发布/执行架构核的框图。图5a-图5b中的实线框图示有序流水线和有序核,而虚线框的任选增加图示寄存器重命名的、乱序发布/执行流水线和核。考虑到有序方面是乱序方面的子集,将描述乱序方面。

在图5a中,处理器流水线500包括取出级502、长度解码级504、解码级506、分配级508、重命名级510、调度(也被称为分派或发布)级512、寄存器读取/存储器读取级514、执行级516、写回/存储器写入级518、异常处置级522和提交级524。

图5b示出处理器核590,该处理器核590包括前端单元530,该前端单元530耦合到执行引擎单元550,并且前端单元530和执行引擎单元550两者都耦合到存储器单元570。核590可以是精简指令集计算(risc)核、复杂指令集计算(cisc)核、超长指令字(vliw)核、或混合或替代的核类型。作为又一选项,核590可以是专用核,诸如例如,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(gpgpu)核、图形核,等等。

前端单元530包括分支预测单元532,该分支预测单元532耦合到指令高速缓存单元534,该指令高速缓存单元534耦合到指令转换后备缓冲器(tlb)536,该指令转换后备缓冲器536耦合到指令取出单元538,该指令取出单元538耦合到解码单元540。解码单元540(或解码器)可对指令解码,并且生成从原始指令解码出的、或以其他方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出。解码单元540可使用各种不同的机制来实现。合适机制的示例包括但不限于,查找表、硬件实现、可编程逻辑阵列(pla)、微代码只读存储器(rom)等。在一个实施例中,核590包括存储用于某些宏指令的微代码的微代码rom或其他介质(例如,在解码单元540中,或以其他方式在前端单元530内)。解码单元540耦合到执行引擎单元550中的重命名/分配器单元552。

执行引擎单元550包括重命名/分配器单元552,该重命名/分配器单元552耦合到引退单元554和一个或多个调度器单元的集合556。(多个)调度器单元556表示任何数量的不同调度器,包括预留站、中央指令窗等。(多个)调度器单元556耦合到(多个)物理寄存器堆单元558。(多个)物理寄存器堆单元558中的每一个物理寄存器堆单元表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一种或多种不同的数据类型,诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点,状态(例如,作为要执行的下一条指令的地址的指令指针)等等。在一个实施例中,(多个)物理寄存器堆单元558包括向量寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器和通用寄存器。(多个)物理寄存器堆单元558由引退单元554重叠,以图示可实现寄存器重命名和乱序执行的各种方式(例如,使用(多个)重排序缓冲器和(多个)引退寄存器堆;使用(多个)未来文件、(多个)历史缓冲器、(多个)引退寄存器堆;使用寄存器映射和寄存器池,等等)。引退单元554和(多个)物理寄存器堆单元558耦合到(多个)执行集群560。(多个)执行集群560包括一个或多个执行单元的集合562以及一个或多个存储器访问单元的集合564。执行单元562可执行各种操作(例如,移位、加法、减法、乘法)并可对各种数据类型(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但是其他实施例可包括仅一个执行单元或全都执行所有功能的多个执行单元。(多个)调度器单元556、(多个)物理寄存器堆单元558和(多个)执行集群560示出为可能有多个,因为某些实施例为某些类型的数据/操作创建分开的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线,和/或各自具有其自身的调度器单元、(多个)物理寄存器堆单元和/或执行集群的存储器访问流水线——并且在分开的存储器访问流水线的情况下,实现其中仅该流水线的执行集群具有(多个)存储器访问单元564的某些实施例)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以是乱序发布/执行,并且其余流水线可以是有序的。

存储器访问单元的集合564耦合到存储器单元570,该存储器单元570包括数据tlb单元572,该数据tlb单元572耦合到数据高速缓存单元574,该数据高速缓存单元574耦合到第二级(l2)高速缓存单元576。在一个示例性实施例中,存储器访问单元564可包括加载单元、存储地址单元和存储数据单元,其中的每一个均耦合到存储器单元570中的数据tlb单元572。指令高速缓存单元534还耦合到存储器单元570中的第二级(l2)高速缓存单元576。l2高速缓存单元576耦合到一个或多个其他级别的高速缓存,并最终耦合到主存储器。

作为示例,示例性寄存器重命名的乱序发布/执行核架构可如下所述地实现流水线500:1)指令取出538执行取出级502和长度解码级504;2)解码单元540执行解码级506;3)重命名/分配器单元552执行分配级508和重命名级510;4)(多个)调度器单元556执行调度级512;5)(多个)物理寄存器堆单元558和存储器单元570执行寄存器读取/存储器读取级514;执行集群560执行执行级516;6)存储器单元570和(多个)物理寄存器堆单元558执行写回/存储器写入级518;7)各单元可牵涉到异常处置级522;以及8)引退单元554和(多个)物理寄存器堆单元558执行提交级524。

核590可支持一个或多个指令集(例如,x86指令集(具有已与较新版本一起添加的一些扩展);加利福尼亚州桑尼维尔市的mips技术公司的mips指令集;加利福尼亚州桑尼维尔市的arm控股公司的arm指令集(具有诸如neon的任选的附加扩展)),其中包括本文中描述的(多条)指令。在一个实施例中,核590包括用于支持紧缩数据指令集扩展(例如,avx1、avx2)的逻辑,由此允许使用紧缩数据来执行由许多多媒体应用使用的操作。

应当理解,核可支持多线程化(执行两个或更多个并行的操作或线程的集合),并且可以按各种方式来完成该多线程化,各种方式包括时分多线程化、同时多线程化(其中单个物理核为物理核正在同时多线程化的线程中的每一个线程提供逻辑核)、或其组合(例如,时分取出和解码以及此后的诸如超线程化技术中的同时多线程化)。

尽管在乱序执行的上下文中描述了寄存器重命名,但应当理解,可以在有序架构中使用寄存器重命名。尽管所图示的处理器的实施例还包括分开的指令和数据高速缓存单元534/574以及共享的l2高速缓存单元576,但是替代实施例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如,第一级(l1)内部高速缓存或多个级别的内部高速缓存。在一些实施例中,该系统可包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。或者,所有高速缓存都可以在核和/或处理器的外部。

具体的示例性有序核架构

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

图6a是根据本发明的实施例的单个处理器核以及它至管芯上互连网络602的连接及其第二级(l2)高速缓存的本地子集604的框图。在一个实施例中,指令解码器600支持具有紧缩数据指令集扩展的x86指令集。l1高速缓存606允许对进入标量和向量单元中的、对高速缓存存储器的低等待时间访问。尽管在一个实施例中(为了简化设计),标量单元608和向量单元610使用分开的寄存器集合(分别为标量寄存器612和向量寄存器614),并且在这些寄存器之间传输的数据被写入到存储器,并随后从第一级(l1)高速缓存606读回,但是本发明的替代实施例可以使用不同的方法(例如,使用单个寄存器集合或包括允许数据在这两个寄存器堆之间传输而无需被写入和读回的通信路径)。

l2高速缓存的本地子集604是全局l2高速缓存的一部分,该全局l2高速缓存被划分成多个分开的本地子集,每个处理器核一个本地子集。每个处理器核具有到其自身的l2高速缓存的本地子集604的直接访问路径。由处理器核读取的数据被存储在其l2高速缓存子集604中,并且可以与其他处理器核访问其自身的本地l2高速缓存子集并行地被快速访问。由处理器核写入的数据被存储在其自身的l2高速缓存子集604中,并在必要的情况下从其他子集转储清除。环形网络确保共享数据的一致性。环形网络是双向的,以允许诸如处理器核、l2高速缓存和其他逻辑块之类的代理在芯片内彼此通信。在一些实施例中,每个环形数据路径为每个方向1024位宽。

图6b是根据本发明的实施例的图6a中的处理器核的一部分的展开图。图6b包括l1高速缓存604的l1数据高速缓存606a部分,以及关于向量单元610和向量寄存器614的更多细节。具体地,向量单元610是16宽向量处理单元(vpu)(见16宽alu628),该单元执行整数、单精度浮点以及双精度浮点指令中的一个或多个。该vpu通过混合单元620支持对寄存器输入的混合,通过数值转换单元622a-b支持数值转换,并且通过复制单元624支持对存储器输入的复制。

具有集成存储器控制器和图形器件的处理器

图7是根据本发明的实施例的可具有多于一个的核、可具有集成存储器控制器、以及可具有集成图形器件的处理器700的框图。图7中的实线框图示具有单个核702a、系统代理710、一个或多个总线控制器单元的集合716的处理器700,而虚线框的任选增加图示具有多个核702a-n、系统代理单元710中的一个或多个集成存储器控制器单元的集合714以及专用逻辑708的替代处理器700。

因此,处理器700的不同实现可包括:1)cpu,其中专用逻辑708是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核),并且核702a-n是一个或多个通用核(例如,通用有序核、通用乱序核、这两者的组合);2)协处理器,其中核702a-n是旨在主要用于图形和/或科学(吞吐量)的大量专用核;以及3)协处理器,其中核702a-n是大量通用有序核。因此,处理器700可以是通用处理器、协处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、gpgpu(通用图形处理单元)、高吞吐量的集成众核(mic)协处理器(包括30个或更多核)、嵌入式处理器,等等。该处理器可以被实现在一个或多个芯片上。处理器700可以是一个或多个基板的一部分,和/或可使用多种工艺技术(诸如例如,bicmos、cmos、或nmos)中的任何技术被实现在一个或多个基板上。

存储器层次结构包括核内的一个或多个高速缓存级别704a-n、一个或多个共享高速缓存单元的集合706、以及耦合到集成存储器控制器单元的集合714的外部存储器(未示出)。共享高速缓存单元的集合706可包括一个或多个中间级别的高速缓存,诸如,第二级(l2)、第三级(l3)、第四级(l4)或其他级别的高速缓存、末级高速缓存(llc)和/或以上各项的组合。虽然在一个实施例中,基于环的互连单元712将集成图形逻辑708、共享高速缓存单元的集合706以及系统代理单元710/(多个)集成存储器控制器单元714互连,但是替代实施例可使用任何数量的公知技术来互连此类单元。在一个实施例中,在一个或多个高速缓存单元706与核702a-n之间维持一致性。

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

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

示例性计算机架构

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

现在参考图8,所示出的是根据本发明一个实施例的系统800的框图。系统800可以包括一个或多个处理器810、815,这些处理器耦合到控制器中枢820。在一个实施例中,控制器中枢820包括图形存储器控制器中枢(gmch)890和输入/输出中枢(ioh)850(其可以在分开的芯片上);gmch890包括存储器和图形控制器,存储器840和协处理器845耦合到该存储器和图形控制器;ioh850将输入/输出(i/o)设备860耦合到gmch890。或者,存储器和图形控制器中的一个或这两者被集成在(如本文中所描述的)处理器内,存储器840和协处理器845直接耦合到处理器810,并且控制器中枢820与ioh850处于单个芯片中。

附加的处理器815的任选性在图8中通过虚线来表示。每一处理器810、815可包括本文中描述的处理核中的一个或多个,并且可以是处理器700的某一版本。

存储器840可以是例如动态随机存取存储器(dram)、相变存储器(pcm)或这两者的组合。对于至少一个实施例,控制器中枢820经由诸如前端总线(fsb)之类的多分支总线、点对点接口、或者类似的连接895来与(多个)处理器810、815进行通信。

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

在物理资源810、815之间可以存在包括架构、微架构、热、功耗特性等一系列品质度量方面的各种差异。

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

现在参见图9,所示出的是根据本发明的实施例的第一更具体的示例性系统900的框图。如图9中所示,多处理器系统900是点对点互连系统,并且包括经由点对点互连950耦合的第一处理器970和第二处理器980。处理器970和980中的每一个都可以是处理器700的某一版本。在本发明的一个实施例中,处理器970和980分别是处理器810和815,而协处理器938是协处理器845。在另一实施例中,处理器970和980分别是处理器810和协处理器845。

处理器970和980示出为分别包括集成存储器控制器(imc)单元972和982。处理器970还包括作为其总线控制器单元的一部分的点对点(p-p)接口976和978;类似地,第二处理器980包括p-p接口986和988。处理器970、980可以经由使用点对点(p-p)接口电路978、988的p-p接口950来交换信息。如图9中所示,imc972和982将处理器耦合到相应的存储器,即存储器932和存储器934,这些存储器可以是本地附连到相应处理器的主存储器的部分。

处理器970、980可各自经由使用点对点接口电路976、994、986、998的各个p-p接口952、954来与芯片组990交换信息。芯片组990可以任选地经由高性能接口992来与协处理器938交换信息。在一个实施例中,协处理器938是专用处理器,诸如例如,高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器,等等。

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

芯片组990可以经由接口996耦合到第一总线916。在一个实施例中,第一总线916可以是外围部件互连(pci)总线或诸如pci快速总线或另一i/o互连总线之类的总线,但是本发明的范围不限于此。

如图9中所示,各种i/o设备914可连同总线桥918一起耦合到第一总线916,该总线桥918将第一总线916耦合到第二总线920。在一个实施例中,诸如协处理器、高吞吐量mic处理器、gpgpu、加速器(诸如例如,图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列或任何其他处理器的一个或多个附加处理器915耦合到第一总线916。在一个实施例中,第二总线920可以是低引脚数(lpc)总线。在一个实施例中,各种设备可耦合到第二总线920,这些设备包括例如键盘和/或鼠标922、通信设备927以及存储单元928,该存储单元928诸如可包括指令/代码和数据930的盘驱动器或者其他大容量存储设备。此外,音频i/o924可以被耦合到第二总线920。注意,其他架构是可能的。例如,代替图9的点对点架构,系统可以实现多分支总线或其他此类架构。

现在参考图10,示出的是根据本发明的实施例的第二更具体的示例性系统1000的框图。图9和10中的类似元件使用类似的附图标记,并且从图10中省略了图9的某些方面以避免混淆图10的其他方面。

图10图示处理器970、980可分别包括集成存储器和i/o控制逻辑(“cl”)1072和1082。因此,cl1072、1082包括集成存储器控制器单元,并包括i/o控制逻辑。图10图示不仅存储器932、934耦合到cl1072、1082,而且i/o设备1014也耦合到控制逻辑1072、1082。传统i/o设备1015被耦合到芯片组990。

现在参考图11,示出的是根据本发明的实施例的soc1100的框图。图7中的类似要素使用类似的附图标记。另外,虚线框是更先进的soc上的任选的特征。在图11中,(多个)互连单元1102被耦合到:应用处理器1110,其包括一个或多个核的集合702a-n、高速缓存单元704a-n以及(多个)共享高速缓存单元706;系统代理单元710;(多个)总线控制器单元716;(多个)集成存储器控制器单元714;一个或多个协处理器的集合1120,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(sram)单元1130;直接存储器访问(dma)单元1132;以及用于耦合到一个或多个外部显示器的显示单元1140。在一个实施例中,(多个)协处理器1120包括专用处理器,诸如例如,网络或通信处理器、压缩引擎、gpgpu、高吞吐量mic处理器、或嵌入式处理器,等等。

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

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

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

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

此类机器可读存储介质可以包括但不限于通过机器或设备制造或形成的制品的非暂态、有形布置,其包括存储介质,诸如硬盘;任何其他类型的盘,包括软盘、光盘、紧致盘只读存储器(cd-rom)、可重写紧致盘(cd-rw)以及磁光盘;半导体器件,诸如,只读存储器(rom)、诸如动态随机存取存储器(dram)和静态随机存取存储器(sram)的随机存取存储器(ram)、可擦除可编程只读存储器(eprom)、闪存、电可擦除可编程只读存储器(eeprom);相变存储器(pcm);磁卡或光卡;或适于存储电子指令的任何其他类型的介质。

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

仿真(包括二进制变换、代码变形等)

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

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

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