CN108292228B - 用于基于通道的步进收集的***、设备和方法 - Google Patents

用于基于通道的步进收集的***、设备和方法 Download PDF

Info

Publication number
CN108292228B
CN108292228B CN201680069932.9A CN201680069932A CN108292228B CN 108292228 B CN108292228 B CN 108292228B CN 201680069932 A CN201680069932 A CN 201680069932A CN 108292228 B CN108292228 B CN 108292228B
Authority
CN
China
Prior art keywords
instruction
field
data
memory
register
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201680069932.9A
Other languages
English (en)
Other versions
CN108292228A (zh
Inventor
E.奥尔德-艾哈迈德-瓦尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN108292228A publication Critical patent/CN108292228A/zh
Application granted granted Critical
Publication of CN108292228B publication Critical patent/CN108292228B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

公开了用于基于通道的步进收集的***、设备和方法的实施例。在一个实施例中,一种设备包括:用于对指令进行解码的解码器,其中所述指令包括针对到存储器的地址的索引和打包数据目的地寄存器操作数的字段;和执行电路,所述执行电路用于执行已解码的指令以使用所述指令的索引从存储器中提取定义的类型数量的数据元素,并且对于每种类型,将所提取的数据元素存储在专用于该类型的打包数据目的地寄存器的一个或多个通道中,其中各类型之间的相关数据元素是分开的步进数据元素。

Description

用于基于通道的步进收集的***、设备和方法
技术领域
本发明的领域一般涉及计算机处理器架构,并且更具体地涉及当被执行时导致特定结果的指令。
背景技术
在可以被各个地访问的个体元素中进行组织的数据结构在各种应用中是常见的。例如,RGB(红-绿-蓝)是媒体应用中使用的许多编码方案中的通用格式。在这种情况下,数据结构由连续存储并且相同大小(例如,32位)的三种元素类型R、G和B组成。高性能计算应用中常见的另一示例是坐标,诸如2D空间中的XY或3D空间中的XYZ。具有更多元素的其他结构也在一些应用中显现。
发明内容
根据本公开的第一方面,提供了一种设备,包括:用于对指令进行解码的解码器,其中所述指令包括针对到存储器的地址的索引和打包数据目的地寄存器操作数的字段;和执行电路,所述执行电路用于执行已解码的指令以使用所述指令的索引从存储器中提取定义的类型数量的数据元素,并且对于每种类型,将所提取的数据元素存储在专用于该类型的打包数据目的地寄存器的一个或多个通道中,其中各类型之间的相关数据元素是分开的步进数据元素。
根据本公开的第二方面,提供了一种方法,包括:对指令进行解码,其中所述指令包括针对到存储器的地址的索引和打包数据目的地寄存器操作数的字段;和执行已解码的指令以使用所述指令的索引从存储器中提取定义的类型数量的数据元素,并且对于每种类型,将所提取的数据元素存储在专用于该类型的打包数据目的地寄存器的一个或多个通道中,其中各类型之间的相关数据元素是分开的步进数据元素。
根据本公开的第三方面,提供了一种存储指令的非暂时性机器可读介质,所述指令在被执行时使得处理器执行方法,所述方法包括:对指令进行解码,其中所述指令包括针对到存储器的地址的索引和打包数据目的地寄存器操作数的字段;和执行已解码的指令以使用所述指令的索引从存储器中提取定义的类型数量的数据元素,并且对于每种类型,将所提取的数据元素存储在专用于该类型的打包数据目的地寄存器的一个或多个通道中,其中各类型之间的相关数据元素是分开的步进数据元素。
附图说明
在附图的各图中通过示例而非限制的方式来说明本发明,其中相同的附图标号表示类似的元素,并且其中:
图1图示出了打包数据(SI MD)寄存器和该寄存器内的通道的实施例;
图2图示出了用以处理gatherstride指令(收集步进指令)的硬件的实施例;
图3图示出了gatherstride指令的执行的实施例;
图4图示出了gatherstride指令的实施例;
图5图示出了由处理器执行以处理gatherstride指令的方法的实施例;
图6图示出了由处理器执行以处理用于数据类型的gatherstride指令的方法的执行部分的实施例;
图7A-图7B是图示出根据本发明实施例的通用矢量友好指令格式及其指令模板的框图;
图8A-图8D是图示出根据本发明实施例的示例性特定矢量友好指令格式的框图;
图9是根据本发明的一个实施例的寄存器架构的框图;
图10A是图示出根据本发明实施例的示例性有序流水线和示例性寄存器重命名的无序发布/执行流水线的框图;
图10B是图示出根据本发明实施例的被包括在处理器中的有序架构内核和示例性寄存器重命名的无序发布/执行架构内核的示例性实施例的框图;
图11A-图11B图示出了更特定的示例性有序内核架构的框图,该内核将是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他内核)中的一个;
图12是根据本发明实施例的可以具有多于一个内核、可以具有集成存储器控制器、以及可以具有集成图形的处理器的框图;
图13-图16是示例性计算机架构的框图;和
图17是根据本发明实施例的对比使用软件指令转换器以将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
在以下描述中,阐述了许多特定细节。然而,应该理解,可以在没有这些特定细节的情况下实践本发明的实施例。在其他实例中,众所周知的电路、结构和技术未被详细示出以免混淆对本说明的理解。
说明书中对“一个实施例”、“实施例”、“示例实施例”等的引用指示所描述的实施例可以包括特定特征、结构或特性,但是每个实施例可能不一定包括该特定特征、结构或特性。而且,这样的短语不一定是指相同的实施例。此外,当结合实施例描述具体特征、结构或特性时,无论是否明确描述,都认为结合其它实施例来影响这样的特征、结构或特性是在本领域技术人员的知识范围内。
当将结构组织为阵列时,将个体元素组织成然后可以在单指令多数据(SIMD)循环中使用的矢量常常是昂贵的,因为这些元素未被彼此相邻地进行存储。例如,为了从结构XYZ的阵列中提取在分开的矢量中的X值、Y值和Z值,每种类型的值在存储器中是分开的事实(例如,Y[0]和Z[0]是在X[0]和X[1]之间)必须考虑在内。
本文详述的是结构的不同元素的Gatherstride指令加载矢量到打包数据寄存器中的实施例。这些指令可以被使用于将连续的结构例如作为阵列连续存储在存储器中的情况中。这个想法是使用SIMD通道(针对2D结构为256位或针对3D或4D结构为128位等)来保存不同类型的元素。图1图示出了打包数据(SIMD)寄存器和该寄存器内的通道的实施例。寄存器101具有四个通道103-109。每个通道的大小相同。组合通道可被用于存储不同的大小。例如,对于第一数据宽度111使用全部四个通道,对于第二数据宽度113使用两个通道(其中两个可以适于寄存器中),或对于第三数据宽度115使用四个通道(其中四个可以适于寄存器中)。例如,对于512位寄存器,每个通道都是128位宽,寄存器可以被组织为1个512位数据宽度、2个256位数据宽度或4个128位数据宽度。取决于实施例,不同数据宽度(例如,32位、64位、128位、256位、512位等)和数据元素大小(例如8位、16位、32位、64位、128位等)被用于寄存器中。
在其中X、Y、Z和W各自为32位值的XYZW数据集中,执行GATHERSTRIDE会将四个连续结构加载到512位寄存器中,并将四个X值写入较低128位通道中,将4个Y值写入第二个128位通道中,等等。这种方法可以被用来在每个矢量中用四次迭代完全矢量化一个循环。它也可以被用来提供更广泛的矢量化。X、Y、Z和W是不同数据类型。下图示出了一个序列,其演示了可以如何使用新指令来提取4D结构的元素的完整矢量宽度,所述4D结构跟着是可被用于提取每种类型(128位大小)的短矢量的序列。请注意,gatherstride指令可以具有许多不同大小的打包数据目的地操作数,其包括但不限于128位(有时被称为XMM)、256位(有时被称为XMM)和512位(有时被称为ZMM)。
在此详述的是Gatherstride指令的实施例,该指令在被执行时从存储器收集至少两种数据类型的数据元素(例如,结构的数据元素),并按类型将数据元素连续存储在目的地寄存器的通道中。如此,特定类型的数据元素被连续存储在针对特定数据类型所分配的目的地的一个或多个通道中。不同类型的但是相关的数据元素分开存储步幅数据元素在目的地寄存器中。例如,X0是远离Y0的数据元素的步幅数目。如此,存储器中的相对数据元素位置被保持在目的地寄存器通道中。在一些实施例中,每个结构的存储器地点由数据元素地址的索引提供。
例如,当存储器以随机顺序存储xyzw...XYZW双字时,执行LOAD4D ZMM,MEM(步幅为4(数据元素类型的数量)的步幅加载指令,其中每个数据元素是32位)抽取X、Y、Z和W数据类型的4个数据元素,并将它们存储在四个通道(每个数据类型各一个)中的目的地寄存器ZMM中。在下面的代码中,XYZW数据元素从存储器加载到四个目的地打包数据寄存器中,并且然后进行排列使得每个数据类型都有一个寄存器。
GATHER4DD zmm4{k1},[vm32]
//zmm4=x1x2x3x4y1y2y3y4z1z2z3z4w1w2w3w4
GATHER4D zmm5{k1},[vm32]
//zmm5=x5x6x7x8y5y6y7y8z5z6z7z8w5w6w7w8
GATHER4D zmm6{k1},[vm32]
//zmm6=x9x10x11x12y9y10y11y.......
GATHER4D zmm7{k1},[vm32]
//zmm7=x13x14x15x16y13y14y......
VPERM2TD zmm8,zmm4,zmm5
//zmm8=x1...x8,y1....y8
VPERM2TD zmm9,zmm6,zmm7
//zmm9=x9...x16,y9...y16
VPERMT2D zmm1,zmm8,zmm9
VPERMT2D zmm2,zmm8,zmm9
VPERM2TD zmm10,zmm4,zmm5
//zmm10=z1...z8,w1....w8
VPERM2TD zmm11,zmm6,zmm7
//zmm11=z9...z16,w9...w16
VPERMT2D zmm3,zmm8,zmm9
VPERMT2D zmm4,zmm8,zmm9
在下面的代码中,XYZW数据元素从存储器被加载到一个较大的目的地打包数据寄存器中,并且然后被提取到较小的打包数据寄存器中,使得每种数据类型都有一个寄存器。
GATHER4D zmm5,[mem]//zmm5=x1x2x3x4y1y2y3y4z1z2z3z4w1w2w3w4
VEXTRACT132x4 xmm1,zmm5,0//xmm1=x1x2x3x4
VEXTRACT132x4 xmm2,zmm5,1//xmm2=y1y2y3y4
VEXTRACT132x4 xmm3,zmm5,2//xmm3=z1z2z3z4
VEXTRACTI32x4 xmm1,zmm5,0//xmm4=w1w2w3w4
图2图示出了用以处理gatherstride指令的硬件的实施例。所图示的硬件通常是硬件处理器或内核的一部分,例如中央处理单元的一部分、加速器等。
由解码电路201接收gatherstride指令。例如,解码电路201从获取逻辑/电路接收该指令。gatherstride指令包括针对数据元素地址索引和打包目的地寄存器的字段。指令的操作码中的“步幅”是步幅长度并且是2、3或4,并且对应于存储在存储器中的结构的数据元素类型的数量。操作数还包括针对字节、字、双字和四字的元素大小的数据元素大小{B/W/D/Q}的指示。
指令格式的更详细实施例将稍后详述。解码电路201将gatherstride指令解码为一个或多个操作。在一些实施例中,该解码包括生成要由执行电路(诸如执行电路209)执行的多个微操作。解码电路201还解码指令前缀。
在一些实施例中,寄存器重命名、寄存器分配和/或调度电路203为以下各项中的一个或多个提供功能性:1)将逻辑操作数值重命名为物理操作数值(例如,在一些实施例中的寄存器别名表),2)将状态位和标志分配给已解码的指令,以及3)调度已解码的指令以用于在指令池之外的执行电路(例如,在一些实施例中使用保留站)209上执行。
寄存器(寄存器文件)205和存储器207将数据存储为要由执行电路209操作的gatherstride指令的操作数。示例性寄存器类型包括打包数据寄存器、通用寄存器和浮点寄存器。
执行电路209执行已解码的gatherstride指令以使用索引从存储器中收集至少两个数据类型的数据元素(例如,结构的数据元素),并且按类型将数据元素连续存储在目的地寄存器的通道中。如此,特定类型的数据元素被连续存储在针对特定数据类型所分配的目的地的一个或多个通道中。不同类型的但是相关的数据元素分开存储步幅数据元素在目的地寄存器中。例如,X0是远离Y0的数据元素的步幅数目。如此,存储器中的相对数据元素位置被保持在目的地寄存器通道中。。
在一些实施例中,引退电路211在架构上提交目的地寄存器至寄存器205中并引退该指令。
图3图示出了gatherstride指令的执行的实施例。这些示例并不意味着是限制性的。要提取的打包数据元素的数量及其大小取决于指令编码(数据元素大小)和目的地寄存器。如此,可以提取不同数量的打包数据元素,诸如2、4、8、16、32或64。打包数据目的地寄存器大小包括64位、128位、256位和512位。
顶部的示例示出了gather2D(收集2D)的执行,其中步幅为2并且数据元素是双字。存储器XBO1包括在存储器中交替存在的两种不同的数据类型(X和Y)。每个元组都与指令的索引值相关联。针对提取的起始点在Y0的开始处。在这个示例中,步幅是2。打包数据目的地寄存器0XBO3将X类型的数据元素存储于上部通道中,并且将Y类型的数据元素存储于下部通道中。各类型之间的相关数据元素是分开的步进数据元素。
中间的示例示出了gather3D(收集3D)的执行。存储器XBO7包括在存储器中交替存在的三种不同的数据类型(X、Y和Z)。针对提取的起始点在X0的开始处。每个元组都与指令的索引值相关联。在这个示例中,步幅是3并且数据元素是双字。打包数据目的地寄存器XBO9将X类型的数据元素存储于最低有效通道中,将Y类型的数据元素存储于相邻通道中,并且将Z类型的数据元素存储于与Y类型通道相邻的通道中。各类型之间的相关数据元素是分开的步进数据元素。
底部的示例示出了gather4D(收集4D)的执行。存储器XB15包括在存储器中交替存在的四种不同的数据类型(X、Y、Z和W)。针对提取的起始点在W0的开始处。每个元组都与指令的索引值相关联。在这个示例中,步幅是4并且数据元素是32位。在这个示例中,步幅是3并且数据元素是双字。打包数据目的地寄存器0XB09将W类型的数据元素存储于最低有效通道中,将X类型的数据元素存储于相邻通道中,将Z类型的数据元素存储于与Y类型通道相邻的通道中,并且将Z类型的数据元素存储于与Y类型通道相邻的通道中。各类型之间的相关数据元素是分开的步进数据元素。
用于gatherstride指令的格式的一个实施例是gatherstride{B/W/D/Q}DSTREG,MEMORY。在一些实施例中,gatherstride{B/W/D/Q}是指令的操作码。步幅指示要提取的数据类型的步幅值(例如,2、3和4)和数量。B/W/D/Q将源/目的地的数据元素大小指示为字节、字、双字和四字。DSTREG是打包数据目的地寄存器操作数。存储器(Memory)是存储在打包数据寄存器中的数据元素地址的索引。
在一些实施例中,gatherstride指令包括写入掩码寄存器操作数。写入掩码被用来有条件地控制每个元素的操作和结果的更新。取决于实现,写入掩码使用合并或归零掩码。用谓词(写入掩码、写入掩码或k寄存器)操作数编码的指令使用该操作数来有条件地控制每个元素的计算操作并将结果更新到目的地操作数。谓词操作数已知为opmask(写入掩码)寄存器。opmask是大小为MAX_KL(64位)的一组八个架构寄存器。注意,从这组8个架构寄存器中,只有k1到k7可以作为谓词操作数而被寻址。k0可以用作常规源或目的地,但不能被编码为谓词操作数。还要注意,可以使用谓词操作数来针对带有存储器操作数(源或目的地)的某些指令启用存储器故障抑制。作为谓词操作数,opmask寄存器包含一位来管控矢量寄存器的每个数据元素的操作/更新。通常,opmask寄存器可以支持具有各元素大小的指令:单精度浮点(float32)、整数双字(int32)、双精度浮点(float64)、整数四字(int64)。opmask寄存器的长度MAX_KL足以处理多达64个元素,每个元素一位,即64位。对于给定的矢量长度,每个指令基于其数据类型仅访问所需的最低有效掩码位数。opmask寄存器以每元素粒度来影响指令。因此,每个数据元素的任何数字或非数字操作以及中间结果到目的地操作数的每元素更新都以opmask寄存器的对应位为基础。在大多数实施例中,用作谓词操作数的opmask服从以下属性:1)如果未设置对应的opmask位,则不针对元素执行指令的操作(这意味着没有异常或违反可以由掩码关闭元素上的操作引起,并且因此,作为掩码关闭操作的结果,没有异常标志被更新);2)如果未设置对应的写入掩码位,则作为操作的结果,目的地元素不被更新。相反,目的地元素值必须被保留(合并-掩码)或者它必须被归零(归零-掩码);3)对于带有存储器操作数的某些指令,对于掩码位为0的元素,存储器故障被抑制。注意,此特征提供了一个通用结构来实现控制流预测,因为掩码实际上为矢量寄存器目的地提供了合并行为。作为替代方案,掩码可以被用于归零而不是合并,因此掩码后的元素将更新为0而不是保留旧值。提供归零行为以在不需要时移除对旧值的隐式依赖。
在实施例中,指令的编码包括缩放-索引-基址(SIB)类型的存储器寻址操作数,它间接识别存储器中的多个索引目的地位置。在一个实施例中,SIB型存储器操作数可以包括识别基地址寄存器的编码。基地址寄存器的内容可以表示存储器中的基地址,从该基地址计算存储器中特定目的地位置的地址。例如,基地址可以是针对扩展矢量指令的潜在目的地位置块中第一个位置的地址。在一个实施例中,SIB型存储器操作数可以包括识别索引寄存器的编码。索引寄存器的每个元素可以指定索引或偏移值,其可用来从基地址计算潜在目的地位置块内的相应目的地位置的地址。在一个实施例中,SIB型存储器操作数可以包括在计算相应的目的地地址时指定将被应用于每个索引值的缩放因子的编码。例如,如果在SIB型存储器操作数中编码缩放因子值4,则可以将从索引寄存器的元素获得的每个索引值乘以4,并且然后将其添加到基地址以计算目的地地址。
在一个实施例中,vm32{x,y,z}形式的SIB型存储器操作数可以识别使用SIB型存储器寻址所指定的存储器操作数的矢量阵列。在这个示例中,使用公共基址寄存器、常数缩放因子和包含个体元素的矢量索引寄存器来指定存储器地址阵列,每个元素都是一个32位索引值。矢量索引寄存器可以是XMM寄存器(vm32x)、YMM寄存器(vm32y)或ZMM寄存器(vm32z)。在另一个实施例中,vm64{x,y,z}形式的SIB型存储器操作数可以识别使用SIB型存储器寻址所指定的存储器操作数的矢量阵列。在这个示例中,使用公共基址寄存器、常数缩放因子和包含个体元素的矢量索引寄存器来指定存储器地址阵列,每个元素都是一个64位索引值。矢量索引寄存器可以是XMM寄存器(vm64x)、YMM寄存器(vm64y)或ZMM寄存器(vm64z)。
图4图示出了gatherstride指令的实施例,其包括用于操作码401、目的地操作数403、源索引存储器操作数405以及在一些实施例中的写入掩码操作数407的值。
图5图示出了由处理器执行以处理gatherstride指令的方法的实施例。
在501处,获取指令。例如,获取gatherstride指令。如上详述,gatherstride指令包括操作码、存储器源地址和打包数据目的地寄存器操作数。在一些实施例中,gatherstride指令包括写入掩码操作数。在一些实施例中,从指令高速缓存中获取指令。
在503处解码所获取的指令。例如,所获取的gatherstride#指令由诸如本文详述的解码电路解码。
在505处检索与已解码的指令的源操作数相关联的数据值。例如,从源地址开始访问来自存储器中的连续元素。
在507处,已解码的指令由诸如本文详述的执行电路(硬件)执行。对于gatherstride指令,所述执行将使用指令的索引从存储器中提取X类型的数据元素(由指令的步幅定义),并且对于每种类型,将所提取的数据元素存储在专用于该类型的打包数据目的地寄存器的一个或多个通道中,其中各类型之间的相关数据元素是分开的步进数据元素。。
在某些实施例中,该指令在509处被提交或引退。
图6图示出了由处理器执行以处理用于数据类型的gatherstride指令的方法的执行部分的实施例。将针对每个数据类型重复该处理以进行存储。请注意,当访问存储器位置时,该位置中的所有数据元素都可用于放入目的地寄存器中。
在601处,确定每个数据类型要收集的数据元素的最大数目。例如,多少个大小为S的数据元素将适于专用于该类型的(一个多个)通道。
在603处,使用索引来提取先前未提取的针对每个数据类型的最低有效数据元素。例如,提取在存储器[索引[0]],存储器[索引[1]]等处的数据元素。
在605处,在分配给该数据类型的(一个或多个)通道中的对应的相关数据元素位置处将所提取的数据元素写入到目的地寄存器中。在一些实施例中,当指令中包括写入掩码时,仅在写入掩码中的对应比特位置被设置时才写入数据元素。否则,存在的数据元素或者被归零(如果使用零掩码)或者单独留下(如果使用合并掩码)。
在607,确定所收集数据元素的数量是否等于要收集的元素的确定数量。当不是时,则提取先前未提取的数据类型的最低有效数据元素。当是时,针对这个数据类型的执行完成。
下面的附图详述了用以实现以上实施例的示例性架构和***。在一些实施例中,如以上详述的那样仿真上述一个或多个硬件组件和/或指令,或者将其实现为软件模块。
可以将以上详述的(一个或多个)指令的实施例体现为以下详述的“通用矢量友好指令格式”。在其他实施例中,未利用这种格式而是使用了另一种指令格式,然而,写入掩码寄存器、各种数据变换(调配、广播等)、寻址等的以下描述通常可应用于以上(一个或多个)指令的实施例的描述。另外,下面详述了示例性***、架构和流水线。以上的(一个或多个)指令的实施例可以在这样的***、架构和流水线上执行,但不限于详述的那些。
指令集可以包括一个或多个指令格式。给定的指令格式可以定义各种字段(例如,位的数量、位的位置)以除了其他之外尤其指定要执行的操作(例如,操作码)和要在其上执行操作的(一个或多个)操作数和/或(一个或多个)其他数据字段(例如掩码)。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定指令格式的指令模板可以被定义为具有指令格式的字段的不同子集(所包括的字段通常以相同的顺序,但是至少一些具有不同的位位置,因为所包括的字段较少)和/或被定义为具有不同解释的给定字段。因此,ISA的每个指令使用给定的指令格式(以及如果被定义的话,在那个指令格式的一个给定指令模板中)来表达,并且包括用于指定操作和操作数的字段。例如,示例性ADD指令具有特定操作码和包括指定那个操作码的操作码字段和用以选择操作数(源1/目的地和源2)的操作数字段的指令格式;并且ADD指令在指令流中的出现将在选择特定操作数的操作数字段中具有特定内容。已经发布和/或颁布被称为高级矢量扩展(AVX)(AVX1和AVX2)并使用矢量扩展(VEX)编码方案的一组SIMD扩展(例如,参见64和IA-32架构软件开发人员手册,2014年9月;以及参见/>高级矢量扩展编程参考,2014年10月)。
示例性指令格式
本文描述的(一个或多个)指令的实施例可以以不同的格式来体现。另外,下面详述了示例性***、架构和流水线。(一个或多个)指令的实施例可以在这样的***、架构和流水线上执行,但不限于详述的那些。
通用矢量友好指令格式
矢量友好指令格式是适合于矢量指令的指令格式(例如,存在特定于矢量操作的某些字段)。尽管描述了其中通过矢量友好指令格式支持矢量和标量操作二者的实施例,但是替代实施例仅使用矢量操作矢量友好指令格式。
图7A-图7B是图示出根据本发明实施例的通用矢量友好指令格式及其指令模板的框图。图7A是图示出根据本发明实施例的通用矢量友好指令格式及其类别A指令模板的框图;而图7B是图示出根据本发明实施例的通用矢量友好指令格式及其类别B指令模板的框图。具体而言,通用矢量友好指令格式700针对其定义了类别A和类别B指令模板,它们二者都不包括存储器访问705指令模板和存储器访问720指令模板。在矢量友好指令格式的上下文中术语通用是指指令格式不被绑定到任何特定的指令集。
虽然将描述本发明的实施例,其中矢量友好指令格式支持以下内容:具有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字节矢量操作数)。
图7A中的类别A指令模板包括:1)在无存储器访问705指令模板内,示出了无存储器访问、完全舍入控制类型操作710指令模板和无存储器访问、数据变换类型操作715指令模板;和2)在存储器访问720指令模板内,示出了存储器访问、瞬态725指令模板和存储器访问、非瞬态730指令模板。图7B中的类别B指令模板包括:1)在无存储器访问705指令模板内,示出了无存储器访问、写入掩码控制、部分舍入控制类型操作712指令模板和无存储器访问、写入掩码控制、vsize类型操作717指令模板;和2)在存储器访问720指令模板内,示出了存储器访问、写入掩码控制727指令模板。
通用矢量友好指令格式700以图7A-图7B中所图示的顺序包括下面列出的以下字段。
格式字段740--该字段中的特定值(指令格式标识符值)唯一地识别矢量友好指令格式,并因此唯一地识别在指令流中的矢量友好指令格式中的指令的出现。如此,在下面的意义上来说该字段是可选的:对于只具有通用矢量友好指令格式的指令集,该字段不是必需的。
基本操作字段742--其内容区分不同的基本操作。
寄存器索引字段744--其内容直接或通过地址生成来指定源操作数和目的地操作数的位置,无论它们是在寄存器中还是在存储器中。这些包括足够数量的位以从PxQ(例如32x512、16x128、32x1024、64x1024)寄存器文件中选择N个寄存器。虽然在一个实施例中,N可以多达三个源和一个目的地寄存器,但是替代实施例可以支持更多或更少的源和目的地寄存器(例如,可以支持多达两个源,其中这些源之一也充当目的地,可以支持多达三个源,其中这些源之一也充当目的地,可以支持多达两个源和一个目的地)。
修饰符字段746--其内容区分通用矢量指令格式中指定存储器访问的指令的出现与未指定存储器访问的指令的出现;即,在无存储器访问705指令模板和存储器访问720指令模板之间进行区分。存储器访问操作读取和/或写入存储器层级(在一些情况下使用寄存器中的值来指定源和/或目的地地址),而非存储器访问操作不这样操作(例如,源和目的地是寄存器)。尽管在一个实施例中,该字段还在三种不同的方式之间进行选择以执行存储器地址计算,但是替代实施例可以支持更多、更少或不同的方式来执行存储器地址计算。
扩充操作字段750--其内容除了基本操作之外还区分各种不同操作中的哪一个要被执行。该字段是上下文特定的。在本发明的一个实施例中,将该字段划分成类别字段768、阿尔法(alpha)字段752和贝塔(beta)字段754。扩充操作字段750允许不是在2、3或4个指令中而是在单个指令中执行公共操作群组。
缩放字段760--其内容允许缩放用于存储器地址生成(例如,用于使用2scale*索引+基址的地址生成)的索引字段的内容。
位移字段762A--其内容被用作存储器地址生成的一部分(例如,用于使用2scale*索引+基址+位移的地址生成)。
位移因子字段762B(注意,位移字段762A直接并列在位移因子字段762B上指示一个或者另一个被使用)--其内容被用作地址生成的一部分;它指定了位移因子,该位移因子将通过存储器访问的大小(N)而被缩放——其中N是存储器访问中的字节的数量(例如,用于使用scale*索引+基址+缩放的位移的地址生成)。忽略冗余低阶位,并且因此位移因子字段的内容乘以存储器操作数总大小(N),以便生成在计算有效地址中使用的最终位移。N的值由处理器硬件在运行时基于完整操作码字段774(稍后在此描述)和数据操作字段754C来确定。在下面的意义上来说位移字段762A和位移因子字段762B是可选的:它们不用于无存储器访问705指令模板和/或不同的实施例可以仅实现两个中的一个或者两个都不实现。
数据元素宽度字段764--其内容区分多个数据元素宽度中的哪-个要被使用(在一些实施例中针对所有指令;在其他实施例中仅针对一些指令)。在下面的意义上来说该字段是可选的:如果仅支持一个数据元素宽度和/或使用操作码的某个方面支持数据元素宽度,则它不是必需的。
写入掩码字段770--其内容以每个数据元素位置为基础控制目的地矢量操作数中的那个数据元素位置是否反映基本操作和扩充操作的结果。类别A指令模板支持合并-写入掩码,而类别B指令模板支持合并-和归零-写入掩码。当合并时,矢量掩码允许在执行(由基本操作和扩充操作指定的)任何操作期间保护目的地中的任何元素集合免于更新;在另一个实施例中,保留其中对应的掩码位具有0的目的地的每个元素的旧值。相比之下,当归零时,矢量掩码允许在执行(由基本操作和扩充操作指定的)任何操作期间将目的地中的任何元素集合归零;在一个实施例中,当对应的掩码位具有0值时,目的地的元素被设置为0。该功能性的一个子集是控制正在执行的操作的矢量长度(即被修改的元素的范围——从第一个到最后一个)的能力;然而,被修改的元素不一定是连续的。因此,写入掩码字段770允许部分矢量操作,包括加载、存储、算术、逻辑等。虽然描述了其中写入掩码字段770的内容选择包含要被使用的写入掩码的多个写入掩码寄存器中的一个(并且因此写入掩码字段770的内容间接识别要被执行的掩码)的本发明的实施例,但是替换实施例反而或另外允许掩码写入字段770的内容直接指定要被执行的掩码。
即时字段772--其内容允许即时的规范。在下面的意义上来说该字段是可选的:在不支持即时的通用矢量友好格式的实现中它是不存在的,并且在不使用即时的指令中它是不存在的。
类别字段768--其内容在不同类别的指令之间进行区分。参照图7A-图7B,该字段的内容在类别A和类别B指令之间进行选择。在图7A-图7B中,圆角方块被用来指示特定值在一个字段中存在(例如,分别在图7A-图7B中针对类别字段768的类别A 768A和类别B768B)。
类别A指令模板
在类别A的非存储器访问705指令模板的情况下,阿尔法字段752被解释为RS字段752A,其内容区分不同扩充操作类型中的哪一个要被执行(例如,分别针对无存储器访问、舍入类型操作710和无存储器访问、数据变换类型操作715指令模板指定舍入752A.1和数据变换752A.2),而贝塔字段754区分指定类型的哪一个操作要被执行。在无存储器访问705指令模板中,缩放字段760、位移字段762A和位移缩放字段762B不存在。
无存储器访问指令模板--完全舍入控制类型操作
在无存储器访问完全舍入控制类型操作710指令模板中,贝塔字段754被解释为舍入控制字段754A,(一个或多个)其内容提供静态舍入。尽管在所描述的本发明的实施例中,舍入控制字段754A包括抑制所有浮点异常(SAE)字段756和舍入操作控制字段758,但是替代实施例可以支持可以将这些概念均编码到同一字段中或者仅具有这些概念/字段中的一个或另一个(例如,可以仅具有舍入操作控制字段758)。
SAE字段756--其内容区分是否禁用异常事件报告;当SAE字段756的内容指示抑制被启用时,给定指令不报告任何类型的浮点异常标志,并且也不引发任何浮点异常处理程序。
舍入操作控制字段758--其内容区分要执行舍入操作群组中的哪一个(例如,向上舍入、向下舍入、舍入到零和舍入到最接近)。因此,舍入操作控制字段758允许以每个指令为基础改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段750的内容覆盖该寄存器值。
无存储器访问指令模板--数据变换类型操作
在无存储器访问数据变换类型操作715指令模板中,贝塔字段754被解释为数据变换字段754B,其内容区分多个数据变换中的哪一个要被执行(例如,没有数据变换、调配、广播)。
在类别A的存储器访问720指令模板的情况下,阿尔法字段752被解释为驱逐提示字段752B,其内容区分驱逐提示中的哪一个要被使用(在图7A中,分别针对存储器访问、瞬态725指令模板和存储器访问、非瞬态730指令模板指定瞬态752B.1和非瞬态752B.2),而贝塔字段754被解释为数据操纵字段754C,其内容区分多个数据操纵操作中的哪一个(也称为基元)要被执行(例如,无操纵;广播;源的上转换;以及目的地的下转换)。存储器访问720指令模板包括缩放字段760,并且可选地包括位移字段762A或位移缩放字段762B。
矢量存储器指令利用转换支持来执行从存储器的矢量加载和到存储器的矢量存储。与利用常规矢量指令一样,矢量存储器指令以数据元素的方式将数据从/向存储器传送,实际传送的元素由被选择作为写入掩码的矢量掩码的内容来指定。
存储器访问指令模板--瞬态
瞬态数据是可能足够很快被重用以从高速缓存中受益的数据。然而,这是一个提示,并且不同的处理器可以以不同的方式来实现它,包括完全忽略该提示。
存储器访问指令模板--非瞬态
非瞬态数据是不太可能足够很快被重用以从第一级高速缓存中的高速缓存中受益的数据,并且应该被给予优先权以供驱逐。然而,这是一个暗示,并且不同的处理器可以以不同的方式来实现它,包括完全忽略该提示。
类别B指令模板
在类别B指令模板的情况下,阿尔法字段752被解释为写入掩码控制(Z)字段752C,其内容区分由写入掩码字段770控制的写入掩码应是合并还是归零。
在类别B的非存储器访问705指令模板的情况下,贝塔字段754的一部分被解释为RL字段757A,其内容区分不同扩充操作类型中的哪一个要被执行(例如,分别针对无存储器访问、写入掩码控制、部分舍入控制类型操作712指令模板和无存储器访问、写入掩码控制、VSIZE类型操作717指令模板指定舍入757A.1和矢量长度(VSIZE)757A.2),而贝塔字段754的其余部分区分指定类型的操作中哪一个要被执行。在无存储器访问705指令模板中,缩放字段760、位移字段762A和位移缩放字段762B不存在。
在无存储器访问、写入掩码控制、部分舍入控制类型操作710指令模板中,贝塔字段754的其余部分被解释为舍入操作字段759A,并且异常事件报告被禁用(给定指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处理程序)。
舍入操作控制字段759A--就像舍入操作控制字段758一样,其内容区分要执行舍入操作群组中的哪一个(例如,向上舍入、向下舍入、舍入到零和舍入到最接近)。因此,舍入操作控制字段759A允许以每个指令为基础改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段750的内容覆盖该寄存器值。
在无存储器访问、写入掩码控制、VSIZE类型操作717指令模板中,贝塔字段754的其余部分被解释为矢量长度字段759B,其内容区分多个数据矢量长度中的哪一个要在其上被执行(例如,128、256或512字节)。
在类别B存储器访问720指令模板的情况下,贝塔字段754的一部分被解释为广播字段757B,其内容区分是否要执行广播类型数据操纵操作,而贝塔字段754的其余部分被解释为矢量长度字段759B。存储器访问720指令模板包括缩放字段760以及可选地包括位移字段762A或位移缩放字段762B。
关于通用矢量友好指令格式700,示出了包括格式字段740、基本操作字段742和数据元素宽度字段764的完整操作码字段774。虽然示出了其中完整操作码字段774包括所有这些字段的一个实施例,但是在不支持所有这些字段的实施例中完整操作码字段774包括少于所有这些字段。完整操作码字段774提供操作代码(操作码)。
扩充操作字段750、数据元素宽度字段764和写入掩码字段770允许以通用矢量友好指令格式的每个指令为基础来指定这些特征。
写入掩码字段和数据元素宽度字段的组合创建了类型的指令,因为它们允许基于不同的数据元素宽度来应用掩码。
在类别A和类别B中找到的各种指令模板在不同情形中是有益的。在本发明的一些实施例中,处理器内的不同处理器或不同内核可以仅支持类别A、仅支持类别B或支持两类。例如,旨在用于通用计算的高性能通用无序内核可以仅支持类别B,主要旨在用于图形和/或科学(吞吐量)计算的内核可以仅支持类别A,而旨在用于两者的内核可以两类都支持(当然,具有来自两类的模板和指令的一些混合的内核,但并非来自两类的所有模板和指令都在本发明的范围内)。另外,单个处理器可以包括多个内核,所有这些内核都支持相同的类别,或者其中不同的内核支持不同的类别。例如,在具有独立图形和通用内核的处理器中,主要旨在用于图形和/或科学计算的图形内核之一可以仅支持类别A,而一个或多个通用内核可以是具有旨在用于仅支持类别B的通用计算的无序执行和寄存器重命名的高性能通用内核。另一个没有独立图形内核的处理器可以包括一个或多个通用有序或无序内核,其支持类别A和类别B二者。当然,来自一个类别的特征也可以在本发明的不同实施例中的其他类别中被实现。以高级语言编写的程序将被放置(例如,即时编译或静态编译)成各种不同的可执行形式,包括:1)仅具有由目标处理器支持的(一个或多个)类别的指令以用于执行的形式;或者2)具有使用所有类别的指令的不同组合编写的替代例程并且具有基于由当前正在执行代码的处理器所支持的指令来选择要执行的例程的控制流程代码的形式。
示例性特定矢量友好指令格式
图8是图示出根据本发明实施例的示例性特定矢量友好指令格式的框图。图8示出了特定矢量友好指令格式800,其在它指定字段的位置、大小、解释和顺序以及针对那些字段中的一些字段的值的意义上来说是特定的。特定矢量友好指令格式800可以被用来扩展x86指令集,并且因此一些字段与现有的x86指令集及其扩展(例如,AVX)中所使用的那些字段相似或相同。此格式与具有扩展的现有x86指令集的前缀编码字段、实际操作码字节字段、MOD R/M字段、SIB字段、位移字段和即时字段保持一致。来自图8中的字段所映射到的来自图7中的字段被图示出。
应该理解的是,尽管为了说明的目的,在通用矢量友好指令格式700的上下文中参照特定矢量友好指令格式800描述了本发明的实施例,但是除了所要求保护的以外,本发明不限于特定矢量友好指令格式800。例如,虽然特定矢量友好指令格式800被示为具有特定大小的字段,但是通用矢量友好指令格式700设想了针对各种字段的各种可能的大小。作为特定示例,虽然在特定矢量友好指令格式800中数据元素宽度字段764被图示为一位字段,但是本发明不限于此(即,通用矢量友好指令格式700设想了其他大小的数据元素宽度字段764)。
通用矢量友好指令格式700包括在下面按照图8A中所图示的顺序列出的字段。
EVEX前缀(字节0-3)802--以四字节形式进行编码。
格式字段740(EVEX字节0,位[7:0])--第一字节(EVEX字节0)是格式字段740并且它包含0x62(在本发明的一个实施例中被用于区分矢量友好指令格式的唯一值)。
第二-第四个字节(EVEX字节1-3)包括提供特定性能的多个位字段。
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。如本领域已知的,指令的其他字段对寄存器索引的较低三位进行编码(rrr,xxx和bbb),使得可以通过添加EVEX.R、EVEX.X,和EVEX.B来形成Rrrr、Xxxx和Bbbb。
REX’字段710--这是REX′字段710的第一部分,并且是被用来对扩展的32寄存器集的较高16个或较低16个进行编码的EVEX.R’位字段(EVEX字节1,位[4]-R’)。在本发明的一个实施例中,这一位和如下所示的其他位一起以比特反转的格式被存储,以(在众所周知的x8632位模式中)与BOUND指令进行区分,BOUND指令的真实操作码字节为62,但在MOD R/M字段(如下所述)中不接受MOD字段中的值11;本发明的替代实施例不以反转的格式存储这个和如下的其他所示的位。值1被用来对较低的16个寄存器进行编码。换句话说,R’Rrrr通过组合EVEX.R’、EVEX.R和来自其他字段的其他RRR而形成。
操作码映射字段815(EVEX字节1,位[3:0]-mmmm)--其内容对隐含的前导操作码字节(0F、0F 38或0F 3)进行编码。
数据元素宽度字段764(EVEX字节2,位[7]-W)--由符号EVEX.W表示。EVEX.W被用来定义数据类型(32位数据元素或64位数据元素)的粒度(大小)。
EVEX.vvvv 820(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个寄存器。
EVEX.U 768类别字段(EVEX字节2,位[2]-U)--如果EVEX.U=0,则它指示类别A或EVEX.U0;如果EVEX.U=1,则它指示类别B或EVEX.U1。
前缀编码字段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前缀编码,并且因此不需要扩展。
阿尔法字段752(EVEX字节3,位[7]-EH;也被称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写入掩码控制和EVEX.N;也用α来图示)--如前所述,该字段是上下文特定的。
贝塔字段754(EVEX字节3,位[6:4]-SSS,也被称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也用βββ来图示)--如前所述,该字段是上下文特定的。
REX’字段710-这是REX’字段的剩余部分,并且是可以被用来对扩展的32个寄存器集的较高16个或较低16个进行编码的EVEX.V’位字段(EVEX字节3,位[3]-V’)。以位反转格式存储该位。值1被用来对较低的16个寄存器进行编码。换句话说,V’VVVV是通过组合EVEX.V’、EVEX.vvvv而形成。
写入掩码字段770(EVEX字节3,位[2:0]-kkk)--其内容如前所述指定写入掩码寄存器中的寄存器的索引。在本发明的一个实施例中,特定值EVEX.kkk=000具有特殊行为,意味着没有写入掩码被用于该特定指令(这可以以各种方式来实现,包括使用硬连线到所有1的写入掩码或绕过掩码硬件的硬件)。
真实操作码字段830(字节4)也被称为操作码字节。在此字段中指定操作码部分。
MOD R/M字段840(字节5)包括MOD字段842、Reg字段844、和R/M字段846。如前所述,MOD字段842的内容在存储器访问和非存储器访问操作之间进行区分。Reg字段844的角色可以被总结为两种情形:对目的地寄存器操作数或源寄存器操作数进行编码,或者被视为操作码扩展并且不用于编码任何指令操作数。R/M字段846的角色可以包括以下内容:对引用存储器地址的指令操作数进行编码或对目的地寄存器操作数或源寄存器操作数进行编码。
缩放、索引、基址(SIB)字节(字节6)--如前所述,缩放字段750的内容用于存储器地址生成。SIB.xxx 854和SIB.bbb 856--这些字段的内容先前已经关于寄存器索引Xxxx和Bbbb提及了。
位移字段762A(字节7-10)--当MOD字段842包含10时,字节7-10是位移字段762A,并且它与传统32位位移(disp32)一样工作并且以字节粒度工作。
位移因子字段762B(字节7)--当MOD字段842包含01时,字节7是位移因子字段762B。该字段的位置与传统x86指令集8位位移(disp8)的位置相同,其以字节粒度工作。由于disp8是符号扩展的,它只能在-128到127字节偏移之间寻址;按照64字节的高速缓存行,disp8使用8位,其可以被设置为只有4个真正有用的值-128、-64、0和64;由于经常需要更大的范围,所以使用disp32;但是,disp32需要4个字节。与disp8和disp32对照而言,位移因子字段762B是disp8的重新解释;当使用位移因子字段762B时,实际位移由位移因子字段的内容乘以存储器操作数访问的大小(N)来确定。这种类型的位移被指为disp8*N。这减少了平均指令长度(单个字节用于位移,但具有更大的范围)。这种压缩的位移是基于有效位移是存储器访问粒度的倍数的假设,并且因此,地址偏移的冗余低阶位不需要被编码。换句话说,位移因子字段762B替代传统x86指令集的8位位移。因此,以与x86指令集8位位移相同的方式对位移因子字段762B进行编码(因此在ModRM/SIB编码规则中没有变化),唯一的例外是disp8被重新加载为disp8*N。换句话说,编码规则或编码长度没有变化,但仅在由硬件解释位移值时有变化(其需要按照存储器操作数的大小缩放位移以获得按字节的地址偏移)。即时字段772如前所述进行操作。
完整操作码字段
图8B是图示出根据本发明的一个实施例的构成完整操作码字段774的特定矢量友好指令格式800的字段的框图。具体地,完整操作码字段774包括格式字段740、基本操作字段742和数据元素宽度(W)字段764。基本操作字段742包括前缀编码字段825、操作码映射字段815和真实操作码字段830。
寄存器索引字段
图8C是图示出了根据本发明的一个实施例的构成寄存器索引字段744的特定矢量友好指令格式800的字段的框图。具体地,寄存器索引字段744包括REX字段805、REX’字段810、MODR/M.reg字段844、MODR/Mr/m字段846、VVVV字段820、xxx字段854和bbb字段856。
扩充操作字段
图8D是图示出了根据本发明的一个实施例的构成扩充操作字段750的特定矢量友好指令格式800的字段的框图。当类别(U)字段768包含0时,它表示EVEX.U0(类别A768A);当它包含1时,它表示EVEX.U1(类别B768B)。当U=0并且MOD字段842包含11(表示无存储器访问操作)时,阿尔法字段752(EVEX字节3,位[7]-EH)被解释为rs字段752A。当rs字段752A包含1(舍入752A.1)时,贝塔字段754(EVEX字节3,位[6:4]-SSS)被解释为舍入控制字段754A。舍入控制字段754A包括一位SAE字段756和两位舍入操作字段758。当rs字段752A包含0(数据变换752A.2)时,贝塔字段754(EVEX字节3,位[6:4]-SSS)被解释为三位数据变换字段754B。当U=0并且MOD字段842包含00、01或10(表示存储器访问操作)时,阿尔法字段752(EVEX字节3,位[7]-EH)被解释为驱逐提示(EH)字段752B,并且贝塔字段754(EVEX字节3,位[6:4]-SSS)被解释为三位数据操纵字段754C。
当U=1时,字段752(EVEX字节3,位[7]-EH)被解释为写入掩码控制(Z)字段752C。当U=1并且MOD字段842包含11(表示无存储器访问操作)时,贝塔字段754的一部分(EVEX字节3,位[4]-S0)被解释为RL字段757A;当它包含1(舍入757A.1)时,贝塔字段754的其余部分(EVEX字节3,位[6-5]-S2-1)被解释为舍入操作字段759A,而当RL字段757A包含0(VSIZE757.A2)时,贝塔字段754的其余部分(EVEX字节3,位[6-5]-S2-1)被解释为矢量长度字段759B(EVEX字节3,位[6-5]-L1-0)。当U=1并且MOD字段842包含00、01或10(表示存储器访问操作)时,贝塔字段754(EVEX字节3,位[6:4]-SSS)被解释为矢量长度字段759B(EVEX字节3,位[6-5]-L1-0)和广播字段757B(EVEX字节3,位[4]-B)。
示例性寄存器结构
图9是根据本发明的一个实施例的寄存器架构900的框图。在所图示的实施例中,有512位宽的32个矢量寄存器910;这些寄存器被标记为zmm0到zmm31。将较低16个zmm寄存器的低阶256位覆盖在寄存器ymm0-16上。将较低16个zmm寄存器的低阶128位(ymm寄存器的低阶128位)覆盖在寄存器xmm0-15上。特定矢量友好指令格式800在这些叠覆的寄存器文件上操作,如下表所示。
换句话说,矢量长度字段759B在最大长度和一个或多个其他较短长度之间进行选择,其中每个这样的较短长度是前一长度的一半长度;并且没有矢量长度字段759B的指令模板在最大矢量长度上操作。此外,在一个实施例中,特定矢量友好指令格式800的类别B指令模板在打包或标量单/双精度浮点数据和打包或标量整数数据上操作。标量操作是在zmm/ymm/xmm寄存器中的最低阶数据元素位置上执行的操作;取决于实施例,较高阶数据元素位置与它们在指令之前保留相同或者被归零。
写入掩码寄存器915--在所图示的实施例中,有8个写入掩码寄存器(k0至k7),每个的大小为64位。在替代实施例中,写入掩码寄存器915的大小为16位。如前所述,在本发明的一个实施例中,矢量掩码寄存器k0不能被用作写入掩码;当通常指示k0的编码被用于写入掩码时,它选择硬连线的写入掩码0xFFFF,从而有效地禁用针对该指令的写入掩码。
通用寄存器925--在所图示的实施例中,有16个64位通用寄存器,其与现有x86寻址模式一起使用来寻址存储器操作数。这些寄存器由名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8至R15来标记。
在其上混淆MMX打包整数平坦寄存器文件950的标量浮点堆栈寄存器文件(x87堆栈)945--在所图示的实施例中,x87堆栈是被用来使用x87指令集扩展对32/64/80位浮点数据执行标量浮点操作的8元素堆栈;而MMX寄存器被用来对64位打包整数数据执行操作,以及为MMX和XMM寄存器之间执行的某些操作保持操作数。
本发明的替代实施例可以使用更宽或更窄的寄存器。另外,本发明的替代实施例可以使用更多、更少或不同的寄存器文件和寄存器。
示例性内核架构、处理器和计算机架构
可以以不同的方式、为了不同的目的和在不同的处理器中实现处理器内核。例如,这种内核的实现可以包括:1)旨在用于通用计算的通用有序内核;2)旨在用于通用计算的高性能通用无序内核;3)主要旨在用于图形和/或科学(吞吐量)计算的专用内核。不同处理器的实现可以包括:1)包括旨在用于通用计算的一个或多个通用有序内核和/或旨在用于通用计算的一个或多个通用无序内核的CPU;和2)包括主要旨在用于图形和/或科学(吞吐量)的一个或多个专用内核的协处理器。这种不同的处理器导致不同的计算机***架构,其可以包括:1)在与CPU分离的芯片上的协处理器;2)在与CPU相同的封装中的单独管芯上的协处理器;3)与CPU相同的管芯上的协处理器(在这种情况下,这样的协处理器有时被称为专用逻辑,诸如集成图形和/或科学(吞吐量)逻辑,或者称为特殊用途的内核);以及4)芯片上的***,其可以包括在相同管芯上所描述的CPU(有时被称为(一个或多个)应用内核或(一个或多个)应用处理器),上述协处理器以及附加功能性。接下来描述示例性内核架构,随后描述示例性处理器和计算机架构。
示例性内核架构
有序和无序内核框图
图10A是图示出根据本发明实施例的示例性有序流水线和示例性寄存器重命名、无序发布/执行流水线两者的框图。图10B是图示出根据本发明实施例的包括在处理器中的有序架构内核和示例性寄存器重命名、无序发布/执行架构内核的示例性实施例的框图。图10A-图10B中的实线框图示出了有序流水线和有序内核,而虚线框的可选添加图示出了寄存器重命名、无序发布/执行流水线和内核。鉴于有序方面是无序方面的子集,将描述无序方面。
在图10A中,处理器流水线1000包括获取级1002、长度解码级1004、解码级1006、分配级1008、重命名级1010、调度(也称为调遣或发布)级1012、寄存器读取/存储器读取级1014、执行级1016、写回/存储器写入级1018、异常处理级1022和提交级1024。
图10B图示出了包括耦合到执行引擎单元1050的前端单元1030的处理器内核1090,并且二者都耦合到存储器单元1070。内核1090可以是精简指令集计算(RISC)内核、复杂指令集计算(CISC)内核、超长指令字(VLIW)内核、或者混合或替代内核类型。作为又另一个选项,内核1090可以是专用内核,诸如例如网络或通信内核、压缩引擎、协处理器内核、通用计算图形处理单元(GPGPU)内核、图形内核等等。
前端单元1030包括耦合到指令高速缓存单元1034的分支预测单元1032,该指令高速缓存单元1034耦合到指令转换后备缓冲器(TLB)1036,该指令转换后备缓冲器1036耦合到指令获取单元1038,该指令获取单元1038耦合到解码单元1040。解码单元1040(或解码器)可以对指令进行解码,并且生成作为输出的一个或多个微操作、微码入口点、微指令、其他指令或其他控制信号,其从原始指令解码、或者其以其他方式反映原始指令或源自原始指令。解码单元1040可以使用各种不同的机制来实现。合适的机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微码只读存储器(ROM)等等。在一个实施例中,内核1090包括微码ROM或存储用于某些宏指令(例如,在解码单元1040中或以其他方式在前端单元1030内)的微码的其他介质。解码单元1040耦合到执行引擎单元1050中的重命名/分配器单元1052。
执行引擎单元1050包括耦合到引退单元1054和一组一个或多个调度器单元1056的重命名/分配器单元1052。(一个或多个)调度器单元1056表示任何数量的不同调度器,包括保留站、中央指令窗口等。(一个或多个)调度器单元1056耦合到(一个或多个)物理寄存器文件单元1058。(一个或多个)物理寄存器文件单元1058的每一个表示一个或多个物理寄存器文件,其中的不同物理寄存器文件存储一个或多个不同的数据类型,诸如标量整数、标量浮点、打包整数、打包浮点、矢量整数、矢量浮点数、状态(例如,作为要被执行的下一条指令的地址的指令指针)等。在一个实施例中,(一个或多个)物理寄存器文件单元1058包括矢量寄存器单元、写入掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构矢量寄存器、矢量掩码寄存器和通用寄存器。(一个或多个)物理寄存器文件单元1058被引退单元1054重叠以图示出其中可以实施寄存器重命名和无序执行的各种方式(例如,使用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器文件;使用(一个或多个)未来的文件、(一个或多个)历史缓冲器和(一个或多个)引退寄存器文件;使用寄存器映射和寄存器池等)。引退单元1054和(一个或多个)物理寄存器文件单元1058耦合到(一个或多个)执行群集1060。(一个或多个)执行群集1060包括一组一个或多个执行单元1062和一组一个或多个存储器访问单元1064。执行单元1062可以对各种类型的数据(例如,标量浮点、打包整数、打包浮点、矢量整数、矢量浮点)执行各种操作(例如,偏移、加法、减法、乘法)。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但是其它实施例可以仅包括一个执行单元或者可以包括全部执行所有功能的多个执行单元。(一个或多个)调度器单元1056、(一个或多个)物理寄存器文件单元1058和(一个或多个)执行群集1060被示为可能是多个,因为某些实施例为特定类型的数据/操作创建单独的流水线(例如,标量整数流水线、标量浮点/打包整数/打包浮点/矢量整数/矢量浮点流水线、和/或存储器访问流水线,每个流水线具有它们自己的调度器单元、(一个或多个)物理寄存器文件单元和/或执行群集--并且在单独的存储器访问流水线的情况下,实现其中只有该流水线的执行群集具有(一个或多个)存储器访问单元1064的某些实施例)。还应该理解的是,在使用单独的流水线的情况下,这些流水线中的一个或多个可以是无序发布/执行并且其余的是有序的。
一组存储器访问单元1064耦合到存储器单元1070,该存储器单元1070包括数据TLB单元1072,该数据TLB单元1072耦合到数据高速缓存单元1074,该数据高速缓存单元1074耦合到级别2(L2)高速缓存单元1076。在一个示例性实施例中,存储器访问单元1064可以包括加载单元、存储地址单元和存储数据单元,其每一个都耦合到存储器单元1070中的数据TLB单元1072。指令高速缓存单元1034进一步耦合到存储器单元1070中的级别2(L2)高速缓存单元1076。L2高速缓存单元1076耦合到一个或多个其他级别的高速缓存并且最终耦合到主存储器。
作为示例,示例性寄存器重命名、无序发布/执行内核架构可以如下实现流水线1000:1)指令获取1038执行获取和长度解码级1002和1004;2)解码单元1040执行解码级1006;3)重命名/分配器单元1052执行分配级1008和重命名级1010;4)(一个或多个)调度器单元1056执行调度级1012;5)(一个或多个)物理寄存器文件单元1058和存储器单元1070执行寄存器读取/存储器读取级1014;执行群集1060执行执行级1016;6)存储器单元1070和(一个或多个)物理寄存器文件单元1058执行写回/存储器写入级1018;7)各种单元可能涉及异常处理级1022;和8)引退单元1054和(一个或多个)物理寄存器文件单元1058执行提交级1024。
内核1090可以支持一个或多个指令集(例如,x86指令集(具有已经添加了更新版本的一些扩展);加利福尼亚州桑尼维尔的MIPS科技公司的MIPS指令集;加利福尼亚州桑尼维尔的ARM控股公司的ARM指令集(具有可选的附加扩展,诸如NEON),包括本文所描述的(一个或多个)指令。在一个实施例中,内核1090包括用以支持打包数据指令集扩展(例如,AVX1、AVX2)的逻辑,从而允许使用打包数据来执行由许多多媒体应用使用的操作。
应该理解,内核可以支持多线程(执行两个或多个并行的操作或线程集合),并且可以以多种方式来这样做,包括时间分片多线程、同时多线程(其中单个物理内核为物理内核是同时多线程的每个线程提供逻辑内核)或其组合(例如,时间分片获取和解码以及之后的同时多线程,诸如在超线程技术中)。
虽然寄存器重命名是在无序执行的上下文下描述的,但是应该理解,寄存器重命名可以被使用在有序架构中。尽管所图示的处理器的实施例还包括单独的指令和数据高速缓存单元1034/1074和共享L2高速缓存单元1076,但是替代实施例可以具有用于指令和数据二者的单个内部高速缓存,例如级别1(L1)内部高速缓存或多级别内部高速缓存。在一些实施例中,***可以包括内部高速缓存和在该内核和/或处理器外部的外部高速缓存的组合。可替代地,所有的高速缓存可以在内核和/或处理器外部。
特定示例性有序内核架构
图11A-图11B图示出了更特定的示例性有序内核架构的框图,该内核将是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他内核)中的一个。取决于应用,逻辑块通过高带宽互连网络(例如,环形网络)来与一些固定功能逻辑、存储器I/O接口以及其他必需的I/O逻辑通信。
图11A是根据本发明实施例的单个处理器内核以及其到管芯上互连网络1102及其与级别2(L2)高速缓存的本地子集1104的连接的框图。在一个实施例中,指令解码器1100支持具有打包数据指令集扩展的x86指令集。L1高速缓存1106允许低等待时间访问以将存储器高速缓存到标量和矢量单元中。尽管在一个实施例中(为了简化设计),标量单元1108和矢量单元1110使用单独的寄存器集(分别是标量寄存器1112和矢量寄存器1114),并且在它们之间传送的数据被写入到存储器,并且然后从级别1(L1)高速缓存1106中被读回,但是本发明的替代实施例可以使用不同的方法(例如,使用单个寄存器集或包括允许数据在两个寄存器文件之间传送而不被进行写入和读回的通信路径)。
L2高速缓存1104的本地子集是全局L2高速缓存的一部分,其被划分为单独的本地子集,每个处理器内核一个。每个处理器内核具有到它自己的L2高速缓存1104的本地子集的直接访问路径。由处理器内核读取的数据被存储在其L2高速缓存子集1104中,并且可以与其他处理器内核访问它们自己的本地L2高速缓存子集并行地被快速访问。由处理器内核写入的数据被存储在其自己的L2高速缓存子集1104中,并且如果必要的话从其他子集进行转储清除。环形网络确保对于共享数据的一致性。环形网络是双向的,以允许诸如处理器内核、L2高速缓存和其他逻辑块之类的代理在芯片内彼此通信。每个环形数据路径在每个方向上都是1012位宽。
图11B是根据本发明实施例的图11A中的处理器内核的一部分的展开图。图11B包括L1高速缓存1104的L1数据高速缓存1106A部分以及关于矢量单元1110和矢量寄存器1114的更多细节。具体而言,矢量单元1110是16宽矢量处理单元(VPU)(参见16宽ALU 1128),其执行整数、单精度浮点和双精度浮点指令中的一个或多个。VPU支持使用调配单元1120来调配寄存器输入、用数字转换单元1122A-B进行数字转换、并用存储器输入上的复制单元1124进行复制。写入掩码寄存器1126允许预测结果矢量写入。
图12是根据本发明实施例的处理器1200的框图,处理器1200可以具有多于一个内核,可以具有集成存储器控制器,并且可以具有集成图形。图12中的实线框图示出了具有单个内核1202A、***代理1210、一组一个或多个总线控制器单元1216的处理器1200,而虚线框的可选添加图示出了具有多个内核1202A-N、***代理单元1210中的一组一个或多个集成存储器控制器单元1214以及专用逻辑1208的替代处理器1200。
因此,处理器1200的不同实现可以包括:1)具有专用逻辑1208的CPU,其是集成图形和/或科学(吞吐量)逻辑(其可以包括一个或多个内核),并且内核1202A-N是一个或多个通用内核(例如,通用有序内核、通用无序内核、两者的组合);2)具有内核1202A-N的协处理器,其是主要旨在用于图形和/或科学(吞吐量)的大量专用内核;以及3)具有内核1202A-N的协处理器,其是大量通用有序内核。因此,处理器1200可以是通用处理器、协处理器或专用处理器,例如诸如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量多集成内核(MIC)协处理器(包括30个或更多内核)、嵌入式处理器等。处理器可以在一个或多个芯片上实现。处理器1200可以是使用诸如例如BiCMOS、CMOS或NMOS之类的多种工艺技术中的任何一种在一个或多个衬底上实现的和/或是一个或多个衬底的一部分。
存储器层级包括内核内的一个或多个级别的高速缓存、一组或一个或多个共享高速缓存单元1206以及耦合到所述一组集成存储器控制器单元1214的外部存储器(未示出)。所述一组共享高速缓存单元1206可以包括一个或多个中级别的高速缓存,诸如级别2(L2)、级别3(L3)、级别4(L4)或其他级别的高速缓存、最后级别高速缓存(LLC)、和/或其组合。虽然在一个实施例中,基于环形的互连单元1212互连集成图形逻辑1208、所述一组共享高速缓存单元1206和***代理单元1210/(一个或多个)集成存储器控制器单元1214,但是替代实施例可以使用任何数量的用于互连这些单元的熟知技术。在一个实施例中,在一个或多个高速缓存单元1206与内核1202-A-N之间维持一致性。
在一些实施例中,一个或多个内核1202A-N能够进行多线程。***代理1210包括协调和操作内核1202A-N的那些组件。***代理单元1210可以包括例如功率控制单元(PCU)和显示单元。PCU可以是或包括用于调节内核1202A-N和集成图形逻辑1208的功率状态所需的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
内核1202A-N就架构指令集而言可以是同构的或异构的;也就是说,内核1202A-N中的两个或多个可以能够执行相同的指令集,而其他内核可以能够执行该指令集的仅仅一个子集或不同的指令集。
示例性计算机架构
图13-图16是示例性计算机架构的框图。本领域已知的用于膝上型计算机、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、手机、便携式媒体播放器、手持设备以及各种其他电子设备的其他***设计和配置也是合适的。通常,能够并入如本文所公开的处理器和/或其它执行逻辑的各种***或电子设备通常是合适的。
现在参考图13,示出了根据本发明一个实施例的***1300的框图。***1300可以包括耦合到控制器集线器1320的一个或多个处理器1310、1315。在一个实施例中,控制器集线器1320包括图形存储器控制器集线器(GMCH)1390和输入/输出集线器(IOH)1350(其可以位于分开的芯片上);GMCH 1390包括耦合了存储器1340和协处理器1345的存储器和图形控制器;IOH 1350将输入/输出(I/O)设备1360耦合到GMCH 1390。可替代地,将存储器和图形控制器中的一者或两者集成在处理器内(如本文所述),存储器1340和协处理器1345直接耦合到处理器1310,并且控制器集线器1320与IOH 1350在单个芯片中。
附加处理器1315的可选性质在图13中用虚线标注。每个处理器1310、1315可以包括本文所描述的一个或多个处理内核,并且可以是某个版本的处理器1200。
存储器1340可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或两者的组合。对于至少一个实施例,控制器集线器1320经由诸如前端总线(FSB)之类的多点总线、诸如快速通道互连(QPI)之类的点对点接口或类似的连接1395来与(一个或多个)处理器1310、1315通信。
在一个实施例中,协处理器1345是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。在一个实施例中,控制器集线器1320可以包括集成图形加速器。
就包括架构、微架构、热量、功耗特性等等一系列价值度量而言,物理资源1310、1315之间可以存在各种差异。
在一个实施例中,处理器1310执行控制一般类型的数据处理操作的指令。嵌入在指令内的可以是协处理器指令。处理器1310将这些协处理器指令识别为应该由附连的协处理器1345执行的类型。因此,处理器1310在协处理器总线或其他互连上向协处理器1345发出这些协处理器指令(或表示协处理器指令的控制信号)。(一个或多个)协处理器1345接受并执行所接收的协处理器指令。
现在参考图14,示出了根据本发明实施例的第一更特定的示例性***1400的框图。如图14中所示,多处理器***1400是点对点互连***,并且包括经由点对点互连1450进行耦合的第一处理器1470和第二处理器1480。处理器1470和1480中的每一个可以是某个版本的处理器1200。在本发明的一个实施例中,处理器1470和1480分别是处理器1310和1315,而协处理器1438是协处理器1345。在另一个实施例中,处理器1470和1480分别是处理器1310协处理器1345。
处理器1470和1480被示为分别包括集成存储器控制器(IMC)单元1472和1482。处理器1470还包括作为其总线控制器单元的一部分的点对点(P-P)接口1476和1478;类似地,第二处理器1480包括P-P接口1486和1488。处理器1470、1480可以使用P-P接口电路1478、1488经由点对点(P-P)接口1450来交换信息。如图14中所示,IMC1472和1482将处理器耦合到相应的存储器,即存储器1432和存储器1434,存储器1432和存储器1434可以是本地附连到相应处理器的主存储器的一部分。
处理器1470、1480每一个均可以使用点对点接口电路1476、1494、1486、1498经由个体P-P接口1452、1454来与芯片组1490交换信息。芯片组1490可以可选地经由高性能接口1439来与协处理器1438交换信息。在一个实施例中,协处理器1438是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。
共享高速缓存(未示出)可以被包括在任一处理器中或者在两个处理器之外,仍经由P-P互连而与处理器连接,使得如果处理器被置于低功耗模式,则任一个处理器或者两个处理器的本地高速缓存信息可以被存储在共享高速缓存中。
可以经由接口1496将芯片组1490耦合到第一总线1416。在一个实施例中,第一总线1416可以是***组件互连(PCI)总线或诸如PCI Express总线或另一个第三代I/O互连总线之类的总线,但本发明的范围不限于此。
如图14中所示,各种I/O设备1414连同总线桥1418可以耦合到第一总线1416,该总线桥1418将第一总线1416耦合到第二总线1420。在一个实施例中,一个或多个附加的处理器1415,诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器被耦合到第一总线1416。在一个实施例中,第二总线1420可以是低引脚数(LPC)总线。在一个实施例中,可以将各种设备耦合到第二总线1420,包括例如键盘和/或鼠标1422、通信设备1427和储存单元1428(诸如磁盘驱动器或可以包括指令/代码和数据1430的其他大容量储存设备)。此外,可以将音频I/O1424耦合到第二总线1420。注意,其他架构是可能的。例如,代替图14的点对点架构,***可以实现多点总线或其他这样的架构。
现在参考图15,示出了根据本发明实施例的第二更特定的示例性***1500的框图。图14和图15中相同的元件具有相同的附图标号,并且已经从图15中省略了图14的某些方面,以免模糊图15的其他方面。
图15图示出了处理器1470、1480可以分别包括集成存储器和I/O控制逻辑(“CL”)1472和1482。因此,CL 1472、1482包括集成存储器控制器单元并且包括I/O控制逻辑。图15图示出了不仅存储器1432、1434耦合到CL 1472、1482,而且I/O设备1514也耦合到控制逻辑1472、1482。传统I/O设备1515耦合到芯片组1490。
现在参考图16,示出了根据本发明实施例的SoC 1600的框图。图12中相同的元件具有相同的附图标号。此外,虚线框是在更先进的SoC上的可选特征。在图16中,(一个或多个)互连单元1602耦合到:应用处理器1610,其包括一组一个或多个内核202A-N和(一个或多个)共享高速缓存单元1206;***代理单元1210;(一个或多个)总线控制器单元1216;(一个或多个)集成存储器控制器单元1214;一组或一个或多个协处理器1620,其可以包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元1630;直接存储器存取(DMA)单元1632;以及用于耦合到一个或多个外部显示器的显示单元1640。在一个实施例中,(一个或多个)协处理器1620包括专用处理器,诸如例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等。
本文所公开的机制的实施例可以用硬件、软件、固件或这些实现方法的组合来实现。本发明的实施例可以被实现为在可编程***上执行的计算机程序或程序代码,所述可编程***包括至少一个处理器、储存***(包括易失性和非易失性存储器和/或储存元件)、至少一个输入设备以及至少一个输出设备。
可以将诸如图14中图示出的代码1430之类的程序代码应用于输入指令以执行本文所描述的功能并且生成输出信息。可以以已知的方式将输出信息应用于一个或多个输出设备。为了本申请的目的,处理***包括具有诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器之类的处理器的任何***。
可以以高级过程或面向对象的编程语言来实现程序代码,以与处理***进行通信。如果需要,也可以用汇编语言或机器语言来实现程序代码。实际上,本文所描述的机制在范围上不限于任何特定的编程语言。在任何情况下,语言可以是编译或解释的语言。
可以通过存储在机器可读介质上的代表性指令来实现至少一个实施例的一个或多个方面,该机器可读介质表示处理器内的各种逻辑,所述逻辑在被机器读取时致使机器制造用以执行本文所描述的技术的逻辑。被称为“IP内核”的这种表示可以被存储在有形的机器可读介质上并且被提供给各种客户或制造设施以加载到实际制造逻辑或处理器的制造机器中。
这样的机器可读存储介质可以包括但不限于由机器或设备制造或形成的物品的非暂时性的、有形的布置,包括储存介质诸如硬盘、包括软盘、光盘、紧凑盘只读存储器(CD-ROM)、可重写光盘(CD-RW)和磁光盘的任何其他类型的光盘、半导体设备诸如只读存储器(ROM)、随机存取存储器(RAM)诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM)、相变存储器(PCM)、磁卡或光卡或者任何其他类型的适合于存储电子指令的介质。
因此,本发明的实施例还包括包含指令或包含设计数据(诸如硬件描述语言(HDL))的非暂时性的、有形的机器可读介质,其定义了本文所描述的结构、电路、设备、处理器和/或***特征。这样的实施例也可以被称为程序产品。
仿真(包括二进制翻译、代码变形等)
在一些情况下,可以使用指令转换器来将来自源指令集的指令转换成目标指令集。例如,指令转换器可以翻译(例如,使用静态二进制翻译,包括动态编译的动态二进制翻译)、变形、仿真或以其他方式将指令转换为要由内核处理的一个或多个其他指令。指令转换器可以用软件,硬件,固件或其组合来实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上或部分在处理器外。
图17是根据本发明实施例的对比使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所图示的实施例中,指令转换器是软件指令转换器,但是可替代地,可以以软件、固件、硬件或其各种组合来实现指令转换器。图17示出了高级语言1702中的程序,其可以使用x86编译器1704而被编译以生成x86二进制代码1706,x86二进制代码1706可以由具有至少一个x86指令集内核的处理器1716本地地执行。具有至少一个x86指令集内核的处理器1716表示可以执行与具有至少一个x86指令集内核的Intel处理器功能基本相同的任何处理器,这是通过兼容地执行或以其他方式处理(1)Intel x86指令集内核的指令集的大量部分或(2)目标代码版本的应用或目标是在具有至少一个x86指令集内核的Intel处理器上运行的其他软件,以便达到与具有至少一个x86指令集内核的Intel处理器基本相同的结果。x86编译器1704表示可操作来生成x86二进制代码1706(例如,对象代码)的编译器,该x86二进制代码1706可以在具有或不具有附加链接处理的情况下在具有至少一个x86指令集内核的处理器1716上被执行。类似地,图17示出了高级语言1702中的程序,其可以使用替代指令集编译器1708而被编译以生成替代指令集二进制代码1710,该替代指令集二进制代码1710可以由不具有至少一个x86指令集内核的处理器1714本地地执行(例如,具有执行加利福尼亚州桑尼维尔的MIPS科技公司的MIPS指令集和/或执行加利福尼亚州桑尼维尔的ARM控股公司的ARM指令集的内核的处理器)。指令转换器1712用于将x86二进制代码1706转换为可由不具有x86指令集内核1714的处理器本地地执行的代码。该转换后的代码不太可能与替代指令集二进制代码1710相同,因为具有这种功能的指令转换器很难实现;然而,转换后的代码将完成一般操作并由来自替代指令集的指令组成。因此,指令转换器1712表示软件、固件、硬件或其组合:其通过仿真、模拟或任何其它过程允许不具有x86指令集处理器或用以执行x86二进制代码1706的内核的处理器或其他电子设备。

