使用写掩码将两个源操作数混合进单个目的地的系统、装置和方法转让专利

申请号 : CN201180069936.4

文献号 : CN103460182B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : J·C·三额詹B·L·托尔R·C·凡伦天J·G·韦德梅耶S·萨姆德若拉M·B·吉尔卡尔A·T·福塞斯E·乌尔德-阿迈德-瓦尔D·R·布拉德福德L·K·吴

申请人 : 英特尔公司

摘要 :

描述了用于在计算机处理器中执行混合指令的系统、装置和方法的实施例。在一些实施例中,混合指令的执行导致使用写掩码的相对应位位置作为第一和第二操作数之间的选择器来进行对第一和第二源操作数的数据元素的逐数据元素的选择,及将所选择的数据元素在目的地的相对应位置处存储进目的地。

权利要求 :

1.在计算机处理器中执行混合指令的方法,所述方法包括:提取所述混合指令,其中所述混合指令包括在多个写掩码寄存器的写掩码寄存器中的写掩码操作数、目的地操作数、第一源操作数和第二源操作数,其中所述混合指令具有用于指示合并掩码和调零掩码中的任一个的字段;

解码所提取的混合指令;

执行所解码的混合指令以使用所述写掩码操作数的相对应位位置作为所述第一和第二源操作数之间的选择器来执行对第一和第二源操作数的数据元素的逐数据元素选择;以及将所选择的数据元素在所述目的地操作数的相对应位置处存储到目的地操作数。

2.如权利要求1所述的方法,其特征在于,所述写掩码操作数仅具有16-位。

3.如权利要求1所述的方法,其特征在于,所述写掩码操作数在寄存器中且所述寄存器的仅八个最低有效位位置被用作选择器且所述数据元素的大小是64位。

4.如权利要求1所述的方法,其特征在于,所述第一源操作数是512-位寄存器且所述第二源操作数在存储器中。

5.如权利要求4所述的方法,其特征在于,还包括将所述第二源操作数的数据元素从

16-位上转换到32-位。

6.如权利要求1所述的方法,其特征在于,所述第一和第二源操作数是512-位寄存器。

7.如权利要求1所述的方法,其特征在于,其中所述数据元素的选择是对所述写掩码的每个位位置并行进行的。

8.如权利要求1所述的方法,其特征在于,还包括对所述第二源操作数的数据元素执行变换。

9.如权利要求1所述的方法,其特征在于,其中所述第二源操作数是512-位存储器位置。

10.如权利要求1所述的方法,其特征在于,所述数据元素是32-位的。

11.一种指令执行方法,所述方法包括:

接收包括第一源操作数、第二源操作数、目的地操作数和在多个写掩码寄存器的写掩码寄存器中的写掩码操作数的混合指令,其中所述混合指令具有用于指示合并掩码和调零掩码中的任一个的字段,以及响应于所述混合指令:

评估所述写掩码操作数在第一位位置处的值,

判断所述第一位位置处的值是否指示所述第一源操作数的相对应第一数据元素应被保存在所述目的地操作数的相对应第一数据元素位置或是否所述第二源操作数的相对应第一数据元素应被保存在所述目的地操作数的相对应第一数据元素位置,且将由所述第一位位置处的值所指示的所述第一数据元素存储进所述目的地操作数的所述第一数据元素位置。

12.如权利要求11所述的方法,其特征在于,还包括:

评估所述写掩码操作数在第二位位置处的值,

判断所述第二位位置处的值是否指示所述第一源操作数的相对应第二数据元素应被保存在所述目的地操作数的相对应第二数据元素位置或是否所述第二源操作数的相对应第二数据元素应被保存在所述目的地操作数的相对应第二数据元素位置,且将由所述第二位位置处的值所指示的所述第二数据元素存储进所述目的地操作数的所述第二数据元素位置。

13.如权利要求12所述的方法,其特征在于,还包括:

对所述写掩码操作数的所有位位置已被评估的判断指示所述混合指令的结束。

14.如权利要求11所述的方法,其特征在于,所述写掩码操作数包括16-位。

15.如权利要求11所述的方法,其特征在于,所述写掩码操作数在寄存器中且所述寄存器中的仅八个最低有效位位置被用作选择器且所述数据元素的大小是64位。

16.如权利要求11所述的方法,其特征在于,所述第一源操作数是512-位寄存器而所述第二源操作数在存储器中。

17.如权利要求11所述的方法,其特征在于,还包括将所述第二源操作数的数据元素从

16-位上转换到32-的。

18.如权利要求11所述的方法,其特征在于,所述第一源操作数和第二源操作数是512-位寄存器。

19.如权利要求11所述的方法,其特征在于,还包括在所述判断之前调和所述第一源操作数的所述第一数据元素。

20.如权利要求11所述的方法,其特征在于,其中所述第二源操作数是512-位存储器位置。

21.一种指令处理装置,包括:

硬件解码器,被配置为用于解码混合指令,其中所述混合指令具有用于存储在多个写掩码寄存器的写掩码寄存器中的写掩码操作数、目的地操作数、第一源操作数和第二源操作数;以及执行单元,被配置为用于响应于所述混合指令使用所述写掩码操作数的相对应位位置作为所述第一和第二源操作数之间的选择器来执行对第一和第二源操作数的数据元素的逐数据元素选择并将所选择的数据元素存储进所述目的地操作数的相对应位置,其中所述混合指令具有用于指示调零写掩码的字段,在调零写掩码中,当相应的掩码位具有零值时,所述目的地操作数中的数据元素被调零。

22.一种指令处理装置,包括:

多个写掩码寄存器,包括用于存储写掩码操作数的第一写掩码寄存器;

硬件解码器,被配置为用于解码混合指令,其中所述混合指令具有写掩码操作数、目的地操作数、第一源操作数和第二源操作数,其中所述混合指令具有用于指示合并掩码和调零掩码中的任一个的字段;以及执行单元,被配置为用于响应于所述混合指令,向多个数据元素广播所述第二源操作数的数据元素,并且使用所述写掩码操作数的相对应位位置作为选择器来执行对第一源操作数的数据元素和所述多个所广播数据元素的逐数据元素选择,并将所选择的数据元素存储进所述目的地操作数的相对应位置。

说明书 :

使用写掩码将两个源操作数混合进单个目的地的系统、装置

和方法

技术领域

[0001] 本发明的领域一般涉及计算机处理器架构,以及更具体地涉及当被执行时导致特定结果的指令。

背景技术

[0002] 基于控制流信息合并来自向量源的数据是基于向量的架构的普遍问题。例如,为了将以下代码向量化,需要:1)生成指示a[i]>0是否为真的布尔向量的方法和2)基于该布尔向量从两个源(A[i]或B[i])中选择任一值并将内容写入不同目的地(C[i])的方法。
[0003]

附图说明

[0004] 作为示例而非限制,在附图中示出了本发明,附图中相似的附图标记指示相似的元素,附图中:
[0005] 图1示出了混合指令执行的示例。
[0006] 图2示出了混合指令执行的另一个示例。
[0007] 图3示出了混合指令的伪代码的示例。
[0008] 图4示出了在处理器中使用混合指令的实施例。
[0009] 图5示出了用于处理混合指令的方法的实施例。
[0010] 图6示出了用于处理混合指令的方法的实施例。
[0011] 图7A是示出根据本发明实施例的通用向量友好指令格式和其A类指令模板的框图。
[0012] 图7B是示出根据本发明实施例的通用向量友好指令格式和其B类指令模板的框图。
[0013] 图8A-C示出了根据本发明实施例的示例性特定向量友好指令格式。
[0014] 图9是根据本发明一实施例的寄存器架构的框图。
[0015] 图10A是根据本发明实施例的单个CPU核以及它与管芯上互连网络的连接和它的2级(L2)高速缓存本地子集的框图。
[0016] 图10B是根据本发明实施例的图10A中的CPU核的一部分的分解图。
[0017] 图11是示出根据本发明实施例的示例性乱序架构的框图。
[0018] 图12是根据本发明一实施例的系统的框图。
[0019] 图13是根据本发明实施例的第二系统的框图。
[0020] 图14是根据本发明实施例的第三系统的框图。
[0021] 图15是根据本发明实施例的SoC的框图。
[0022] 图16是根据本发明实施例的具有集成存储器控制器和图形器件的单核处理器和多核处理器的框图。
[0023] 图17是对比根据本发明实施例使用软件指令转换器将源指令集的二进制指令转换成目标指令集的二进制指令的框图。

具体实施方式

