用于利用索引和立即数实行向量重组的方法和装置与流程

文档序号:11635308阅读:354来源:国知局
用于利用索引和立即数实行向量重组的方法和装置与流程

本发明一般地涉及计算机处理器的领域。更特别地,本发明涉及用于利用索引和立即数实行向量重组的方法和装置。



背景技术:

指令集或指令集架构(isa)是与编程相关的计算机架构的部分,其包括原生数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置、以及外部输入和输出(i/o)。应注意到,术语“指令”在本文中一般指代与微指令或微运算(其是处理器的解码器解码宏指令的结果)相对的宏指令(其是被提供给处理器以用于执行的指令)。微指令或微运算可以被配置成命令处理器上的执行单元实行运算以实现与所述宏指令相关联的逻辑。

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

指令集包括一个或多个指令格式。给定的指令格式定义各种字段(位的数目、位的位置)来(除其它之外)指定要实行的运算以及要对其实行运算的(一个或多个)运算元。通过指令模板(或子格式)的定义来进一步分解一些指令格式。例如,给定指令格式的指令模板可以被定义成具有指令格式的字段的不同子集(所包括的字段通常是以相同的顺序,但是至少某些具有不同的位位置,因为包括了较少的字段)和/或被定义成具有以不同方式解释的给定字段。使用给定的指令格式(并且如果定义了的话,以该指令格式的指令模板中的给定的一个)来表达给定的指令,并且所述给定的指令指定运算和运算元。指令流是特定的指令序列,其中该序列中的每个指令是指令以指令格式(并且如果定义了的话,该指令格式的指令模板中的给定的一个)的出现。

附图说明

可以从结合附图的以下详细描述获得对本发明的更好理解,在附图中:

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

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

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

图4a是根据本发明的实施例的图示出示例性有序提取、解码、引退流水线以及示例性寄存器重命名、无序发布/执行流水线二者的框图;

图4b是根据本发明的实施例的图示出有序提取、解码、引退核心的示例性实施例以及要被包括在处理器中的示例性寄存器重命名、无序发布/执行架构核心二者的框图;

图5a是单个处理器核心以及其到管芯上(on-die)互连网络的连接的框图;

图5b图示出根据本发明的实施例的图5a中的处理器核心的一部分的展开图;

图6是根据本发明的实施例的具有集成存储器控制器和图形模块(graphics)的单核处理器和多核处理器的框图;

图7图示出根据本发明的一个实施例的系统的框图;

图8图示出根据本发明的实施例的第二系统的框图;

图9图示出根据本发明的实施例的第三系统的框图;

图10图示出根据本发明的实施例的片上系统(soc)的框图;

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

图12图示出可以在其上实现本发明的一个实施例的示例性处理器;

图13图示出根据本发明的一个实施例的使用立即数值的向量重组逻辑;

图14图示出可以如何使用来自不同源寄存器的数据元素来实行重组;以及

图15图示出根据本发明的一个实施例的方法。

具体实施方式

在以下描述中,出于解释的目的,阐述众多具体细节以便提供对下面描述的本发明的实施例的透彻理解。然而,对于本领域技术人员来说将会显而易见的是,可以在没有这些具体细节中的某些的情况下实践本发明的实施例。在其它情况下,以框图形式示出公知的结构和设备以避免使本发明的实施例的根本原理变晦涩。

示例性处理器架构以及数据类型

指令集包括一个或多个指令格式。给定的指令格式定义各种字段(位的数量、位的位置)来(除其它之外)指定要实行的运算(运算码)以及要对其实行运算的(一个或多个)运算元。通过指令模板(或子格式)的定义来进一步分解一些指令格式。例如,给定指令格式的指令模板可以被定义成具有指令格式的字段的不同子集(所包括的字段通常是以相同的顺序,但是至少某些具有不同的位位置,因为包括了较少的字段)和/或被定义成具有以不同方式解释的给定字段。因此,使用给定的指令格式(并且如果定义了的话,以该指令格式的指令模板中的给定的一个)来表达isa的每个指令,并且所述指令包括用于指定运算和运算元的字段。例如,示例性add指令具有特定运算码和指令格式,所述指令格式包括用以指定该运算码的运算码字段以及用以选择运算元(源1/目的地以及源2)的运算元字段;并且该add指令在指令流中的出现将在运算元字段中具有选择特定运算元的特定内容。已经发表和/或出版了称为高级向量扩展(avx)(avx1和avx2)且使用向量扩展(vex)编码方案的simd扩展集(例如,参见英特尔®64和ia-32架构软件开发者手册,2011年10月;并且参见英特尔®高级向量扩展编程参考,2011年6月)。

示例性指令格式

本文中描述的(一个或多个)指令的实施例可以以不同的格式来体现。附加地,下文详述了示例性系统、架构和流水线。可以在此类系统、架构和流水线上执行(一个或多个)指令的实施例,但是所述实施例不限于那些详述的内容。

a.通用向量友好指令格式

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

图1a-1b是根据本发明的实施例的图示出通用向量友好指令格式以及其指令模板的框图。图1a是根据本发明的实施例的图示出通用向量友好指令格式以及其a类指令模板的框图;而图1b是根据本发明的实施例的图示出通用向量友好指令格式以及其b类指令模板的框图。具体来说,针对其定义了a类和b类指令模板的通用向量友好指令格式100,其二者都包括无存储器访问105指令模板和存储器访问120指令模板。在向量友好指令格式的情境中,术语通用指代没有被绑定至任何特定指令集的指令格式。

虽然将要描述其中向量友好指令格式支持以下内容的本发明的实施例:具有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字节向量运算元)。

图1a中的a类指令模板包括:1)在无存储器访问105指令模板内示出无存储器访问、全舍入(fullround)控制类型运算110指令模板和无存储器访问、数据变换类型运算115指令模板;以及2)在存储器访问120指令模板内示出存储器访问、暂时性125指令模板以及存储器访问、非暂时性130指令模板。图1b中的b类指令模板包括:1)在无存储器访问105指令模板内示出无存储器访问、写掩码控制、部分舍入(partialround)控制类型运算112指令模板和无存储器访问、写掩码控制、vsize类型运算117指令模板;以及2)在存储器访问120指令模板内示出存储器访问、写掩码控制127指令模板。

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

格式字段140——该字段中的特定值(指令格式标识符值)唯一地识别向量友好指令格式,以及因而的在指令流中的以向量友好指令格式的指令的出现。同样地,该字段在对于仅具有通用向量友好指令格式的指令集而言不需要该字段的意义上是可选的。

基础运算字段142——其内容区分不同的基础运算。

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

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