Claims (17)

1.一种用于基于通道的步进收集的设备,包括:
用于对指令进行解码的解码器,其中所述指令包括针对到存储器的地址的索引和打包数据目的地寄存器操作数的字段;和
执行电路,所述执行电路用于执行已解码的指令以使用所述指令的索引从存储器中提取定义的类型数量的数据元素,并且对于每种类型,将所提取的数据元素存储在专用于该类型的打包数据目的地寄存器的一个或多个通道中,其中各类型之间的相关数据元素是分开的步进数据元素;
其中所述指令包括写入掩码操作数,以有条件地控制每个元素的操作和结果的更新。
2.根据权利要求1所述的设备,其中,所述指令包括指示所述定义的类型数量和步幅值的操作码。
3.根据权利要求2所述的设备,其中,所述定义的类型数量是二、三和四。
4.根据权利要求1-3中任一项所述的设备,其中,所述索引存储在打包数据寄存器中。
5.根据权利要求1-3中任一项所述的设备,其中,所述指令指示所述数据元素的大小。
6.根据权利要求1所述的设备,所述执行电路用于基于所述写入掩码操作数的值来存储所提取的数据元素。
7.一种用于基于通道的步进收集的方法,包括:
对指令进行解码,其中所述指令包括针对到存储器的地址的索引和打包数据目的地寄存器操作数的字段;和
执行已解码的指令以使用所述指令的索引从存储器中提取定义的类型数量的数据元素,并且对于每种类型,将所提取的数据元素存储在专用于该类型的打包数据目的地寄存器的一个或多个通道中,其中各类型之间的相关数据元素是分开的步进数据元素;
其中所述指令包括写入掩码操作数,以有条件地控制每个元素的操作和结果的更新。
8.根据权利要求7所述的方法,其中,所述指令包括指示所述定义的类型数量和步幅值的操作码。
9.根据权利要求8所述的方法,其中,所述定义的类型数量是二、三和四。
10.根据权利要求7-9中任一项所述的方法,其中,所述索引存储在打包数据寄存器中。
11.根据权利要求7-9中任一项所述的方法,其中,所述指令指示所述数据元素的大小。
12.根据权利要求7所述的方法,其中,所提取的数据元素的存储基于所述写入掩码操作数的值。
13.一种存储指令的非暂时性机器可读介质,所述指令在被执行时使得处理器执行方法,所述方法包括:
对指令进行解码,其中所述指令包括针对到存储器的地址的索引和打包数据目的地寄存器操作数的字段;和
执行已解码的指令以使用所述指令的索引从存储器中提取定义的类型数量的数据元素,并且对于每种类型,将所提取的数据元素存储在专用于该类型的打包数据目的地寄存器的一个或多个通道中,其中各类型之间的相关数据元素是分开的步进数据元素;
其中所述指令包括写入掩码操作数,以有条件地控制每个元素的操作和结果的更新。
14.根据权利要求13所述的非暂时性机器可读介质,其中,所述指令包括指示所述定义的类型数量和步幅值的操作码。
15.根据权利要求14所述的非暂时性机器可读介质,其中,所述定义的类型数量是二、三和四。
16.根据权利要求13-15中任一项所述的非暂时性机器可读介质,其中,所述索引存储在打包数据寄存器中。
17.根据权利要求13-15中任一项所述的非暂时性机器可读介质,其中,所述指令指示所述数据元素的大小。
CN201680069932.9A 2015-12-30 2016-12-29 用于基于通道的步进收集的***、设备和方法 Active CN108292228B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/984,233 US10289416B2 (en) 2015-12-30 2015-12-30 Systems, apparatuses, and methods for lane-based strided gather
US14/984233 2015-12-30
PCT/US2016/069326 WO2017117458A1 (en) 2015-12-30 2016-12-29 Systems, apparatuses, and methods for lane-based strided gather