[0024] 在以下描述中阐述了众多具体细节。然而应理解,可以在没有这些具体细节的情况下实践本发明的实施例。在其它实例中,为了不妨碍对本描述的理解,没有详细示出公知的电路、结构和技术。
[0025] 说明书中对“一实施例”、“实施例”、“示例实施例”等等的引用指示所描述的实施例可以包括特定特征、结构或特性,但是,并不一定每个实施例都包括该特定特征、结构或特性。此外,这些短语不一定指同一实施例。此外,当结合实施例来描述特定特征、结构或特性时,不管是否被明确描述,结合其他实施例来实现该特征、结构或特性被认为是在本领域技术人员的知识范围内。
[0026] 混合
[0027] 下面是通常称为“混合”的指令的实施例,以及可以用来执行在包括背景技术中所描述过的数个不同区域中有益的这种指令的系统、架构、指令格式等等的实施例。混合指令的执行有效地应付之前所描述的问题的第二部分,因为它占用包含来自元素向量的比较结果的真/假位的一个掩码寄存器,并且基于这些位,它能够在两个不同的向量源的元素之间选择。换言之,混合指令的执行导致处理器通过使用写掩码作为这些源之间的选择器,执行两个源之间逐个元素的混合。结果被写入目的地寄存器。在一些实施例中,源中的至少一个是寄存器,诸如128-、256-、512-位向量寄存器等。在一些实施例中,源操作数中的至少一个是与起始存储器位置相关联的数据元素的集合。另外,在一些实施例中,一个或两个源的数据元素在任何混合之前经过诸如调和(swizzle)、广播、转换等数据变换(本文将讨论示例)。稍后将详述写掩码寄存器的示例。
[0028] 这个指令的示例性格式为“VBLENDPS zmm1{k1},zmm2,zmm3/m512,offset”,其中操作数zmm1、zmm2和zmm3是向量寄存器(诸如128-、256-、512-位寄存器等),k1是写掩码操作数(诸如那些稍后详述的16-位寄存器),且m512是在寄存器中或作为即值存储的存储器操作数。ZMM1是目的地操作数且ZMM2和ZMM3/m512是源操作数。如果有的话,偏移(offset)用来从寄存器中的值或即值确定存储器地址。从存储器检索的任何内容都是从存储器地址开始的连续位的集合,且可以是依赖于目的地寄存器的大小的数个大小(128-、256-、512-位等)中的一个——该大小通常是与目的地寄存器相同的大小。在一些实施例中,写掩码也有不同的大小(8位、32位等)。另外,在一些实施例中,如以下将详述,不是写掩码位的所有位都被指令利用。VBLENDMPS是指令的操作码。通常每个操作数都在指令中明确地定义。数据元素的大小可以在指令的“前缀”中定义,诸如通过使用如稍后描述的类似“W”的数据粒度位的指示。在大多数实施例中,W指示每个数据元素是32位或64位。如果数据元素的大小是32位且源的大小是512位,那么每个源有十六(16)个数据元素。
[0029] 图1中示出了混合指令执行的示例。在此示例中,有两个各自有16个数据元素的源。在大多数情况下,这些源中的一个是寄存器(就此示例, 源1作为512-位寄存器(诸如有16个32位数据元素的ZMM寄存器)来对待,然而也可以使用其它数据元素和寄存器大小,诸如XMM和YMM寄存器和16-或64-位数据元素)。另一源是寄存器或存储器位置(在此图示中源
2是另一源)。如果第二源是存储器位置,那么在大多数实施例中它在源的任何混合之前被放入临时寄存器中。此外,存储器位置的数据元素可以在放入临时寄存器之前经历数据变换。所示的掩码模式是0x5555。
[0030] 在此示例中,对有“1”值的写掩码的每一个位位置,这指示第一源(源1)的相对应数据元素应被写入目的地寄存器的相对应数据元素位置。因此,源1的第一、三、五等等位位置(A0、A2、A4等)被写入目的地的第一、三、五等等数据元素位置。当写掩码有“0”值时,第二源的数据元素被写入目的地的相对应数据元素位置。当然,依据实现,“1”和“0”的使用可以翻转。此外,尽管此图和以上描述考虑相应的第一位置为最低有效位置,在一些实施例中第一位置是最高有效位置。
[0031] 图2示出了混合指令执行的另一个示例。本图与图1的区别是每个源只有8个数据元素(例如,各源是每个有8个64-位数据元素的512-位寄存器)。在此情形下,对于16-位写掩码,不是该写掩码的所有位都被使用。在此实例中只使用了最低有效位,因为每个源没有16个数据元素要合并。
[0032] 图3示出了混合指令的伪代码的示例。
[0033] 图4示出了在处理器中使用混合指令的实施例。在401,提取具有目的地操作数、两个源操作数和偏移(如果有的话)的混合指令。在一些实施例中,目的地操作数是512-位向量寄存器(诸如ZMM1)且写掩码是16-位寄存器(诸如稍后详述的“k”写掩码寄存器)。源操作数中的至少一个可以是存储器源操作数。
[0034] 在403,将混合指令解码。依据指令的格式,可以在这个阶段解释各种数据,诸如如果将有数据变换,对哪个寄存器写入和检索、访问什么存储器地址等。
[0035] 在405,检索/读取源操作数的值。如果两个源都是寄存器则读取这些寄存器。如果源操作数中的一个或两个是存储器操作数则检索与该操作数相关联的数据元素。在一些实施例中,将来自存储器的数据元素存储到 临时寄存器中。
[0036] 如果要执行任何数据元素变换(诸如稍后详述的上转换、广播、调和等),可以在407执行。例如,可以将来自存储器的16-位数据元素上转换为32-位数据元素,或者可以将数据元素从一种模式调和为另一种模式(例如,XYZW XYZW XYZW……XYZW到XXXXXXXX YYYYYYYY ZZZZZZZZ WWWWWWWW)。
[0037] 在409,由执行资源执行混合指令(或包括诸如微操作的这种指令的操作)。此执行通过使用写掩码作为这些源之间的选择器导致在两个源之间的逐个元素的混合。例如,基于写掩码的相对应位的值,选择第一和第二源的数据元素。在图1和2中示出了这种混合的示例。
[0038] 在411,将源操作数的适当数据元素存储进目的地寄存器。同样,在图1和图2中示出了其示例。尽管409和411被分开示出,在一些实施例中它们作为指令执行的一部分一起执行。
[0039] 尽管以上是在一种类型的执行环境中示出的,可以很容易地将其修改为适合其它环境,诸如详述的按序和失序环境。
[0040] 图5示出了用于处理混合指令的方法的实施例。在此实施例中假定操作401-407的一些,如果不是全部的话,已在之前执行了,然而为了不妨碍下面呈现的细节未示出它们。例如,未示出提取和解码,也没有示出操作数(源的和写掩码的)检索。
[0041] 在501,评估写掩码的第一位位置处的值。例如,确定写掩码k1[0]处的值。在一些实施例中,第一位位置是最低有效位位置,而在其它实施例中它是最高有效位位置。余下讨论将描述将第一位位置用作最低有效,然而本领域普通技术人员应容易理解如果它是最高有效时会做出的改变。
[0042] 在503,做出关于写掩码的这一位位置处的值是否指示第一源的相对应数据元素(第一数据元素)应保存在目的地的相对应位置处的判断。如果第一位位置指示第一源的第一位置中的数据元素应存储在目的地寄存器的第一位置中,则在507对它进行存储。回头看图1,掩码指示这是该情况且第一源的第一数据元素存储在目的地寄存器的第一数据元素位置中。
[0043] 如果第一位位置指示第一源的第一位置中的数据元素不应存储在目 的地寄存器的第一位置中,则在507存储第二源的第一位置中的数据元素。回头看图1,掩码指示这不是该情况。
[0044] 在509,做出关于所评估的写掩码位置是否是写掩码的最后位置或目的地的所有数据元素位置是否都已被填充的判断。如果是真,则操作结束。如果不是真,则在511评估写掩码中的下一位位置以确定其值。
[0045] 在503,做出关于写掩码的该后续位位置处的值是否指示第一源的相对应数据元素(第二数据元素)应保存在目的地的相对应位置处的判断。对此进行重复直到已穷尽了掩码中的所有位或者已填充了目的地的所有数据元素。当例如数据元素大小为64位、目的地为512位且写掩码有16位时,后一情况可能发生。在那个实例中,写掩码的仅8位是必需的,但混合指令应已完成。换言之,要使用的写掩码的位数量依赖于写掩码的大小和每个源中的数据元素的数量。
[0046] 图6示出了用于处理混合指令的方法的实施例。在此实施例中,假定操作401-407中的一些,如果不是全部的话,已在601之前执行了。在601,对将要使用的写掩码的每一位位置,判断那个位位置处的值是否指示第一源的相对应数据元素应保存在目的地寄存器的相对应位置处。
[0047] 对指示第一源的数据元素应保存在目的地寄存器中的写掩码的每一位位置,在605将它写入适当的位置。对指示第二源的数据元素应保存在目的地寄存器中的写掩码的每一位位置,在603将它写入适当的位置。在一些实施例中,并行执行603和605。
[0048] 尽管图5和图6讨论了基于第一源做出决定,但是可以使用任一个源进行判断。此外,应清楚理解当一个源的数据元素将不被写入时,另一源的相对应数据元素将被写入目的地寄存器。
[0049] 英特尔公司的AVX介绍了BLEND向量指令的其它版本,有基于即值的(VBLENDPS)或基于第三向量源的元素的符号位的(VBLENDVPS)。第一个的缺点是混合信息为静态,而第二个的缺点是动态混合信息来自其它向量寄存器,导致额外的寄存器读压力、存储浪费(每32位中仅1位对布尔表示是实际有用的)和额外的开销(由于预测信息需要被映射进实际数据向量寄存器)。VBLENDMPS介绍了使用包含在实际掩码寄存器中的 预测信息将来自两个源的值混合的概念。这有以下优点:允许可变混合、允许使用解耦算术和预测逻辑组件进行混合(算术在向量上执行,预测在掩码上执行;掩码用来基于控制流信息混合算术数据)、减轻向量寄存器文件上的读取压力(掩码读取更便宜且是在分开的寄存器文件上)并避免浪费存储(在向量上存储布尔值是非常低效的,因为对每个元素只有1位是实际需要的——在32-位/64-位中)。
[0050] 以上详述的指令(多个指令)实施例可以体现在下面详述的“通用向量友好指令格式”中。在其它实施例中,没有利用这样的格式而使用了另一指令格式,然而下面关于写掩码寄存器、各种数据变换(调和、广播等)、寻找等的描述可一般地应用于关于以上指令实施例的描述。此外,下面详述了示例性系统、架构和流水线。以上指令实施例可以在这样的系统、架构和流水线上执行,但不限于详述的这些。
[0051] 向量友好指令格式是适合向量指令的指令格式(例如,存在针对向量操作的某些字段)。尽管实施例被描述为其中向量和标量操作都通过向量友好指令格式支持,但替换实施例仅对向量操作使用向量友好的指令格式。
[0052] 示例性通用向量友好指令格式——图7A-B
[0053] 图7A-B是示出根据本发明实施例的通用向量友好指令格式和其指令模板的框图。图7A是示出根据本发明实施例的通用向量友好指令格式和其A类指令模板的框图;而图7B是示出根据本发明实施例的通用向量友好指令格式和其B类指令模板的框图。具体而言,对通用向量友好指令格式700定义了A类和B类指令模板,二者都包括无存储器访问705指令模板和存储器访问720指令模板。向量友好指令格式的上下文中的术语“通用”是指不绑定到任何特定指令集的指令格式。尽管实施例将被描述为其中向量友好指令格式的指令在源自寄存器(无存储器访问705指令模板)或者寄存器/存储器(存储器访问720指令模板)的向量上操作,本发明的替换实施例也可以仅支持这其中的一种。而且,尽管本发明的实施例将被描述为其中存在向量指令格式的加载和存储指令,替换实施例可以替代地或附加地具有将向量移入和移出寄存器(例如,从存储器到寄存器、从寄存器 到存储器、在寄存器之间)的不同指令格式的指令。另外,尽管本发明的实施例将被描述为支持两类指令模板,替换实施例也可以只支持这些中的一个或支持多于两类。
[0054] 尽管本发明的实施例将被描述为其中向量友好指令格式支持以下:具有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字节)数据元素宽度)的更多、更少和/或不同的向量操作数大小(例如756字节向量操作数)。
[0055] 图7A中的A类指令模板包括:1)在无存储器访问705指令模板中示出了无存储器访问、完全舍入控制类型操作710指令模板,和无存储器访问、数据变换类型操作715指令模板;和2)在存储器访问720指令模板中示出了存储器访问、临时725指令模板,和存储器访问、非临时730指令模板。图7B中的B类指令模板包括:1)在无存储器访问705指令模板中示出了无存储器访问、写掩码控制、部分舍入控制类型操作712指令模板,和无存储器访问、写掩码控制、vsize类型操作717指令模板;和2)在存储器访问720指令模板中示出了存储器访问、写掩码控制727指令模板。
[0056] 格式
[0057] 通用向量友好指令格式700包括下面按图7A-B中示出的顺序列出的以下字段。
[0058] 格式字段740——这个字段中的特定值(指令格式标识符值)唯一地标识向量友好指令格式,及由此向量友好指令格式的指令在指令流中的 出现。因此,格式字段740的内容将第一指令格式的指令的出现与其它指令格式的指令的出现进行区分,由此允许将向量友好指令格式引入有其它指令格式的指令集。故而,这个字段在对于只有通用向量友好指令格式的指令集而言并不需要的意义上是可选的。
[0059] 基本操作字段742——其内容区分不同的基本操作。如本文稍后详述的,基本操作字段742可以包括操作码字段和/或是操作码字段的一部分。
[0060] 寄存器索引(index)字段744——直接地或通过地址生成,其内容指定源和目的地操作数的位置,如果它们在寄存器或存储器中。这些包括足够数量的位以从P×Q(例如32×912)个寄存器文件中选择N个寄存器。尽管在一实施例中N可以是最多达三个源和一个目的地寄存器,替换实施例也可以支持更多或更少的源和目的地寄存器(例如,可以支持多达两个源,其中这些源中的一个还充当目的地,可以支持多达三个源,其中这些源中的一个还充当目的地,可以支持多达两个源和一个目的地)。尽管在一实施例中P=32,替换实施例也可以支持更多或更少的寄存器(例如16个)。尽管在一实施例中Q=912位,替换实施例也可以支持更多或更少的位(例如,128、1024位)。
[0061] 修改器字段746——其内容区分指定存储器访问的通用向量指令格式的指令的出现与那些不指定存储器访问的通用向量指令格式的指令的出现;即在无存储器访问705指令模板和存储器访问720指令模板之间进行区分。存储器访问操作对存储器分层结构进行读取和/或写入(在一些情况下使用寄存器中的值指定源和/或目的地地址),无存储器访问操作则并不如此(例如源和目的地都是寄存器)。尽管在一实施例中这个字段还在三种不同的执行存储器地址计算的方式中选择,替换实施例也可以支持更多、更少或不同的执行存储器地址计算的方式。
[0062] 扩充操作字段750——其内容区分各种不同操作中的哪一个将在除基本操作之外被执行。这个字段是针对上下文的。在本发明的一实施例中,这个字段分成类字段768、α(alpha)字段752和β(beta)字段754。扩充操作字段允许公共操作组在单个指令而不是2、3或4个指令中执行。下面是使用扩充字段750来减少所要求的指令数量的指令(本文稍后将更详尽 地描述其术语)的一些示例。
[0063]
[0064] 其中[rax]是将用于地址生成的基址(base)指针,且其中{}指示由数据操纵字段(本文稍后将更详尽描述)指定的转换操作。
[0065] 缩放(scale)字段760——其内容允许对用于存储器地址生成的索引字段内容的缩放(例如用于使用2缩放×索引+基址的地址生成)。
[0066] 位移(displacement)字段762A——其内容用作存储器地址生成的一部分(例如用于使用2缩放×索引+基址+位移的地址生成)。
[0067] 位移因子字段762B(注意,位移字段762A直接并置于位移因子字段762B之上指示使用了其中之一或另外一个)——其内容用作地址生成的 一部分;它指定将根据存储器访问的大小(N)进行缩放的位移因子——其中N是存储器访问中的字节数(例如用于使用2缩放×索引+基址+缩放的位移的地址生成)。忽略了冗余的低序位并因此位移因子字段的内容由存储器操作数总大小(N)相乘以便生成将在计算有效地址中使用的最终位移。N的值由处理器硬件在运行时基于全操作码字段774(本文稍后描述)和数据操纵字段754C来确定,如本文稍后描述。位移字段762A和位移因子字段762B在它们未用于无存储器访问705指令模板和/或不同的实施例可以仅实现这两个中之一或两个都不实现的意义上是可选的。
[0068] 数据元素宽度字段764——其内容区分将使用多个数据元素宽度中的哪一个(在一些实施例中对所有指令;在其它实施例中仅对一些指令)。这个字段在如果仅支持一个数据元素宽度和/或使用操作码的一些方面支持多个数据元素宽度则它不被需要的意义上是可选的。
[0069] 写掩码字段770——其内容每数据元素位置地控制目的地向量操作数中的数据元素位置是否反映基本操作和扩充操作的结果。A类指令模板支持合并写掩码,而B类指令模板对合并和调零写掩码都支持。在合并时,向量掩码允许目的地中的任何元素集在任何操作(由基本操作和扩充操作指定)的执行过程中免于更新;在另一实施例中,在相对应的掩码位有0时保留目的地每个元素的旧值。相比之下,在调零时向量掩码允许目的地中的任何元素集在任何操作(由基本操作和扩充操作指定)的执行过程中被调零;在一实施例中,当相对应的掩码位有0值时将目的地的元素设为0。此功能的子集是控制被执行的操作的向量长度的能力(即,从第一到最后一个正被修改元素的跨度);然而所修改的元素不必是连续的。因此,写掩码字段770允许部分向量操作,包括加载、存储、算术、逻辑等。而且,此掩码可用于故障抑制(即,通过对目的地数据元素位置进行掩码来阻止接收可以/将要导致故障的任何操作的结果——例如,假定存储器中的向量跨越页边界且第一页而非第二页会导致页故障,则如果该向量位于第一页上的所有数据元素都由写掩码进行掩码时可忽略页故障)。另外,写掩码允许包含某些类型的条件语句的“向量化循环”。尽管本发明的实施例被描述为其中写掩码字段770的内容选择多个写掩码寄存器中包含将要使 用的写掩码的一个(且因此写掩码字段770的内容间接地标识将要执行的那个掩码),替换实施例可以替代或附加地允许写掩码字段770的内容直接指定将要执行的掩码。另外,当以下发生时调零允许性能改善:1)在其目的地操作数也不是源的指令(也称为非三元指令)上使用寄存器重命名,因为在寄存器重命名流水线阶段目的地不再是隐式源(没有来自当前目的地寄存器的数据元素需要被复制到经重命名的目的地寄存器或以某种方式随操作携带,因为任何不是操作结果的数据元素(任何经掩码的数据元素)将被调零。);及2)在回写阶段的过程中,因为将要写入零。
[0070] 即值字段772——其内容允许即值的指定。这个字段在它不存在于不支持即值的通用向量友好格式的实现中且不存在于不使用即值的指令中的意义上是可选的。
[0071] 指令模板类选择
[0072] 类字段768——其内容区分不同的指令类。参考图7A-B,这个字段的内容在A类和B类指令之间选择。在图7A-B中,使用圆角正方形来指示特定值存在于字段中(例如,图7A-B中各自对类字段768的A类768A和B类768B)。
[0073] A类无存储器访问指令模板
[0074] 在A类无存储器访问705指令模板的情况下,将α字段752解释为RS字段752A,其内容区分将执行不同扩充操作类型中的哪一个(例如,舍入752A.1和数据变换752A.2分别指定用于无存储器访问、舍入类型操作710和无存储器访问、数据变换类型操作715),而β字段754区分将执行指定类型的操作中的哪一个。图7中,使用圆角框来指示存在特定值(例如,修改器字段746中的无存储器访问746A;α字段752/rs字段752A的舍入752A.1和数据变换
752A.2)。在无存储器访问705指令模板中,不存在缩放字段760、位移字段762A和位移缩放字段762B。
[0075] 无存储器访问指令模板——完全舍入控制类型操作
[0076] 在无存储器访问完全舍入控制类型操作710指令模板中,将β字段754解释为舍入控制字段754A,其内容提供静态舍入。尽管在所描述的本发明实施例中舍入控制字段754A包括抑制所有浮点异常(SAE)字段756 和舍入操作控制字段758,替换实施例也可以支持将这两个概念编码进同一字段中或只有这些概念/字段中的一个或另外一个(例如,可以只有舍入操作控制字段758)。
[0077] SAE字段756——其内容区分是否禁用异常事件报告;当SAE字段756的内容指示启用抑制时,给定指令不报告任何种类的浮点异常标志且不引起任何浮点异常处理器。
[0078] 舍入操作控制字段758——其内容区分执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入和向最近舍入)。因此,舍入操作控制字段758允许在每指令的基础上变更舍入模式,且因此在需要时特别有用。在其中处理器包括用于指定舍入模式的控制寄存器的本发明一实施例中,舍入操作控制字段750的内容优先于该寄存器值(能够选择舍入模式而不需要在这样的控制寄存器上执行保存-修改-还原是有利的)。
[0079] 无存储器访问指令模板——数据变换类型操作
[0080] 在无存储器访问数据变换类型操作715指令模板中,将β字段754解释为数据变换字段754B,其内容区分将执行多种数据变换中的哪一个(例如,无数据变换、调和、广播)。
[0081] A类存储器访问指令模板
[0082] 在A类存储器访问720指令模板的情况下,将α字段752解释为驱逐提示字段752B,其内容区分将使用驱逐提示中的哪一个(在图7A中,临时752B.1和非临时752B.2分别指定用于存储器访问、临时725指令模板和存储器访问、非临时730指令模板),而将β字段754解释为数据操纵字段754C,其内容区分将执行数据操纵操作(也称为原语)中的哪一个(例如,无操纵、广播、源的上转换和目的地的下转换)。存储器访问720指令模板包括缩放字段760和可选地包括位移字段762A或位移缩放字段762B。
[0083] 向量存储器指令(Vector Memory Instruction)执行在转换支持下从存储器加载向量和向存储器存储向量。如同常规向量指令,向量存储器指令以逐数据元素的方式从/向存储器传输数据,其中实际传输的元素由被选作写掩码的向量掩码的内容规定。在图7A中,使用圆角正方形来指示特定 值存在于字段中(例如,修改器字段746的存储器访问746B、α字段752/驱逐提示字段752B的临时752B.1和非临时752B.2)。
[0084] 存储器访问指令模板——临时
[0085] 临时数据是可能足够迅速地重用从而得益于高速缓存的数据。然而这是一提示且不同的处理器可以以不同的方式实现它,包括完全忽略该提示。
[0086] 存储器访问指令模板——非临时
[0087] 非临时数据是不大可能足够迅速地重用从而得益于1级高速缓存中的高速缓存且应被给予驱逐优先权的数据。然而这是一提示且不同的处理器可以以不同的方式实现它,包括完全忽略该提示。
[0088] B类指令模板
[0089] 在B类指令模板的情况下,将α字段752解释为写掩码控制(Z)字段752C,其内容区分由写掩码字段770控制的写掩码应是合并还是调零。
[0090] B类无存储器访问指令模板
[0091] 在B类无存储器访问705指令模板的情况下,将β字段754的一部分解释为RL字段757A,其内容区分将执行不同的扩充操作类型中的哪一个(例如,舍入757A.1和向量长度(VSIZE)757A.2分别指定用于无存储器访问、写掩码控制、部分舍入控制类型操作712指令模板和无存储器访问、写掩码控制、VSIZE类型操作717指令模板),而β字段754的其余部分区分将执行指定类型的操作中的哪一个。在图7中,使用圆角框来指示存在特定值(例如,修改器字段746中的无存储器访问746A、RL字段757A的舍入757A.1和VSIZE757A.2)。在无存储器访问705指令模板中,不存在缩放字段760、位移字段762A和位移缩放字段762B。
[0092] 无存储器访问指令模板——写掩码控制、部分舍入控制类型操作
[0093] 在无存储器访问、写掩码控制、部分舍入控制类型操作710指令模板中,将β字段754的其余部分解释为舍入操作字段759A并禁用了异常事件报告(给定指令不报告任何种类的浮点异常标志且不引起任何浮点异常处理器)。
[0094] 舍入操作控制字段759A——正如舍入操作控制字段758,其内容区 分执行一组舍入操作(例如,向上舍入、向下舍入、向零舍入和向最近舍入)中的哪一个。因此,舍入操作控制字段759A允许在每指令的基础上变更舍入模式,且因此在需要时特别有用。在其中处理器包括用于指定舍入模式的控制寄存器的本发明一实施例中,舍入操作控制字段750的内容优先于该寄存器值(能够选择舍入模式而不需要在这样的控制寄存器上执行保存-修改-还原是有利的)。
[0095] 无存储器访问指令模板——写掩码控制、VSIZE类型操作
[0096] 在无存储器访问、写掩码控制、VSIZE类型操作717指令模板中,将β字段754的其余部分解释为向量长度字段759B,其内容区分将在多个数据向量长度中的哪一个上执行(例如,128、756或912字节)。
[0097] B类存储器访问指令模板
[0098] 在A类存储器访问720指令模板的情况下,将β字段754的一部分解释为广播字段757B,其内容区分是否将执行广播类型数据操纵操作,而将β字段754的其余部分解释为向量长度字段759B。存储器访问720指令模板包括缩放字段760和可选地包括位移字段762A或位移缩放字段762B。
[0099] 关于字段的附加注释
[0100] 关于通用向量友好指令格式700,示出了全操作码字段774包括格式字段740、基本操作字段742和数据元素宽度字段764。尽管示出了其中全操作码字段774包括所有这些字段的一实施例,但在不支持它们全部的实施例中全操作码字段774包括少于全部这些字段。全操作码字段774提供操作代码。
[0101] 扩充操作字段750、数据元素宽度字段764和写掩码字段770允许以通用向量友好指令格式在每指令的基础上指定这些特征。
[0102] 因为它们允许基于不同的数据元素宽度应用掩码,写掩码字段和数据元素宽度字段的组合创建归类的指令。
[0103] 该指令格式要求相对小的位数,因为它基于其它字段的内容为不同的目的重用不同的字段。例如,一种角度是修改器字段的内容在图7A-B上的无存储器访问705指令模板和图7A-B上的存储器访问7250指令模板之间选择;而类字段768的内容在这些无存储器访问705指令模板之中在图 7A的指令模板710/715和图7B的712/717之间选择;且类字段768的内容在这些存储器访问720指令模板之中在图7A的指令模板725/730和图7B的727之间选择。从另一角度,类字段768的内容在图7A和B各自的A类和B类指令模板之间选择;而修改器字段的内容在这些A类指令模板之中在图7A的指令模板705和720之间选择;且修改器字段的内容在这些B类指令模板之中在图7B的指令模板705和720之间选择。在类字段的内容指示A类指令模板的情况下,修改器字段746的内容选择α字段752的解释(在rs字段752A和EH字段752B之间)。以相关的方式,修改器字段746和类字段768的内容选择将α字段解释为rs字段752A、EH字段752B或写掩码控制(Z)字段752C。在类和修改器字段指示A类无存储器访问操作的情况下,扩充字段的β字段的解释基于rs字段的内容而变更;而在类和修改器字段指示B类无存储器访问操作的情况下,β字段的解释取决于RL字段的内容。在类和修改器字段指示A类存储器访问操作的情况下,扩充字段的β字段的解释基于基本操作字段的内容而变更;而在类和修改器字段指示B类存储器访问操作的情况下,扩充字段的β字段的广播字段757B的解释基于基本操作字段的内容而变更。因此,基本操作字段、修改器字段和扩充操作字段的组合允许指定更多样的扩充操作。
[0104] 在A类和B类之中找到的各种指令模板在不同的情形中有益。当出于性能的原因需要调零-写掩码或较小的向量长度时A类是有用的。例如,调零允许避免使用了重命名时的伪依赖,因为我们不再需要人工地与目的地合并;作为另一示例,向量长度控制减轻了在仿真伴随向量掩码的较小向量大小时的存储-加载转发问题。B类当被如下期望时有用:1)当使用舍入模式控制的同时允许浮点异常(例如,当SAE字段的内容指示否时);2)能够使用上转换、调和、交换和/或下转换;3)在图形数据类型上操作。例如,上转换、调和、交换、下转换和图形数据类型减少在与不同格式的源工作时所要求的指令数;作为另一示例,允许异常的能力对完全IEEE遵循提供定向的舍入模式。
[0105] 示例性特定向量友好指令格式
[0106] 图8A-C示出根据本发明实施例的示例性特定向量友好指令格式。 图8A-C示出特定向量友好指令格式800,其在指定字段的位置、大小、解释和顺序以及这些字段中的一些的值的意义上是特定的。可以使用特定向量友好指令格式800来扩展x86指令集,并因此一些字段与那些在现有x86指令集和其扩展(例如AVX)中使用的字段相似或相同。这个格式与含扩展的现有x86指令集的前缀编码字段、实际操作码字节字段、MOD R/M字段、SIB字段、位移字段和即值字段保持一致。示出了图8A-C中的字段映射于其中的图7的字段。
[0107] 应理解,尽管为了说明性目的在通用向量友好指令格式700的上下文中参考特定向量友好指令格式800描述了本发明的实施例,但除了声明外本发明不限于特定向量友好指令格式800。例如,通用向量友好指令格式700构想了各种字段的各种各样的可能大小,而特定向量友好指令格式800被示为有特定大小的字段。作为特定示例,尽管在特定向量友好指令格式800中将数据元素宽度字段764示为1位的字段,本发明不受此限制(即,通用向量友好指令格式700构想数据元素宽度字段764的其它大小)。
[0108] 格式——图8A-C
[0109] 通用向量友好指令格式700包括下面按图8A-C中示出的顺序列出的以下字段。
[0110] EVEX前缀(字节0-3)
[0111] EVEX前缀802——以四字节的格式编码。
[0112] 格式字段740(EVEX字节0,位[7:0])——第一字节(EVEX字节0)是格式字段740且它包含0x62(用来在本发明一实施例中区分向量友好指令格式的唯一值)。
[0113] 第二—四字节(EVEX字节1-3)包括提供特定能力的多个位字段。
[0114] REX字段805(EVEX字节1,位[7-5])——包含EVEX.R位字段(EVEX字节1,位[7]—R)、EVEX.X位字段(EVEX字节1,位[6]—X)和757BEX(字节1,位[5]—B)。EVEX.R、EVEX.X和EVEX.B位字段提供与相对应的VEX位字段相同的功能,并使用1补码的形式编码,例如ZMM0编码为1111B,ZMM15编码为0000B。指令的其它字段如本领字段已知地对寄存器索引的较低三位编码,从而通过增加EVEX.R、EVEX.X和 EVEX.B形成Rrrr、Xxxx和Bbbb。
[0115] REX'字段810——这是REX'字段810的第一部分且是用来对扩展的32寄存器集的较高16个或较低16个进行编码的EVEX.R’位字段(EVEX字节1,位[4]——R’)。在本发明的一实施例中,这个位和如下面指示的其它位一起以位取反的格式存储以便与实际操作码字节是62的BOUND指令相区分(以公知的x8632位模式),但不在MOD R/M字段中(下面将描述)接受MOD字段中的11值;本发明的替换实施例不以取反的格式存储这个和下面指示的其它位。使用了1值来对较低的16个寄存器编码。换言之,R'Rrrr是通过组合EVEX.R'、EVEX.R和来自其它字段的其它RRR而形成的。
[0116] 操作码映射字段815(EVEX字节1,位[3:0]—mmmm)——其内容对暗示的前导操作码字节(0F、0F38或0F3)编码。
[0117] 数据元素宽度字段764(EVEX字节2,位[7]—W)——由标记EVEX.W表示。EVEX.W用来定义数据类型(32-位数据元素或64-位数据元素)的粒度(大小)。
[0118] EVEX.vvvv820(EVEX字节2,位[6:3]—vvvv)——EVEX.vvvv的角色可以包括以下:1)EVEX.vvvv对第一源寄存器操作数编码,以取反(1补码)的形式指定并对有2个或更多个源操作数的指令有效;2)EVEX.vvvv对目的地寄存器操作数编码,对于某些向量移位以1补码的形式指定;或3)EVEX.vvvv不对任何操作数编码,该字段保留且应包含1111b。因此,EVEX.vvvv字段820对以取反(1补码)的形式存储的第一源寄存器指定器的低序4位编码。依据指令,使用额外的不同EVEX位字段来将指定器大小扩展到32个寄存器。
[0119] EVEX.U768类字段(EVEX字节2,位[2]—U)——如果EVEX.U=0,它指示A类或EVEX.U0;如果EVEX.U=1,它指示B类或EVEX.U1。
[0120] 前缀编码字段825(EVEX字节2,位[1:0]—pp)——提供用于基本操作字段的附加位。除了以EVEX前缀格式对传统SSE指令提供支持,这还具有压缩SIMD前缀(而不需要字节来表达SIMD前缀,EVEX前缀只需要2个位)的益处。在一实施例中,为了支持使用以传统格式和EVEX 前缀格式的SIMD前缀(66H、F2H、F3H)的传统SSE指令,这些传统SIMD前缀被编码进SIMD前缀编码字段;且在运行时在被提供给解码器的PLA之前被扩张成传统SIMD前缀(使得PLA能不做修改地执行传统和EVEX格式的这些传统指令)。尽管较新的指令可以直接将EVEX前缀编码字段的内容用作操作码扩展,某些实施例为了一致性以相似的方式扩张但允许由这些传统SIMD前缀指定不同的意义。替换实施例可以重设计PLA来支持2位的SIMD前缀编码,并因此不需要扩张。
[0121] α字段752(EVEX字节3,位[7]—EH;也称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX写掩码控制和EVEX.N;也示为α)——如前所述,这个字段是针对上下文的。本文稍后提供补充描述。
[0122] β字段754(EVEX字节3,位[6:4]—SSS,也称为EVEX.s2-0、EVEX.r2-0、VEEX.rr1、EVEX.LL0、EVEX.LLB;也示为βββ)-如前所述,这个字段是针对上下文的。本文稍后提供补充描述。
[0123] REX'字段810-这是REX'字段的剩余部分,且是用来对扩展的32寄存器集的较高16或较低16个进行编码的EVEX.V'位字段(EVEX字节3,位[3]—V’)。这个位以位取反的格式存储。使用了1值来对较低的16个寄存器编码。换言之,通过组合EVEX.V’、EVEX.vvvv形成V’VVVV。
[0124] 写掩码字段770(EVEX字节3,位[2:0]—kkk)——如前所述其内容指定写掩码寄存器中的寄存器索引。在本发明的一实施例中,特定值EVEX.kkk=000有暗示没有对特定指令使用写掩码的特别行为(这可以以各种方式实现,包括使用硬连线为全1的写掩码或绕过掩码硬件的硬件)。
[0125] 实际操作码字段830(字节4)
[0126] 这也称为操作码字节。操作码的一部分在这个字段中指定。
[0127] MOD R/M字段840(字节5)
[0128] 修改器字段746(MODR/M.MOD,位[7-6]—MOD字段842)——如前所述,MOD字段842的内容在存储器访问和无存储器访问操作之间进行区分。本文稍后将进一步描述这个字段。
[0129] MODR/M.reg字段844,位[5-3]——ModR/M.reg字段的角色可概括为两种情况:ModR/M.reg对目的地寄存器操作数或源寄存器操作数编码, 或ModR/M.reg被视为操作码扩展且不用来对任何指令操作数编码。
[0130] MODR/M.r/m字段846,位[2-0]——ModR/M.r/m字段的角色可以包括以下:ModR/M.r/m对引用存储器地址的指令操作数编码,或ModR/M.r/m对目的地寄存器操作数或源寄存器操作数编码。
[0131] 缩放、索引、基址(SIB)字节(字节6)
[0132] 缩放字段760(SIB.SS,位[7-6])——如前所述,缩放字段760的内容用于存储器地址生成。本文稍后将进一步描述这个字段。
[0133] SIB.xxx854(位[5-3])和SIB.bbb856(位[2-0])——之前关于寄存器索引Xxxx和Bbbb已经参考过这些字段的内容。
[0134] 位移字节(字节7或字节7-10)
[0135] 位移字段762A(字节7-10)——当MOD字段842包含10时,字节7-10是位移字段762A,且和传统32位位移(disp32)一样工作并以字节粒度工作。
[0136] 位移因子字段762B(字节7)-当MOD字段842包含01时,字节7是位移因子字段762B。这个字段的位置与以字节粒度工作的传统x86指令集8位位移(disp8)相同。由于disp8是符号扩展的,它只可在-128到127字节偏移之间寻址;就64字节高速缓存线而言,disp8使用只可设为四个真正有用的值-128、-64、0和64的8位;由于通常需要更大的范围,使用了disp32;然而disp32需要4个字节。对比disp8和disp32,位移因子字段762B是对disp8的重解释;当使用位移因子字段762B时,实际位移是由位移因子字段的内容乘以存储器操作数访问的大小(N)来确定的。这种类型的位移引用为disp8×N。这降低了平均指令长度(使用了单个字节用于位移但有大得多的范围)。这样的压缩位移是基于以下假设:有效位移是存储器访问粒度的倍数,并因此不需要对地址偏移的冗余低序位进行编码。换言之,位移因子字段762B替换传统x86指令集8位位移。因此,位移因子字段762B是以与x86指令集8位位移相同的方式编码的(因而在ModRM/SIB编码规则中没有变化),唯一的例外是disp8被过载成disp8×N。换言之,仅除了在硬件对位移值的解释(这需要用存储器操作数的大小来缩放位移以获得按字节的地址偏移)中,在编码规则或编码长度上没有变 化。
[0137] 即值
[0138] 即值字段772如前所述地进行操作。
[0139] 示例性寄存器架构——图9
[0140] 图9是根据本发明一实施例的寄存器架构900的框图。下面列出寄存器架构的寄存器文件和寄存器:
[0141] 向量寄存器文件910——在所示的实施例中有32个宽912位的向量寄存器,这些寄存器称为zmm0到zmm31。较低的16个zmm寄存器的较低序756位覆盖在寄存器ymm0-16上。较低的16个zmm寄存器的较低序128位(ymm寄存器的较低序128位)覆盖在寄存器xmm0-15上。特定向量友好指令格式800如下表中所示地在这些覆盖的寄存器文件上操作。
[0142]
[0143] 换言之,向量长度字段759B在最大长度和一个或多个其它较短的长度之间选择,其中每个这样的较短长度是前一长度的一半,且没有向量长度字段759B的指令模板在最大向量长度上操作。另外,在一实施例中,特定向量友好指令格式800的B类指令模板在压缩的或标量单/双精度浮点数 据和压缩的或标量整数数据上操作。标量操作是在zmm/ymm/xmm寄存器中的最低序数据元素位置上执行的操作;依据实施例,较高序数据元素位置保持与指令之前相同或调零。
[0144] 写掩码寄存器915——在所示的实施例中有8个写掩码寄存器(k0到k7),每个大小为64位。如前所述,在本发明的一实施例中,向量掩码寄存器k0不能用作写掩码;在编码通常应指示k0用于写掩码时,它选择硬连线写掩码0xFFFF,从而有效地禁用对该指令的写掩码。
[0145] 多媒体扩展控制状态寄存器(MXCSR)920——在所示的实施例中,这个32位寄存器提供在浮点操作中使用的状态和控制位。
[0146] 通用寄存器925——在所示的实施例中有16个与现有x86寻址模式一起使用以对存储器操作数寻址的64位通用寄存器。这些寄存器通过名RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8到R15来引用。
[0147] 扩展标志(EFLAGS)寄存器930——在所示的实施例中,这个32位寄存器用来记录许多指令的结果。
[0148] 浮点控制字(FCW)寄存器935和浮点状态字(FSW)寄存器940——在所示的实施例中,这些寄存器由x87指令集扩展使用以在FCW的情况下设置舍入模式、异常掩码和标志,并在FSW的情况下跟踪异常。
[0149] 标量浮点栈寄存器文件(x87栈)945,其上是重叠的MMX压缩整数平寄存器文件950——在所示的实施例中,x87栈是用来使用x87指令集扩展在32/64/80-位浮点数据上执行标量浮点操作的八元素栈;而MMX寄存器用来在64位压缩整数数据上执行操作,以及为在MMX和XMM之间执行的一些操作保持操作数。
[0150] 段寄存器955——在所示的实施例中,有6个用来存储用于分段地址生成的数据的16位寄存器。
[0151] RIP寄存器965——在所示的实施例中,这个64位寄存器存储指令指针。
[0152] 本发明的替换实施例可以使用更宽或更窄的寄存器。另外,本发明的替换实施例可以使用更多、更少或不同的寄存器文件和寄存器。
[0153] 示例性按序处理器架构——图10A-10B
[0154] 图10A-10B示出示例性按序处理器架构的框图。这些示例性实施例围绕以宽向量处理器(VPU)扩充的按序CPU核的多个实例化而设计。依据e12t应用,核通过高带宽互连网络与一些固定功能逻辑、存储器I/O接口和其它必要的I/O逻辑通信。例如,作为独立GPU的本实施例的实现通常会包括PCIe总线。
[0155] 图10A是根据本发明实施例的单个CPU核和它与管芯上互连网络1002的连接及其2级(L2)高速缓存的本地子集1004的框图。指令解码器1000支持包括特定向量指令格式800的有扩展的x86指令集。尽管在本发明的一实施例中(为了简化设计)标量单元1008和向量单元1010使用分开的寄存器集(分别是标量寄存器1012和向量寄存器1014)且它们之间传输的数据被写入存储器然后从1级(L1)高速缓存1006中回读,本发明的替换实施例也可以使用不同的方法(例如,使用单个寄存器集或包括允许数据在不被写入和回读的情况下在两个寄存器文件之间传输的通信路径)。
[0156] L1高速缓存1006允许进入标量和向量单元的对高速缓存存储器的低等待时间的访问。与向量友好指令格式中的加载操作指令一起,这意味着可以某种程度上像对待经扩展的寄存器文件一样对待L1高速缓存1006。这显著地提高了许多算法的性能,特别是通过驱逐提示字段752B。
[0157] L2高速缓存的本地子集1004是被分成分开的本地子集的全局L2高速缓存的一部分,每个CPU核一个。每个CPU具有到它自己的L2高速缓存的本地子集1004的直接访问路径。CPU核读取的数据被存储在它的L2高速缓存子集1004中并能快速地访问,与其它CPU访问它们自己的本地L2高速缓存子集并行。CPU核写入的数据被存储在它自己的L2高速缓存子集
1004中并在必要时从其它子集刷新。环网络保证共享数据的一致性。
[0158] 图10B是根据本发明实施例的图10A中的CPU核的一部分的分解图。图10B包括L1高速缓存1004的L1数据高速缓存1006A部分,和关于向量单元1010及向量寄存器1014的更多细节。具体地,向量单元1010是16位宽的向量处理单元(VPU)(见16位宽ALU1028),其执行整数、单精度浮点和双精度浮点指令。VPU与调和单元1020一起支持对寄存器输 入进行调和、与数字转换单元1022A-B一起支持数字转换、并与复制单元1024一起支持存储器输入上的复制。写掩码寄存器1026允许对结果向量写入进行预测。
[0159] 寄存器数据能以各种各样的方式进行调和,例如支持矩阵乘法。来自存储器的数据可跨VPU道被复制。这是图形和非图形并行数据处理中的公共操作,显著地提高了高速缓存效率。
[0160] 环网络是双向的,以允许诸如CPU核、L2高速缓存和其它逻辑块的代理在芯片内互相通信。每个环数据路径是每方向912位宽。
[0161] 示例性乱序架构——图11
[0162] 图11是示出根据本发明实施例的示例性乱序架构的框图。具体地,图11示出了被修改为包括向量友好指令格式和其执行的公知的示例性乱序架构。在图11中箭头表示两个或更多单元之间的耦合且箭头的方向指示这些单元之间数据流的方向。图11包括耦合到执行引擎单元1110和存储器单元1115的前端单元1105;执行引擎单元1110还耦合到存储器单元1115。
[0163] 前端单元1105包括耦合到2级(L2)分支预测单元1122的1级(L1)分支预测单元1120。L1和L2分支预测单元1120和1122耦合到L1指令高速缓存单元1124。L1指令高速缓存单元1124耦合到指令转换后备缓冲区(TLB)1126,1126还耦合到指令提取及预解码单元
1128。指令提取及预解码单元1128耦合到指令队列单元1130,1130还耦合到解码单元1132。
解码单元1132包括复杂解码器单元1134和三个简单解码器单元1136、1138和1140。解码单元1132包括微代码ROM单元1142。解码单元1132可以如前所述地在解码阶段部分中操作。L1指令高速缓存单元1124还耦合到存储器单元1115中的L2高速缓存单元1148。指令TLB单元
1126还耦合到存储器单元1115中的第二级TLB单元1146。解码单元1132、微代码ROM单元
1142和循环流检测器单元1144各自耦合到执行引擎单元1110中的重命名/分配器单元
1156。
[0164] 执行引擎单元1110包括耦合到退役单元1174和统一调度器单元1158的重命名/分配器单元1156。退役单元1174还耦合到执行单元1160并包括记录器缓冲区单元1178。统一调度器单元1158还耦合到物理寄存器 文件单元1176,物理寄存器文件单元1176耦合到执行单元1160。物理寄存器文件单元1176包括向量寄存器单元1177A、写掩码寄存器单元1177B和标量寄存器单元1177C;这些寄存器单元可以提供向量寄存器1110、向量掩码寄存器1115和通用寄存器1125;且物理寄存器文件单元1176可以包括未示出的附加寄存器文件(例如,MMX压缩整数平寄存器文件1150上重叠的标量浮点栈寄存器文件1145)。执行单元
1160包括三个混合标量和向量单元1162、1164和1172、加载单元1166、存储地址单元1168、存储数据单元1170。加载单元1166、存储地址单元1168和存储数据单元1170还各自耦合到存储器单元1115中的数据TLB单元1152。
[0165] 存储器单元1115包括耦合到数据TLB单元1152的第二级TLB单元1146。数据TLB单元1152耦合到L1数据高速缓存单元1154。L1数据高速缓存单元1154还耦合到L2高速缓存单元1148。在一些实施例中,L2高速缓存单元1148还耦合到存储器单元1115之内/外的L3和更高级高速缓存单元1150。
[0166] 作为示例,示例性乱序架构可以实现如下的处理流水线:1)指令提取及预解码单元1128执行提取和长度解码阶段;2)解码单元1132执行解码阶段;3)重命名/分配器单元1156执行分配阶段和重命名阶段;4)统一调度器1158执行调度阶段;5)物理寄存器文件单元1176、记录器缓冲器单元1178和存储器单元1115执行寄存器读取/存储器读取阶段1930;
执行单元1160执行执行/数据变换阶段;6)存储器单元1115和记录器缓冲器单元1178执行回写/存储器写入阶段1960;7)退役单元1174执行ROB读取阶段;8)各种单元可以参与异常处理阶段;和9)退役单元1174和物理寄存器文件单元1176执行提交阶段。
[0167] 示例性单核和多核处理器
[0168] 图16是根据本发明实施例的具有集成存储器控制器和图形器件的单核处理器和多核处理器的框图。图16中的实线框示出有单核1602A、系统代理1610、一个或多个总线控制器单元的集合1616的处理器1600,而虚线框的可选附加示出有多核1602A-N、系统代理单元1610中的一个或多个集成存储器控制器单元的集合1614和集成图形逻辑1608的替换性处理 器1600。
[0169] 存储器分层结构包括核内的一级或多级高速缓存、一个或多个共享高速缓存单元的集合1606和耦合到集成存储器控制器单元集1614的外部存储器(未示出)。共享高速缓存单元集1606可以包括一个或多个诸如2级(L2)、3级(L3)、4级(L4)或其它级高速缓存的中间级高速缓存、末级高速缓存(LLC)和/或其组合。尽管在一实施例中基于环的互连单元1612将集成图形逻辑1608、共享高速缓存单元集1606和系统代理单元1610互连,替换实施例也可以使用任何数量的公知的技术来互连这些单元。
[0170] 在一些实施例中,核1602A-N的一个或多个能够多线程。系统代理1610包括协调和操作核1602A-N的那些组件。系统代理单元1610可以包括例如电源控制单元(PCU)和显示单元。PCU可以是或者包括调节核1602A-N和集成图形逻辑1608的电源状态所需要的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
[0171] 核1602A-N就架构和/或指令集而言可以是同质的或异构的。例如,核1602A-N中的一些可以是按序的(例如像图10A和10B中示出的)而其它的是乱序的(例如像图11中示出的)。作为另一示例,核1602A-N中的两个或更多个可以能够执行相同的指令集,而其它的可以能够仅执行该指令集的子集或不同的指令集。这些核中的至少一个能够执行本文描述的向量友好指令格式。
[0172] 处理器可以是通用处理器,诸如酷睿CoreTMi3、i5、i7、2双核Duo和四核Quad、至强TM TMXeon 或安腾Itanium 处理器,这些可以从加州Santa Clara的英特尔公司获得。替换性地,处理器可以来自另一公司。处理器可以是专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、协同处理器、嵌入式处理器等。处理器可以在一个或多个芯片上实现。
处理器1600可以是使用多个处理技术(例如BiCMOS、CMOS或NMOS)中的任何一个的一个或多个衬底的一部分和/或在其上实现。
[0173] 示例性计算机系统和处理器
[0174] 图12-14是适合用来包括处理器1600的示例性系统,而图15是可以包括核1602的一个或多个的示例性片上系统(SoC)。本领字段内已知 的用于膝上型计算机、台式计算机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络中枢、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携媒体播放器、手持设备和各种其它电子设备的其它系统设计和配置也是适用的。一般而言,能够如本文所公开地包含处理器和/或其它执行逻辑的各种系统或电子设备通常是适用的。
[0175] 现在参考图12,示出的是根据本发明一实施例的系统1200的框图。系统1200可以包括耦合到图形存储器控制器中枢(GMCH)1220的一个或多个处理器1210、1215。附加处理器1215可的选特性在图12中以虚线表示。
[0176] 每个处理器1210、1215可以是某个版本的处理器1600。然而应注意,集成图形逻辑和集成存储器控制单元不大可能会存在于处理器1210、1215中。
[0177] 图12示出GMCH1220可以耦合到存储器1240,存储器1240可以是例如动态随机存取存储器(DRAM)。对至少一个实施例,DRAM可以与非易失性高速缓存相关联。
[0178] GMCH1220可以是芯片组或芯片组的一部分。GMCH1220可以与处理器1210、1215通信并控制处理器1210、1215与存储器1240之间的交互。GMCH1220还可以充当处理器1210、1215和系统1200的其它元件之间的加速总线接口。对至少一个实施例,GMCH1220经由诸如前端总线(FSB)1295的多点分支总线与处理器1210、1215通信。
[0179] 此外,GMCH1220耦合到显示器1245(诸如平面显示器)GMCH1220可以包括集成图形加速器。GMCH1220还耦合到可以用来将各种外围设备耦合到系统1200的输入/输出(I/O)控制器中枢(ICH)1250。在图12的实施例中作为示例示出的是外部图形设备1260和另一外围设备1270,外部图形设备1260可以是耦合到ICH1250的离散图形设备。
[0180] 替换性地,附加或不同的处理器也可以存在于系统1200中。例如,附加处理器1215可以包括与处理器1210相同的附加处理器、与处理器1210异构或不对称的附加处理器、加速器(诸如图形加速器或数字信号处理 (DSP)单元)、现场可编程门阵列或任何其它处理器。物理资源1210、1215之间就包括架构、微架构、热学、功耗特征等度量的范围而言可以存在各种差异。这些差异可以有效地将它们自己显示为处理元素1210、1215之间的非对称和异构。对至少一个实施例,各种处理元件1210、1215可以驻留在同一管芯封装中。
[0181] 现在参考图13,示出的是根据本发明实施例的第二系统1300的框图。如图13中所示,多处理器系统1300是点到点互连系统,并包括经由点到点互连1350耦合的第一处理器1370和第二处理器1380。如图13中所示,处理器1370和1380中的每一个可以是处理器1600的某个版本。
[0182] 替换性地,处理器1370、1380中的一个或多个可以是处理器之外的元件,诸如加速器或现场可编程门阵列。
[0183] 尽管仅示出两个处理器1370、1380,应理解本发明的范围不受此限制。在其它实施例中,一个或多个附加处理元件可以存在于给定处理器中。
[0184] 处理器1370还可以包括集成存储器控制器中枢(IMC)1372和点到点(P-P)接口1376和1378。类似地,第二处理器1380可以包括IMC1382和P-P接口1386和1388。处理器
1370、1380可以经由点到点(PtP)接口1350使用PtP接口电路1378、1388来交换数据。如图13中所示,IMC1372和1382将处理器耦合到相应的存储器,即存储器1342和存储器1344,其可以是本地附连到相应处理器的主存储器的部分。
[0185] 处理器1370、1380可以各自使用点到点接口电路1376、1394、1386、1398经由各个P-P接口1352、1354与芯片组1390交换数据。芯片组1390还可以经由高性能图形接口1339与高性能图形电路1338交换数据。
[0186] 共享高速缓存(未示出)可以被包括在两个处理器外的任一处理器中,但仍经由P-P互连与处理器连接,使得处理器处于低电源模式时任一或两个处理器的本地高速缓存信息可以存储在共享高速缓存中。
[0187] 芯片组1390可以经由接口1396耦合到第一总线1316。在一实施例中,第一总线1316可以是外围组件互连(PCI)总线,或诸如PCI高速总线或另一第三代I/O互连总线的总线,但本发明的范围不受此限制。
[0188] 如图13中所示,各种I/O设备1314可以和总线桥1318一起耦合到 第一总线1316,总线桥1318将第一总线1316耦合到第二总线1320。在一实施例中,第二总线1320可以是低引脚数(LPC)总线。在一实施例中,各种设备可以耦合到第二总线1320,包括例如键盘/鼠标1322、通信设备1326和可以包括代码1330的数据存储单元1328(诸如盘驱动器或其它大容量存储设备)。而且,音频I/O1324可以耦合到第二总线1320。注意其它架构是可能的。例如,代替图13的点到点架构,系统可以实现多点分支总线或其它这样的架构。
[0189] 现在参考图14,示出的是根据本发明实施例的第三系统1400的框图。图13和14中相似的元素使用相似的附图标记,且图13的某些方面已从图14中省略以免妨碍图14的其它方面。
[0190] 图14示出处理元件1370、1380可以分别包括集成存储器和I/O控制逻辑(“CL”)1372和1382。对至少一个实施例,CL1372、1382可以包括诸如以上描述的存储器控制中枢逻辑(IMC)。另外,CL1372、1382还可以包括I/O控制逻辑。图14示出不仅存储器1342、1344耦合到CL1372、1382,而且I/O设备1414也耦合到控制逻辑1372、1382。传统I/O设备1415耦合到芯片组1390。
[0191] 现在参考图15,示出的是根据本发明实施例的SoC1500的框图。其它图中的相似元素使用相似的附图标记。另外,虚线框是更高级的SoC上的可选特征。在图15中,互连单元1502耦合到:包括一个或多个核1602A-N的集合和(多个)共享高速缓存单元1606的应用处理器1510;系统代理单元1610(;多个)总线控制器单元1616;(多个)集成存储器控制器单元
1614;可以包括集成图形逻辑1608、用于提供静态和/或视频相机功能的图像处理器1524、用于提供硬件音频加速的音频处理器1526和用于提供视频编码/解码加速的视频处理器
1528的一个或多个媒体处理器的集合1520;静态随机存取存储器(SRAM)单元1530;直接存储器存取(DMA)单元1532;和用于耦合到一个或多个外部显示器的显示单元1540。
[0192] 本文公开的机制的实施例可以在硬件、软件、固件或这样的实现方法的组合中实现。本发明的实施例可以实现为在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设 备和至少一个输出设备的可编程系统上执行的计算机程序或程序代码。
[0193] 程序代码可以应用到输入数据以执行本文描述的功能并生成输出信息。输出信息可以应用到一个或多个输出设备,以已知的方式。为了这个应用的目的,处理系统包括有处理器(例如数字信号处理(DSP)、微控制器、专用集成电路(ASIC)或微处理器)的任何系统。
[0194] 程序代码可以用高级程序或面向对象的编程语言来实现,以与处理系统通信。如果需要,程序代码也可以用汇编语言或机器语言来实现。事实上,本文描述的机制在范围上不限制于任何特定编程语言。在任何情形中,语言可以是经编译的或经解释的语言。
[0195] 至少一个实施例的一个或多个方面可以通过存储在表示处理器内的各种逻辑的机器可读介质上的代表性指令来实现,当所述指令被机器读时导致机器制造逻辑以执行本文描述的技术。称为“IP核”的这样的表示可以存储在有形的、机器可读的介质上并供应给各种顾客或制造设施以加载进实际制造该逻辑或处理器的制造机器中。
[0196] 这样的机器可读存储介质可以包括但不限于由机器或设备制造或形成的制品的非瞬态有形布置,包括存储介质,诸如硬盘,任何其它类型的盘,包括软盘、光盘(紧致盘只读存储器(CD-ROM)、可重写紧致盘(CD-RW))和磁光盘,半导体设备,诸如只读存储器(ROM)、随机存取存储器(RAM)(诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM)),磁卡或光卡,或适用于存储电子指令的任何其它类型的介质。
[0197] 因此,本发明的实施例还包括非瞬态有形的机器可读介质,介质包含向量友好指令格式的指令或包含设计数据(诸如硬件描述语言(HDL)),其定义本文描述的结构、电路、装置、处理器和/或系统特征。这些实施例也可称为程序产品。
[0198] 在一些情况下,可以使用指令转换器来将指令从源指令集转换到目标指令集。例如,指令转换器可以将指令翻译(例如,使用静态二进制翻译、包括动态编译的动态二进制翻译)、变形、仿真或以其他方式转换成 将由核处理的一个或多个其它指令。可以使用软件、硬件、固件或其组合来实现指令转换器。指令转换器可以在处理器上、离处理器或部分在且部分离存储器。
[0199] 图17是对比根据本发明实施例使用软件指令转换器将源指令集的二进制指令转换成目标指令集的二进制指令的框图。在所示的实施例中,指令转换器是软件指令转换器,但是指令转换器可以替换性地用软件、固件、硬件或其各种组合来实现。图17示出高级语言1702的程序可以使用x86编译器1704来编译,以生成可以由具有至少一个x86指令集核的处理器1716本地执行的x86二进制代码1706(假定一些经编译的指令是向量友好指令格式)。
具有至少一个x86指令集核的处理器1716代表任何处理器,该处理器能通过兼容地执行或以其他方式处理(1)Intel x86指令集核的指令集的大部分或(2)对象代码版本的应用或目标在于运行在具有至少一个x86指令集核的Intel处理器上的其它软件,来执行基本如具有至少一个x86指令集核的Intel处理器相同的功能,以便基本达到与具有至少一个x86指令集核的Intel处理器相同的结果。x86编译器1704代表可用于生成能通过或不通过附加链接处理在具有至少一个x86指令集核的处理器1716上执行的x86二进制代码1706(例如对象代码)的编译器。类似地,图8A-C示出高级语言1702的程序可以使用替换性指令集编译器1708来编译,以生成可以由不具有至少一个x86指令集核的处理器1714(例如,有执行加州Sunnyvale的MIPS Technologies的MIPS指令集和/或执行加州Sunnyvale的ARM Holdings的ARM指令集的核的处理器)本地执行的替换性指令集二进制代码1710。使用指令转换器
1712将x86二进制代码1706转换成可以由不具有x86指令集核的处理器1714本地执行的代码。所转换的代码不大可能与替换性指令集二进制代码1710相同,因为能够如此的指令转换器很难制造;但所转换的代码将完成一般操作且由来自替换性指令集的指令构成。因此,指令转换器1712代表通过仿真、模拟或任何其它过程允许不具有x86指令集处理器或核的处理器或其它电子设备执行x86二进制代码1706的软件、固件、硬件或其组合。
[0200] 本文公开的向量友好指令格式的指令的某些操作可以由硬件组件执 行并可以用被用来导致或至少使得以所述指令编程的电路或其它硬件组件执行所述操作的机器可执行指令来体现。该电路可以包括通用或专用处理器、或逻辑电路,仅列举了几个例子。所述操作还可以可选地由硬件和软件的组合来执行。执行逻辑和/或处理器可以包括响应于机器指令或从机器指令导出的一个或多个控制信号以存储指令特定的结果操作数的具体或特定电路或其它逻辑。例如,本文公开的指令的实施例可以在图12-15中的一个或多个系统中执行且向量友好指令格式的指令的实施例可以存储在程序代码中以在系统中执行。此外,这些附图中的处理元件可以利用本文详述的具体流水线和/或架构(例如按序和乱序架构)之一。例如,按序架构的解码单元可以将指令解码,将解码的指令传递给向量或标量单元等。
[0201] 以上描述旨在示出本发明的优选实施例。从以上讨论应显而易见的是,特别是在这样增长迅速且进一步的升级不易预见的技术领域中,本领域内的技术人员可以修改本发明的布置和细节而不偏离所附权利要求书及其等效方案的范围之内的本发明的原则。例如,方法的一个或多个操作可以被组合或进一步分开。
[0202] 替换实施例
[0203] 尽管实施例被描述为会本地执行向量友好指令格式,本发明的替换实施例也可以通过在执行不同指令集的处理器(例如执行加州Sunnyvale的MIPS Technologies的MIPS指令集的处理器、执行加州Sunnyvale的ARM Holdings的ARM指令集的处理器)上运行的仿真层来执行向量友好指令格式。而且,尽管附图中的流程图示出由本发明的某些实施例执行的特定操作顺序,应理解这样的顺序是示例性的(例如,替换实施例可以以不同的顺序执行操作、组合某些操作、重叠某些操作等)。
[0204] 在以上描述中,为解释起见,阐明了众多具体细节以提供对本发明实施例的全面理解。然而对于本领域技术人员显而易见的是,没有这些具体细节也可实践一个或多个实施例。提供所描述的特定实施例不是为了限制本发明而是为了示出本发明的实施例。本发明的范围不是由以上提供的具体示例而只是由所附权利声明书确定。