增加运算字段150——其内容区分除了基础运算之外要实行各种不同运算中的哪一个。该字段是情境特定的。在本发明的一个实施例中,该字段被划分成类字段168、α字段152和β字段154。增加运算字段150允许在单个指令而不是2、3或4个指令中实行公共运算组。

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

位移字段162a——其内容用作存储器地址生成的一部分(例如,针对使用2比例*索引+基数+位移的地址生成)。

位移因数字段162b(注意,位移字段162a直接在位移因数字段162b之上的并置指示使用一个或另一个)——其内容用作地址生成的一部分;其指定要被存储器访问(n)的尺寸缩放的位移因数——其中n是存储器访问中的字节数(例如,针对使用2比例*索引+基数+经缩放的位移的地址生成)。忽视冗余的低阶位,并且因此,将位移因数字段的内容乘以存储器运算元总尺寸(n)以便生成要在计算有效地址时使用的最终位移。由处理器硬件在运行时间基于全运算码字段174(本文中稍后描述)和数据操纵字段154c来确定n的值。位移字段162a和位移因数字段162b在它们不用于无存储器访问105指令模板和/或不同的实施例可以实现二者中的仅一个或一个都不实现的意义上是可选的。

数据元素宽度字段164——其内容区分要使用多个数据元素宽度中的哪一个(在一些实施例中针对所有指令;在其它实施例中针对指令中的仅某些)。该字段在如果仅支持一个数据元素宽度和/或使用运算码的某一方面支持数据元素宽度的情况下不需要该字段的意义上是可选的。

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

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

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

a类的指令模板

在a类的无存储器访问105指令模板的情况下,α字段152被解释为rs字段152a,其内容区分要实行不同增加运算类型中的哪一个(例如,分别针对无存储器访问、舍入类型运算110和无存储器访问、数据变换类型运算115指令模板指定舍入152a.1和数据变换152a.2),而β字段154区分要实行指定类型的运算中的哪一个。在无存储器访问105指令模板中,不存在比例字段160、位移字段162a和位移比例字段162b。

无存储器访问指令模板——全舍入控制类型运算

在无存储器访问全舍入控制类型运算110指令模板中,β字段154被解释为舍入控制字段154a,其(一个或多个)内容提供静态舍入。虽然在所描述的本发明的实施例中舍入控制字段154a包括抑制所有浮点异常(sae)字段156和舍入运算控制字段158,但是替换实施例可以支持可以将这两个概念编码到同一字段中或仅具有这些概念/字段中的一个或另一个(例如,可以仅具有舍入运算控制字段158)。

sae字段156——其内容区分是否要禁用异常事件报告;当sae字段156的内容指示启用抑制时,给定的指令不报告任何种类的浮点异常标记,并且不引起任何浮点异常处置程序。

舍入运算控制字段158——其内容区分要实行一组舍入运算(例如,上舍入、下舍入、向零舍入以及向最近舍入)中的哪一个。因此,舍入运算控制字段158允许基于每个指令改变舍入模式。在其中处理器包括控制寄存器以用于指定舍入模式的本发明的一个实施例中,舍入运算控制字段150的内容覆盖(override)该寄存器值。

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

在无存储器访问数据变换类型运算115指令模板中,β字段154被解释为数据变换字段154b,其内容区分要实行多个数据变换(例如,无数据变换、拌和(swizzle)、广播)中的哪一个。

在a类的存储器访问120指令模板的情况下,α字段152被解释为驱逐提示字段152b,其内容区分要使用驱逐提示中的哪一个(在图1a中,分别针对存储器访问、暂时性125指令模板和存储器访问、非暂时性130指令模板指定暂时性152b.1和非暂时性152b.2),而β字段154被解释为数据操纵字段154c,其内容区分要实行多个数据操纵运算(也称为原语)(例如,无操纵、广播、源的上转换以及目的地的下转换)中的哪一个。存储器访问120指令模板包括比例字段160以及可选地包括位移字段162a或位移比例字段162b。

向量存储器指令实行从存储器的向量加载和到存储器的向量存储,具有转换支持。正如常规向量指令那样,向量存储器指令以逐个数据元素的方式从/向存储器传输数据,其中通过被选为写掩码的向量掩码的内容来命令实际传输的元素。

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

暂时性数据是很可能足够快地被再次使用以从高速缓存获益的数据。然而,这是一种提示,并且不同的处理器可以以不同的方式实现它,包括完全忽视该提示。

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

非暂时性数据是不太可能足够快地被再次使用以从一级高速缓存中的高速缓存获益并且不应被给予驱逐优先级的数据。然而,这是一种提示,并且不同的处理器可以以不同的方式实现它,包括完全忽视该提示。

b类的指令模板

在b类的指令模板的情况下,α字段152被解释为写掩码控制(z)字段152c,其内容区分由写掩码字段170控制的写掩蔽应是归并的还是归零的。

在b类无存储器访问105指令模板的情况下,β字段154的一部分被解释为rl字段157a,其内容区分要实行不同增加运算类型中的哪一个(例如,分别针对无存储器访问、写掩码控制、部分舍入控制类型运算112指令模板和无存储器访问、写掩码控制、vsize类型运算117指令模板而指定舍入157a.1和向量长度(vsize)157a.2),而β字段154的其余部分区分要实行指定类型的运算中的哪一个。在无存储器访问105指令模板中,不存在比例字段160、位移字段162a和位移比例字段162b。

在无存储器访问、写掩码控制、部分舍入控制类型运算110指令模板中,β字段154的其余部分被解释为舍入运算字段159a并禁用异常事件报告(给定的指令不报告任何种类的浮点异常标记并且不引起任何浮点异常处置程序)。

舍入运算控制字段159a——正如舍入运算控制字段158一样,其内容区分要实行一组舍入运算(例如,上舍入、下舍入、向零舍入以及向最近舍入)中的哪一个。因此,舍入运算控制字段159a允许基于每个指令改变舍入模式。在其中处理器包括控制寄存器以用于指定舍入模式的本发明的一个实施例中,舍入运算控制字段150的内容覆盖该寄存器值。

在无存储器访问、写掩码控制、vsize类型运算117指令模板中,β字段154的其余部分被解释为向量长度字段159b,其内容区分要对多个向量长度(例如,128、256或512字节)中的哪一个实行运算。

在b类的存储器访问120指令模板的情况下,β字段154的一部分被解释为广播字段157b,其内容区分是否要实行广播类型数据操纵运算,而β字段154的其余部分被解释为向量长度字段159b。存储器访问120指令模板包括比例字段160以及可选地包括位移字段162a或位移比例字段162b。

关于通用向量友好指令格式100,全运算码字段174被示为包括格式字段140、基础运算字段142和数据元素宽度字段164。虽然示出了其中全运算码字段174包括这些字段中的全部的一个实施例,但是全运算码字段174在不支持它们全部的实施例中包括少于这些字段的全部。全运算码字段174提供运算代码(运算码)。

增加运算字段150、数据元素宽度字段164和写掩码字段170允许基于以通用向量友好指令格式的每个指令来指定这些特征。

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

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

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

图2是根据本发明的实施例的图示出示例性特定向量友好指令格式的框图。图2示出特定向量友好指令格式200,其在其指定了位置、尺寸、解释、和字段顺序、以及针对那些字段中的某些的值的意义上是特定的。特定向量友好指令格式200可以用于扩展x86指令集,并且因此字段中的某些与在现存x86指令集和其扩展(例如,avx)中使用的那些类似或相同。该格式与现存x86指令集以及扩展的前缀编码字段、实际运算码字节字段、modr/m字段、sib字段、位移字段以及立即数字段保持一致。图示出来自图2的字段所映射到其中的来自图1的字段。

应理解的是,虽然出于说明性目的在通用向量友好指令格式100的情境中参考特定向量友好指令格式200描述本发明的实施例,但是本发明不限于特定向量友好指令格式200,除要求保护情况以外。例如,通用向量友好指令格式100预料到用于各字段的各种可能尺寸,而特定向量友好指令格式200被示为具有特定尺寸的字段。作为特定示例,虽然数据元素宽度字段164被图示为特定向量友好指令格式200中的一位字段,但是本发明不被如此限制(即,通用向量友好指令格式100预料到其它尺寸的数据元素宽度字段164)。

通用向量友好指令格式100包括下文中以在图2a中图示出的顺序列出的以下字段。

evex前缀(字节0-3)202——以四字节形式编码。

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

第二到第四字节(evex字节1-3)包括提供特定能力的多个位字段。

rex字段205(evex字节1,位[7-5])——包括evex.r位字段(evex字节1,位[7]-r)、evex.x位字段(evex字节1,位[6]-x)以及157bex字节1,位[5]-b)。evex.r、evex.x以及evex.b位字段提供与对应的vex位字段相同的功能,并且使用1s补码形式来编码,即,zmm0被编码为111b,zmm15被编码为0000b。指令的其它字段如本领域中已知的那样编码寄存器索引的低三位(rrr、xxx和bbb),使得可以通过添加evex.r、evex.x和evex.b来形成rrrr、xxxx和bbbb。

rex'字段110——这是rex'字段110的第一部分,并且是用于编码扩展32寄存器集中的高16个或低16个的evex.r'位字段(evex字节1,位[4]-r')。在本发明的实施例中,将该位以及如下文指示的其它位以位逆格式来存储,以(在公知的x8632位模式中)区分于bound指令,所述bound指令的实际运算码字节是62个、但是在modr/m字段(下文中描述)中不接受mod字段中的值11;本发明的替换实施例不以逆格式存储该位和下文中指示的其它位。使用值1来编码低16个寄存器。换言之,通过组合evex.r'、evex.r以及来自其它字段的其它rrr来形成r'rrrr。

运算码映射字段215(evex字节1,位[3:0]-mmmm)——其内容编码暗示前导运算码字节(of、of38或of3)。

数据元素宽度字段164(evex字节2,位[7]-w)——由记号evex.w来表示。使用evex.w来定义数据类型的粒度(尺寸)(32位数据元素或64位数据元素)。

evex.vvvv220(evex字节2,位[6:3]-vvvv)——evex.vvvv的作用可以包括以下:1)evex.vvvv编码第一源寄存器运算元,其以逆(1s补码)形式指定并针对具有两个或更多个源运算元的指令有效;2)evex.vvvv编码目的地寄存器运算元,其以1s补码形式指定以实现某些向量移位;或者3)evex.vvvv不编码任何运算元,该字段被保留并应该包含1111b。因此,evex.vvvv字段220编码以逆(1s补码)形式存储的第一源寄存器指定符的4个低阶位。取决于指令,使用额外的不同evex位字段来将指定符尺寸扩展成32个寄存器。

evex.u168类字段(evex字节2,位[2]-u)——如果evex.u=0,那么其指示a类或evex.u0;如果evex.u=1,那么其指示b类或evex.u1。

前缀编码字段225(evex字节2,位[1:0]-pp)——对基础运算字段提供附加位。除了对以evex前缀格式的旧有(legacy)sse指令提供支持之外,这还具有使simd前缀紧凑的益处(evex前缀仅要求两个位,而不是要求字节表达simd前缀)。在一个实施例中,为了支持使用以旧有格式和以evex前缀格式二者的simd前缀(66h、f2h、f3h)的旧有sse指令,这些旧有simd前缀被编码到simd前缀编码字段中;并且在运行时间,它们在被提供给解码器的pla之前被扩充成旧有simd前缀(因此,pla可以执行这些旧有指令的旧有格式和evex格式二者而无需修改)。虽然较新的指令可以使用evex前缀编码字段的内容直接作为运算码扩展,但是某些实施例为了一致性而以类似方式扩充,但是允许由这些旧有simd前缀指定不同的含义。替换实施例可以重新设计pla以支持2位simd前缀编码,并且因此不需要扩充。

α字段152(evex字节3,位[7]-eh;也称为evex.eh、evex.rs、evex.rl、evex.写掩码控制以及evex.n;也用α图示)——如先前所述,该字段是情境特定的。

β字段154(evex字节3,位[6:4]-sss,也称为evex.s2-0、evex.r2-0、evex.rr1、evex.ll0、evex.llb;也用βββ图示)——如先前所述,该字段是情境特定的。

rex'字段110——这是rex'字段的其余部分,并且是可以用于编码扩展32寄存器集的中高16个或低16个的evex.v'位字段(evex字节3,位[3]-v)。以位逆格式存储该位。使用值1来编码低16个寄存器。换言之,通过组合evex.v、evex.vvvv来形成v'vvvv。

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

实际运算码字段230(字节4)也称为运算码字节。在该字段中指定运算码的一部分。

modr/m字段240(字节5)包括mod字段242、reg字段244和r/m字段246。如先前所述,mod字段242的内容在存储器访问和无存储器访问运算之间进行区分。reg字段244的作用可以总结为两种情况:编码目的地寄存器运算元或源寄存器运算元,或者被视为运算码扩展而不用于编码任何指令运算元。r/m字段246的作用包括以下:编码引用存储器地址的指令运算元,或者编码目的地寄存器运算元或源寄存器运算元。

比例、索引、基础(sib)字节(字节6)——如先前所述,比例字段150的内容用于存储器地址生成。sib.xxx254和sib.bbb256——先前已关于寄存器索引xxxx和bbbb提及了这些字段的内容。

位移字段162a(字节7-10)——当mod字段242包含10时,字节7-10是位移字段162a,并且其与旧有32位位移(disp32)起相同作用并且以字节粒度起作用。

位移因数字段162b(字节7)——当mod字段242包含01时,字节7是位移因数字段162b。该字段的位置与旧有x86指令集8位位移(disp8)的位置相同,其以字节粒度起作用。由于disp8是扩展符号,因此其可以仅在-128和127字节偏移之间寻址;在64字节高速缓存线方面,disp8使用8位,其可以被设置成仅四个真正有用的值-128、-64、0和64;由于常常需要较大的范围,因此使用disp32;然而,disp32需要4字节。相比于disp8和disp32,位移因数字段162b是disp8的重新解释;当使用位移因数字段162b时,通过位移因数字段的内容乘以存储器运算元访问的尺寸(n)来确定实际位移。这一类型的位移被称为disp8*n。这降低了平均指令长度(单个字节用于位移但是具有大得多的范围)。这样的经压缩的位移是基于以下假设:有效位移是存储器访问的粒度的倍数,并且因此,不需要编码地址偏移的冗余低阶位。换言之,位移因数字段162b替代了旧有x86指令集8位位移。因此,以与x86指令集8位位移相同的方式来编码位移因数字段162b(因此,在modrm/sib编码规则中没有改变),仅有的例外是disp8被过载为disp8*n。换言之,在编码规则或编码长度中没有改变,而是仅在由硬件进行的位移值的解释中有改变(这需要将位移缩放存储器运算元的尺寸以获得逐字节的地址偏移)。

立即数字段172如先前所述地进行运算。

全运算码字段

图2b是根据本发明的一个实施例的图示出构成全运算码字段174的特定向量友好指令格式200的字段的框图。具体来说,全运算码字段174包括格式字段140、基础运算字段142和数据元素宽度(w)字段164。基础运算字段142包括前缀编码字段225、运算码映射字段215以及实际运算码字段230。

寄存器索引字段

图2c是根据本发明的一个实施例的图示出构成寄存器索引字段144的特定向量友好指令格式200的字段的框图。具体来说,寄存器索引字段144包括rex字段205、rex'字段210、modr/m.reg字段244、modr/m.r/m字段246、vvvv字段220、xxx字段254以及bbb字段256。

增加运算字段

图2d是根据本发明的一个实施例的图示出构成增加运算字段150的特定向量友好指令格式200的字段的框图。当类(u)字段168包含0时,其表示evex.u0(a类168a);当其包含1时,其表示evex.u1(b类168b)。当u=0且mod字段242包含11(表示无存储器访问运算)时,α字段152(evex字节3,位[7]-eh)被解释为rs字段152a。当rs字段152a包含1(舍入152a.1)时,β字段154(evex字节3,位[6:4]-sss)被解释为舍入控制字段154a。舍入控制字段154a包括一位sae字段156以及两位舍入运算字段158。当rs字段152a包含0(数据变换152a.2)时,β字段154(evex字节3,位[6:4]-sss)被解释为三位数据变换字段154b。当u=0并且mod字段242包含00、01或10(表示存储器访问运算)时,α字段152(evex字节3,位[7]-eh)被解释为驱逐提示(eh)字段152b并且β字段154(evex字节3,位[6:4]-sss)被解释为三位数据操纵字段154c。

当u=1时,α字段152(evex字节3,位[7]-eh)被解释为写掩码控制(z)字段152c。当u=1且mod字段242包含11(表示无存储器访问运算)时,β字段154的一部分(evex字节3,位[4]-s0)被解释为rl字段157a;当其包含1(舍入157a.1)时,β字段154的其余部分(evex字节3,位[6-5]-s2-1)被解释为舍入运算字段159a,而当rl字段157a包含0(vsize157.a2)时,β字段154的其余部分(evex字节3,位[6-5]-s2-1)被解释为向量长度字段159b(evex字节3,位[6-5]-l1-0)。当u=1并且mod字段242包含00、01或10(表示存储器访问运算)时,β字段154(evex字节3,位[6:4]-sss)被解释为向量长度字段159b(evex字节3,位[6-5]-l1-0)以及广播字段157b(evex字节3,位[4]-b)。

c.示例性寄存器架构

图3是根据本发明的一个实施例的寄存器架构300的框图。在图示出的实施例中,存在512位宽的32个向量寄存器310;这些寄存器被引用为zmm0到zmm31。低16个zmm寄存器的低阶256位覆盖在寄存器ymm0-16上。低16个zmm寄存器的低阶128位(ymm寄存器的低阶128位)覆盖在寄存器xmm0-15上。特定向量友好指令格式200在如下面的表格中说明的这些覆盖寄存器文件上进行运算。

换言之,向量长度字段159b在最大长度和一个或多个其它较短长度之间进行选择,其中每个这样的较短长度是前一长度的长度的一半;并且不具有向量长度字段159b的指令模板在最大向量长度上进行运算。此外,在一个实施例中,特定向量友好指令格式200的b类指令模板对打包或标量单精度/双精度浮点数据以及打包或标量整数数据进行运算。标量运算是对zmm/ymm/xmm寄存器中的最低阶数据元素位置实行的运算;较高阶数据元素位置取决于实施例而要么保留与它们在指令之前相同,要么被归零。

写掩码寄存器315——在图示出的实施例中,存在8个写掩码寄存器(k0到k7),每一个在尺寸上都是64位。在替换实施例中,写掩码寄存器315在尺寸上是16位。如先前所述,在本发明的一个实施例中,向量掩码寄存器k0不能用作写掩码;当通常指示k0的编码用于写掩码时,其选择硬接线的写掩码0xffff,有效地针对该指令禁用了写掩蔽。

通用寄存器325——在图示出的实施例中,存在16个64位通用寄存器,其与现存的x86寻址模式一起用来寻址存储器运算元。通过名称rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp以及r8到r15来引用这些寄存器。

标量浮点堆栈寄存器文件(x87堆栈)345(其别名为mmx打包整数扁平寄存器文件350)——在图示出的实施例中,x87堆栈是用于对使用x87指令集扩展的32/64/80位浮点数据实行标量浮点运算的8元素堆栈;而mmx寄存器被用来对64位打包整数数据实行运算以及保存用于在mmx和xmm寄存器之间实行的一些运算的运算元。

本发明的替换实施例可以使用更宽或更窄的寄存器。附加地,本发明的替换实施例可以使用更多、更少或不同的寄存器文件和寄存器。

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

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

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

在图4a中,处理器流水线400包括提取阶段402、长度解码阶段404、解码阶段406、分配阶段408、重命名阶段410、调度(也称为派遣或发布)阶段412、寄存器读取/存储器读取阶段414、执行阶段416、写回/存储器写入阶段418、异常处置阶段422以及提交阶段424。

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

前端单元430包括分支预测单元432,其被耦合到指令高速缓存单元434,该指令高速缓存单元434被耦合到指令转译后备缓冲器(tlb)436,该指令转译后备缓冲器(tlb)436被耦合到指令提取单元438,该指令提取单元438被耦合到解码单元440。解码单元440(或解码器)可以解码指令,并且作为输出生成解码自原始指令、或以其它方式反映原始指令、或导出自原始指令的一个或多个微运算、微代码进入点、微指令、其它指令或其它控制信号。可以使用各种不同机制来实现解码单元440。适当机制的示例包括但不限于,查找表、硬件实现方式、可编程逻辑阵列(pla)、微代码只读存储器(rom)等等。在一个实施例中,核心490包括微代码rom或存储用于某些宏指令的微代码的其它介质(例如,在解码单元440中或以其它方式在前端单元430内)。解码单元440被耦合到执行引擎单元450中的重命名/分配器单元452。

执行引擎单元450包括重命名/分配器单元452,其被耦合到引退单元454和一组一个或多个调度器单元456。(一个或多个)调度器单元456表示任何数量的不同调度器,包括保留站、中央指令窗口等等。(一个或多个)调度器单元456被耦合到(一个或多个)物理寄存器文件单元458。(一个或多个)物理寄存器文件单元458中的每一个表示一个或多个物理寄存器文件,其中的不同物理寄存器文件存储一个或多个不同的数据类型,诸如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针)等等。在一个实施例中,(一个或多个)物理寄存器文件单元458包括向量寄存器单元、写掩码寄存器单元以及标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器以及通用寄存器。(一个或多个)物理寄存器文件单元458被引退单元454重叠以说明可以以其实现寄存器重命名和无序执行的各种方式(例如,使用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器文件;使用(一个或多个)未来文件、(一个或多个)历史缓冲器以及(一个或多个)引退寄存器文件;使用寄存器映射和寄存器池等等)。引退单元454和(一个或多个)物理寄存器文件单元458被耦合到(一个或多个)执行集群460。(一个或多个)执行集群460包括一组一个或多个执行单元462以及一组一个或多个存储器访问单元464。执行单元462可以实行各种运算(例如,移位、加法、减法、乘法)并且对各种数据类型(例如,标量浮点、打包整数、打包浮点、向量整数、向量浮点)。虽然一些实施例可以包括专用于特定功能或功能集的数个执行单元,但是其它实施例可以包括全部实行所有功能的仅一个执行单元或多个执行单元。(一个或多个)调度器单元456、(一个或多个)物理寄存器文件单元458以及(一个或多个)执行集群460被示为可能是复数的,因为某些实施例针对某些数据/运算类型创建单独的流水线(例如,标量整数流水线、标量浮点/打包整数/打包浮点/向量整数/向量浮点流水线、和/或存储器访问流水线,它们各自具有其自己的调度器单元、(一个或多个)物理寄存器文件单元和/或执行集群——并且在单独的存储器访问流水线的情况下,实现其中该流水线的仅执行集群具有(一个或多个)存储器访问单元464的某些实施例)。还应理解的是,在使用单独的流水线的情况下,这些流水线中的一个或多个可以是无序发布/执行而其余部分是有序的。

该组存储器访问单元464被耦合到存储器单元470,存储器单元470包括数据tlb单元472,数据tlb单元472被耦合到数据高速缓存单元474,数据高速缓存单元474被耦合到2级(l2)高速缓存单元476。在一个示例性实施例中,存储器访问对于464可以包括负载单元、存储地址单元以及存储数据单元,其每一个都被耦合到存储器单元470中的数据tlb单元472。指令高速缓存单元434进一步被耦合到存储器单元中的2级(l2)高速缓存单元476。2级高速缓存单元476被耦合到高速缓存的一个或多个其它层并最终被耦合到主存储器。

作为示例,示例性寄存器重命名、无序发布/执行核心架构可以实现如下的流水线400:1)指令提取438实行提取和长度解码阶段402和404;2)解码单元440实行解码阶段406;3)重命名/分配器单元452实行分配阶段408和重命名阶段410;4)(一个或多个)调度器单元456实行调度阶段412;5)(一个或多个)物理寄存器文件单元458和存储器单元470实行寄存器读取/存储器读取阶段414;执行集群460实行执行阶段416;6)存储器单元470和(一个或多个)物理寄存器文件单元458实行写回/存储器写入阶段418;7)在异常处置阶段422中可能涉及到各种单元;以及8)引退单元454和(一个或多个)物理寄存器文件单元458实行提交阶段424。

核心490可以支持一个或多个指令集(例如,x86指令集(以及已经被添加有较新版本的某些扩展);加州桑尼维尔的mips科技的mips指令集;加州桑尼维尔的arm控股公司的arm指令集(以及诸如neon之类的可选附加扩展)),包括本文中描述的(一个或多个)指令。在一个实施例中,核心490包括用以支持打包数据指令集扩展(例如,avx1、avx2)的逻辑,从而允许使用打包数据来实行由许多多媒体应用使用的运算。

应理解的是,核心可以支持多线程(执行两个或更多个并行的运算集或线程集),并且可以以各种方式来这样做,所述方式包括时间切片多线程、同时多线程(其中单个物理核心为物理核心正同时进行多线程的线程中的每一个提供逻辑核心)或者其组合(例如,时间切片提取和解码以及其后的同时多线程,诸如英特尔®超线程技术中那样)。

虽然在无序执行的情境中描述了寄存器重命名,但是应理解的是,寄存器重命名可以用在有序架构中。虽然所说明的处理器的实施例还包括单独的指令和数据高速缓存单元434/474以及共享l2高速缓存单元476,但是替换实施例可以具有用于指令和数据二者的单个内部高速缓存,诸如例如,1级(l1)内部高速缓存或多级内部高速缓存。在一些实施例中,系统可以包括内部高速缓存和在核心和/或处理器外部的外部高速缓存的组合。替换地,所有高速缓存都可以在核心和/或处理器外部。

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

图5a是根据本发明的实施例的单个处理器核心以及其到管芯上互连网络502以及与其2级(l2)高速缓存的本地子集504的连接的框图。在一个实施例中,指令解码器500支持具有打包数据指令集扩展的x86指令集。l1高速缓存506允许到标量和向量单元中的对高速缓存存储器的低延时访问。虽然(为了简化设计)在一个实施例中标量单元508和向量单元510使用单独的寄存器集(分别为标量寄存器512和向量寄存器514)并且在它们之间传输的数据被写入到存储器并然后从1级(l1)高速缓存506读回来,但是本发明的替换实施例可以使用不同的方法(例如,使用单个寄存器集或包括允许在两个寄存器文件之间传输数据而无需写入和读回的通信路径)。

l2高速缓存的本地子集504是被每个处理器核心一个地划分成单独的本地子集的全局l2高速缓存的一部分。每个处理器核心具有到其自己的l2高速缓存的本地子集504的直接访问路径。由处理器核心读取的数据被存储在其l2高速缓存子集504中并且可以被快速访问,与其它处理器核心访问它们自己的本地l2高速缓存子集并行地进行。由处理器核心写入的数据被存储在其自己的l2高速缓存子集504中并且如果必要的话从其它子集中被清除。环形网络确保了共享数据的一致性。该环形网络是双向的以允许诸如处理器核心、l2高速缓存以及其它逻辑块之类的代理在芯片内与彼此通信。每个环形数据路径在每个方向上都是1012位宽。

图5b是根据本发明的实施例的图5a中的处理器核心的一部分的展开图。图5b包括l1数据高速缓存506a(l1高速缓存504的一部分)以及关于向量单元510和向量寄存器514的更多细节。具体来说,向量单元510是16宽向量处理单元(vpu)(参见16宽alu528),其执行整数指令、单精度浮动指令以及双精度浮动指令中的一个或多个。vpu支持利用拌和单元520来拌和寄存器输入、利用数值转换单元522a-b来进行数值转换以及利用复制单元524来对存储器输入进行复制。写掩码寄存器526允许断言(predicate)所产生的向量写入。

图6是根据本发明的实施例的可以具有多于一个核心、可以具有集成存储器控制器并且可以具有集成图形模块的处理器600的框图。图6中的实线框图示出具有单个核心602a、系统代理610、一组一个或多个总线控制器单元616的处理器600,而虚线框的可选附加项图示出具有多个核心602a-n、系统代理单元610中的一组一个或多个集成存储器控制器单元614以及专用逻辑608的替换处理器600。

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

存储器层级包括核心内的一级或多级高速缓存、一组一个或多个共享高速缓存单元606以及被耦合到该组集成存储器控制器单元614的外部存储器(未示出)。该组共享高速缓存单元606可以包括一个或多个中间级高速缓存,诸如2级(l2)、3级(l3)、4级(l4)或其它级的高速缓存、最末级高速缓存(llc)和/或其组合。虽然在一个实施例中基于环形的互连单元612将集成图形逻辑608、该组共享高速缓存单元606以及系统代理单元610/(一个或多个)集成存储器控制器单元614进行互连,但是替换实施例可以使用任何数量的公知技术以便互连此类单元。在一个实施例中,在一个或多个高速缓存单元606和核心602-a-n之间维持一致性。

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

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

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

现在参考图7,示出了根据本发明的一个实施例的系统700的框图。系统700可以包括一个或多个处理器710、715,其被耦合到控制器中枢720。在一个实施例中,控制器中枢720包括图形存储器控制器中枢(gmch)790以及输入/输出中枢(ioh)750(其可以在单独的芯片上);gmch790包括存储器740和协处理器745所耦合到的存储器和图形控制器;ioh750将输入/输出(i/o)设备760耦合到gmch790。替换地,存储器和图形控制器中的一个或二者被集成在(如本文中描述的)处理器内,存储器740和协处理器745被直接耦合到处理器710和与ioh750在单个芯片中的控制器中枢720。

在图7中用虚线标明了附加处理器715的可选性质。每个处理器710、715可以包括本文中描述的处理核心中的一个或多个并且可以是处理器600的某一版本。

存储器740可以例如是动态随机存取存储器(dram)、相变存储器(pcm)或二者的组合。针对至少一个实施例,控制器中枢720经由多点分支(multi-drop)总线(诸如前侧总线(fsb)、点到点接口(诸如快速路径互连(qpi))或者类似连接)795与(一个或多个)处理器710、715通信。

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

就包括架构、微架构、热学、功率消耗特性等的优点的度量谱而言,在物理资源710、715之间可以存在各种差异。

在一个实施例中,处理器710执行控制通用类型的数据处理运算的指令。嵌入在指令内的可以是协处理器指令。处理器710将这些协处理器指令识别为应由附连的协处理器745来执行的类型。相应地,处理器710在协处理器总线或其它互连上将这些协处理器指令(或表示协处理器指令的控制信号)发给协处理器745。(一个或多个)协处理器745接受并执行接收到的协处理器指令。

现在参考图8,示出了根据本发明的实施例的第一更具体的示例性系统800的框图。如图8中所示,多处理器系统800是点到点互连系统,并且包括经由点到点互连850进行耦合的第一处理器870和第二处理器880。处理器870和880中的每一个可以是处理器600的某一版本。在本发明的一个实施例中,处理器870和880分别是处理器710和715,而协处理器838是协处理器745。在另一实施例中,处理器870和880分别是处理器710和协处理器745。

处理器870和880被示为分别包括集成存储器控制器(imc)单元872和882。处理器870还包括作为其总线控制器单元的一部分的点到点(p-p)接口876和878;类似地,第二处理器880包括p-p接口886和888。处理器870、880可以使用p-p接口电路878、888经由点到点(p-p)接口850交换信息。如图8中所示,imc872和882将处理器耦合到相应的存储器、即存储器832和存储器834,其可以是本地附连到相应处理器的主存储器的部分。

处理器870、880可以各自使用点到点接口电路876、894、886、898经由各个p-p接口852、854与芯片集890交换信息。芯片集890可以可选地经由高性能接口839与协处理器838交换信息。在一个实施例中,协处理器838是专用处理器,诸如例如,高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器等等。

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

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

如图8中所示,各种i/o设备814可以被耦合到第一总线816以及总线桥818,该总线桥818将第一总线816耦合到第二总线820。在一个实施例中,诸如协处理器、高吞吐量mic处理器、gpgpu、加速器(诸如例如,图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列或任何其它处理器之类的一个或多个附加处理器815被耦合到第一总线816。在一个实施例中,第二总线820可以是低引脚数(lpc)总线。各种设备可以被耦合到第二总线820,所述设备包括例如,键盘和/或鼠标822、通信设备827以及诸如盘驱动器或其它大容量存储设备之类的存储单元828,其在一个实施例中可以包括指令/代码和/或数据830。此外,音频i/o824可以被耦合到第二总线820。注意,其它架构也是可能的。例如,作为图8的点到点架构的替代,系统可以实现多点分支总线或其它此类架构。

现在参考图9,示出了根据本发明的实施例的第二更具体的示例性系统900的框图。图8和9中的相似元件具有相似的参考标号,并且已经从图9中省略了图8的某些方面以便避免使图9的其它方面变晦涩。

图9图示出处理器870、880可以分别包括集成存储器和i/o控制逻辑(“cl”)872和882。因此,cl872、882包括集成存储器控制器单元并且包括i/o控制逻辑。图9图示出不仅存储器832、834被耦合到cl872、882,还有i/o设备914也被耦合到控制逻辑872、882。旧有i/o设备915被耦合到芯片集890。

现在参考图10,示出了根据本发明的实施例的soc1000的框图。图6中的类似元件带有相似的参考标号。而且,虚线框是更高级的soc上的可选特征。在图10中,(一个或多个)互连单元1002被耦合到:应用处理器1010,其包括一组一个或多个核心202a-n和(一个或多个)共享高速缓存单元606;系统代理单元610;(一个或多个)总线控制器单元616;(一个或多个)集成存储器控制器单元614;一组一个或多个协处理器1020,其可以包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(sram)单元1030;直接存储器访问(dma)单元1032;以及用于耦合到一个或多个外部显示器的显示单元1040。在一个实施例中,(一个或多个)协处理器1020包括专用处理器,诸如例如,网络或通信处理器、压缩引擎、gpgpu、高吞吐量mic处理器、嵌入式处理器等等。

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

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

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

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

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

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

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

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

用于利用索引和立即数实行向量重组的方法和装置

本发明的一个实施例包括指令(在本文中有时也称为vpermbi/wi),其利用立即数控制来实行向量字节/字重组,其中仅针对其中控制寄存器中的最高有效位(msb)匹配立即数值的最低有效位(lsb)位的元素来实行重组。如下文所讨论的,可以使用这些指令来高效地实现常用于许多高性能计算(hpc)工作负荷中的表查找。

如图12中图示出的,可以在其上实现本发明的实施例的示例性处理器1255包括具有用于解码本文中描述的向量重组指令以生成多个微运算(uops)的向量重组解码逻辑1231的解码器1230以及用于执行所述向量重组微运算的向量重组执行逻辑1241。现在将描述示例性处理器的附加细节。然而应注意的是,本发明的根本原理不限于微代码处理器或任何特定类型的处理器架构。

所图示出的处理器架构包括一组通用寄存器(gpr)1205、一组向量寄存器1206以及一组掩码寄存器1207。在一个实施例中,可以将多个向量数据元素打包到每个向量寄存器1206中,该向量寄存器1206可以具有512位宽以用于存储两个256位值、四个128位值、八个64位值、16个32位值等等。然而,本发明的根本原理不限于任何特定的向量数据尺寸/类型。在一个实施例中,掩码寄存器1207包括用于对存储在向量寄存器1206中的值实行位掩蔽运算的八个64位运算元掩码寄存器(例如,被实现为上文所述的掩码寄存器k0-k7)。然而,本发明的根本原理不限于任何特定的掩码寄存器尺寸/类型。

出为了简便性在图12中图示出单个处理器核心(“核心0”)的细节。然而,将理解的是,图12中示出的每个核心可以具有与核心0相同的一组逻辑。例如,每个核心可以包括专用1级(l1)高速缓存1212和2级(l2)高速缓存1211以用于根据指定的高速缓存管理策略来高速缓存指令和数据。l1高速缓存1212包括用于存储指令的单独的指令高速缓存1220和用于存储数据的单独的数据高速缓存1221。以可以是固定尺寸(例如,在长度上是64、128、512字节)的高速缓存线的粒度来管理存储在各种处理器高速缓存内的指令和数据。该示例性实施例的每个核心具有用于从主存储器1200和/或共享3级(l3)高速缓存1216提取指令的指令提取单元1210;用于解码指令(例如,将程序指令解码成微运算或“uops”)的解码单元1220;用于执行指令的执行单元1240;以及用于引退指令并写回结果的写回单元1250。

指令提取单元1210包括各种公知的组件,包括用于存储要从存储器1200(或高速缓存中的一个)中提取的下一指令的地址的下一指令指针1203;用于存储最近使用的虚拟到物理指令地址的映射以改进地址转译的速度的指令转译后备缓冲器(itlb)1204;用于推测性地预测指令分支地址的分支预测单元1202;以及用于存储分支地址和目标地址的分支目标缓冲器(btb)1201。一旦被提取,然后就可以将指令流式传输至包括解码单元1230、执行单元1240以及写回单元1250的指令流水线的其余阶段。本领域普通技术人员很好地理解这些单元中的每一个的结构和功能,并且将不在本文对其进行详细描述,以避免使本发明的不同实施例的相关方面变晦涩。

如所提及的,在一个实施例中,向量重组指令在立即数的控制下调换存储在源寄存器中的连续的位或位群组的位置并将结果存储在目的地寄存器中,所述立即数指定要颠倒/调换的位群组的尺寸。在一个实施例中,仅准许2的幂次方的位群组尺寸,使得所有位群组具有用以调换的对。

图13图示出向量重组逻辑1300的一个实施例,其响应于控制寄存器1310和立即数值1311中的一组重组控制元素而将来自源寄存器1305的数据元素重组到目的地寄存器1315中。在一个实施例中,控制寄存器1310中的每个元素对应于目的地寄存器1315中的数据元素,并且包括识别要拷贝到目的地的源寄存器1305内的元素的索引值。例如,在图13中,控制寄存器1310中的每个字节(例如,最低有效字节)对应于在对应位置处的目的地寄存器1315中的字节,并且包括识别要被拷贝到该位置的来自源寄存器1305的数据元素的索引值。在一个实施例中,索引值包括每个字节的6个位,其识别来自源寄存器1305的64个源字节b0-b63中的一个。

如所提及的,在一个实施例中,仅针对其中在控制寄存器1310中的对应控制字节中的最高有效位(msb)匹配立即数值1311的最低有效位(lsb)的那些目的地数据元素实行重组。在图13中,例如,立即数值1311的两个最低有效位(其被突出标识)是01。结果,仅使用在最高有效位位置中具有01的那些控制元素来识别要被拷贝到目的地的来自所述源的数据元素。因此,使用第一控制字节01000011来将字节b3从所述源重组到目的地1315中的第一字节(即,因为其以01开始并且具有索引值000011,从而识别字节b3)。然而,因为下一控制字节在最高有效位位置中不具有01(即,其具有值10110010),因此不将其用于识别要被拷贝到目的地中的下一字节位置的来自源1305的值(如通过图13中的下一字节位置中的---所指示的)。在一个实施例中,不修改目的地中的该字节位置,以便维持先前存储在其中的任何值。第三控制字节是01000100。因为其以01开始(对应于立即数的最低有效位),因此使用其索引值000100来识别要从所述源拷贝到目的地的字节b4。在重组之后,与以01开始的控制字节相对应的全部目的地字节都被填充有通过控制字节的索引值识别的源字节,而与以00、10或11开始的控制字节相对应的全部目的地字节保留不修改。

在图示出的实施例中,源寄存器1305、控制寄存器1310以及目的地寄存器1315各自包括能够存储64字节值的512位向量寄存器。可以使用不同尺寸的数据元素来应用相同的基本原理。例如,在一个实施例中,16位数据元素(字)被存储在源1305中并使用对于其而言最高有效n位与立即数的最低有效n位相对应的控制元素而被重组到目的地1315。也可以使用32位、64位和/或128位的数据元素尺寸。此外,如图13中所示,可以提供掩码值1312以对存储在目的地中的结果实行写掩蔽。

在一个实施例中,本文中描述的技术可以用于将数据元素从多个源寄存器重组到单个目的地寄存器中。这对于诸如其中跨多个源寄存器来分布表的表查找之类的应用来说可能尤其有用。

作为示例,图14图示出其中源数据元素跨四个寄存器:zmm1、zmm2、zmm3和zmm4进行分布的一个实施例。向量重组逻辑1300可以执行以下四个vpermbi指令实例,其各自具有不同的立即数值(0x0、0x1、0x2和0x3)以有效地启用存储在zmm31内的不同的控制元素(即,具有与立即数的lsb相对应的msb的那些控制元素)。

换言之,针对具有立即数0x0的第一指令,仅使用来自zmm31的具有与立即数值的lsb(例如,00)相对应的msb的那些控制元素来将数据元素从zmm1重组到zmm0。类似地,针对具有立即数0x1的第二指令,仅使用来自zmm31的具有与立即数值的lsb(例如,01)相对应的msb的那些控制元素来将数据元素从zmm2重组到zmm0;针对具有立即数0x2的第三指令,仅使用来自zmm31的具有与立即数值的lsb(例如,10)相对应的msb的那些控制元素来将数据元素从zmm3重组到zmm0;并且针对具有立即数0x3的第四指令,仅使用来自zmm31的具有与立即数值的lsb(例如,11)相对应的msb的那些控制元素来将数据元素从zmm4重组到zmm0。最终,目的地寄存器zmm0包含基于立即数和来自zmm31的控制元素中的每一个从四个寄存器zmm1-zmm4中的每一个重组的数据元素。

在一个实施例中,可以使用上面的技术来实行其中在zmm1、zmm2、zmm3和zmm4中存储256b表的高效表查找操作。在所说明的指令序列之后,目的地zmm0寄存器包含64个查找到的字节。

图15中图示出根据本发明的一个实施例的方法。所述方法可以实现在本文中描述的架构的情境内,但是不限于任何特定的处理器架构。

在1501处,从存储器提取或者从指令高速缓存读取向量重组指令。在1502处,将要重组的数据元素存储在源向量寄存器中并将控制元素存储在控制向量寄存器中。在1503处,针对控制向量寄存器中的每个控制元素,将最高有效n位与立即数的最低有效n位进行比较。如果在1504处确定了存在匹配,那么在1505处从控制元素中读取索引值以识别源数据元素,并将该源数据元素拷贝到与控制元素相对应的目的地数据元素。如果控制元素的msb不等于立即数的lsb,那么在1506处,对应的目的地数据元素保留不修改。注意,针对控制向量寄存器中的每个控制元素实行流程图的开始于操作1503的部分。

在前述说明书中,参考其具体示例性实施例描述了本发明的实施例。然而,将显而易见的是,可以对其进行各种修改和改变而不脱离如在随附的权利要求中阐述的本发明的较广的精神和范围。相应地,将以说明性而不是限制性意义来看待说明书和附图。

本发明的实施例可以包括上文已描述的各种步骤。所述步骤可以体现在可以用于使通用或专用处理器实行所述步骤的机器可执行指令中。替换地,可以通过包含用于实行所述步骤的硬接线逻辑的特定硬件组件或通过经编程的计算机组件和自定义硬件组件的任何组合来实行这些步骤。

如本文中描述的,指令可以指代诸如专用集成电路(asic)之类的被配置成实行某些操作或具有预定功能的硬件或者存储在以非暂时性计算机可读介质来体现的存储器中的软件指令的特定配置。因此,可以使用在一个或多个电子设备(例如,终端站、网络元件等)上存储和执行的代码和数据来实现附图中所示的技术。这样的电子设备通过使用计算机机器可读介质来存储和(内部地和/或与网络上的其它电子设备)传送代码和数据,所述计算机机器可读介质诸如是非暂时性计算机机器可读存储介质(例如,磁盘、光盘、随机存取存储器、只读存储器、闪速存储器设备、相变存储器)以及暂时性计算机机器可读通信介质(例如,电、光、声或其它形式的传播信号——诸如载波、红外信号、数字信号等)。此外,此类电子设备通常包括一组一个或多个处理器,其被耦合到一个或多个其它组件,诸如一个或多个存储设备(非暂时性机器可读存储介质)、用户输入/输出设备(例如,键盘、触摸屏和/或显示器)以及网络连接。该组处理器与其它组件的耦合通常是通过一个或多个总线和桥(也称为总线控制器)。存储设备和承载网络通信量的信号分别表示一个或多个机器可读存储介质和机器可读通信介质。因此,给定电子设备的存储设备通常存储代码和/或数据以用于在该电子设备的该组一个或多个处理器上执行。当然,可以使用软件、固件和/或硬件的不同组合来实现本发明的实施例的一个或多个部分。遍及本详细描述,出于解释的目的,阐述众多具体细节以便提供对本发明的透彻理解。然而,对于本领域技术人员来说将会显而易见的是,可以在没有这些具体细节中的某些的情况下实践本发明。在某些情况下,没有详尽地描述公知的结构和功能,以便避免使本发明的主题变晦涩。因而,应按照随附的权利要求来评判本发明的范围和精神。

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