Publications (2)

Publication Number Publication Date
CN108292228A CN108292228A (zh) 2018-07-17
CN108292228B true CN108292228B (zh) 2024-03-15

Family

ID=59225809

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680069932.9A Active CN108292228B (zh) 2015-12-30 2016-12-29 用于基于通道的步进收集的***、设备和方法

Country Status (5)

Country Link
US (1) US10289416B2 (zh)
EP (1) EP3398059A4 (zh)
CN (1) CN108292228B (zh)
TW (1) TWI731904B (zh)
WO (1) WO2017117458A1 (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190272175A1 (en) * 2018-03-01 2019-09-05 Qualcomm Incorporated Single pack & unpack network and method for variable bit width data formats for computational machines
US10684858B2 (en) 2018-06-01 2020-06-16 Intel Corporation Indirect memory fetcher
GB2580068B (en) * 2018-12-20 2021-02-24 Advanced Risc Mach Ltd Generating a vector predicate summary
US10970072B2 (en) * 2018-12-21 2021-04-06 Intel Corporation Systems and methods to transpose vectors on-the-fly while loading from memory
CN113360423A (zh) 2020-03-03 2021-09-07 瑞昱半导体股份有限公司 数据储存***及操作数据储存***的方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013095661A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Systems, apparatuses, and methods for performing conversion of a list of index values into a mask value
CN103827813A (zh) * 2011-09-26 2014-05-28 英特尔公司 用于提供向量分散操作和聚集操作功能的指令和逻辑
CN104040489A (zh) * 2011-12-23 2014-09-10 英特尔公司 多寄存器收集指令
CN104094218A (zh) * 2011-12-23 2014-10-08 英特尔公司 用于执行写掩码寄存器到向量寄存器中的一系列索引值的转换的***、装置和方法

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2409064B (en) * 2003-12-09 2006-09-13 Advanced Risc Mach Ltd A data processing apparatus and method for performing in parallel a data processing operation on data elements
US7257695B2 (en) 2004-12-28 2007-08-14 Intel Corporation Register file regions for a processing system
US7627735B2 (en) * 2005-10-21 2009-12-01 Intel Corporation Implementing vector memory operations
US9086872B2 (en) * 2009-06-30 2015-07-21 Intel Corporation Unpacking packed data in multiple lanes
US8688894B2 (en) * 2009-09-03 2014-04-01 Pioneer Chip Technology Ltd. Page based management of flash storage
US8635431B2 (en) * 2010-12-08 2014-01-21 International Business Machines Corporation Vector gather buffer for multiple address vector loads
US8959501B2 (en) 2010-12-14 2015-02-17 Microsoft Corporation Type and length abstraction for data types
US20120254591A1 (en) 2011-04-01 2012-10-04 Hughes Christopher J Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements
CN104126168B (zh) * 2011-12-22 2019-01-08 英特尔公司 打包数据重新安排控制索引前体生成处理器、方法、***及指令
CN104025029A (zh) * 2011-12-30 2014-09-03 英特尔公司 唯一打包数据元素标识处理器、方法、***、和指令
US9632777B2 (en) 2012-08-03 2017-04-25 International Business Machines Corporation Gather/scatter of multiple data elements with packed loading/storing into/from a register file entry
US9842046B2 (en) * 2012-09-28 2017-12-12 Intel Corporation Processing memory access instructions that have duplicate memory indices
KR20150064197A (ko) * 2012-12-26 2015-06-10 인텔 코포레이션 인접한 수집/분산 연산들의 통합
JP5915627B2 (ja) * 2013-11-26 2016-05-11 横河電機株式会社 プロセス制御システム
JP6253514B2 (ja) * 2014-05-27 2017-12-27 ルネサスエレクトロニクス株式会社 プロセッサ

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103827813A (zh) * 2011-09-26 2014-05-28 英特尔公司 用于提供向量分散操作和聚集操作功能的指令和逻辑
WO2013095661A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Systems, apparatuses, and methods for performing conversion of a list of index values into a mask value
CN104040489A (zh) * 2011-12-23 2014-09-10 英特尔公司 多寄存器收集指令
CN104094218A (zh) * 2011-12-23 2014-10-08 英特尔公司 用于执行写掩码寄存器到向量寄存器中的一系列索引值的转换的***、装置和方法
CN104137054A (zh) * 2011-12-23 2014-11-05 英特尔公司 用于执行从索引值列表向掩码值的转换的***、装置和方法

Also Published As

Publication number Publication date
TWI731904B (zh) 2021-07-01
TW201732568A (zh) 2017-09-16
US20170192784A1 (en) 2017-07-06
EP3398059A4 (en) 2019-07-24
WO2017117458A1 (en) 2017-07-06
CN108292228A (zh) 2018-07-17
US10289416B2 (en) 2019-05-14
EP3398059A1 (en) 2018-11-07

Similar Documents

Publication Publication Date Title
CN112069459B (zh) 用于稀疏-密集矩阵乘法的加速器
KR102449616B1 (ko) 벡터 요소 세트에 대해 축소 연산을 수행하기 위한 방법 및 장치
KR101748538B1 (ko) 벡터 인덱싱 메모리 액세스 플러스 산술 및/또는 논리 연산 프로세서들, 방법들, 시스템들 및 명령어들
CN109313549B (zh) 用于向量的元素排序的装置、方法和***
CN117349584A (zh) 实行16位浮点矩阵点积指令的***和方法
CN112861073B (zh) 用于执行16位浮点向量点积指令的***和方法
CN112527396B (zh) 用于执行指令以转换成16位浮点格式的***和方法
CN112445526A (zh) 用于访问矩阵操作数的多变量跨步读取操作
TWI517038B (zh) 用於在多維度陣列中之元件偏移計算的指令
CN106030514B (zh) 用于执行采用传播的被屏蔽源元素存储指令的处理器及其方法
CN108292228B (zh) 用于基于通道的步进收集的***、设备和方法
CN113791820B (zh) 位矩阵乘法
US10860315B2 (en) Systems, apparatuses, and methods for arithmetic recurrence
US9921841B2 (en) System and method for executing an instruction to permute a mask
CN109313553B (zh) 用于跨步加载的***、装置和方法
CN117707622A (zh) 用于具有可变精度输入操作数的融合乘-加操作的指令
JP2018500658A (ja) インデックスおよび即値を用いてベクトル置換を実行するための方法および装置
JP2018506096A (ja) ベクトルビットシャッフルを実行するための方法および装置
CN108351782B (zh) 用于跨步访问的***、装置和方法
CN111831334B (zh) 经改进的***指令的装置和方法
EP3547115A2 (en) Efficient implementation of complex vector fused multiply add and complex vector multiply
CN116860334A (zh) 用于计算两个区块操作数中的半字节的数量积的***和方法
CN108268279B (zh) 用于广播算术操作的***、装置和方法
CN109643235B (zh) 用于多源混合操作的装置、方法和***
JP2018500629A (ja) 3d座標から3dのz曲線インデックスを計算するための機械レベル命令

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant