CN110321159A - 用于实现链式区块操作的系统和方法 - Google Patents

用于实现链式区块操作的系统和方法 Download PDF

Info

Publication number
CN110321159A
CN110321159A CN201910151869.9A CN201910151869A CN110321159A CN 110321159 A CN110321159 A CN 110321159A CN 201910151869 A CN201910151869 A CN 201910151869A CN 110321159 A CN110321159 A CN 110321159A
Authority
CN
China
Prior art keywords
instruction
chain
block
instructions
processor
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.)
Pending
Application number
CN201910151869.9A
Other languages
English (en)
Inventor
C.J.休格斯
A.F.海内克
R.瓦伦丁
B.托尔
J.科巴尔
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
Priority to CN202211612303.XA priority Critical patent/CN115686633A/zh
Publication of CN110321159A publication Critical patent/CN110321159A/zh
Pending legal-status Critical Current

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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • 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/3001Arithmetic instructions
    • 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/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • 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/30029Logical and Boolean instructions, e.g. XOR, NOT
    • 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/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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/3017Runtime instruction translation, e.g. macros
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • G06F9/3828Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage with global bypass, e.g. between pipelines, between clusters
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/454Vector or matrix data
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

所公开的实施例涉及用于实现链式区块操作的系统和方法。在一个示例中,处理器包括提取电路,其要提取一个或多个指令直到已提取多个指令,每个指令要指定源和目的地区块操作数;解码电路,其要解码所提取的指令;以及执行电路,其响应于已解码指令以:标识属于指令链的第一和第二已解码指令,动态地选择和配置包括要执行第一和第二已解码指令的第一和第二处理引擎(PE)的SIMD路径,以及留出第一已解码指令的所指定的目的地,并且替代地将第一已解码指令的结果从第一PE进行路由以供第二PE使用以实行第二已解码指令。

Description

用于实现链式区块操作的系统和方法
技术领域
本发明的领域一般涉及计算机处理器架构,并且更具体地涉及用于实现链式区块操作的系统和方法。
背景技术
矩阵在诸如机器学习和其他批量数据处理之类的许多计算任务中越来越重要。
附图说明
通过示例而非限制的方式在附图的各图中例示本发明,其中相同的附图标记指示相似的元素,并且其中:
图1A例示了经配置的区块(tile)的实施例;
图1B例示了经配置的区块的实施例;
图2例示了矩阵存储的几个示例;
图3例示了利用区块操作加速器的系统的实施例;
图4和图5示出了如何使用矩阵操作加速器来共享存储器的不同实施例;
图6例示了使用区块的矩阵乘法累加操作(“TMMA”)的实施例;
图7例示了链式融合乘法累加指令的迭代的执行的子集的实施例;
图8例示了链式融合乘法累加指令的迭代的执行的子集的实施例;
图9例示了链式融合乘法累加指令的迭代的执行的子集的实施例;
图10例示了链式融合乘法累加指令的迭代的执行的子集的实施例;
图11例示了根据实施例的大小为2的乘方的(power-of-two sized)SIMD实施方式,其中累加器使用大于到乘法器的输入的输入大小;
图12例示了利用矩阵操作电路的系统的实施例;
图13例示了支持使用区块的矩阵操作的处理器核流水线的实施例;
图14例示了支持使用区块的矩阵操作的处理器核流水线的实施例;
图15例示了以行优先格式和列优先格式表示的矩阵的示例;
图16例示了矩阵(区块)的使用的示例;
图17例示了矩阵(区块)的使用方法的实施例;
图18例示了根据实施例的对区块的使用配置的支持;
图19例示了要支持的矩阵(区块)的描述的实施例;
图20(A)-(D)例示了(一个或多个)寄存器的示例;
图21A是例示可优化的区块指令链的示例性执行的方框流程图;
图21B是例示根据一些实施例的区块指令链的优化执行的方框流程图;
图22是例示根据实施例的处理器对链式区块指令进行响应的执行流程的方框流程图;
图23例示了根据实施例的链式区块指令的执行的更详细描述;
图24A是描述根据实施例的处理器执行链式区块指令的实施例的示例性伪代码;
图24B是例示根据一些实施例的未优化的区块指令链的伪代码;
图24C是例示根据一些实施例的处理器执行电路执行优化的区块指令链的执行流程的伪代码;
图25A-25D是例示根据本发明实施例的指令格式的框图;
图25A是例示根据本发明实施例的链友好指令格式的框图;
图25B是例示根据本发明实施例的链起始(start-of-chain)指令格式的框图;
图25C是例示根据本发明实施例的通用向量友好指令格式及其A类指令模板的框图;
图25D是例示根据本发明实施例的通用向量友好指令格式及其B类指令模板的框图;
图26A是例示根据本发明实施例的示例性特定向量友好指令格式的框图;
图26B是例示根据本发明的一个实施例的构成全操作码字段的特定向量友好指令格式的字段的框图;
图26C是例示根据本发明的一个实施例的构成寄存器索引字段的特定向量友好指令格式的字段的框图;
图26D是例示根据本发明的一个实施例的构成扩增操作字段的特定向量友好指令格式的字段的框图;
图27是根据本发明的一个实施例的寄存器架构的框图;
图28A是例示根据本发明实施例的示例性有序流水线和示例性寄存器重命名、无序发布/执行流水线二者的框图;
图28B是例示根据本发明实施例的要被包括在处理器中的示例性有序架构核实施例和示例性寄存器重命名、无序发布/执行架构核二者的框图;
图29A-B例示了更具体的示例性有序核架构的框图,该核将是芯片中的(包括相同类型和/或不同类型的其他核的)若干逻辑块之一;
图29A是根据本发明实施例的单个处理器核、连同其与管芯上互连网络的连接、连同其二级(L2)高速缓存的本地子集的框图;
图29B是根据本发明实施例的图29A中的处理器核的一部分的展开图;
图30是根据本发明实施例的处理器的框图,该处理器可以具有多于一个核,可以具有集成存储器控制器,并且可以具有集成图形装置;
图31-34是示例性计算机架构的框图;
图31示出了根据本发明的一个实施例的系统的框图;
图32是根据本发明实施例的第一更具体的示例性系统的框图;
图33是根据本发明实施例的第二更具体的示例性系统的框图;
图34是根据本发明实施例的片上系统(SoC)的框图;以及
图35是根据本发明实施例的对照使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
在以下描述中,阐述了许多具体细节。然而要理解的是,可以在没有这些具体细节的情况下实践本发明的实施例。在其他情况下,没有详细示出公知的电路、结构和技术,以免模糊对本描述的理解。
说明书中对“一个实施例”、“实施例”、“示例实施例”等的引用指示所描述的实施例可以包括特定特征、结构或特性,但是可能并非每个实施例都一定包括所述特定特征、结构或特性。而且,这些短语不一定指的是同一实施例。此外,当结合实施例描述特定特征、结构或特性时,主张无论是否明确描述,结合其他实施例实行此类特征、结构或特性是在本领域技术人员的知识范围内。
在许多主流处理器中,处理矩阵是一项困难和/或指令密集的任务。例如,矩阵的行可能被放入多个打包数据(例如,SIMD或向量)寄存器中,并且然后单独对其进行操作。例如,取决于数据大小,两个8x2矩阵的相加可能需要到四个打包数据寄存器中的加载或聚集。然后执行与来自每个矩阵的第一行对应的打包数据寄存器的第一次相加,并且执行与来自每个矩阵的第二行对应的打包数据寄存器的第二次相加。然后将所得到的打包数据寄存器分散回存储器。虽然对于小矩阵来说这种设想可能是可接受的,但对于较大的矩阵来说通常是不可接受的。
高层级讨论
本文描述的是用于支持诸如中央处理单元(CPU)、图形处理单元(GPU)和加速器之类的计算机硬件中的矩阵操作的机制。矩阵操作利用表示诸如寄存器之类的存储器的一个或多个打包区域的二维(2-D)数据结构。在本描述的各处,这些2-D数据结构称为区块(tile)。注意,矩阵可以小于区块(使用少于整个区块),或者利用多个区块(矩阵大于任何一个区块的大小)。在本描述的各处,使用区块语言来指示使用影响矩阵的区块执行的操作;该矩阵是否大于任何一个区块通常不相关。
可以通过不同的操作来作用于每个区块,所述不同的操作诸如本文中详述的那些并且包括但不限于:区块乘法、区块加法、区块减法、区块对角化(diagonal)、区块归零、区块转置、区块数量积、区块广播、区块行广播、区块列广播、区块乘法、区块乘法并累加、区块移动等。此外,对诸如使用比例和/或偏差之类的操作符的支持可以与这些操作一起使用或支持未来的非数值应用,例如,OpenCL“本地存储器”、数据压缩/解压等等。
存储(诸如存储器(非易失性和易失性)、寄存器、高速缓存等)的部分被布置成具有不同水平和竖直尺寸的区块。例如,区块可以具有4的水平尺寸(例如,矩阵的4行)和8的竖直尺寸(例如,矩阵的8列)。通常,水平尺寸与元素大小有关(例如,2位、4位、8位、16位、32位、64位、128位等)。可以支持多种数据类型(单精度浮点、双精度浮点、整数等)。
经配置的区块的示例性使用
在一些实施例中,可以配置区块参数。例如,给定区块可以被配置成提供区块选项。示例性区块选项包括但不限于:区块的行数、区块的列数、区块是否为有效(VALID)以及区块是否由一对相等大小的区块组成。
图1A例示了经配置的区块的实施例。如图所示,4kB的应用存储器102上存储有4个1kB的区块,区块0 104、区块1 106、区块2 108和区块3 110。在该示例中,这4个区块不是由对组成,并且各自具有布置在行和列中的元素。区块t0 104和区块t1 106具有K行和N列的4字节元素(例如,单精度数据),其中K等于8且N=32。区块t2 108和区块t3 110具有K行和N/2列的8字节元素(例如,双精度数据)。由于双精度操作数是单精度的宽度的两倍,因此该配置与托盘(palette)一致,用于提供区块选项,从而提供具有至少4kB的总存储的至少4个名称。在操作中,可以使用加载和存储操作来从存储器加载区块以及将区块存储到存储器。取决于所使用的指令编码方案,可用应用存储器的量以及可用区块的大小、数量和配置会有所不同。
图1B例示了经配置的区块的实施例。如图所示,4kB的应用存储器122上存储有2对1kB的区块,第一对是区块t4L 124和区块t4R 126,并且第二对是区块t5L 128和区块t5R130。如图所示,区块对被划分成左区块和右区块。在其他实施例中,区块对被划分成偶区块和奇区块。在该示例中,这4个区块各自具有布置在行和列中的元素。区块t4L 124和区块t4R 126具有K行和N列的4字节元素(例如,单精度数据),其中K等于8并且N等于32。区块t5L128和区块t5R 130具有K行和N/2列的8字节元素(例如,双精度数据)。由于双精度操作数是单精度的宽度的两倍,因此该配置与托盘一致,用于提供区块选项,从而提供具有至少4kB的总存储的至少2个名称。图1A的四个区块使用各自命名1kB区块的4个名称,而图1B中的2对区块可以使用2个名称来指定成对的区块。在一些实施例中,区块指令接受成对的区块的名称作为操作数。在操作中,可以使用加载和存储操作来从存储器加载区块以及将区块存储到存储器。取决于所使用的指令编码方案,可用应用存储器的量以及可用区块的大小、数量和配置会有所不同。
在一些实施例中,区块参数是可定义的。例如,使用“托盘”来提供区块选项。示例性选项包括但不限于:区块名称数、存储行中的字节数、区块中的行数和列数等。例如,区块的最大“高度”(行数)可以被定义为:
区块最大行数=已架构的存储 /(托盘名称数*每行的字节数)。
照此,可以将应用编写成使得名称的固定使用将能够跨实施方式利用不同的存储大小。
使用区块配置(“TILECONFIG”)指令来进行区块的配置,其中在所选托盘中定义特定的区块使用。该声明包括要使用的区块名称数、每个名称(区块)所请求的行数和列数,以及在一些实施例中,每个区块的所请求的数据类型。在一些实施例中,在执行TILECONFIG指令期间进行一致性检查以确定其匹配托盘条目的约束。
示例性区块存储类型
图2例示了矩阵存储的几个示例。在(A)中,区块存储在存储器中。如图所示,每个“行”由四个打包数据元素组成。要去往下一“行”,使用跨步值。注意,行可以连续存储在存储器中。当区块存储不映射底层存储器阵列行宽时,跨步式存储器访问允许访问一行然后下一行。
从存储器加载区块和将区块存储到存储器通常是从应用存储器到打包数据行的跨步式访问。在一些实施例中,示例性TILELOAD和TILESTORE指令或在加载操作(load-op)指令中作为TILE操作数的对应用存储器的其他指令引用是可重启的,以处理(最多)2*页面故障行、未被掩蔽的浮点异常和/或每指令的中断。
在(B)中,矩阵存储在由多个寄存器构成的区块中,所述寄存器诸如打包数据寄存器(单指令、多数据(SIMD)或向量寄存器)。在此示例中,区块覆盖在三个物理寄存器上。通常,使用连续的寄存器,然而情况不一定是这样。
在(C)中,矩阵存储在可由区块指令中使用的融合乘法累加(FMA)电路访问的非寄存器存储中的区块中。该存储可以在FMA内部或与其相邻。另外,在下文讨论的一些实施例中,该存储可以用于数据元素而不是整个行或区块。
经由CPUID来报告针对TMMA架构的支持参数。在一些实施例中,信息列表包括最大高度和最大SIMD尺寸。配置TMMA架构需要指定每个区块的尺寸、每个区块的元素大小和托盘标识符。通过执行TILECONFIG指令来进行该配置。
TILECONFIG指令的成功执行启用后续的TILE操作符。TILERELEASEALL指令清除区块配置并禁用TILE操作(直到执行下一个TILECONFIG指令)。在一些实施例中,XSAVE、XSTORE等用于使用区块的上下文切换。在一些实施例中,在XSAVE中使用2个XCR0位,一个用于TILECONFIG元数据,并且一个位对应于实际的区块有效载荷数据。
TILECONFIG不仅可以配置区块使用,还可以设置状态变量,其指示该程序位于已配置区块的代码区域中。实施方式可以列举对可以与区块区域一起使用的其他指令的约束,诸如不使用现有寄存器组等。
通常用TILERELEASEALL指令来退出区块区域。它不需要任何参数,并且可以即刻使所有区块无效(指示数据不再需要任何保存或恢复),并清除与处于区块区域中相对应的内部状态。
在一些实施例中,区块操作将使超出区块配置所指定的尺寸的任何行和任何列归零。例如,在写入每一行时,区块操作将使超出所配置的列数的数据(在元素的大小方面进行分解(factoring))归零。例如,在64字节行以及配置有10行和12列的区块的情况下,写入FP32元素的操作将以12*4个字节用输出/结果数据写入前10行中的每一行,并将每一行中的其余4*4个字节归零。区块操作还将前10个已配置的行之后的任何行都完全归零。当使用具有64字节行的1K区块时,将有16行,因此在该示例中,最后6行也将被归零。
在一些实施例中,当加载数据时,上下文恢复(例如,XRSTOR)强制超出针对区块的已配置行的数据将被维持为零。如果不存在有效配置,则所有行都归零。区块数据的XRSTOR可以在超出已配置的那些列的列中加载垃圾。XRSTOR应当不可能清除超出已配置的列数,因为没有与区块配置相关联的元素宽度。
上下文保存(例如,XSAVE)在将整个TILE(区块)存储区域写入存储器时暴露该整个TILE存储区域。如果XRSTOR将垃圾数据加载到了区块的最右侧部分中,则该数据将通过XSAVE进行保存。XSAVE将为超出针对每个区块指定的数量的行写入零。
在一些实施例中,区块指令是可重启的。访问存储器的操作允许在页面故障之后重启。处理浮点操作的计算指令还允许未被掩蔽的浮点异常,其中异常的掩蔽由控制和/或状态寄存器来控制。
为了支持在这些事件之后重启指令,指令将信息存储在下文详述的启动寄存器中。
矩阵(区块)操作系统
A. 示例性硬件支持
图3例示了利用矩阵(区块)操作加速器的系统的实施例。在该例示中,主机处理器/处理系统301将命令311(例如,诸如算术或矩阵操纵操作之类的矩阵操纵操作,或加载和存储操作)传送到矩阵操作加速器307。然而,以此方式示出这一点仅是为了讨论的目的。如稍后详述的,该矩阵操作加速器307可以是处理核的一部分。通常,作为区块操纵操作符指令的命令311会将区块称为寄存器-寄存器(“reg-reg”)或寄存器-存储器(“reg-mem”)格式。诸如TILESTORE、TILELOAD、TILECONFIG等的其他命令不对区块执行数据操作。命令可以是已解码指令(例如,微操作)或宏指令以供矩阵操作加速器307处理。
在该示例中,一致性存储器接口303耦合到主机处理器/处理系统301和矩阵操作加速器307,使得它们可以共享存储器。图4和图5示出了如何使用矩阵操作加速器来共享存储器的不同实施例。如图4中所示,主机处理器401和矩阵操作加速器电路405共享同一存储器403。图5例示了这样的实施例:其中主机处理器501和矩阵操作加速器505不共享存储器,但可以访问彼此的存储器。例如,处理器501可以访问区块存储器507并照常利用其主机存储器503。类似地,矩阵操作加速器505可以访问主机存储器503,但是更常使用区块存储器507。注意,这些存储器可以是不同类型的。
在一些实施例中,矩阵操作加速器307包括耦合到数据缓冲器305的多个FMA 309(在一些实施方式中,这些数据缓冲器305中的一个或多个被存储在如图所示的栅格的FMA中)。数据缓冲器305缓冲从存储器加载的区块和/或要被存储到存储器的区块(例如,使用区块加载或区块存储指令)。数据缓冲器可以是例如多个寄存器。通常,这些FMA被布置为能够读取和写入区块的链式FMA 309的栅格。在该示例中,矩阵操作加速器307要使用区块T0、T1和T2来执行矩阵乘法操作。区块中的至少一个被容纳在FMA栅格309中。在一些实施例中,操作中的所有区块都被存储在FMA栅格309中。在其他实施例中,只有子集被存储在FMA栅格309中。如图所示,T1被容纳而T0和T2未被容纳。注意,A、B和C指的是这些区块的矩阵,其可以或可以不占据所述区块的整个空间。
图6例示了使用区块的矩阵乘法累加操作(“TMMA”)的实施例。
矩阵(区块A 601)中的行数与包括计算的延迟的串行(链式)FMA的数量相匹配。实施方式自由地在具有较小高度的栅格上再循环,但计算保持不变。
源/目的地向量来自于具有N行的区块(区块C 605),并且FMA 611的栅格执行N个向量矩阵操作,得到执行区块的矩阵乘法的完整指令。区块B 603是另一个向量源,并在每个阶段中向FMA提供“广播”项(term)。
在操作中,在一些实施例中,跨FMA的矩形栅格散布(存储在区块B 603中的)矩阵B的元素。(存储在区块A 601中的)矩阵B将其行中的元素进行转置以与FMA的矩形栅格的列尺寸匹配。在栅格中的每个FMA处,将A和B的元素相乘并与(来自图中的上方的)输入的被加数相加,并将输出的和传递到FMA的下一行(或最终输出)。
单个步骤的延迟与K(矩阵B的行高)成比例,并且相关的TMMA通常具有足够的源-目的地行(在单个区块中或跨区块)以隐藏该延迟。实施方式还可以跨时间步骤分割SIMD(打包数据元素)尺寸M(矩阵A的行高度),但是这仅仅改变了与K相乘的常数。当程序指定了比TMACC所列举的最大值更小的K时,实施方式自由地用“掩蔽”或“提前退出(early outs)”来实现这点。
整个TMMA的延迟与N*K成比例。重复率与N成比例。每个TMMA指令的MAC的数量是N*K*M。
图7例示了链式融合乘法累加指令的迭代的执行的子集的实施例。特别地,这例示了目的地的一个打包数据元素位置的迭代的执行电路。在该实施例中,链式融合乘法累加对有符号的源进行操作,其中累加器是2x输入数据大小。
第一有符号源(源1 701)和第二有符号源(源2 703)各自具有四个打包数据元素。这些打包数据元素中的每一个存储诸如浮点数据之类的有符号数据。第三有符号源(源3709)具有两个打包数据元素,这两个打包数据元素中的每一个都存储有符号数据。第一和第二有符号源701和703的大小是第三有符号源(初始值或先前结果)709的大小的一半。例如,第一和第二有符号源701和703可以具有32位打包数据元素(例如,单精度浮点),而第三有符号源709可以具有64位打包数据元素(例如,双精度浮点)。
在该例示中,仅示出了第一和第二有符号源701和703的两个最高有效打包数据元素位置以及第三有符号源709的最高有效打包数据元素位置。当然,也将处理其他打包数据元素位置。
如所例示的,成对地处理打包数据元素。例如,使用乘法器电路705将第一和第二有符号源701和703的最高有效打包数据元素位置的数据相乘,并且使用乘法器电路707将来自第一和第二有符号源701和703的第二最高有效打包数据元素位置的数据相乘。在一些实施例中,针对其他打包数据元素位置重复使用这些乘法器电路705和707。在其他实施例中,使用附加的乘法器电路使得并行处理打包数据元素。在一些上下文中,使用具有有符号的第三源709的大小的通道来进行并行执行。使用加法器711电路来将所述乘法中的每一个的结果相加。
(使用不同的加法器713或同一加法器711)将乘法结果的相加结果加到来自有符号源3 709的最高有效打包数据元素位置的数据。
最后,将第二次相加的结果存储到与从有符号的第三源709使用的打包数据元素位置相对应的打包数据元素位置中的有符号目的地715中,或者将所述第二次相加的结果传递到下一次迭代,如果有下一次迭代的话。在一些实施例中,将写掩码应用于该存储,使得如果设置了对应的写掩码(位)则发生该存储,而如果未设置则不发生该存储。
图8例示了链式融合乘法累加指令的迭代的执行的子集的实施例。特别地,这例示了目的地的一个打包数据元素位置的迭代的执行电路。在该实施例中,链式融合乘法累加对有符号的源进行操作,其中累加器是2x输入数据大小。
第一有符号源(源1 801)和第二有符号源(源2 803)各自具有四个打包数据元素。这些打包数据元素中的每一个存储诸如整数数据之类的有符号数据。第三有符号源(源3809)具有两个打包数据元素,这两个打包数据元素中的每一个都存储有符号数据。第一和第二有符号源801和803的大小是第三有符号源809的大小的一半。例如,第一和第二有符号源801和803可以具有32位打包数据元素(例如,单精度浮点),第三有符号源809可以具有64位打包数据元素(例如,双精度浮点)。
在该例示中,仅示出了第一和第二有符号源801和803的两个最高有效打包数据元素位置以及第三有符号源809的最高有效打包数据元素位置。当然,也将处理其他打包数据元素位置。
如所例示的,成对地处理打包数据元素。例如,使用乘法器电路805将第一和第二有符号源801和803的最高有效打包数据元素位置的数据相乘,并且使用乘法器电路807将来自第一和第二有符号源801和803的第二最高有效打包数据元素位置的数据相乘。在一些实施例中,针对其他打包数据元素位置重复使用这些乘法器电路805和807。在其他实施例中,使用附加的乘法器电路使得并行处理打包数据元素。在一些上下文中,使用具有有符号的第三源(初始值或先前的迭代结果)809的大小的通道来进行并行执行。使用加法/饱和813电路来将所述乘法中的每一个的结果加到有符号的第三源809。
当该相加得到过大的值时,加法/饱和(累加器)电路813保留操作数的符号。特别地,饱和评估发生在多路相加与到目的地或下一次迭代的写入之间的无限精度结果上。当累加器813是浮点并且输入项是整数时,乘积之和以及浮点累加器输入值被转为无限精度值(具有数百位的定点数),执行乘法结果与第三输入的相加,并执行到实际累加器类型的单个舍入。
无符号的饱和意味着输出值被限制为针对该元素宽度的最大无符号数(全为1)。有符号的饱和意味着值被限制为处于针对该元素宽度的最小负数和最大正数之间的范围中(例如对于字节来说,范围是从-128(= - 2 ^ 7)到127(= 2 ^ 7-1))。
将饱和检查和该相加的结果存储到与从有符号的第三源809使用的打包数据元素位置相对应的打包数据元素位置中的有符号结果815中,或者将所述饱和检查和该相加的结果传递到下一次迭代,如果有下一次迭代的话。在一些实施例中,将写掩码应用于该存储,使得如果设置了对应的写掩码(位)则发生该存储,而如果未设置则不发生该存储。
图9例示了链式融合乘法累加指令的迭代的执行的子集的实施例。特别地,这例示了目的地的一个打包数据元素位置的迭代的执行电路。在该实施例中,链式融合乘法累加对有符号源和无符号源进行操作,其中累加器是4x输入数据大小。
第一有符号源(源1 901)和第二无符号源(源2 903)各自具有四个打包数据元素。这些打包数据元素中的每一个具有诸如浮点或整数数据之类的数据。第三有符号源(初始值或结果915)具有其中存储有符号数据的打包数据元素。第一和第二源901和903的大小是第三有符号源915的四分之一。例如,第一和第二源901和903可以具有16位打包数据元素(例如,字),而第三有符号源915可以具有64位打包数据元素(例如,双精度浮点或64位整数)。
在该例示中,示出了第一和第二源901和903的四个最高有效打包数据元素位置以及第三有符号源915的最高有效打包数据元素位置。当然,也将处理其他打包数据元素位置,如果有的话。
如所例示的,四个一组地处理打包数据元素。例如,使用乘法器电路905将第一和第二源901和903的最高有效打包数据元素位置的数据相乘,使用乘法器电路907将来自第一和第二源901和903的第二最高有效打包数据元素位置的数据相乘,使用乘法器电路909将来自第一和第二源901和903的第三最高有效打包数据元素位置的数据相乘,并且使用乘法器电路910将来自第一和第二源901和903的最低有效打包数据元素位置的数据相乘。在一些实施例中,第一源901的有符号打包数据元素是符号扩展的,并且第二源903的无符号打包数据元素在乘法之前是零扩展的。
在一些实施例中,针对其他打包数据元素位置重复使用这些乘法器电路905-910。在其他实施例中,使用附加的乘法器电路使得并行处理打包数据元素。在一些上下文中,使用具有有符号的第三源915的大小的通道来进行并行执行。使用加法电路911来将所述乘法中的每一个的结果相加。
(使用不同的加法器913或同一加法器911)将乘法结果的相加结果加到来自有符号源3 915的最高有效打包数据元素位置的数据。
最后,将第二次相加的结果919存储到与从有符号的第三源915使用的打包数据元素位置相对应的打包数据元素位置中的有符号目的地中,或者将所述第二次相加的结果919传递到下一次迭代。在一些实施例中,将写掩码应用于该存储,使得如果设置了对应的写掩码(位)则发生该存储,而如果未设置则不发生该存储。
图10例示了链式融合乘法累加指令的迭代的执行的子集的实施例。特别地,这例示了目的地的一个打包数据元素位置的迭代的执行电路。在该实施例中,链式融合乘法累加对有符号源和无符号源进行操作,其中累加器是4x输入数据大小。
第一有符号源(有符号源1 1001)和第二无符号源(无符号源2 1003)各自具有四个打包数据元素。这些打包数据元素中的每一个存储诸如浮点或整数数据之类的数据。第三有符号源(初始或先前结果1015)具有其中存储有符号数据的打包数据元素。有符号源11001和无符号源2 1003的大小是连接到初始或先前结果1015的第三有符号源的四分之一。例如,有符号源1 1001和无符号源2 1003可以具有16位打包数据元素(例如,字),而初始或先前结果1015可以具有64位打包数据元素(例如,双精度浮点或64位整数)。
在该例示中,示出了有符号源1 1001和无符号源2 1003的四个最高有效打包数据元素位置以及初始或先前结果1015的最高有效打包数据元素位置。当然,也将处理其他打包数据元素位置,如果有的话。
如所例示的,四个一组地处理打包数据元素。例如,使用乘法器电路1005将有符号源1 1001和无符号源2 1003的最高有效打包数据元素位置的数据相乘,使用乘法器电路1007将来自有符号源1 1001和无符号源2 1003的第二最高有效打包数据元素位置的数据相乘,使用乘法器电路1009将来自有符号源1 1001和无符号源2 1003的第三最高有效打包数据元素位置的数据相乘,并且使用乘法器电路1011将来自有符号源1 1001和无符号源21003的最低有效打包数据元素位置的数据相乘。在一些实施例中,有符号源1 1001的有符号打包数据元素是符号扩展的,并且无符号源2 1003的无符号打包数据元素在乘法之前是零扩展的。
在一些实施例中,针对其他打包数据元素位置重复使用这些乘法器电路1005-1011。在其他实施例中,使用附加的乘法器电路使得并行处理打包数据元素。在一些上下文中,使用具有初始或先前结果1015的大小的通道来进行并行执行。使用加法/饱和电路1013来将乘法结果的相加结果加到来自连接到初始或先前结果1015的有符号源3的最高有效打包数据元素位置的数据。
当该相加得到对于有符号饱和来说过大或过小的值时,加法/饱和电路1013保留操作数的符号。如本文中使用的,加法/饱和电路1013有时也称为累加器。特别地,饱和评估发生在多路相加与到目的地的写入之间的无限精度结果上。当加法/饱和电路1013使用浮点并且输入项是整数时,乘积之和以及浮点累加器输入值被转为无限精度值(具有数百位的定点数),执行乘法结果与第三输入的相加,并执行到实际累加器类型的单个舍入。
将饱和检查和该相加的结果1019存储到与从连接到初始或先前结果1015的有符号的第三源使用的打包数据元素位置相对应的打包数据元素位置中的有符号目的地中,或者将所述饱和检查和该相加的结果1019传递到下一次迭代。在一些实施例中,将写掩码应用于该存储,使得如果设置了对应的写掩码(位)则发生该存储,而如果未设置则不发生该存储。
图11例示了根据实施例的大小为2的乘方的SIMD实施方式,其中累加器使用大于到乘法器的输入的输入大小。注意,(到乘法器的)源和累加器值可以是有符号或无符号的值。对于具有2X输入大小的累加器(换句话说,累加器输入值是源的打包数据元素大小的两倍大小),表1101例示了不同的配置。对于大小为字节的源,累加器使用字或大小为16位的半精度浮点(HPFP)值。对于大小为字的源,累加器使用32位整数或大小为32位的单精度浮点(SPFP)值。对于大小为SPFP或32位整数的源,累加器使用64位整数或大小为64位的双精度浮点(DPFP)值。
对于具有4X输入大小的累加器(换句话说,累加器输入值是源的打包数据元素大小的四倍大小),表1103例示了不同的配置。对于大小为字节的源,累加器使用32位整数或大小为32位的单精度浮点(SPFP)值。在一些实施例中,对于大小为字的源,累加器使用64位整数或大小为64位的双精度浮点(DPFP)值。
对于具有8X输入大小的累加器(换句话说,累加器输入值是源的打包数据元素大小的八倍大小),表1105例示了不同的配置。对于大小为字节的源,累加器使用64位整数。
如前文暗示的,矩阵操作电路可以被包括在核中,或者作为外部加速器。图12例示了利用矩阵操作电路的系统的实施例。在该例示中,多个实体与环形互连1245耦合。
多个核1201、1203、1205和1207提供非基于区块的指令支持。在一些实施例中,在核1203中提供矩阵操作支持1251,并且在其他实施例中,矩阵操作电路1211和1213可在环形互连1245上访问。
另外,提供一个或多个存储器控制器1223-1225以代表核和/或矩阵操作电路与存储器1233和1231通信。
图13例示了支持使用区块的矩阵操作的处理器核流水线的实施例。分支预测和解码电路1303执行来自存储在指令存储1301中的指令的指令的分支预测、指令的解码和/或二者。例如,本文详述的指令可以存储在指令存储中。在一些实施方式中,使用单独的电路用于分支预测,并且在一些实施例中,使用微代码1305将至少一些指令解码成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号。可以使用各种不同的机制来实现分支预测和解码电路1303。合适机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。
分支预测和解码电路1303耦合到重命名/分配器电路1307,在一些实施例中,重命名/分配器电路1307耦合到调度器电路1309。在一些实施例中,这些电路通过实行以下内容中的一个或多个来提供寄存器重命名、寄存器分配和/或调度功能性:1)将逻辑操作数的值重命名为物理操作数的值(例如,在一些实施例中为寄存器别名表),2)将状态位和标志分配给已解码的指令,以及3)调度已解码的指令以供在指令池之外在执行电路上执行(例如,在一些实施例中使用保留站)。
调度器电路1309表示任意数量的不同调度器,包括保留站、中央指令窗口等。(一个或多个)调度器单元调度器电路1309耦合到或包括(一个或多个)物理寄存器文件1315。(一个或多个)物理寄存器文件1315中的每一个都表示一个或多个物理寄存器文件,其中的不同的物理寄存器文件存储一个或多个不同的数据类型,诸如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点、状态(例如,指令指针,其是要执行的下一指令的地址)、区块等。在一个实施例中,(一个或多个)物理寄存器文件1315包括向量寄存器电路、写掩码寄存器电路和标量寄存器电路。这些寄存器电路可以提供架构向量寄存器、向量掩码寄存器和通用寄存器。(一个或多个)物理寄存器文件1315被引退电路1317重叠,以例示其中可以实现寄存器重命名和无序执行的各种方式(例如,使用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器文件;使用(一个或多个)未来文件、(一个或多个)历史缓冲器和(一个或多个)引退寄存器文件;使用寄存器映射和寄存器池;等等)。引退电路1317和(一个或多个)物理寄存器文件1315耦合到(一个或多个)执行电路1311。
虽然寄存器重命名是在无序执行的上下文中描述的,但是应当理解的是,寄存器重命名可以用在有序架构中。虽然所例示的处理器的实施例还可以包括单独的指令和数据高速缓存单元以及共享的L2高速缓存单元,但是替换实施例可以针对指令和数据二者具有单个内部高速缓存,诸如例如,1级(L1)内部高速缓存或多级内部高速缓存。在一些实施例中,该系统可以包括内部高速缓存和处于核和/或处理器外部的外部高速缓存的组合。替换地,全部的高速缓存都可以在核和/或处理器外部。
执行电路1311是一组一个或多个执行电路1321、1323和1327以及一组一个或多个存储器访问电路1325。执行电路1321、1323和1327实行各种操作(例如,移位、加法、减法、乘法)并对各种类型的数据(例如,标量浮点、打包整数、打包浮点、向量整数、向量浮点)执行操作。虽然一些实施例可以包括专用于特定功能或功能组的多个执行单元,但是其他实施例可以包括全部实行所有功能的仅一个执行单元或多个执行单元。标量电路1321执行标量操作,向量/SIMD电路1323执行向量/SIMD操作,并且矩阵操作电路1327执行本文详述的矩阵(区块)操作。
作为示例,示例性寄存器重命名、无序发布/执行核架构可以如下实现流水线:1)指令提取电路实行提取和长度解码阶段;2)分支和解码电路1303实行解码阶段;3)重命名/分配器电路1307实行分配阶段和重命名阶段;4)调度器电路1309实行调度阶段;5)耦合到或被包括在调度器电路1309和重命名/分配电路1307中的(一个或多个)物理寄存器文件以及存储器单元实行寄存器读取/存储器读取阶段;执行电路1311实行执行阶段;6)存储器单元和(一个或多个)物理寄存器文件单元实行写回/存储器写入阶段;7)各种单元可能涉及到异常处理阶段;以及8)引退单元和(一个或多个)物理寄存器文件单元实行提交阶段。
核可以支持一个或多个指令集(例如,x86指令集(以及被添加有较新版本的一些扩展);加利福尼亚州桑尼维尔的MIPS科技的MIPS指令集;加利福尼亚州桑尼维尔的ARM控股公司的ARM指令集(以及诸如NEON之类的可选附加扩展)),包括本文中描述的(一个或多个)指令。在一个实施例中,核1390包括用于支持打包数据指令集扩展(例如,AVX1、AVX2)的逻辑,从而允许使用打包数据来执行许多多媒体应用所使用的操作。
应当理解的是,核可以支持多线程(执行并行的两组或更多组操作或线程),并且可以以各种方式这样做,包括时间切片多线程、同时多线程(其中单个物理核为物理核正同时多线程的线程中的每一个提供逻辑核)或其组合(例如,时间切片提取和解码以及其后的同时多线程,诸如在英特尔®超线程技术中那样)。
图14例示了支持使用区块的矩阵操作的处理器核流水线的实施例。分支预测和解码电路1403执行来自存储在指令存储1401中的指令的指令的分支预测、指令的解码和/或二者。例如,本文详述的指令可以存储在指令存储中。在一些实施方式中,使用单独的电路用于分支预测,并且在一些实施例中,使用微代码1405将至少一些指令解码成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号。可以使用各种不同的机制来实现分支预测和解码电路1403。合适机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。
分支预测和解码电路1403耦合到重命名/分配器电路1407,在一些实施例中,重命名/分配器电路1407耦合到调度器电路1409。在一些实施例中,这些电路通过实行以下内容中的一个或多个来提供寄存器重命名、寄存器分配和/或调度功能性:1)将逻辑操作数的值重命名为物理操作数的值(例如,在一些实施例中为寄存器别名表),2)将状态位和标志分配给已解码的指令,以及3)调度已解码的指令以供在指令池之外在执行电路上执行(例如,在一些实施例中使用保留站)。
调度器电路1409表示任意数量的不同调度器,包括保留站、中央指令窗口等。(一个或多个)调度器单元调度器电路1409耦合到或包括(一个或多个)物理寄存器文件1415。(一个或多个)物理寄存器文件1415中的每一个都表示一个或多个物理寄存器文件,其中的不同的物理寄存器文件存储一个或多个不同的数据类型,诸如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点、状态(例如,指令指针,其是要执行的下一指令的地址)、区块等。在一个实施例中,(一个或多个)物理寄存器文件1415包括向量寄存器电路、写掩码寄存器电路和标量寄存器电路。这些寄存器电路可以提供架构向量寄存器、向量掩码寄存器和通用寄存器。(一个或多个)物理寄存器文件1415被引退电路1417重叠,以例示其中可以实现寄存器重命名和无序执行的各种方式(例如,使用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器文件;使用(一个或多个)未来文件、(一个或多个)历史缓冲器和(一个或多个)引退寄存器文件;使用寄存器映射和寄存器池;等等)。引退电路1417和(一个或多个)物理寄存器文件1415耦合到执行电路1411。
虽然寄存器重命名是在无序执行的上下文中描述的,但是应当理解的是,寄存器重命名可以用在有序架构中。虽然所例示的处理器的实施例还可以包括单独的指令和数据高速缓存单元以及共享的L2高速缓存单元,但是替换实施例可以针对指令和数据二者具有单个内部高速缓存,诸如例如,1级(L1)内部高速缓存或多级内部高速缓存。在一些实施例中,该系统可以包括内部高速缓存和处于核和/或处理器外部的外部高速缓存的组合。替换地,全部的高速缓存都可以在核和/或处理器外部。
执行电路1411是一组一个或多个执行电路1427和一组一个或多个存储器访问电路1425。执行电路1427实行本文详述的矩阵(区块)操作。
作为示例,示例性寄存器重命名、无序发布/执行核架构可以如下实现流水线:1)指令提取电路实行提取和长度解码阶段;2)分支和解码电路1403实行解码阶段;3)重命名/分配器电路1407实行分配阶段和重命名阶段;4)调度器电路1409实行调度阶段;5)耦合到或被包括在调度器电路1409和重命名/分配电路1407中的(一个或多个)物理寄存器文件以及存储器单元实行寄存器读取/存储器读取阶段;执行电路1411实行执行阶段;6)存储器单元和(一个或多个)物理寄存器文件单元实行写回/存储器写入阶段;7)各种单元可能涉及到异常处理阶段;以及8)引退单元和(一个或多个)物理寄存器文件单元实行提交阶段。
核可以支持一个或多个指令集(例如,x86指令集(以及被添加有较新版本的一些扩展);加利福尼亚州桑尼维尔的MIPS科技的MIPS指令集;加利福尼亚州桑尼维尔的ARM控股公司的ARM指令集(以及诸如NEON之类的可选附加扩展)),包括本文中描述的(一个或多个)指令。在一个实施例中,核1490包括用于支持打包数据指令集扩展(例如,AVX1、AVX2)的逻辑,从而允许使用打包数据来执行许多多媒体应用所使用的操作。
应当理解的是,核可以支持多线程(执行并行的两组或更多组操作或线程),并且可以以各种方式这样做,包括时间切片多线程、同时多线程(其中单个物理核为物理核正同时多线程的线程中的每一个提供逻辑核)或其组合(例如,时间切片提取和解码以及其后的同时多线程,诸如在英特尔®超线程技术中那样)。
布局
在本描述的各处,使用行优先数据布局来表示数据。列优先用户应根据其取向来翻译术语。图15例示了以行优先格式和列优先格式表示的矩阵的示例。如图所示,矩阵A是2×3矩阵。当该矩阵以行优先格式存储时,一行中的数据元素是连续的。当此矩阵以列优先格式存储时,一列中的数据元素是连续的。A T *B T =(BA) T 是众所周知的矩阵特性,其中上标T意指转置。将列优先数据作为行优先数据进行读取导致矩阵看起来像转置矩阵。
在一些实施例中,在硬件中利用行优先语义,并且列优先数据用于交换操作数顺序,其结果是矩阵的转置,但是对于来自存储器的后续列优先读取来说,它是正确的、未转置的矩阵。
例如,如果有两个列优先矩阵要相乘,则:
输入矩阵将被存储在(列优先的)线性存储器中,如:
以2x3和3x2的尺寸按照行优先来读取那些矩阵,它们将显示为:
交换顺序并进行矩阵相乘:
转置矩阵被输出,并且然后可以被以行优先顺序进行存储:
并被用在后续列优先计算中,它是正确的非转置矩阵:
示例性使用
图16例示了矩阵(区块)的使用的示例。在该示例中,矩阵C 1601包括两个区块,区块A1603包括一个区块,并且区块B 1605包括两个区块。该图显示了用于计算矩阵乘法的算法的内循环的示例。在该示例中,使用来自矩阵C 1601的两个结果区块tmm0和tmm1来累加中间结果。来自矩阵A 1603的一个区块(tmm2)在它与来自矩阵B 1605的两个区块相乘时被重复使用两次。用于加载新的A区块和两个新的B区块的指针是从箭头所指示的方向。未示出的外循环调整用于C区块的指针。
如图所示的示例性代码包括区块配置指令的使用,并且被执行以配置区块使用、加载区块、加载用于处理区块的循环、将区块存储到存储器以及释放区块使用。
图17例示了矩阵(区块)的使用的实施例。在1701处,配置区块使用。例如,执行TILECONFIG指令以配置区块使用,包括设置每个区块的行数和列数。通常,在1703处从存储器加载至少一个矩阵(区块)。在1705处使用矩阵(区块)执行至少一个矩阵(区块)操作。在1707处,将至少一个矩阵(区块)向外存储到存储器,并且在1709处可以发生上下文切换。
示例性配置
A. 区块配置硬件支持
如上文讨论的,通常需要在使用之前配置区块使用。例如,可能不需要完全使用所有的行和列。在一些实施例中,不配置这些行和列不仅节省功率,但是可以使用配置来确定操作是否将产生错误。例如,如果M和L不相同,则形式为(N×M) * (L*N)的矩阵乘法通常将不起作用。
在一些实施例中,在使用利用区块的矩阵之前要配置区块支持。例如,配置每个区块有多少行和列、要使用的区块等。TILECONFIG指令是对计算机本身的改进,因为它提供了对配置计算机以使用矩阵加速器(作为处理器核的一部分或作为外部设备)的支持。特别地,TILECONFIG指令的执行使得从存储器中检索配置并将其应用于矩阵加速器内的矩阵(区块)设置。
i. 区块使用配置
图18例示了根据实施例的针对区块使用的配置的支持。存储器1801包含要支持的矩阵(区块)的区块描述1803。
处理器/核1805的执行电路1811将区块描述1803的各方面存储到区块配置1817中。区块配置1817详述用于托盘的什么区块被配置(每个区块中的行数和列数)以及矩阵支持正在使用中的标记。执行电路1811被配置成按照区块配置1817指定的那样使用区块。执行电路1811还可以包括机器状态寄存器、模式特定的寄存器(MSR)或配置寄存器以指示区块使用。还设置了另外的值,诸如使用中和起始值。区块配置1817利用一个或多个寄存器1819来存储区块使用和配置信息。
图19例示了要支持的矩阵(区块)的描述的实施例。这是在执行STTILECFG指令时要存储的描述。在此示例中,每个字段是一个字节。在字节[0]中,存储托盘ID 1901。使用托盘ID来索引托盘表1813,托盘表1813按照托盘ID来存储如由该配置定义的与该ID相关联的区块中的字节数以及区块的每行字节数。
字节1存储要存储在“startRow(起始行)”寄存器中的值1903,并且字节2存储要存储在“startP”寄存器中的值1905。为了支持在这些事件之后重启指令,指令将信息存储在这些寄存器中。为了支持在诸如上文详述的那些的中断事件之后重启指令,指令将信息存储在这些寄存器中。startRow值指示应当用于重启的行。startP值指示用于存储在使用对时的操作的行内位置,并且在一些实施例中,指示行的下半部分(在一对中的下部区块中)或行的上半部分(在一对中的上部区块中)。一般来说不需要行(列)中的位置。
在TILECONFIG和STTILECFG异常的情况下,成功地执行矩阵(区块)指令会将startRow和startP都设置为零。
在中断的矩阵(区块)指令未被重启的任何时候,软件都有责任将startRow和startP值归零。例如,未被掩蔽的浮点异常处理程序可能决定在软件中完成操作,并将程序计数器值改为另一指令,通常是下一指令。在这种情况下,软件异常处理程序必须将操作系统提供给它的异常中的startRow和startP值归零,然后才能继续执行程序。随后,操作系统将使用恢复指令重新加载那些值。
字节3存储区块的对的指示(每个区块1b)1907。
字节16-17存储用于区块0的行数1913和列数1915,字节18-19存储用于区块1的行数和列数等。换句话说,每个2字节组指定用于一个区块的行数和列数。如果不使用2个字节的组来指定区块参数,则它们应具有值零。为比实现限制或托盘限制更多的区块指定区块参数会导致故障。未经配置的区块被设置为具有0行0列的初始状态。
最后,存储器中的配置通常以结束划界而结束,诸如几个连续字节全部为零。
ii.示例性区块和区块配置存储
图20(A)-(D)例示了(一个或多个)寄存器1819的示例。图20(A)例示了多个寄存器1819。如图所示,每个区块(TMM0 2001 ... TMMN 2003)具有与存储该特定区块的行和列大小的每个寄存器分离的寄存器。StartP 2011和StartRow 2013被存储在分离的寄存器中。设置一个或多个状态寄存器2015(例如,TILES_CONFIGURED=1)以指示区块被配置以供使用。
图20(B)例示了多个寄存器1819。如图所示,每个区块具有用于其行和列的分离的寄存器。例如,TMM0行配置2021、TMM0列配置2023、StartP 2011和StartRow 2013被存储在分离的寄存器中。设置一个或多个状态寄存器2015(例如,TILES_CONFIGURED=1)以指示区块被配置以供使用。
图20(C)例示了单个寄存器1819。如图所示,该寄存器存储区块配置(每个区块的行和列)2031、StartP 2011和StartRow 2013,其被存储在作为打包数据寄存器的单个寄存器中。设置一个或多个状态寄存器2015(例如,TILES_CONFIGURED=1)以指示区块被配置以供使用。
图20(D)例示了多个寄存器1819。如图所示,单个寄存器存储区块配置(每个区块的行和列)2031。StartP 2011和StartRow 2013被存储在分离的寄存器中。设置一个或多个状态寄存器2015(例如,TILES_CONFIGURED=1)以指示区块被配置以供使用。
可以设想其他组合,诸如将起始寄存器组合成其中分离地示出它们的单个寄存器,等等。
链式区块操作
根据所公开的实施例实现的单指令多数据(SIMD)处理器核捕获通过SIMD执行的重要的数据并行性。然而,有时存在对SIMD计算吞吐量的限制,因为吞吐量受SIMD功能单元的数量或SIMD功能单元的宽度的限制。SIMD功能单元有时在本文中称为处理引擎(PE)。所公开的实施例利用本文描述的TILES架构以供SIMD执行中使用,从而允许增加的SIMD功能单元数量以及每个功能单元的增加的宽度。
所公开的实施例使用TILES架构来使得能够在访问阵列内的区块的链式区块操作之间重用数据而为许多可向量化指令提供了能量效率和执行速度的提升。如本文使用的,链是具有共同的源和目的地区块指定符(specifier)的两个或更多个指令(宏操作和/或微操作)的序列。如本文所使用的,在指令中包括源区块指定符以指定从其处检索要对其进行操作的源区块的位置。在指令中包括目的地区块指定符以指定要将指令的结果写入到其处的目的地区块。指定的源和目的地区块可以存储在存储器、高速缓存层级、暂存器(scratchpad)和寄存器文件中的任何一个或多个中。
为了描述区块操作链的非限制性示例,第一指令可以产生要被写入到指定目的地区块的结果,但是该结果也可以用作第二指令的指定源区块。根据一些实施例,要留出(setaside)第一指令的目的地区块指定符,并且替代地要将第一指令的结果路由到执行第二指令的处理引擎。在一些其他实施例中,要忽略第一指令的目的地区块指定符,并且替代地要将第一指令的结果路由到执行链中的后续指令的处理引擎。在一些其他实施例中,要否定(contravene)第一指令的目的地区块指定符,并且替代地要将第一指令的结果路由到执行链中的后续指令的处理引擎。在一些其他实施例中,要忽视第一指令的目的地区块指定符,并且替代地要将第一指令的结果路由到执行链中的后续指令的处理引擎。在一些其他实施例中,不遵守第一指令的目的地区块指定符,并且替代地要将第一指令的结果路由到执行链中的后续指令的处理引擎。在一些其他实施例中,要拒绝第一指令的目的地区块指定符,并且替代地要将第一指令的结果路由到执行链中的后续指令的处理引擎。
在一些实施例中,第一指令的结果被重新路由到多个后续指令。在一些实施例中,第二指令要接收链中的多个先前指令的结果。
指令的链在其长度方面不受限制;并且可以将许多指令链在一起。至少关于图21-23(示出了例示优化的指令链的执行的过程流程图)、图24A(示出了用于执行高效的链式区块操作的优化的伪代码)和图25B(示出了针对链开始指令的指令格式,该指令指定链中各指令之间的链接)进一步描述和例示指令链。
为了通过使得在执行指令链时能够在多个操作之间重用数据来改进处理器效率,所公开的实施例通过选择留出第一指令的目的地区块指定符并替代地将第一指令的结果直接路由到第二指令而不将该结果首先写回到存储器来改进效率。可以对链中的多个指令实现这样的留出而没有限制。
忽略第一指令的目的地区块指定符至少由于第二指令不需要等候将第一指令的结果写回到存储而改进了性能。在一些实施例中,指令链内的指令包括链控制字段,以向执行电路提供关于是否要实行该留出以及要如何实行该留出的提示。在一些实施例中,执行电路包括二进制翻译器,其监视多个指令之间的相关性,并确定是否要以及何时要留出一个或多个目的地区块指定符并替代地将一个或多个指令的结果路由到执行指令链中的下一个指令的一个或多个PE。
在一些实施例中,执行电路进行常规的一致性检查以确定由留出引起的任何问题。在一些实施例中,执行电路维持其目的地区块指定符被留出了的指令的记录,使得SIMD处理器可以回滚并且这次在没有留出的情况下重新执行那些记录的指令。
所公开的实施例不试图通过将执行核的选取限制为一种类型来提高SIMD效率。相反,一些实施例利用非对称处理引擎(PE)的混合,一些PE具有更受限的功能性并且利用比其他引擎更少的功率。在一些实施例中,SIMD执行路径连同从非对称处理引擎当中的处理引擎的选择是在运行时动态地进行的。
一些公开的实施例利用了非对称处理引擎(PE)阵列的范例。在一些实施例中,该非对称阵列中的PE中的每一个都是算术逻辑单元(ALU),其只能执行有限数量的操作。例如,非对称PE阵列可能包括一些专用于移位的PE、一些专用于加法和减法的PE、一些专用于格式转换的PE、一些专用于除法的PE、一些专用于乘法的PE、一些专用于一元操作的PE、一些专用于逻辑运算的PE等等而没有限制。在一些实施例中,这些PE中的至少一些能够执行多于一种类型的操作。在操作中,执行电路要动态地选择和配置一组PE来实行SIMD指令链中的一组指令。可以选择不同的PE来实行不同的操作,将所需实行匹配至所提供的实行,从而产生功率高效的实现。这种非对称阵列的一个优点是它允许所需处理功率和所耗费功率之间的紧密匹配:仅使用与所需要的一样多的处理功率。在一些实施例中,通过执行一组PE的一次性设立和配置来实行区块操作链的不同部分并且允许该配置被重用于其余的矩阵元素来节省功率。如本文所述,“区块”可以称为矩阵,并且是矩阵的特殊情况。
在一些实施例中,PE的非对称阵列包括可动态配置的互连,以在SIMD处理路径中的多个PE之间路由数据。在操作中,执行电路可以选择一组PE来执行SIMD指令链,并动态地设立网络以在它们之间传输数据。这种可动态配置的互连的一个优点是允许一大组PE之间的连接,而不会产生必须将每个PE连接到每个其他PE的成本和管芯面积。
这种非对称PE阵列和可动态配置互连的一个优点是不需要将中间结果写回到寄存器文件或放到旁路网络上;相反,一个PE的结果可以路由到SIMD处理链中的下一个PE。因此,该硬件可以产生性能更好、能效更高的SIMD处理器。
示例性执行
图21A是例示可优化的区块指令链的示例性执行的方框流程图。如图所示,未优化的指令链2100指定以下算术操作序列:将结果区块设置为三个源区块的函数,即结果 =((A +B)*3)-C)。这样的指令链可以被执行N次,每次生成要被存储在具有M行和K列元素的区块的每个元素中的结果。然而,为了简单起见并且为了例示该优化,例示了指令的仅一个实例,即,要生成一个区块的循环的仅一次迭代。
为了根据本文公开的实施例优化指令链,要留出指令的目的地区块指定符中的一个或多个,并且要替代地将该指令的结果路由到链中的后续指令。在一些实施例中,执行电路维持已使其目的地区块指定符被留出的指令的记录,并且如果检测到了由该留出而导致的问题则回滚以通过重新执行所记录的指令中的一个或多个来进行恢复。
在一些实施例中,执行电路要维持已使其目的地区块指定符被留出的指令的记录,使得执行电路可以回滚并在没有所述留出的情况下再次重新执行该指令。在一些实施例中,执行电路进一步要在该留出之前保存机器状态,并且要随后执行机器状态一致性检查以检测由该留出引起的任何不一致。在一些实施例中,进一步要留出指令的目的地区块指定符的执行电路要在该区块的配置中设置脏位,并且如果后续指令读取了脏区块则要检测不一致。在一些实施例中,执行电路要在检测到这种不一致的情况下生成故障,并且在一些实施例中,执行电路要回滚并重新执行一个或多个指令。
在操作中,如图所示,要作为指令(例如,微操作)或宏指令的序列而从存储中提取指令链2100,所述指令(例如,微操作)或宏指令各自具有目的地区块指定符和源区块指定符。通常,指令链中的指令将存储在暂存器2102中的中间区块指定为源和目的地。在一些实施例中,指令链中的指令指定寄存器文件中、高速缓存中或者在某其他存储器结构中的源区块和/或目的地区块。在一些实施例中,暂存器是包括一个或多个寄存器或锁存器或甚至高速缓存存储器和其他静态存储器的存储器,其被安置成相对接近执行电路,并存储中间数据结果。在某些时候,暂存器中的区块要被提交到存储器。
假设矩阵(区块)A、B和C已被加载到暂存器2102中,矩阵(区块)A、B和C是分别在区块A 2104、区块B 2106和区块C 2108处从暂存器2102中检索的。
在加法2110处,将区块A和区块B相加,并且要将区块E 2112处的结果写回到暂存器2102中(或者寄存器文件中、高速缓存中或某其他存储器结构中的)的区块E。区块E 2112被示出有虚线边界,以突出显示它是潜在的优化点。在一些实施例中,如本文中公开的并且如关于图21B例示和描述的,执行电路要留出在加法2110处执行的指令的目的地区块指定符(区块E),并且替代地要路由2112处的操作的结果以在指令链中的下一操作(乘法2114)处执行。
在乘法2114处,取决于是否留出了加法2110的指定目的地区块而将加法2110的结果或区块E路由到处理引擎以乘以从暂存器2102广播2120的值(例如,3),并且要将区块F2116处的结果写回到暂存器2102中的区块F。区块F 2116被示出有虚线边界,以突出显示它是潜在的优化点。在一些实施例中,如本文中公开的并且如关于图21B例示和描述的,执行电路要留出乘法2114的指定目的地(区块F),并且替代地要将乘法2114的结果路由到指令链中的下一指令(减法2118)。
在操作减法2118处,取决于是否留出了乘法2114的指定目的地区块而将乘法2114的结果或区块F转发到处理引擎作为要从中减去区块C 2108的源。操作减法2118表示链中的最后指令,因此优化不可用,并且要在2124处将操作减法2118的结果(区块D 2122)存储回到暂存器2102中(或者寄存器文件中、高速缓存中或某其他存储器结构中)。
图21B是例示经优化的区块指令链的示例性执行的方框流程图。如图所示,比如图21A的指令链2100的经优化的指令链2150指定以下算术操作序列:将结果区块设置为三个源区块的函数,即结果 =((A + B)*3)-C)。这样的指令链可以被执行N次,每次生成要被存储在具有M行和K列元素的区块的每个元素中的结果。然而,为了简单起见并且为了例示该优化,例示了指令的仅一个实例,即,要生成一个区块的循环的仅一次迭代。
为了根据一些实施例优化指令链,要留出一个或多个指令的目的地区块指定符,并且替代地将那些指令的结果路由到链中的后续指令。
在操作中,如图所示,要作为指令(例如,微操作)或宏指令的序列而从存储中提取指令链2150,所述指令(例如,微操作)或宏指令各自指定算术操作码并且具有目的地区块指定符和至少一个源区块指定符。通常,指令链中的指令将存储在暂存器2152中的中间区块指定为源区块和目的地区块。在某些时候,将暂存器中的区块提交到存储器。
假设矩阵(区块)A、B和C已经被加载到暂存器2152中,则分别在2154、2156和2158处从暂存器2152检索矩阵(区块)A、B和C。
在2160处,响应于指定区块A和区块B作为源区块以及指定区块E作为目的地区块的指令而将区块A和区块B相加。在操作中,SIMD处理器要同时且并行地对多个向量元素实行加法。执行电路通过留出2160处的目的地区块指定符并且替代地将加法的结果路由到链中的下一指令(乘法2164)来优化该流程。在操作中,处理器要同时且并行地对多个向量元素执行乘法2164。
确定是否要留出以及何时要留出
根据本文公开的实施例,存在可以触发执行电路以通过将操作加法2160的结果重新路由到操作乘法2164来优化流程的多种方式。
首先,在一些实施例中,执行电路包括二进制翻译器,其缓冲指令序列并在运行时动态地分析它们以检测指令之间的数据相关性。例如,二进制翻译器可以预测所执行的操作的结果将会被链中的下一指令使用仅一次,并且不会被再次使用。基于这样的预测,执行电路可以选择在暂存器中留出指定的目的地区块,并且替代地将结果路由到执行链中的下一指令的下一处理引擎。
此外,在一些公开的实施例中,根据链友好指令格式(诸如CHAIN_TILE_OP)来格式化加法2160指令,该链友好指令格式(如下文关于图25A进一步例示和描述的)指定算术操作、目的地区块、最达三个源区块、可能的立即数以及链控制字段。关于图25C-D和图26A-D进一步例示和描述CHAIN_TILE_OP指令的格式和所公开实施例的其他指令格式。
在没有限制的情况下公开了用来确定是否存在链并且是否要优化它的另外的方式。在一些实施例中,CHAIN_TILE_OP的链控制字段包括头部,其要标识根据所公开的实施例的第一指令和作为链的一部分的一个或多个后续指令或者要优化的指令。在一些实施例中,链控制字段要指示链位置提示是例如以下中的一个:链开始提示、链中间提示和链结束提示,以标记链中的每个指令。在一些实施例中,链中每个指令的链控制字段指定索引,该索引指示指令在链中的相对位置。
此外,在一些公开的实施例中,如关于图25B进一步描述和例示的,链开始指令使得执行电路识别出接下来的是指令链,并提供该链的一些细节。
根据所公开的实施例,响应于确定了存在要优化的指令链,执行电路要动态地选择和配置处理引擎的SIMD路径来实行该指令链,以留出除链中的最后指令之外的所有指令的指定的目的地区块,并且以将除最后指令之外的所有指令的结果路由到实行链中下一指令的下一PE。因此,如图所示,执行电路确定链的存在并将加法2160的结果从指定的目的地区块(区块E)重新路由到执行乘法2164的PE。类似地,执行电路通过将乘法2164的结果从指定的目的地区块F重新路由到执行链中的下一指令(减法2168)的PE来继续处理该链。在操作中,SIMD处理器要同时且并行地对多个区块元素实行加法2160、乘法2164和减法2168。在减法2168之后在该链中没有另外的指令的情况下,执行电路将减法2168的结果路由到指定的目的地区块D 2172以在2174处存储回暂存器2152。
选择处理引擎(PE)和配置SIMD路径
为了实现链式区块操作,所公开的实施例选择处理引擎来实行链式数学运算。在一些实施例中,SIMD处理器包括处理引擎(PE)的非对称阵列。这种阵列具有各种不同类型的处理引擎,一些处理引擎具有更多的处理容量,但是比其他处理引擎消耗更多功率或管芯面积。
在一些实施例中,SIMD处理器具有与正在实行的数学运算相匹配的处理引擎。例如,一些处理引擎可以专用于一元操作,诸如递增、递减、平方根、取反(negate)或三角运算,诸如正弦、余弦和正切,仅举几个非限制性示例。一些PE可以专用于二元操作,诸如数学运算(例如,加法、减法、除法、乘法、求模等)和逻辑运算(例如与(AND)、或(OR)、与非(NAND)、或非(NOR)、异或(XOR)、异或非(XNOR)、比较(CMP)等),仅举几个非限制性示例。在一些实施例中,SIMD处理器具有供实现链式区块操作使用的对称处理引擎池。
在操作中,根据一些实施例,执行电路选择并配置PE以执行链式区块操作。例如,在图21B的实施例中,执行电路选择PE来并行地处理多个区块元素。在一些实施例中,执行电路尝试选择和配置最小数量的PE,从而使处理能力与区块处理要求相匹配。在一些实施例中,选择不同的PE或PE组来对区块的多个元素并行操作。在一些实施例中,当选择PE来实行指令链的操作时,执行电路选择在处理器的管芯上彼此靠近地布置的PE,以便最小化执行SIMD操作链时的路由延迟。在一些实施例中,当选择PE来实行指令链的操作时,执行电路要选择均匀地散布在管芯的各个区域上的PE,以便在管芯区域上均匀地平衡和散布功率利用。
一些公开的实施例利用了非对称处理引擎(PE)阵列的范例。在一些实施例中,非对称阵列中的PE中的每一个是算术逻辑单元(ALU),其只能实行有限数量的操作。例如,非对称PE阵列可以包括一些专用于移位的PE、一些专用于加法和减法的PE、一些专用于格式转换的PE、一些专用于除法的PE、一些专用于乘法的PE、一些专用于一元操作的PE、一些专用于逻辑运算的PE等等而没有限制。在一些实施例中,这些PE中的至少一些能够执行不止一种类型的操作。在操作中,执行电路要动态地选择和配置一组PE来实行SIMD指令链中的一组指令。可以选择不同的PE来实行不同的操作,将所需性能匹配至所提供的性能,从而产生功率有效的实现。这种非对称阵列的一个优点是它允许所需处理功率和所耗费功率之间的紧密匹配:仅使用与所需要的一样多的处理功率。在一些实施例中,通过执行一组PE的一次性设立和配置来实行区块操作链的不同部分并且允许该配置被重用于其余的矩阵元素来节省功率。如本文中描述的,“区块”可以称为矩阵,并且是矩阵的特殊情况。
示例性处理器执行流程
图22是例示根据实施例的处理器响应于链式区块指令的执行流程的方框流程图。在2201处,处理器要使用提取电路来提取多个指令,所述多个指令各自具有源和目的地区块指定符以指定相应的源和目的地区块。在2203处,处理器要在存储器中缓冲这多个已提取的指令。操作2203就可以在别处缓冲、或者根本不缓冲这多个已提取的指令而言是可选的,如通过其虚线边界指示的。在2205处,处理器要使用解码电路来解码这多个已提取的指令。在2207处,处理器要调度已解码的多个指令的执行。操作2207就其可以在不同的时间处发生或者根本不发生而言是可选的,如通过其虚线边界指示的。在2209处,处理器要使用执行电路来如下面那样执行这多个已解码的指令。
在2211处,处理器的执行电路要标识属于指令链的第一和第二已解码指令。标题为“确定是否要留出以及何时要留出”的部分描述了处理器要标识属于指令链的第一和第二已解码指令的各种方式。例如,一个实施例需要处理器在2201处提取多个指令之前提取链开始指令,如关于图25B进一步描述和例示的。链开始指令要使执行电路注意到接下来是指令链并提供关于该链的一些细节。
在2213处,处理器的执行电路要动态地选择和配置包括要执行第一和第二已解码指令的第一和第二处理引擎(PE)的SIMD路径。在2215处,处理器的执行电路要动态地配置从第一PE到第二PE的网络路径。操作2215就该网络路径可能已经配置好了而言是可选的,如通过其虚线边界指示的。
在2217处,根据所例示的实施例,处理器的执行电路要留出第一已解码指令的目的地区块指定符,并且要替代地将第一已解码指令的结果从第一PE路由到第二PE,以供第二PE使用以实行第二已解码指令。在一些其他实施例中,要忽略第一指令的目的地区块指定符,并且要替代地将第一指令的结果路由到执行链中的后续指令的处理引擎。在一些其他实施例中,要否定第一指令的目的地区块指定符,并且要替代地将第一指令的结果路由到执行链中的后续指令的处理引擎。在一些其他实施例中,要忽视第一指令的目的地区块指定符,并且要替代地将第一指令的结果路由到执行链中的后续指令的处理引擎。在一些其他实施例中,不遵守第一指令的目的地区块指定符,并且要替代地将第一指令的结果路由到执行链中的后续指令的处理引擎。在一些其他实施例中,要拒绝第一指令的目的地区块指定符,并且要替代地将第一指令的结果路由到执行链中的后续指令的处理引擎。
在一些实施例中,执行电路要维持(未在图22中示出)已使其目的地区块指定符被留出的指令的记录,并且要根据需要回滚并重新执行指令记录中的一个或多个。
在2219处,处理器要提交所执行指令的结果。操作2219就结果的写回可以在不同的时间处发生或者根本不发生而言是可选的,如通过其虚线边界指示的。
图23是例示根据实施例的由单指令多数据(SIMD)处理器来执行链式区块指令的方框流程图。通常,流程2300由诸如本文中至少关于图13、14、28A-B和29A-B详述的执行电路之类的执行电路来实行。
在2302处,处理器要提取、解码和缓冲一个或多个指令,直到已经提取了一组指令,每个指令指定源和目的地矩阵(区块)。
在2304处,处理器针对多个出错条件进行测试,所述出错条件中的任何的存在都要在2306处生成故障。如图所示,在2304处测试的出错条件包括:1)是否尚未配置区块,2)目的地和两个源区块是否有效,3)两个源中的任一个是否是一对,以及4)各行数和列数中的任何是否超出范围。
当在2304处测试的故障条件均不为真时,处理器在2308处确定第一和第二已解码指令是否是指令链的一部分。如果否,则处理器返回到2302以至少再提取一个指令,直到该组指令已被提取。但如果是这样,则处理器2310动态地选择和配置包括要执行第一和第二已解码指令的第一和第二处理引擎(PE)的SIMD执行路径。在2312处,处理器要留出第一已解码指令的目的地区块指定符,并且要替代地将第一已解码指令的结果从第一PE路由到第二PE,以供第二PE在执行第二已解码指令时使用。在2314处,处理器确定该链是否完整。如果否,则处理器返回到2302以至少再提取一个指令,直到该组指令已被提取。但如果是这样,则流程2300结束。
IV. 示例性伪代码
图24A是例示根据一些实施例的要由处理器优化的SIMD代码循环的示例性原生代码。如图所示,以原生模式2402的SIMD循环是要对M×N的区块中的每个元素实行的函数,即结果=((B + C)<< 2)+ k。
图24B是例示未优化的区块指令链的伪代码。这样的指令链可能会被执行M×N次,例如,对于具有M行和N列元素的区块的每个元素执行一次。然而,为了简单起见并且为了例示优化,例示了指令的仅一个实例,即,对每个循环元素执行SIMD代码的仅一次迭代。SIMD代码循环2404中的其注释包括星号的那些指令表示根据本文公开的实施例并且关于图24C例示和描述的供优化的候选。
图24C是例示根据一些实施例的处理器执行电路执行已优化的区块指令链的执行流程的伪代码。如图所示,伪代码2406与图24B的未优化的伪代码相同,但其中标记有星号的指令被移除。因此,并非是将B和C的和存储在区块A中,而是执行电路留出所指定的目的地区块(A),并替代地将该和的结果直接路由到实行该指令的处理引擎。
图24B和图24C中的伪代码凭借其所包括的注释和变量名称而是自文档化的。
II. (一个或多个)示例性指令格式
图25A是例示根据一些实施例的用于链友好指令的示例性格式的框图。如图所示,CHAIN_TILE_OP指令2500是链友好指令,其包括操作码2501、链控制2502、目的地2503和源12504。还示出了若干可选参数,包括源2 2505、源3 2506、立即数2507、写掩码2508和大小2509。
操作码2501要指定要对区块的每个元素实行的算术区块操作。所指定的操作可以是一元操作、二元操作(在这种情况下也要指定源2 2505)或三元操作(在这种情况下要指定源2 2505和源3 2506)。要指定的一元操作的示例包括递增、递减、平方根、取反或三角运算,诸如正弦、余弦和正切,仅举几个非限制性示例。要指定的二元操作的示例包括其几个示例,(并非限制)包括数学运算(例如,加法、减法、除法、乘法、求模等)、逻辑运算(例如与、或、与非、或非、异或、异或非、比较等)、交换、阈值和向下取整,仅举几个非限制性示例。
在一些实施例中,如至少关于图21B例示和描述的链控制2502是用于根据所公开的实施例将第一指令和一个或多个后续指令标识为要优化的指令链的一部分的头部。在一些实施例中,链控制字段要指示链位置提示是例如以下中的一个:链开始提示、链中间提示和链结束提示,以标记链中的每个指令。在一些实施例中,链中每个指令的链控制字段指定索引,该索引指示指令在链中的相对位置。
目的地2503、源1 2504、源2 2505和源3 2506是用于指定目的地区块和源区块的区块指定符。在一些实施例中,目的地2503是用于标识链式区块指令的目的地的目的地区块指定符。在一些实施例中,目的地2503是指定用于指令的结果的两个或更多个目的地的目的地区块指定符。
立即数2507要允许指令中的立即数的说明。立即数2507就其不存在于不支持立即数的通用向量友好格式的实现中且不存在于不使用立即数的指令中的意义而言是可选的,如通过其虚线边界指示的。
写掩码2508是可选字段(如通过其虚线边界指示的),其内容基于每个数据元素位置来控制目的地区块中的该数据元素位置是否要反映操作的结果。一些指令支持归并写掩蔽,而其他指令支持归并和归零写掩蔽二者。在归并时,向量掩码允许在任何操作的执行期间防止目的地区块中的任何元素组被更新;在另一实施例中,保留其中对应的掩码位具有0的目的地区块的每个元素的旧值。相反,归零向量掩码允许在任何操作的执行期间将目的地中的任何元素组归零。如果未指定写掩码,则将所有目的地元素视为未掩蔽。
大小2509是可选字段(如通过其虚线边界指示的)以用于指示正对其进行操作的区块数据元素的大小。大小2509被示为单独的指令操作数,但是包括星号以指示在一些实施例中,它要被包括在操作码中,前缀或后缀,“B”、“W”、“D”和“Q”,分别对应于每个区块元素的大小为1字节、2字节、4字节或8字节。在一些实施例中,大小2509被包括在操作码中,诸如前缀或后缀,“H”、“S”、“D”、“Q”和“E”分别对应于每个区块元素的精度级别为半精度(2字节)、单精度(4字节)、双精度(8字节)和四倍精度(16字节)。
图25B是例示根据一些实施例的链开始指令的框图。如图所示,链开始指令2510包括操作码2511,链长度2512,链目标2513,其相应地包括目标1至目标8 2513A-2513H,可选的次级链目标2514和可选的链操作2515。在操作中,根据一些实施例,处理器要在提取指令链的一组指令之前提取链开始指令。链开始指令通知处理器接下来是指令链并提供关于该指令链的一些信息,以通知处理器对要执行指令链的处理引擎的SIMD路径的选择、配置和路由。
操作码2511使执行指令的处理器将该指令识别为链开始指令,并且可以包括前缀或后缀以进一步指定该指令的行为。例如,操作码2511可以包括前缀以指定该指令包括用于指定链目标2513、次级链目标2514和链操作2515的字段。在操作中,根据一些实施例,处理器响应于链开始指令2510要选择和配置要执行该指令链的处理引擎的SIMD路径。
在一些实施例中,链长度2512是立即数或常数,以指定指令链中的指令的数量。在一些实施例中,链长度2512指定通用寄存器,其内容指定指令链中的指令的数量。
链目标2513要指定指令链中的至少第一指令的目标。如图所示,链目标2513要为长度为8的指令链中的前七个指令中的每一个指定目标2513A-2513H(该链中的八个指令的结果要被写入到指定的目的地,而不是重新路由到下一指令)。在一些实施例中,链目标2513字段是立即数,其在逻辑上被划分成用于指定链中的每个指令的目标的位。在一些实施例中,链目标2513指定包含目标信息的通用寄存器。在一些实施例中,链目标2513指定包含目标信息的向量寄存器。在一些实施例中,链目标2513指定目标信息存储于其处的模型特定的寄存器(“MSR”)。在其他实施例中,链目标2513指定目标信息存储于其处的存储器位置。
在一些实施例中,可以将4字节的链目标2513字段划分成4位半字节,以为指令链中多达8个指令中的每一个指定目标。在一些实施例中,每个链目标2513A-2513H指定链中的目标指令的绝对位置。如图所示,目标1 2513A(指令0)要指定指令1;目标2 2513B要指定指令4;目标3 2513C;目标4 2513D要指定指令4;目标5 2513E要指定指令6;目标6 2513F要指定指令6;并且目标7 2513G要指定指令7。
在一些实施例中,目标1-7 2513A-G中的每一个指定要将结果路由到的目标指令的相对偏移。目标2513A-G中的每一个可以是指定指令与其目标之间的距离的2位或3位值。例如,如图所示,目标1 2513A到目标7 2513G可以分别指定1、3、2、1、2、1、1。
在一些实施例中,次级链目标2514像链目标2513那样被格式化,但是为指令链中的每个指令指定第二目标。与链目标2513一样,次级链目标2514可以是立即数、通用寄存器、向量寄存器、模型特定的寄存器或存储器位置。次级链目标2514是可选的,如通过其虚线边界指示的。
在一些实施例中,链开始指令2510包括链操作2515,以指定要由指令链中的每一个实行的操作。在操作中,处理器要使用链操作2515字段来通知其沿着SIMD执行路径选择、配置和路由处理引擎。
图25C-D是例示根据一些实施例的通用向量友好指令格式及其指令模板的框图。用于CHAIN_TILE_OP指令的格式的实施例是CHAIN_TILE_OP(OP, tdest, tsrc1, tsrc2),其中OP指定要实行的算术操作,并且tsrcc1和tsrc2指定要添加的源。在一些实施例中,tdest字段是R/M值(诸如图25C-D的2546),并且tsrc1字段是图25C-D的寄存器索引字段。在一些实施例中,OP操作码包括指示符,诸如[U, S] [U, S]前缀或后缀,以指示所标识的第一和第二源中的每一个是有符号还是无符号。
在一些实施例中,指令的编码包括比例-索引-基址(SIB)型存储器寻址操作数,其间接地标识存储器中的多个带索引的目的地位置。在一个实施例中,SIB型存储器操作数可以包括标识基址寄存器的编码。该基址寄存器的内容可以表示存储器中的基址,据此来计算存储器中的特定目的地位置的地址。例如,所述基址可以是用于扩展向量指令的潜在目的地位置块中的第一位置的地址。在一个实施例中,SIB型存储器操作数可以包括标识索引寄存器的编码。索引寄存器的每个元素都可以指定索引或偏移值,该索引或偏移值可用于根据基址来计算潜在的目的地位置块内的相应目的地位置的地址。在一个实施例中,SIB型存储器操作数可以包括指定要在计算相应的目的地地址时应用于每个索引值的比例缩放因数的编码。例如,如果在SIB型存储器操作数中编码了比例缩放因数值4,则从索引寄存器中的元素获得的每个索引值都可以乘以4并且然后加到基址以计算出目的地地址。
在一个实施例中,vm32{x, y, z}形式的SIB型存储器操作数可以标识使用SIB型存储器寻址而指定的存储器操作数的向量阵列。在该示例中,使用共同的基址寄存器、常数比例缩放因数以及包含各个元素(其中的每一个都是32位索引值)的向量索引寄存器来指定存储器地址的阵列。向量索引寄存器可以是128位寄存器(例如,XMM)寄存器(vm32x)、256位(例如,YMM)寄存器(vm32y)或512位(例如,ZMM)寄存器(vm32z)。在另一实施例中,vm64{x, y, z}形式的SIB型存储器操作数可以标识使用SIB型存储器寻址而指定的存储器操作数的向量阵列。在该示例中,使用共同的基址寄存器、常数比例缩放因数以及包含各个元素(其中的每一个都是64位索引值)的向量索引寄存器来指定存储器地址的阵列。向量索引寄存器可以是128位寄存器(例如,XMM)寄存器(vm64x)、256位(例如,YMM)寄存器(vm64y)或512位(例如,ZMM)寄存器(vm64z)。
详细的示例性系统、处理器和仿真
本文详述了用于执行上述指令的硬件、软件等的示例。例如,下文描述的内容详述了指令执行的各个方面,包括各种流水线阶段,诸如提取、解码、调度、执行、引退等。
指令集
指令集可以包括一个或多个指令格式。给定指令格式可以定义用于除其他之外指定要执行的操作(例如操作码)和要对其执行操作的(一个或多个)操作数的各个字段(例如位的数量、位的位置)和/或(一个或多个)其他数据字段(例如掩码)。一些指令格式通过定义指令模板(或子格式)被进一步分解。例如,给定指令格式的指令模板可以被定义成具有指令格式的字段的不同子集(所包括的字段通常是以相同的顺序,但是因为包括了较少的字段,所以至少一些具有不同的位位置)和/或被定义成具有以不同方式解释的给定字段。因此,ISA的每个指令使用给定指令格式(并且如果被定义的话,以该指令格式的指令模板中的给定的一个)来表示,并且包括用于指定操作和操作数的字段。例如,示例性ADD指令具有特定的操作码和指令格式,该指令格式包括用于指定操作码的操作码字段和用于选择操作数(源1/目的地和源2)的操作数字段;并且该ADD指令在指令流中的出现将在选择特定操作数的操作数字段中具有特定内容。已经发布和/或公布了称为高级向量扩展(AdvancedVector Extensions,AVX)(AVX1和AVX2)并且使用向量扩展(VEX)编码方案的一组SIMD扩展(例如,参见2014年9月的英特尔®64和IA-32架构软件开发人员手册;并且参见2014年10月的英特尔®高级向量扩展编程参考)。
示例性指令格式
可以以不同格式来具体化本文描述的(一个或多个)指令的实施例。另外,下面详述示例性系统、架构和流水线。所述(一个或多个)指令的实施例可以在这样的系统、架构和流水线上执行,但是不限于详述的那些。
通用向量友好指令格式
向量友好指令格式是适合于向量指令的指令格式(例如存在专用于向量操作的某些字段)。虽然描述了其中通过向量友好指令格式来支持向量和标量操作二者的实施例,但是替换实施例仅使用向量友好指令格式的向量操作。
图25C-25D是例示根据本发明实施例的通用向量友好指令格式及其指令模板的框图。图25C是例示根据本发明实施例的通用向量友好指令格式及其A类指令模板的框图;而图25D是例示根据本发明实施例的通用向量友好指令格式及其B类指令模板的框图。具体来说,通用向量友好指令格式2516,为其定义了A类和B类指令模板,所述A类和B类指令模板二者都包括无存储器访问2519指令模板和存储器访问2520指令模板。在向量友好指令格式的上下文中的术语通用指的是未绑定到任何特定指令集的指令格式。
虽然将描述本发明的以下实施例,即在所述实施例中向量友好指令格式支持以下:具有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字节向量操作数)。
图25C中的A类指令模板包括:1)在无存储器访问2519指令模板内,示出无存储器访问、全舍入控制类型操作2517指令模板和无存储器访问、数据变换类型操作2518指令模板;以及2)在存储器访问2520指令模板内,示出存储器访问、临时2525指令模板和存储器访问、非临时2530指令模板。图25D中的B类指令模板包括:1)在无存储器访问2519指令模板内,示出无存储器访问、写掩码控制、部分舍入控制类型操作2522指令模板和无存储器访问、写掩码控制、vsize类型操作2523指令模板;以及2)在存储器访问2520指令模板内,示出存储器访问、写掩码控制2527指令模板。
该通用向量友好指令格式2516包括下文按图25C-25D中例示的顺序列出的以下字段。
格式字段2540——该字段中的特定值(指令格式标识符值)唯一标识向量友好指令格式以及因此的指令以向量友好指令格式在指令流中的出现。照此,该字段在以下意义上是可选的,即该字段对于仅具有通用向量友好指令格式的指令集来说是不需要的。
基础操作字段2542——其内容区分不同的基础操作。
寄存器索引字段2544——其内容直接地或通过地址生成来指定源和目的地操作数的位置(无论它们是在寄存器中还是在存储器中)。这些包括足以从PxQ(例如,32x512、16x128、32x1024、64x1024)寄存器文件选择N个寄存器的位数。虽然在一个实施例中N可以是高达3个源和一个目的地寄存器,但是替换实施例可以支持更多或更少的源和目的地寄存器(例如,可以支持高达两个源,其中这些源中的一个也充当目的地;可以支持高达三个源,其中这些源中的一个也充当目的地;可以支持高达两个源和一个目的地)。
修饰符字段2546——其内容将指定存储器访问的通用向量指令格式的指令的出现与不指定存储器访问的那些指令的出现进行区分;也就是说,在无存储器访问2519指令模板和存储器访问2520指令模板之间进行区分。存储器访问操作读取和/或写入存储器层级(在一些情况下使用寄存器中的值来指定源和/或目的地地址),而非存储器访问操作不读取和/或写入存储器层级(例如,源和目的地是寄存器)。虽然在一个实施例中,该字段也在用于执行存储器地址计算的三种不同方式之间进行选择,但替换实施例可以支持用于执行存储器地址计算的更多、更少或不同的方式。
扩增操作字段2550——其内容区分除了基础操作之外要执行多个不同操作中的哪一个。该字段是上下文特定的。在本发明的一个实施例中,该字段被划分成类别字段2568、α字段2552、和β字段2554。扩增操作字段2550允许在单个指令中而不是在2个、3个或4个指令中执行共同的操作组。
比例字段2560——其内容允许对于存储器地址生成(例如,对于使用2比例 * 索引+基址的地址生成)的索引字段内容进行缩放。
位移字段2562A——其内容被用作存储器地址生成的一部分(例如,对于使用2比例* 索引+基址+位移的地址生成)。
位移因数字段2562B(注意,位移字段2562A直接在位移因数字段2562B上的并置指示一个或另一个被使用)——其内容被用作地址生成的一部分;它指定要按存储器访问的大小(N)进行缩放的位移因数,其中N是存储器访问中的字节数(例如,对于使用2比例 * 索引+基址+经缩放的位移的地址生成)。忽略冗余低阶位并且因此使位移因数字段的内容乘以存储器操作数总大小(N)以便生成要在计算有效地址中使用的最终位移。由处理器硬件在运行时基于全操作码字段2574(在本文中稍后描述)和数据操纵字段2554C来确定N的值。位移字段2562A和位移因数字段2562B在以下意义上是可选的,即它们不被用于无存储器访问2519指令模板,和/或不同实施例可以实现两个中的仅一个或者两个都不实现。
数据元素宽度字段2564——其内容区分要使用多个数据元素宽度中的哪一个(在一些实施例中针对所有指令;在其他实施例中仅针对指令中的一些)。该字段在以下意义上是可选的,即如果仅支持一个数据元素宽度和/或使用操作码的一些方面来支持数据元素宽度则该字段是不需要的。
写掩码字段2570——其内容基于每数据元素位置来控制目的地向量操作数中的该数据元素位置是否反映基础操作和扩增操作的结果。A类指令模板支持归并写掩蔽,而B类指令模板支持归并写掩蔽和归零写掩蔽二者。当归并时,向量掩码允许目的地中的任何元素集受保护以免在(由基础操作和扩增操作指定的)任何操作的执行期间更新;在另一实施例中,保留目的地的每个元素的旧值,其中对应的掩码位具有0。相比之下,当归零时,向量掩码允许目的地中的任何元素集在(由基础操作和扩增操作指定的)任何操作的执行期间被归零;在一个实施例中,当对应的掩码位具有0值时,目的地的元素被设置成0。该功能性的子集是用于控制被执行的操作的向量长度的能力(即被修改的元素的跨距,从第一个到最后一个);然而,被修改的元素不一定是连续的。因此,写掩码字段2570允许部分向量操作,包括加载、存储、算术、逻辑等等。虽然描述了其中写掩码字段2570的内容选择包含要被使用的写掩码的多个写掩码寄存器之一(并且因此写掩码字段2570的内容间接地标识要执行的该掩蔽)的本发明的实施例,但是替换实施例替代地或附加地允许掩码写字段2570的内容直接指定要执行的掩蔽。
立即数字段2572——其内容允许对立即数的说明。该字段在以下意义上是可选的,即它在不支持立即数的通用向量友好格式的实施方式中是不存在的并且它在不使用立即数的指令中是不存在的。
类别字段2568——其内容在不同类别的指令之间进行区分。参考图25C-D,该字段的内容在A类和B类指令之间进行选择。在图25C-D中,使用圆角方形来指示在字段中存在特定值(例如,在图25C-D中分别对于类别字段2568的A类 2568A和B类 2568B)。
类指令模板
在A类无存储器访问2519指令模板的情况下,α字段2552被解释为RS字段2552A,其内容区分要执行不同扩增操作类型中的哪一个(例如,为无存储器访问、全舍入类型操作2517和无存储器访问、数据变换类型操作2518指令模板分别指定舍入2552A.1和数据变换2552A.2),而β字段2554区分要执行所指定的类型的操作中的哪一个。在无存储器访问2519指令模板中,不存在比例字段2560、位移字段2562A和位移比例字段2562B。
无存储器访问指令模板——全舍入控制类型操作
在无存储器访问、全舍入控制类型操作2517指令模板中,β字段2554被解释为舍入控制字段2554A,其(一个或多个)内容提供静态舍入。虽然在本发明的所描述的实施例中,舍入控制字段2554A包括抑制所有浮点异常(SAE)字段2556和舍入操作控制字段2558,但是替换实施例可以支持可以将这两个概念编码到同一字段中或者仅具有这些概念/字段中的一个或另一个(例如,可以仅具有舍入操作控制字段2558)。
SAE字段2556——其内容区分是否禁用异常事件报告;当SAE字段2556的内容指示启用抑制时,给定指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处理程序。
舍入操作控制字段2558——其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入和就近舍入)。因此,舍入操作控制字段2558允许基于每个指令改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段2558的内容覆写该寄存器值。
无存储器访问指令模板——数据变换类型操作
在无存储器访问数据变换类型操作2518指令模板中,β字段2554被解释为数据变换字段2554B,其内容区分要执行多个数据变换中的哪一个(例如,无数据变换、拌和、广播)。
在A类存储器访问2520指令模板的情况下,α字段2552被解释为驱逐提示字段2552B,其内容区分要使用驱逐提示中的哪一个(在图25C中,为存储器访问、临时2525指令模板和存储器访问、非临时2530指令模板分别指定临时2552B.1和非临时2552B.2),而β字段2554被解释为数据操纵字段2554C,其内容区分要执行多个数据操纵操作(也被称为基元)中的哪一个(例如,无操纵;广播;源的向上转换;以及目的地的向下转换)。存储器访问2520指令模板包括比例字段2560、以及可选地位移字段2562A或位移比例字段2562B。
向量存储器指令在转换支持的情况下执行从存储器中的向量加载和至存储器的向量存储。就规则的向量指令来说,向量存储器指令以按数据元素的方式从存储器/向存储器传递数据,其中实际上传递的元素由被选择为写掩码的向量掩码的内容来决定。
存储器访问指令模板——临时
临时数据是可能很快地被再次使用以便受益于高速缓存的数据。然而,这是提示,并且不同的处理器可以以不同的方式来实现它,包括完全地忽略该提示。
存储器访问指令模板——非临时
非临时数据是不太可能很快地被再次使用以受益于第一级高速缓存中的高速缓存并且应被给予驱逐优先级的数据。然而,这是提示,并且不同的处理器可以以不同的方式来实现它,包括完全地忽略该提示。
B类指令模板
在B类指令模板的情况下,α字段2552被解释为写掩码控制(Z)字段2552C,其内容区分由写掩码字段2570控制的写掩蔽应当是归并还是归零。
在B类无存储器访问2519指令模板的情况下,β字段2554的一部分被解释为RL字段2557A,其内容区分要执行不同扩增操作类型中的哪一个(例如,为无存储器访问、写掩码控制、部分舍入控制类型操作2522指令模板和无存储器访问、写掩码控制、VSIZE类型操作2523指令模板分别指定舍入2557A.1和向量长度(VSIZE)2557A.2),而β字段2554的其余部分区分要执行所指定的类型的操作中的哪一个。在无存储器访问2519指令模板中,不存在比例字段2560、位移字段2562A和位移比例字段2562B。
在无存储器访问、写掩码控制、部分舍入控制类型操作2522指令模板中,β字段2554的其余部分被解释为舍入操作控制字段2559A并且禁用异常事件报告(给定指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处理程序)。
舍入操作控制字段2559A——正如舍入操作控制字段2558,其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入和就近舍入)。因此,舍入操作控制字段2559A允许基于每个指令改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段2559A的内容覆写该寄存器值。
在无存储器访问、写掩码控制、VSIZE类型操作2523指令模板中,β字段2554的其余部分被解释为向量长度字段2559B,其内容区分要执行多个数据向量长度中的哪一个(例如,128、256、或512字节)。
在B类存储器访问2520指令模板的情况下,β字段2554的部分被解释为广播字段2557B,其内容区分是否要执行广播类型数据操纵操作,而β字段2554的其余部分被解释成向量长度字段2559B。存储器访问2520指令模板包括比例字段2560、以及可选地位移字段2562A或位移比例字段2562B。
关于通用向量友好指令格式2516,示出包括格式字段2540、基础操作字段2542和数据元素宽度字段2564的全操作码字段2574。虽然示出其中全操作码字段2574包括所有这些字段的一个实施例,但是在不支持所有它们的实施例中,全操作码字段2574包括少于所有这些字段。全操作码字段2574提供操作代码(操作码)。
扩增操作字段2550、数据元素宽度字段2564和写掩码字段2570允许以通用向量友好指令格式基于每个指令来指定这些特征。
写掩码字段和数据元素宽度字段的组合创建类型化指令,因为它们允许基于不同的数据元素宽度来应用掩码。
在A类和B类内找到的各种指令模板在不同情形下是有益的。在本发明的一些实施例中,不同处理器或处理器内的不同核可以仅支持A类、仅支持B类或支持两个类别。例如,意图用于通用计算的高性能通用无序核可以仅支持B类、意图主要用于图形和/或科学(吞吐量)计算的核可以仅支持A类,并且意图用于二者的核可以支持二者(当然,具有来自两个类别的模板和指令、但不是来自两个类别的所有模板和指令的某一混合的核在本发明的范围内)。而且,单个处理器可以包括多个核,所述核的全部都支持相同的类别或者其中不同的核支持不同类别。例如,在具有单独图形和通用核的处理器中,意图主要用于图形和/或科学计算的图形核中的一个可以仅支持A类,而通用核中的一个或多个可以是具有意图用于仅支持B类通用计算的无序执行和寄存器重命名的高性能通用核。不具有单独图形核的另一处理器可以包括支持A类和B类二者的一个或多个通用有序或无序核。当然,来自一个类别的特征在本发明的不同实施例中也可以在另一类别中被实现。以高级语言写的程序将会被安置(例如,仅仅及时编译或静态编译)成多种不同的可执行形式,其包括:1)仅具有为了执行由目标处理器支持的(一个或多个)类别的指令的形式;或2)具有使用所有类别的指令的不同组合写的替换例程且具有选择例程用于基于由当前正执行代码的处理器支持的指令来执行的控制流代码的形式。
示例性特定向量友好指令格式
图26A是例示根据本发明实施例的示例性特定向量友好指令格式的框图。图26A示出特定向量友好指令格式2600,其在该特定向量友好指令格式指定位置、大小、解释和字段顺序、以及用于那些字段中的一些的值的意义上是特定的。该特定向量友好指令格式2600可以被用于扩展x86指令集,并且因此所述字段中的一些与在现有x86指令集以及其扩展(例如,AVX)中使用的那些是类似的或相同的。该格式保持与前缀编码字段、实操作码字节字段、MOD R/M字段、SIB字段、位移字段和具有扩展的现有x86指令集的立即数字段一致。例示了来自图25的字段,其中来自图26A的字段中映射成所述来自图25的字段。
应当理解的是,尽管为了例示的目的在通用向量友好指令格式2516的上下文中参考特定向量友好指令格式2600描述了本发明的实施例,但是本发明不限于该特定向量友好指令格式2600,除了被声明的地方之外。例如,该通用向量友好指令格式2516预期对于各种字段的各种各样的可能大小,而特定向量友好指令格式2600被示出为具有特定大小的字段。通过特定示例,尽管数据元素宽度字段2564被例示为特定向量友好指令格式2600中的一位字段,但是本发明不限于此(也就是说,该通用向量友好指令格式2516预期数据元素宽度字段2564的其他大小)。
该通用向量友好指令格式2516包括下文按图26A中例示的顺序列出的以下字段。
EVEX前缀(字节0-3)2602——其是以四字节形式编码的。
格式字段2540(EVEX字节0,位[7:0])——第一字节(EVEX字节0)是格式字段2540并且它包含0x62(在本发明的一个实施例中被用于区分向量友好指令格式的唯一值)。
第二至第四字节(EVEX字节1-3)包括提供特定能力的多个位字段。
REX字段2605(EVEX字节1,位[7-5])——由EVEX.R位字段(EVEX字节1,位[7]-R)、EVEX.X位字段(EVEX字节1,位[6]-X)和2557BEX字节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' 2610A——这是REX'字段2610的第一部分并且是用于对扩展的32寄存器集的上16或下16编码的EVEX.R'位字段(EVEX字节1,位[4]-R')。在本发明的一个实施例中,以位倒置格式存储该位连同如下文指示的其他位以便(以众所周知的x86 32位模式)与BOUND指令区分,所述BOUND指令的实操作码字节是62,但是在(下文描述的)MOD R/M字段中不接受MOD字段中的11的值;本发明的替换实施例不以倒置格式来存储该位以及下文指示的其他位。为1的值被用于对下16寄存器编码。换言之,通过组合EVEX.R'、EVEX.R和来自其他字段的其他RRR来形成R'Rrrr。
操作码映射字段2615(EVEX字节1,位[3:0]-mmmm)——其内容对隐含前导操作码字节(0F、0F 38或0F 3)进行编码。
数据元素宽度字段2564(EVEX字节2,位[7]-W)——通过标号EVEX.W表示。EVEX.W被用于定义数据类型的粒度(大小)(32位数据元素或者64位数据元素)。
EVEX.vvvv 2620(EVEX字节2,位[6:3]-vvvv)——EVEX.vvvv的作用可以包括以下内容:1)EVEX.vvvv对以倒置(补充1)形式指定的第一源寄存器操作数进行编码并且对于具有2个或更多源操作数的指令是有效的;2)EVEX.vvvv对以补充1形式为某些向量移位指定的目的地寄存器操作数进行编码;或者3)EVEX.vvvv不对任何操作数进行编码,字段被保留并且应当包含1111b。因此,EVEX.vvvv字段2620对以倒置(补充1)形式存储的第一源寄存器指定符的4个低阶位编码。取决于指令,使用额外的不同EVEX位字段来将指定符大小扩展至32个寄存器。
EVEX.U 2568 类别字段(EVEX字节2,位[2]-U)——如果EVEX.U=0,则它指示A类或者EVEX.U0;如果EVEX.U=1,则它指示B类或者EVEX.U1。
前缀编码字段2625(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前缀编码,并且因此不需要扩充。
α字段2552(EVEX字节3,位[7]-EH;也被称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写掩码控制,和EVEX.N;也用α例示)——如先前描述的那样,该字段是上下文特定的。
β字段2554(EVEX字节3,位[6:4]-SSS,也被称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也用βββ例示)——如先前描述的那样,该字段是上下文特定的。
REX' 2610B——这是REX'字段2610的其余部分并且是可以被用于对扩展的32寄存器集的上16或下16进行编码的EVEX.V'位字段(EVEX字节3,位[3]——V')。以位倒置格式来存储该位。使用值1来对下16寄存器进行编码。换言之,通过组合EVEX.V'、EVEX.vvvv来形成V'VVVV。
写掩码字段2570(EVEX字节3,位[2:0]-kkk)——如先前描述的,其内容指定寄存器在写掩码寄存器中的索引。在本发明的一个实施例中,特定值EVEX.kkk=000具有暗示没有写掩码被用于特定指令的特殊行为(这可以以各种各样的方式(包括使用硬接线至所有的一的写掩码或绕过掩蔽硬件的硬件)来实现)。
实操作码字段2630(字节4)也被称为操作码字节。在该字段中指定操作码的部分。
MOD R/M字段2640(字节5)包括MOD字段2642、Reg字段2644、和R/M字段2646。如先前描述的,MOD字段2642的内容在存储器访问和非存储器访问操作之间进行区分。Reg字段2644的作用可以被总结成两个情形:对目的地寄存器操作数或源寄存器操作数进行编码,或者被视为操作码扩展并且不被用于对任何指令操作数进行编码。R/M字段2646的作用可以包括以下内容:对参考存储器地址的指令操作数进行编码,或对目的地寄存器操作数或源寄存器操作数进行编码。
比例、索引、基址(SIB)字节(字节6)——如先前描述的,比例字段2560的内容被用于存储器地址生成。SIB.xxx 2654和SIB.bbb 2656——先前已经关于寄存器索引Xxxx和Bbbb涉及了这些字段的内容。
位移字段2562A(字节7-10)——当MOD字段2642包含10时,字节7-10是位移字段2562A,并且它与旧有的32位位移(disp32)以相同方式工作并且以字节粒度工作。
位移因数字段2562B(字节7)——当MOD字段2642包含01时,字节7是位移因数字段2562B。该字段的位置是与以字节粒度工作的旧有x86指令集8位位移(disp8)的位置相同的位置。因为disp8是符号扩展的,所以它可以仅在-128和127字节偏移之间寻址;就64字节高速缓存行来说,disp8使用可以被设置成仅四个真正有用的值-128、-64、0和64的8个位;因为常常需要更大的范围,所以使用disp32;然而,disp32需要4个字节。与disp8和disp32相比,位移因数字段2562B是disp8的重新解释;当使用位移因数字段2562B时,通过乘以存储器操作数访问的大小(N)的位移因数字段的内容来确定实际位移。这种类型的位移被称为disp8*N。这降低平均指令长度(被用于位移但具有大得多的范围的单个字节)。这样的经压缩的位移是基于以下假设:有效位移是存储器访问的粒度的倍数,并且因此不需要对地址偏移的冗余低阶位编码。换言之,该位移因数字段2562B代替旧有x86指令集8位位移。因此,以与x86指令集8位位移相同的方式来对位移因数字段2562B编码(所以ModRM/SIB编码规则没有变化),仅有的例外是使disp8过载成disp8*N。换言之,在编码规则或编码长度中不存在变化,但是仅在通过硬件对位移值的解释上存在变化(这需要使位移缩放存储器操作数的大小以获得按字节的地址偏移)。立即数字段2572如先前描述的那样操作。
全操作码字段
图26B是例示根据本发明的一个实施例的构成全操作码字段2574的特定向量友好指令格式2600的字段的框图。具体来说,全操作码字段2574包括格式字段2540、基础操作字段2542和数据元素宽度(W)字段2564。该基础操作字段2542包括前缀编码字段2625、操作码映射字段2615和实操作码字段2630。
寄存器索引字段
图26C是例示根据本发明的一个实施例的构成寄存器索引字段2544的特定向量友好指令格式2600的字段的框图。具体来说,寄存器索引字段2544包括REX字段2605、REX'字段2610、MODR/M.reg字段2644、MODR/M.r/m字段2646、VVVV字段2620、xxx字段2654和bbb字段2656。
扩增操作字段
图26D是例示根据本发明的一个实施例的构成扩增操作字段2550的特定向量友好指令格式2600的字段的框图。当类别(U)字段2568包含0时,它意味着EVEX.U0(A类 2568A);当它包含1时,它意味着EVEX.U1(B类 2568B)。当U=0并且MOD字段2642包含11(意味着无存储器访问操作)时,α字段2552(EVEX字节3,位[7]-EH)被解释为rs字段2552A。当rs字段2552A包含a 1(舍入2552A.1)时,β字段2554(EVEX字节 3,位[6:4]-SSS)被解释为舍入控制字段2554A。该舍入控制字段2554A包括一位SAE字段2556和两位舍入操作控制字段2558。当rs字段2552A包含0(数据变换2552A.2)时,β字段2554(EVEX字节3,位[6:4]-SSS)被解释为三位数据变换字段2554B。当U=0且MOD字段2642包含00、01或10(意味着存储器访问操作)时,β字段2552(EVEX字节3,位[7]-EH)被解释为驱逐提示(EH)字段2552B,并且β字段2554(EVEX字节3,位[6:4]-SSS)被解释为三位数据操纵字段2554C。
当U=1时,α字段2552(EVEX字节3,位[7]-EH)被解释为写掩码控制(Z)字段2552C。当U=1并且MOD字段2642包含11(意味着无存储器访问操作)时,β字段2554的一部分(EVEX字节3,位[4]-S0)被解释为RL字段2557A;当它包含1(舍入2557A.1)时,β字段2554的其余部分(EVEX字节3,位[6-5]-S2-1)被解释为舍入操作控制字段2559A,而当RL字段2557A包含0(VSIZE 2557.A2)时,β字段2554的其余部分(EVEX字节3,位[6-5]-S2-1)被解释为向量长度字段2559B(EVEX字节3,位[6-5]-L1-0)。当U=1且MOD字段2642包含00、01或10(意味着存储器访问操作)时,β字段2554(EVEX字节3,位[6:4]-SSS)被解释为向量长度字段2559B(EVEX字节3,位[6:5]-L1-0)和广播字段2557B(EVEX字节3,位[4]-B)。
示例性寄存器架构
图27是根据本发明的一个实施例的寄存器架构2700的框图。在所例示的实施例中,存在具有512位宽的32个向量寄存器2710;这些寄存器被称为zmm0至zmm31。下16个zmm寄存器的低阶256位覆盖在寄存器ymm0-16上。下16个zmm寄存器的低阶128位(ymm寄存器的低阶128位)覆盖在寄存器xmm0-15上。如在下面的表中例示的那样,该特定向量友好指令格式2600在这些覆盖的寄存器文件上操作:
换言之,该向量长度字段2559B在最大长度与一个或多个其他较短长度之间选择,其中每个这样的较短长度是在前长度的长度的一半;并且不具有向量长度字段2559B的指令模板在最大向量长度上操作。此外,在一个实施例中,特定向量友好指令格式2600的B类指令模板对打包或标量单/双精度浮点数据以及打包或标量整数数据进行操作。标量操作是在zmm/ymm/xmm寄存器中的最低阶数据元素位置上执行的操作;根据实施例,较高阶数据元素位置与它们在指令之前相同地在左侧或者被归零。
写掩码寄存器2715——在所例示的实施例中,存在8个写掩码寄存器(k0至k7),每个在大小上都是64位。在替换实施例中,写掩码寄存器2715在大小上是16位。如先前描述的,在本发明的一个实施例中,该向量掩码寄存器k0不能被用作写掩码;当将会正常指示k0的编码被用于写掩码时,它选择0xFFFF的硬接线写掩码,有效地禁用对于该指令的写掩蔽。
通用寄存器2725——在所例示的实施例中,存在连同现有的x86寻址模式一起用于对存储器操作数寻址的十六个64位通用寄存器。通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8至R15来参考这些寄存器。
标量浮点堆栈寄存器文件(x87堆栈)2745(其别名为MMX打包整数平面寄存器文件2750)——在所例示的实施例中,该x87堆栈是被用于使用x87指令集扩展来对32/64/80位浮点数据执行标量浮点操作的八元素堆栈;而MMX寄存器被用于对64位打包整数数据执行操作以及对于在MMX和XMM寄存器之间执行的一些操作保持操作数。
本发明的替换实施例可以使用更宽或更窄的寄存器。另外,本发明的替换实施例可以使用更多、更少或不同的寄存器文件和寄存器。
示例性核架构、处理器和计算机架构
为了不同目的可以以不同的方式并且在不同处理器中实现处理器核。例如,这样的核的实现可以包括:1)意图用于通用计算的通用有序核;2)意图用于通用计算的高性能通用无序核;3)意图主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现可以包括:1)包括意图用于通用计算的一个或多个通用有序核和/或意图用于通用计算的一个或多个通用无序核的CPU;以及2)包括意图主要用于图形和/或科学(吞吐量)的一个或多个专用核的协处理器。这样的不同处理器导致不同的计算机系统架构,其可以包括:1)来自CPU的单独芯片上的协处理器;2)与CPU相同的封装中的单独管芯上的协处理器;3)与CPU相同的管芯上的协处理器(在其情况下,这样的协处理器有时被称为专用逻辑(诸如集成图形和/或科学(吞吐量)逻辑),或被称为专用核);以及4)片上系统,其可以在相同的管芯上包括所述CPU(有时被称为(一个或多个)应用核或(一个或多个)应用处理器)、上述协处理器和附加功能性。接下来描述示例性核架构,之后是示例性处理器和计算机架构的描述。
示例性核架构
有序和无序核的框图
图28A是根据本发明实施例的例示了示例性有序流水线以及示例性寄存器重命名、无序发布/执行流水线二者的框图。图28B是根据本发明实施例的例示了有序架构核的示例性实施例以及要被包括在处理器中的示例性寄存器重命名、无序发布/执行架构核二者的框图。图28A-B中的实线框例示有序流水线和有序核,而虚线框的可选附加项例示寄存器重命名、无序发布/执行流水线和核。考虑到有序方面是无序方面的子集,将描述无序方面。
在图28A中,处理器流水线2800包括提取阶段2802、长度解码阶段2804、解码阶段2806、分配阶段2808、重命名阶段2810、调度(也已知为派遣或发布)阶段2812、寄存器读取/存储器读取阶段2814、执行阶段2816、写回/存储器写入阶段2818、异常处理阶段2822以及提交阶段2824。
图28B示出处理器核2890,其包括被耦合到执行引擎单元2850的前端单元2830,并且这两个单元都被耦合到存储器单元2870。核2890可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或者混合或替换的核类型。作为又一选项,核2890可以是专用核,诸如例如,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核等。
前端单元2830包括分支预测单元2832,其被耦合到指令高速缓存单元2834,指令高速缓存单元2834被耦合到指令翻译后备缓冲器(TLB)2836,指令翻译后备缓冲器(TLB)2836被耦合到指令提取单元2838,指令提取单元2838被耦合以将所提取的指令2839发送到解码单元2840。解码单元2840(或解码器)可以解码指令,并生成一个或多个解码指令2841、或者解码自原始指令、或以其他方式反映原始指令、或导出自原始指令的操作、微代码进入点、微指令、其他指令或其他控制信号作为输出。可以使用各种不同机制来实现解码单元2840。合适机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等等。在一个实施例中,核2890包括微代码ROM或存储用于某些宏指令的微代码的其他介质(例如,在解码单元2840中或以其他方式在前端单元2830内)。解码单元2840被耦合到执行引擎单元2850中的重命名/分配器单元2852。
执行引擎单元2850包括重命名/分配器单元2852,其被耦合到引退单元2854和一组一个或多个调度器单元2856。(一个或多个)调度器单元2856表示任何数量的不同调度器,包括保留站、中央指令窗口等等。(一个或多个)调度器单元2856被耦合到(一个或多个)物理寄存器文件单元2858。(一个或多个)物理寄存器文件单元2858中的每一个表示一个或多个物理寄存器文件,其中的不同物理寄存器文件存储一个或多个不同的数据类型,诸如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针)等等。在一个实施例中,(一个或多个)物理寄存器文件单元2858包括向量寄存器单元、写掩码寄存器单元以及标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器以及通用寄存器。(一个或多个)物理寄存器文件单元2858被引退单元2854重叠以说明可以以其实现寄存器重命名和无序执行的各种方式(例如,使用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器文件;使用(一个或多个)未来文件、(一个或多个)历史缓冲器以及(一个或多个)引退寄存器文件;使用寄存器映射和寄存器池等等)。引退单元2854和(一个或多个)物理寄存器文件单元2858被耦合到(一个或多个)执行集群2860。(一个或多个)执行集群2860包括一组一个或多个执行单元2862以及一组一个或多个存储器访问单元2864。执行单元2862可以实行各种操作(例如,移位、加法、减法、乘法)并且对各种数据类型(例如,标量浮点、打包整数、打包浮点、向量整数、向量浮点)。虽然一些实施例可以包括专用于特定功能或功能集的数个执行单元,但是其他实施例可以包括全部实行所有功能的仅一个执行单元或多个执行单元。(一个或多个)调度器单元2856、(一个或多个)物理寄存器文件单元2858以及(一个或多个)执行集群2860被示出为可能是复数的,因为某些实施例针对某些数据/操作类型创建分离的流水线(例如,标量整数流水线、标量浮点/打包整数/打包浮点/向量整数/向量浮点流水线、和/或存储器访问流水线,它们各自具有其自己的调度器单元、(一个或多个)物理寄存器文件单元和/或执行集群——并且在分离的存储器访问流水线的情况下,实现其中该流水线的仅执行集群具有(一个或多个)存储器访问单元2864的某些实施例)。还应理解的是,在使用分离的流水线的情况下,这些流水线中的一个或多个可以是无序发布/执行而其余的有序。
该组存储器访问单元2864被耦合到存储器单元2870,存储器单元2870包括数据TLB单元2872,数据TLB单元2872被耦合到数据高速缓存单元2874,数据高速缓存单元2874被耦合到2级(L2)高速缓存单元2876。在一个示例性实施例中,存储器访问单元2864可以包括负载单元、存储地址单元以及存储数据单元,它们中的每一个都被耦合到存储器单元2870中的数据TLB单元2872。指令高速缓存单元2834进一步被耦合到存储器单元2870中的2级(L2)高速缓存单元2876。L2高速缓存单元2876被耦合到高速缓存的一个或多个其他级并最终被耦合到主存储器。
通过示例的方式,示例性寄存器重命名、无序发布/执行核架构可以如下实现流水线2800:1)指令提取2838实行提取和长度解码阶段2802和2804;2)解码单元2840实行解码阶段2806;3)重命名/分配器单元2852实行分配阶段2808和重命名阶段2810;4)(一个或多个)调度器单元2856实行调度阶段2812;5)(一个或多个)物理寄存器文件单元2858和存储器单元2870实行寄存器读取/存储器读取阶段2814;执行集群2860实行执行阶段2816;6)存储器单元2870和(一个或多个)物理寄存器文件单元2858实行写回/存储器写入阶段2818;7)在异常处理阶段2822中可能涉及到各种单元;以及8)引退单元2854和(一个或多个)物理寄存器文件单元2858实行提交阶段2824。
核2890可以支持一个或多个指令集(例如,x86指令集(以及被添加有较新版本的某些扩展);加利福尼亚州桑尼维尔的MIPS科技的MIPS指令集;加利福尼亚州桑尼维尔的ARM控股公司的ARM指令集(以及诸如NEON之类的可选附加扩展)),包括本文中描述的(一个或多个)指令。在一个实施例中,核2890包括用以支持打包数据指令集扩展(例如,AVX1、AVX2)的逻辑,从而允许使用打包数据来实行由许多多媒体应用使用的操作。
应当理解的是,核可以支持多线程(执行两个或更多个并行的操作集或线程集),并且可以以各种方式来这样做,所述方式包括时间切片多线程、同时多线程(其中单个物理核为物理核正同时进行多线程的线程中的每一个提供逻辑核)或者它们的组合(例如,时间切片提取和解码以及其后的同时多线程,诸如在英特尔®超线程技术中那样)。
虽然在无序执行的情境中描述了寄存器重命名,但是应理解的是,寄存器重命名可以用在有序架构中。虽然所说明的处理器的实施例还包括单独的指令和数据高速缓存单元2834/2874以及共享L2高速缓存单元2876,但是替换实施例可以具有用于指令和数据二者的单个内部高速缓存,诸如例如,1级(L1)内部高速缓存或多级内部高速缓存。在一些实施例中,系统可以包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。替换地,所有高速缓存都可以在核和/或处理器外部。
特定示例性有序核架构
图29A-B例示更具体的示例性有序核架构的框图,其核将会是芯片中的(包括相同类型和/或不同类型的其他核的)若干逻辑块中的一个。逻辑块通过具有某些固定功能逻辑、存储器I/O接口以及其他必要I/O逻辑(取决于应用)的高带宽互连网络(例如,环形网络)进行通信。
图29A是根据本发明的实施例的单个处理器核、连同其到管芯上互连网络2902的连接以及其2级(L2)高速缓存的本地子集2904的框图。在一个实施例中,指令解码器2900支持具有打包数据指令集扩展的x86指令集。L1高速缓存2906允许到标量和向量单元中的对高速缓存存储器的低延迟访问。虽然(为了简化设计)在一个实施例中标量单元2908和向量单元2910使用分离的寄存器集(分别为标量寄存器2912和向量寄存器2914)并且在它们之间传输的数据被写入到存储器并然后从1级(L1)高速缓存2906读回来,但是本发明的替换实施例可以使用不同的方法(例如,使用单个寄存器集或包括允许在两个寄存器文件之间传输数据而无需写入和读回的通信路径)。
L2高速缓存的本地子集2904是被每个处理器核一个地划分成单独的本地子集的全局L2高速缓存的一部分。每个处理器核具有到其自己的L2高速缓存的本地子集2904的直接访问路径。由处理器核读取的数据被存储在其L2高速缓存子集2904中并且可以被快速访问,与其他处理器核访问它们自己的本地L2高速缓存子集并行地进行。由处理器核写入的数据被存储在其自己的L2高速缓存子集2904中并且如果必要的话从其他子集中被清除。环形网络确保了共享数据的一致性。该环形网络是双向的以允许诸如处理器核、L2高速缓存以及其他逻辑块之类的代理在芯片内与彼此通信。每个环形数据路径在每个方向上都是1024位宽。
图29B是根据本发明的实施例的图29A中的处理器核的部分的展开图。图29B包括L1数据高速缓存2906A(L1高速缓存2904的一部分)以及关于向量单元2910和向量寄存器2914的更多细节。具体来说,向量单元2910是16宽向量处理单元(VPU)(参见16宽ALU2928),其执行整数指令、单精度浮动指令以及双精度浮动指令中的一个或多个。VPU支持用拌和单元2920来拌和寄存器输入、用数值转换单元2922A-B来数值转换以及用复制单元2924来对存储器输入进行复制。写掩码寄存器2926允许预测所得到的向量写入。
图30是根据本发明实施例的可以具有多于一个核、可以具有集成存储器控制器并且可以具有集成图形装置的处理器3000的框图。图30中的实线框例示具有单个核3002A、系统代理3010、一组一个或多个总线控制器单元3016的处理器3000,而虚线框的可选附加例示具有多个核3002A-N、系统代理单元3010中的一组一个或多个集成存储器控制器单元3014以及专用逻辑3008的替换处理器3000。
因此,处理器3000的不同实现可以包括:1)具有专用逻辑3008的CPU被集成有图形装置和/或科学(吞吐量)逻辑(其可以包括一个或多个核),并且核3002A-N是一个或多个通用核(例如,通用有序核、通用无序核、二者的组合);2)具有核3002A-N的协处理器,所述核3002A-N是大量的专用核,其主要用于图形和/或科学(吞吐量);以及3)具有核3002A-N的协处理器,所述核3002A-N是大量的通用有序核。因此,处理器3000可以是通用处理器、协处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量多集成核(MIC)协处理器(包括30或更多个核)、嵌入式处理器等等。可以在一个或多个芯片上实现处理器。处理器3000可以是一个或多个基板的一部分,或者可以使用多种工艺技术(诸如例如,BiCMOS、CMOS或NMOS)中的任何一种将处理器3000实现在一个或多个基板上。
存储器层级包括核内的高速缓存的一个或多个级,一组一个或多个共享高速缓存单元3006以及被耦合到该组集成存储器控制器单元3014的外部存储器(未示出)。该组共享高速缓存单元3006可以包括一个或多个中间级高速缓存,诸如2级(L2)、3级(L3)、4级(L4)或其他级的高速缓存、末级高速缓存(LLC)和/或其组合。虽然在一个实施例中基于环形的互连单元3012互连集成图形逻辑3008(集成图形逻辑3008是专用逻辑的示例并且在本文中也称为专用逻辑)、该组共享高速缓存单元3006以及系统代理单元3010/(一个或多个)集成存储器控制器单元3014,但是替换实施例可以使用任何数量的公知技术来互连此类单元。在一个实施例中,在一个或多个高速缓存单元3006和核3002A-N之间维持一致性。
在一些实施例中,核3002A-N中的一个或多个能够实现多线程。系统代理3010包括协调和操作核3002A-N的那些组件。系统代理单元3010可以包括例如功率控制单元(PCU)和显示单元。PCU可以是或者包括调节核3002A-N和集成图形逻辑3008的功率状态所需的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
就架构指令集而言,核3002A-N可以是同构的或是异构的;即,核3002A-N中的两个或更多个可以能够执行相同的指令集,而其他核可以能够执行该指令集的仅子集或者执行不同的指令集。
示例性计算机架构
图31-34是示例性计算机架构的框图。在针对膝上型计算机、台式计算机、手持式PC、个人数字助理、工程工作站、服务器、网络设备、网络中枢、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持式设备以及各种其他电子设备的领域中已知的其他系统设计和配置也是合适的。一般来说,能够并入如本文中公开的处理器和/或其他执行逻辑的大量的各种各样的系统或电子设备一般都是合适的。
现在参考图31,示出了根据本发明的一个实施例的系统3100的框图。系统3100可以包括一个或多个处理器3110、3115,它们被耦合到控制器集线器3120。在一个实施例中,控制器集线器3120包括图形存储器控制器集线器(GMCH)3190以及输入/输出集线器(IOH)3150(其可以在分离的芯片上);GMCH 3190包括存储器和图形控制器,存储器3140和协处理器3145被耦合到所述存储器和图形控制器;IOH 3150将输入/输出(I/O)设备3160耦合到GMCH 3190。替换地,存储器和图形控制器中的一个或二者被集成在(如本文中描述的)处理器内,存储器3140和协处理器3145被直接耦合到处理器3110和与IOH 3150在单个芯片中的控制器集线器3120。
在图31中用折线标明了附加处理器3115的可选性质。每个处理器3110、3115可以包括本文中描述的处理核中的一个或多个并且可以是处理器3000的某一版本。
存储器3140可以例如是动态随机访问存储器(DRAM)、相变存储器(PCM)或二者的组合。针对至少一个实施例,控制器集线器3120经由多点总线3195与(一个或多个)处理器3110、3115通信,所述多点总线诸如前侧总线(FSB)、点到点接口(诸如快速路径互连(QPI))或者类似连接。
在一个实施例中,协处理器3145是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等等。在一个实施例中,控制器集线器3120可以包括集成图形加速器。
就包括架构、微架构、热学、功率消耗特性等的优点的度量谱而言,在物理资源3110、3115之间可以有各种差异。
在一个实施例中,处理器3110执行控制通用类型的数据处理操作的指令。嵌入在指令内的可以是协处理器指令。处理器3110将这些协处理器指令识别为应由附连的协处理器3145来执行的类型。因而,处理器3110在协处理器总线或其他互连上将这些协处理器指令(或表示协处理器指令的控制信号)发给协处理器3145。(一个或多个)协处理器3145接受并执行接收到的协处理器指令。
现在参考图32,示出了根据本发明的实施例的第一更具体的示例性系统3200的框图。如图32中所示,多处理器系统3200是点到点互连系统,并且包括经由点到点互连3250进行耦合的第一处理器3270和第二处理器3280。处理器3270和3280中的每一个可以是处理器3000的某一版本。在本发明的一个实施例中,处理器3270和3280分别是处理器3110和3115,而协处理器3238是协处理器3145。在另一实施例中,处理器3270和3280分别是处理器3110和协处理器3145。
处理器3270和3280被示出为分别包括集成存储器控制器(IMC)单元3272和3282。处理器3270还包括点到点(P-P)接口3276和3278作为其总线控制器单元的一部分;类似地,第二处理器3280包括P-P接口3286和3288。处理器3270、3280可以使用P-P接口电路3278、3288经由点到点(P-P)接口3250交换信息。如图32中所示,IMC 3272和3282将处理器耦合到相应的存储器、即存储器3232和存储器3234,它们可以是本地附连到相应处理器的主存储器的部分。
处理器3270、3280可以使用点到点接口电路3276、3294、3286、3298经由单独的P-P接口3252、3254与芯片集3290交换信息。芯片集3290可以可选地经由高性能接口3292与协处理器3238交换信息。在一个实施例中,协处理器3238是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等等。
共享高速缓存(未示出)可以被包括在任一处理器中或者在两个处理器外部,又或者经由P-P互连与处理器连接,使得如果处理器被置入到低功率模式中则任一或两个处理器的本地高速缓存信息可以被存储在共享高速缓存中。
芯片集3290可以经由接口3296被耦合到第一总线3216。在一个实施例中,第一总线3216可以是外围组件互连(PCI)总线,或者是诸如PCI快速总线或另一第三代I/O互连总线之类的总线,但是本发明的范围不限于此。
如图32中所示,各种I/O设备3214可以被耦合到第一总线3216以及总线桥3218,总线桥3218将第一总线3216耦合到第二总线3220。在一个实施例中,诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器的一个或多个附加处理器3215被耦合到第一总线3216。在一个实施例中,第二总线3220可以是低引脚数(LPC)总线。各种设备可以被耦合到第二总线3220,所述设备包括例如,键盘和/或鼠标3222、通信设备3227以及诸如盘驱动或其他大容量存储设备之类的存储单元3228,其在一个实施例中可以包括指令/代码和/或数据3230。此外,音频I/O 3224可以被耦合到第二总线3216。注意,其他架构也是可能的。例如,作为图32的点到点架构的替代,系统可以实现多点总线或其他此类架构。
现在参考图33,示出了根据本发明的实施例的第二更具体的示例性系统3300的框图。图32和33中的相似元件具有相似的附图标记,并且从图33中省略了图32的某些方面以便避免模糊图33的其他方面。
图33例示处理器3270、3280可以分别包括集成存储器和I/O控制逻辑(“CL”)3372和3382。因此,CL 3372、3382包括集成存储器控制器单元并且包括I/O控制逻辑。图33例示不仅存储器3232、3234被耦合到CL 3272、3282,而且I/O设备3314也被耦合到控制逻辑3272、3282。旧有I/O设备3315被耦合到芯片集3290。
现在参考图34,示出了根据本发明的实施例的SoC 3400的框图。图30中的类似元件具有相似的附图标记。而且,虚线框是更高级的SoC上的可选特征。在图34中,(一个或多个)互连单元3402被耦合到:应用处理器3410,其包括包含高速缓存单元3004A-N的一组一个或多个核3002A-N和(一个或多个)共享高速缓存单元3006;系统代理单元3010;(一个或多个)总线控制器单元3016;(一个或多个)集成存储器控制器单元3014;一组一个或多个协处理器3420,其可以包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机访问存储器(SRAM)单元3430;直接存储器访问(DMA)单元3432;以及用于耦合到一个或多个外部显示器的显示单元3440。在一个实施例中,(一个或多个)协处理器3420是专用处理器,诸如例如,网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等等。
可以以硬件、软件、固件或此类实现方法的组合来实现本文中公开的机制的实施例。本发明的实施例可以被实现为计算机程序或程序代码,其在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备的可编程系统上执行。
可以应用诸如图32中例示的代码3230之类的程序代码来输入指令以实行本文中描述的功能并生成输出信息。可以以已知方式将输出信息应用于一个或多个输出设备。出于本申请的目的,处理系统包括具有处理器的任何系统,诸如例如:数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。
可以以高级程序语言或面向对象的编程语言来实现程序代码以便与处理系统通信。如果期望的话,也可以以汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制在范围上不限于任何特定的编程语言。在任何情况下,语言可以是编译语言或解释语言。
可以通过存储在机器可读介质上的表示处理器内的各种逻辑的代表性指令来实现至少一个实施例的一个或多个方面,所述指令当被机器读取时促使所述机器制作逻辑以实行本文中描述的技术。已知为“IP核”的这样的表示可以被存储在有形的机器可读介质上并被供应给各种客户或制造设施来加载到实际上制造逻辑或处理器的制作机器中。
这样的机器可读存储介质可以在没有限制的情况下包括由机器或设备制造或形成的非暂时性有形的制品布置,包括诸如硬盘的存储介质、任何其他类型的盘(包括软盘、光盘、紧凑盘只读存储器(CD-ROM)、紧凑盘可重写设备(CD-RW)以及磁光盘)、半导体设备(诸如只读存储器(ROM)、随机访问存储器(RAM)(诸如动态随机访问存储器(DRAM)、静态随机访问存储器(SRAM))、可擦可编程只读存储器(EPROM)、闪速存储器、电可擦可编程只读存储器(EEPROM)、相变存储器(PCM))、磁卡或光卡、或者适合于存储电子指令的任何其他类型的介质。
相应地,本发明的实施例还包括包含指令或包含设计数据(诸如硬件描述语言(HDL))的非暂时性有形机器可读介质,所述设计数据定义本文中描述的结构、电路、装置、处理器和/或系统特征。这样的实施例也可以称为程序产品。
仿真(包括二进制翻译、代码变形等)
在一些情况下,可以使用指令转换器来将指令从源指令集转换成目标指令集。例如,指令转换器可以将指令翻译(例如,使用静态二进制翻译、包括动态编译的动态二进制翻译)、变形、仿真或以其他方式转换成要由核处理的一个或多个其他指令。可以以软件、硬件、固件或其组合来实现指令转换器。指令转换器可以是在处理器上、处理器外、或者部分在处理器上而部分在处理器外。
图35是根据本发明的实施例的对照使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所例示的实施例中,指令转换器是软件指令转换器,但是替换地,指令转换器可以以软件、固件、硬件和其各种组合来实现。图35示出高级语言3502形式的程序可以使用x86编译器3504来编译以生成x86二进制代码3506,所述x86二进制代码3506可以原生地由具有至少一个x86指令集核的处理器3516来执行。具有至少一个x86指令集核的处理器3516表示基本上可以通过互相兼容地执行或以其他方式处理以下内容来实行与具有至少一个x86指令集核的英特尔处理器相同的功能的任何处理器:(1)英特尔x86指令集核的指令集的实质部分或者(2)目标为在具有至少一个x86指令集核的英特尔处理器上运行的应用或其他软件的目标代码版本,以便基本上实现与具有至少一个x86指令集核的英特尔处理器相同的结果。x86编译器3504表示可操作用于生成x86二进制代码3506(例如,目标代码)的编译器,所述二进制代码3506可以在有附加链接处理或没有附加链接处理的情况下在具有至少一个x86指令集核的处理器3516上执行。类似地,图35示出了高级语言3502形式的程序可以使用替换指令集编译器3508来进行编译以生成替换指令集二进制代码3510,其可以原生地由不具有至少一个x86指令集核的处理器3514来执行(例如,具有执行加利福尼亚州桑尼维尔的MIPS科技的MIPS指令集和/或执行加利福尼亚州桑尼维尔的ARM控股公司的ARM指令集的核的处理器)。使用指令转换器3512来将x86二进制代码3506转换成可以原生地由不具有x86指令集核的处理器3514来执行的代码。该经转换的代码很可能不与替换指令集二进制代码3510相同,因为能够这样做的指令转换器难以制造;然而,经转换的代码将完成一般操作并且由来自替换指令集的指令构成。因此,指令转换器3512表示通过仿真、模拟或任何其他过程而允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码3506的软件、固件、硬件或其组合。
另外的示例
示例1提供了一种示例性单指令多数据(SIMD)处理器,包括:提取电路,其要提取一个或多个指令直到已提取了一组指令,每个指令要指定源和目的地区块操作数;解码电路,其要解码该组所提取的指令;以及执行电路,响应于该组已解码指令以:标识属于指令链的第一和第二已解码指令,动态地选择和配置包括要执行第一和第二已解码指令的第一和第二处理引擎(PE)的SIMD路径,以及留出第一已解码指令的所指定的目的地,并且替代地将第一已解码指令的结果从第一PE进行路由以供第二PE使用以实行第二已解码指令。
示例2包括示例1的示例性处理器的实质内容,其中该组指令包括至少一个指令,并且其中所述指令链中的每个指令还要包括链控制字段,以使所述执行电路确定所述指令是链的一部分;并且其中所述控制字段中的每一个要指示包括以下中的一个的链位置提示:链开始提示、链中间提示和用于标记链中的最后指令的链结束提示,其中所述链控制字段要使所述执行电路确定所述链的存在,以动态地选择和配置所述SIMD路径以实行所述指令链,以留出除所述链中的最后指令之外的所有指令的所指定的目的地,并且以将除最后指令之外的所有指令的结果路由到实行所述链中的下一指令的PE。
示例3包括示例1的示例性处理器的实质内容,其中第一和第二已解码指令指定不同的操作码以指定不同的第一和第二算术操作,并且其中所选择的第一和第二处理引擎要具有分别专门用于第一算术操作和第二算术操作的受限制的功能性。
示例4包括示例2的示例性处理器的实质内容,其中所述指令链的第一指令还要包括链控制字段,所述链控制字段包括用于将第一指令和一个或多个后续指令标识为是所述指令链的一部分的链头部。
示例5包括示例1的示例性处理器的实质内容,其中,所指定的源和目的地矩阵(区块)各自包括M行和N列元素,并且要仅在一行中包含有效元素。
示例6包括示例1的示例性处理器的实质内容,其中,所述执行电路还要维持使指定的目的地被留出的指令的记录,并且要根据需要回滚并重新执行一组所记录的指令。
示例7包括示例1的示例性处理器的实质内容,其中,所述执行电路还要在所述留出之前保存机器状态,并且要随后执行机器状态一致性检查以检测由于所述留出而引起的任何不一致。
示例8包括示例1的示例性处理器的实质内容,其中,该组指令包括至少两个指令,所述执行电路还包括二进制翻译器以缓冲该组指令并检测两个或更多指令之间的数据相关性,以确定所述两个或更多指令是所述链的一部分。
示例9包括示例1的示例性处理器的实质内容,其中,所述执行电路还要避免向操作系统警告所述留出。
示例10包括示例1的示例性处理器的实质内容,其中被指定为第一指令的目的地的区块还包括区块配置,并且其中所述执行电路还要在所述留出之前在所述区块配置中设置脏位,并且如果后续指令读取了所述脏区块则要引起故障。
示例11提供了一种由单指令多数据(SIMD)处理器实行的示例性方法,包括:使用提取电路来提取包括一组指令的一个或多个指令,该一个或多个指令各自指定源和目的地矩阵(区块);使用解码电路来解码该组所提取的指令;以及使用执行电路来执行该组已解码指令,以:标识属于指令链的第一和第二已解码指令,动态地选择和配置包括要执行第一和第二已解码指令的第一和第二处理引擎(PE)的SIMD路径,以及留出第一已解码指令的所指定的目的地,并且替代地将第一已解码指令的结果从第一PE进行路由以供第二PE使用以实行第二已解码指令。
示例12包括示例11的示例性方法的实质内容,其中该组指令包括至少一个指令,并且其中所述指令链中的每个指令还要包括链控制字段,以使所述执行电路确定所述指令是链的一部分;并且其中所述链控制字段中的每一个要指示包括以下中的一个的链位置提示:链开始提示、链中间提示和用于标记链中的最后指令的链结束提示,其中所述链控制字段要使所述执行电路确定所述链的存在,以动态地选择和配置所述SIMD路径以实行所述指令链,以留出除所述链中的最后指令之外的所有指令的所指定的目的地,并且以将除最后指令之外的所有指令的结果路由到实行所述链中的下一指令的PE。
示例13包括示例11的示例性方法的实质内容,其中第一和第二已解码指令指定不同的操作码以指定不同的第一和第二算术操作,并且其中所选择的第一和第二处理引擎要具有分别专门用于第一算术操作和第二算术操作的受限制的功能性。
示例14包括示例11的示例性方法的实质内容,其中所述指令链的第一指令还要包括链控制字段,所述链控制字段包括用于将第一指令和一个或多个后续指令标识为是所述指令链的一部分的链头部。
示例15包括示例11的示例性方法的实质内容,其中,所指定的源和目的地矩阵(区块)各自包括M行和N列元素,并且要仅在一行中包含有效元素。
示例16包括示例11的示例性方法的实质内容,其中,所述执行电路还要维持使指定的目的地被留出的指令的记录,并且要根据需要回滚并重新执行所记录的指令中的一个或多个。
示例17包括示例11的示例性方法的实质内容,其中,所述执行电路还要在所述留出之前保存机器状态,并且要随后执行机器状态一致性检查以检测由于所述留出而引起的任何不一致。
示例18包括示例11的示例性方法的实质内容,其中,该组指令包括至少两个指令,所述执行电路还包括二进制翻译器以缓冲该组指令并检测两个或更多指令之间的数据相关性,以确定所述两个或更多指令是所述链的一部分。
示例19包括示例11的示例性方法的实质内容,其中,所述执行电路还要避免向操作系统警告所述留出。
示例20包括示例11的示例性方法的实质内容,其中被指定为第一指令的目的地的区块还包括区块配置,并且其中所述执行电路还要在所述留出之前在所述区块配置中设置脏位,并且如果后续指令读取了所述脏区块则要引起故障。
示例21提供了一种示例性装置,包括:用于提取一个或多个指令直到已提取了一组指令的部件,每个指令要指定源和目的地区块操作数;用于解码该组所提取的指令的部件;以及用于响应于该组已解码指令而执行以进行以下步骤的部件:标识属于指令链的第一和第二已解码指令,动态地选择和配置包括要执行第一和第二已解码指令的第一和第二处理引擎(PE)的SIMD路径,以及留出第一已解码指令的所指定的目的地,并且替代地将第一已解码指令的结果从第一PE进行路由以供第二PE使用以实行第二已解码指令。
示例22包括示例21的示例性装置的实质内容,其中该组指令包括至少一个指令,并且其中所述指令链中的每个指令还要包括链控制字段,以使所述用于执行的部件确定所述指令是链的一部分;并且其中所述控制字段中的每一个要指示包括以下中的一个的链位置提示:链开始提示、链中间提示和用于标记链中的最后指令的链结束提示,其中所述链控制字段要使所述用于执行的部件确定所述链的存在,以动态地选择和配置所述SIMD路径以实行所述指令链,以留出除所述链中的最后指令之外的所有指令的所指定的目的地,并且以将除最后指令之外的所有指令的结果路由到实行所述链中的下一指令的PE。
示例23包括示例21的示例性装置的实质内容,其中第一和第二已解码指令指定不同的操作码以指定不同的第一和第二算术操作,并且其中所选择的第一和第二处理引擎要具有分别专门用于第一算术操作和第二算术操作的受限制的功能性。
示例24包括示例22的示例性装置的实质内容,其中所述指令链的第一指令还要包括链控制字段,所述链控制字段包括用于将第一指令和一个或多个后续指令标识为是所述指令链的一部分的链头部。
示例25包括示例21的示例性装置的实质内容,其中,所指定的源和目的地矩阵(区块)各自包括M行和N列元素,并且要仅在一行中包含有效元素。
示例26包括示例21的示例性装置的实质内容,其中,所述用于执行的部件还要维持使指定的目的地被留出的指令的记录,并且要根据需要回滚并重新执行一组所记录的指令。
示例27包括示例21的示例性装置的实质内容,其中,所述用于执行的部件还要在所述留出之前保存机器状态,并且要随后执行机器状态一致性检查以检测由于所述留出而引起的任何不一致。
示例28包括示例21的示例性装置的实质内容,其中,该组指令包括至少两个指令,所述用于执行的部件还包括二进制翻译器以缓冲该组指令并检测两个或更多指令之间的数据相关性,以确定所述两个或更多指令是所述链的一部分。
示例29包括示例21的示例性装置的实质内容,其中,所述用于执行的部件还要避免向操作系统警告所述留出。
示例30包括示例21的示例性装置的实质内容,其中被指定为第一指令的目的地的区块还包括区块配置,并且其中所述用于执行的部件还要在所述留出之前在所述区块配置中设置脏位,并且如果后续指令读取了所述脏区块则要引起故障。
示例31提供了一种包含指令的示例性非暂时性机器可读介质,所述指令在由由单指令多数据(SIMD)处理器访问时使所述处理器通过以下步骤来进行响应:使用提取电路来提取包括一组指令的一个或多个指令,该一个或多个指令各自指定源和目的地矩阵(区块);使用解码电路来解码该组所提取的指令;以及使用执行电路来执行该组已解码指令,以:标识属于指令链的第一和第二已解码指令,动态地选择和配置包括要执行第一和第二已解码指令的第一和第二处理引擎(PE)的SIMD路径,以及留出第一已解码指令的所指定的目的地,并且替代地将第一已解码指令的结果从第一PE进行路由以供第二PE使用以实行第二已解码指令。
示例32包括示例31的示例性非暂时性机器可读介质的实质内容,其中该组指令包括至少一个指令,并且其中所述指令链中的每个指令还要包括链控制字段,以使所述执行电路确定所述指令是链的一部分;并且其中所述链控制字段中的每一个要指示包括以下中的一个的链位置提示:链开始提示、链中间提示和用于标记链中的最后指令的链结束提示,其中所述链控制字段要使所述执行电路确定所述链的存在,以动态地选择和配置所述SIMD路径以实行所述指令链,以留出除所述链中的最后指令之外的所有指令的所指定的目的地,并且以将除最后指令之外的所有指令的结果路由到实行所述链中的下一指令的PE。
示例33包括示例31的示例性非暂时性机器可读介质的实质内容,其中第一和第二已解码指令指定不同的操作码以指定不同的第一和第二算术操作,并且其中所选择的第一和第二处理引擎要具有分别专门用于第一算术操作和第二算术操作的受限制的功能性。
示例34包括示例31的示例性非暂时性机器可读介质的实质内容,其中所述指令链的第一指令还要包括链控制字段,所述链控制字段包括用于将第一指令和一个或多个后续指令标识为是所述指令链的一部分的链头部。
示例35包括示例31的示例性非暂时性机器可读介质的实质内容,其中,所指定的源和目的地矩阵(区块)各自包括M行和N列元素,并且要仅在一行中包含有效元素。
示例36包括示例31的示例性非暂时性机器可读介质的实质内容,其中,所述处理器还要通过以下来进行响应:维持使指定的目的地被留出的指令的记录,并且根据需要回滚并重新执行所记录的指令中的一个或多个。
示例37包括示例31的示例性非暂时性机器可读介质的实质内容,其中,所述处理器还要通过以下来进行响应:在所述留出之前保存机器状态,并且随后执行机器状态一致性检查以检测由于所述留出而引起的任何不一致。
示例38包括示例31的示例性非暂时性机器可读介质的实质内容,其中,该组指令包括至少两个指令,并且所述处理器还要通过以下来进行响应:使用二进制翻译器以缓冲该组指令并检测两个或更多指令之间的数据相关性,以确定所述两个或更多指令是所述链的一部分。
示例39包括示例31的示例性非暂时性机器可读介质的实质内容,其中,所述处理器还要通过以下来进行响应:避免向操作系统警告所述留出。
示例40包括示例31的示例性非暂时性机器可读介质的实质内容,其中被指定为第一指令的目的地的区块还包括区块配置,并且其中所述处理器还要通过以下来进行响应:在所述留出之前在所述区块配置中设置脏位,并且如果后续指令读取了所述脏区块则引起故障。

Claims (25)

1.一种处理器,包括:
提取电路,其要提取多个指令,所述多个指令各自具有用于指定相应的源和目的地区块的源和目的地区块指定符;
解码电路,其要解码所述多个所提取的指令;以及
执行电路,响应于所述多个已解码指令以:
标识属于指令链的第一和第二已解码指令;
动态地选择和配置包括要执行第一和第二已解码指令的第一和第二处理引擎(PE)的SIMD路径;以及
留出第一已解码指令的目的地区块指定符,并且替代地将第一已解码指令的结果从第一PE路由到第二PE以供第二PE使用以实行第二已解码指令。
2. 根据权利要求1所述的处理器,其中所述多个指令包括至少两个指令,并且其中所述指令链中的每个指令还要包括链控制字段,以使所述执行电路确定所述指令是链的一部分;以及
其中所述链控制字段要指示包括以下中的一个的链位置提示:链开始提示、链中间提示和用于标记链中的最后指令的链结束提示,并且其中所述链控制字段要使所述执行电路确定所述链的存在,要动态地选择和配置所述SIMD路径,以
实行所述指令链,留出除所述链中的最后指令之外的所有指令的目的地区块指定符,并且替代地将除最后指令之外的所有指令的结果路由到实行所述链中的下一指令的下一PE。
3.根据权利要求1所述的处理器,其中第一和第二已解码指令指定不同的操作码以指定不同的第一和第二算术操作,并且其中所选择的第一和第二处理引擎要具有分别专门用于第一算术操作和第二算术操作的受限制的功能性。
4.根据权利要求1所述的处理器,其中所述指令链的第一指令还要包括链控制字段,所述链控制字段包括用于将第一指令和一个或多个后续指令标识为是所述指令链的一部分的链头部。
5.根据权利要求1-4中任一项所述的处理器,其中,所指定的源和目的地区块各自包括M行和N列元素,并且要仅在一行中包含有效元素。
6.根据权利要求1-4中任一项所述的处理器,其中,所述执行电路还要维持已使其目的地区块指定符被留出的指令的记录,并且要根据需要回滚并重新执行所记录的指令中的一个或多个。
7.根据权利要求1-4中任一项所述的处理器,其中,所述执行电路还要在留出第一已解码指令的目的地区块指定符之前保存机器状态,并且要随后执行机器状态一致性检查以检测由于留出第一已解码指令的目的地区块指定符而引起的任何不一致。
8.根据权利要求1所述的处理器,其中,所述多个指令包括至少两个指令,所述执行电路还包括二进制翻译器以缓冲所述多个指令并检测两个或更多指令之间的数据相关性,以确定所述两个或更多指令是所述链的一部分。
9.根据权利要求1-4中任一项所述的处理器,其中,所述提取电路还要在提取所述多个指令之前提取链开始指令,所述链开始指令要指定所述指令链中的数个指令,并且还要指定至少第一已解码指令的目标,所述目标是要将第一已解码指令的结果路由到的所述指令链中的所述数个指令中的一个。
10.根据权利要求1-4中任一项所述的处理器,其中,所述执行电路还要在留出第一已解码指令的目的地区块指定符时在第一指令的所指定的目的地区块的区块配置中设置脏位,并且如果后续指令读取了所述脏区块则要引起故障。
11.一种由处理器实行的方法,所述方法包括:
使用提取电路来提取多个指令,所述多个指令各自具有用于指定相应的源和目的地区块的源和目的地区块指定符;
使用解码电路来解码所述多个所提取的指令;以及
使用执行电路来执行所述多个已解码指令,以:
标识属于指令链的第一和第二已解码指令;
动态地选择和配置包括要执行第一和第二已解码指令的第一和第二处理引擎(PE)的SIMD路径;以及
留出第一已解码指令的目的地区块指定符,并且替代地将第一已解码指令的结果从第一PE路由到第二PE以供第二PE使用以实行第二已解码指令。
12.根据权利要求11所述的方法,其中所述多个指令包括至少两个指令,并且其中所述指令链中的每个指令还要包括链控制字段,以使所述执行电路确定所述指令是链的一部分;以及
其中所述控制字段要指示包括以下中的一个的链位置提示:链开始提示、链中间提示和用于标记链中的最后指令的链结束提示,并且其中所述链控制字段要使所述执行电路确定所述指令链的存在,以动态地选择和配置所述SIMD路径以实行所述指令链,以留出除所述链中的最后指令之外的所有指令的目的地区块指定符,并且以替代地将除最后指令之外的所有指令的结果路由到实行所述链中的下一指令的下一PE。
13.根据权利要求11所述的方法,其中第一和第二已解码指令指定不同的操作码以指定不同的第一和第二算术操作,并且其中所选择的第一和第二处理引擎要具有分别专门用于第一算术操作和第二算术操作的受限制的功能性。
14.根据权利要求11所述的方法,其中所述指令链的第一指令还要包括链控制字段,所述链控制字段包括用于将第一指令和一个或多个后续指令标识为是所述指令链的一部分的链头部。
15.根据权利要求11-14中任一项所述的方法,其中,所指定的源和目的地区块各自包括M行和N列元素,并且要仅在一行中包含有效元素。
16.根据权利要求11-14中任一项所述的方法,其中,所述执行电路还要维持已使其目的地区块指定符被留出的指令的记录,并且要根据需要回滚并重新执行所记录的指令。
17.根据权利要求11-14中任一项所述的方法,其中,所述执行电路还要在留出第一已解码指令的目的地区块指定符之前保存机器状态,并且要随后执行机器状态一致性检查以检测由于留出第一已解码指令的目的地区块指定符而引起的任何不一致。
18.根据权利要求11所述的方法,其中,所述多个指令包括至少两个指令,所述执行电路还包括二进制翻译器以缓冲所述多个指令并检测两个或更多指令之间的数据相关性,以确定所述两个或更多指令是所述链的一部分。
19.根据权利要求11-14中任一项所述的方法,还包括在提取所述多个指令之前提取链开始指令,所述链开始指令要指定所述指令链中的数个指令,并且还要指定至少第一已解码指令的目标,所述目标是要将第一已解码指令的结果路由到的所述指令链中的所述数个指令中的一个。
20.根据权利要求11-14中任一项所述的方法,还包括在留出第一已解码指令的目的地区块指定符时在第一指令的所指定的目的地区块的区块配置中设置脏位,并且如果后续指令读取了设置了所述脏位的所指定的目的地区块则要引起故障。
21.一种包含代码的机器可读介质,当所述代码被执行时,使机器实行如权利要求11-20中的任一项所述的方法。
22. 一种用于执行指令链的系统,所述系统包括:
存储器;以及
处理器,其包括:
提取电路,其要提取多个指令,所述多个指令各自具有用于指定相应的源和目的地区块的源和目的地区块指定符;
解码电路,其要解码所述多个所提取的指令;以及
执行电路,响应于所述多个已解码指令以:
标识属于指令链的第一和第二已解码指令;
动态地选择和配置包括要执行第一和第二已解码指令的第一和第二处理引擎(PE)的SIMD路径;以及
留出第一已解码指令的目的地区块指定符,并且替代地将第一已解码指令的结果从第一PE路由到第二PE以供第二PE使用以实行第二已解码指令。
23.根据权利要求22所述的系统,其中所述多个指令包括至少两个指令,并且其中所述指令链中的每个指令还要包括链控制字段,以使所述执行电路确定所述指令是链的一部分;以及
其中所述链控制字段要指示包括以下中的一个的链位置提示:链开始提示、链中间提示和用于标记链中的最后指令的链结束提示,并且其中所述链控制字段要使所述执行电路以:确定所述链的存在,动态地选择和配置所述SIMD路径,以实行所述指令链,留出除所述链中的最后指令之外的所有指令的目的地区块指定符,并且将除最后指令之外的所有指令的结果路由到实行所述链中的下一指令的下一PE。
24.根据权利要求22所述的系统,其中第一和第二已解码指令指定不同的操作码以指定不同的第一和第二算术操作,并且其中所选择的第一和第二处理引擎要具有分别专门用于第一算术操作和第二算术操作的受限制的功能性。
25.根据权利要求22所述的系统,其中所述指令链的第一指令还要包括链控制字段,所述链控制字段包括用于将第一指令和一个或多个后续指令标识为是所述指令链的一部分的链头部。
CN201910151869.9A 2018-03-30 2019-02-28 用于实现链式区块操作的系统和方法 Pending CN110321159A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211612303.XA CN115686633A (zh) 2018-03-30 2019-02-28 用于实现链式区块操作的系统和方法

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/942201 2018-03-30
US15/942,201 US10664287B2 (en) 2018-03-30 2018-03-30 Systems and methods for implementing chained tile operations

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN202211612303.XA Division CN115686633A (zh) 2018-03-30 2019-02-28 用于实现链式区块操作的系统和方法

Publications (1)

Publication Number Publication Date
CN110321159A true CN110321159A (zh) 2019-10-11

Family

ID=65440800

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202211612303.XA Pending CN115686633A (zh) 2018-03-30 2019-02-28 用于实现链式区块操作的系统和方法
CN201910151869.9A Pending CN110321159A (zh) 2018-03-30 2019-02-28 用于实现链式区块操作的系统和方法

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202211612303.XA Pending CN115686633A (zh) 2018-03-30 2019-02-28 用于实现链式区块操作的系统和方法

Country Status (5)

Country Link
US (2) US10664287B2 (zh)
EP (2) EP4170486A1 (zh)
JP (2) JP2019197531A (zh)
KR (2) KR20190114745A (zh)
CN (2) CN115686633A (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110312992A (zh) * 2017-03-20 2019-10-08 英特尔公司 用于片矩阵乘法和累加的系统、方法和装置
US11275588B2 (en) 2017-07-01 2022-03-15 Intel Corporation Context save with variable save state size
US11816483B2 (en) * 2017-12-29 2023-11-14 Intel Corporation Systems, methods, and apparatuses for matrix operations
US11789729B2 (en) 2017-12-29 2023-10-17 Intel Corporation Systems and methods for computing dot products of nibbles in two tile operands
US11829439B2 (en) * 2019-12-30 2023-11-28 Qualcomm Incorporated Methods and apparatus to perform matrix multiplication in a streaming processor
US11537323B2 (en) 2020-01-07 2022-12-27 SK Hynix Inc. Processing-in-memory (PIM) device
US11861369B2 (en) 2020-01-07 2024-01-02 SK Hynix Inc. Processing-in-memory (PIM) device
US20210240524A1 (en) * 2020-01-31 2021-08-05 Qualcomm Incorporated Methods and apparatus to facilitate tile-based gpu machine learning acceleration
US11226816B2 (en) * 2020-02-12 2022-01-18 Samsung Electronics Co., Ltd. Systems and methods for data placement for in-memory-compute

Family Cites Families (63)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5247632A (en) 1989-01-23 1993-09-21 Eastman Kodak Company Virtual memory management arrangement for addressing multi-dimensional arrays in a digital data processing system
CA2129882A1 (en) * 1993-08-12 1995-02-13 Soheil Shams Dynamically reconfigurable interprocessor communication network for simd multiprocessors and apparatus implementing same
US5475822A (en) 1993-11-15 1995-12-12 Motorola, Inc. Data processing system for resuming instruction execution after an interrupt and method therefor
US5708835A (en) * 1995-03-27 1998-01-13 Hughes Electronics Dual-directional parallel processor
US7301541B2 (en) 1995-08-16 2007-11-27 Microunity Systems Engineering, Inc. Programmable processor and method with wide operations
US5892962A (en) 1996-11-12 1999-04-06 Lucent Technologies Inc. FPGA-based processor
US6161219A (en) 1997-07-03 2000-12-12 The University Of Iowa Research Foundation System and method for providing checkpointing with precompile directives and supporting software to produce checkpoints, independent of environment constraints
US6282634B1 (en) 1998-05-27 2001-08-28 Arm Limited Apparatus and method for processing data having a mixed vector/scalar register file
US6405304B1 (en) * 1998-08-24 2002-06-11 Compaq Information Technologies Group, L.P. Method for mapping instructions using a set of valid and invalid logical to physical register assignments indicated by bits of a valid vector together with a logical register list
US6704925B1 (en) * 1998-09-10 2004-03-09 Vmware, Inc. Dynamic binary translator with a system and method for updating and maintaining coherency of a translation cache
US6205543B1 (en) * 1998-12-03 2001-03-20 Sun Microsystems, Inc. Efficient handling of a large register file for context switching
FR2787233B1 (fr) 1998-12-11 2001-02-16 St Microelectronics Sa Procede pour verifier l'integrite des circuits de decodage d'une memoire
ATE529802T1 (de) * 2000-02-09 2011-11-15 Texas Instruments Inc Datenverarbeitungsvorrichtung
US7844796B2 (en) 2001-03-05 2010-11-30 Martin Vorbach Data processing device and method
US6901422B1 (en) 2001-03-21 2005-05-31 Apple Computer, Inc. Matrix multiplication in a vector processing system
US7039793B2 (en) * 2001-10-23 2006-05-02 Ip-First, Llc Microprocessor apparatus and method for accelerating execution of repeat string instructions
US7725521B2 (en) 2001-10-29 2010-05-25 Intel Corporation Method and apparatus for computing matrix transformations
US6877020B1 (en) 2001-12-31 2005-04-05 Apple Computer, Inc. Method and apparatus for matrix transposition
US7003542B2 (en) 2002-01-02 2006-02-21 Intel Corporation Apparatus and method for inverting a 4×4 matrix
US7209939B2 (en) 2002-07-11 2007-04-24 Sun Microsystems, Inc. Precision improvement method for the Strassen/Winograd matrix multiplication method
US6944747B2 (en) 2002-12-09 2005-09-13 Gemtech Systems, Llc Apparatus and method for matrix data processing
US7873812B1 (en) 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US7475222B2 (en) * 2004-04-07 2009-01-06 Sandbridge Technologies, Inc. Multi-threaded processor having compound instruction and operation formats
US20060190517A1 (en) 2005-02-02 2006-08-24 Guerrero Miguel A Techniques for transposition of a matrix arranged in a memory as multiple items per word
US20070186210A1 (en) 2006-02-06 2007-08-09 Via Technologies, Inc. Instruction set encoding in a dual-mode computer processing environment
EP2477109B1 (en) * 2006-04-12 2016-07-13 Soft Machines, Inc. Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
US7912889B1 (en) 2006-06-16 2011-03-22 Nvidia Corporation Mapping the threads of a CTA to the elements of a tile for efficient matrix multiplication
US7792895B1 (en) 2006-06-16 2010-09-07 Nvidia Corporation Efficient matrix multiplication on a parallel processing device
US20080071851A1 (en) 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
US8122078B2 (en) 2006-10-06 2012-02-21 Calos Fund, LLC Processor with enhanced combined-arithmetic capability
US7797362B2 (en) 2007-02-23 2010-09-14 Texas Instruments Incorporated Parallel architecture for matrix transposition
US8392487B1 (en) 2007-03-29 2013-03-05 Compass Electro-Optical Systems Ltd Programmable matrix processor
US8028015B2 (en) 2007-08-10 2011-09-27 Inside Contactless S.A. Method and system for large number multiplication
US8923510B2 (en) 2007-12-28 2014-12-30 Intel Corporation Method and apparatus for efficiently implementing the advanced encryption standard
US20090210669A1 (en) * 2008-02-19 2009-08-20 Luick David A System and Method for Prioritizing Floating-Point Instructions
US8533251B2 (en) 2008-05-23 2013-09-10 International Business Machines Corporation Optimized corner turns for local storage and bandwidth reduction
US8060730B2 (en) 2008-05-30 2011-11-15 Freescale Semiconductor, Inc. Selective MISR data accumulation during exception processing
US8250130B2 (en) 2008-05-30 2012-08-21 International Business Machines Corporation Reducing bandwidth requirements for matrix multiplication
JP5202130B2 (ja) * 2008-06-24 2013-06-05 株式会社東芝 キャッシュメモリ、コンピュータシステム、及びメモリアクセス方法
US20100180100A1 (en) 2009-01-13 2010-07-15 Mavrix Technology, Inc. Matrix microprocessor and method of operation
KR101553648B1 (ko) * 2009-02-13 2015-09-17 삼성전자 주식회사 재구성 가능한 구조의 프로세서
US8539201B2 (en) 2009-11-04 2013-09-17 International Business Machines Corporation Transposing array data on SIMD multi-core processor architectures
US8452946B2 (en) * 2009-12-17 2013-05-28 Intel Corporation Methods and apparatuses for efficient load processing using buffers
US8984043B2 (en) 2009-12-23 2015-03-17 Intel Corporation Multiplying and adding matrices
JP6130296B2 (ja) * 2010-07-13 2017-05-17 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドAdvanced Micro Devices Incorporated グラフィクスプロセッサにおけるsimdユニットの動的な有効化及び無効化
US8478969B2 (en) 2010-09-24 2013-07-02 Intel Corporation Performing a multiply-multiply-accumulate instruction
US20120113133A1 (en) 2010-11-04 2012-05-10 Shpigelblat Shai System, device, and method for multiplying multi-dimensional data arrays
US9727471B2 (en) 2010-11-29 2017-08-08 Intel Corporation Method and apparatus for stream buffer management instructions
US20120254588A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
GB2502936A (en) 2011-04-01 2013-12-11 Intel Corp Vector friendly instruction format and execution thereof
US20120314775A1 (en) 2011-06-08 2012-12-13 Vixs Systems, Inc. Video decoder with transposing vector processor and methods for use therewith
GB2503438A (en) 2012-06-26 2014-01-01 Ibm Method and system for pipelining out of order instructions by combining short latency instructions to match long latency instructions
US20140149480A1 (en) 2012-11-28 2014-05-29 Nvidia Corporation System, method, and computer program product for transposing a matrix
US9442723B2 (en) 2012-12-28 2016-09-13 Intel Corporation Method and apparatus for integral image computation instructions
US9250916B2 (en) 2013-03-12 2016-02-02 International Business Machines Corporation Chaining between exposed vector pipelines
US9286216B2 (en) 2014-01-16 2016-03-15 Carnegie Mellon University 3DIC memory chips including computational logic-in-memory for performing accelerated data processing
US9766895B2 (en) 2014-02-06 2017-09-19 Optimum Semiconductor Technologies, Inc. Opportunity multithreading in a multithreaded processor with instruction chaining capability
US9798519B2 (en) 2014-07-02 2017-10-24 Via Alliance Semiconductor Co., Ltd. Standard format intermediate result
US20160179523A1 (en) 2014-12-23 2016-06-23 Intel Corporation Apparatus and method for vector broadcast and xorand logical instruction
US10535114B2 (en) 2015-08-18 2020-01-14 Nvidia Corporation Controlling multi-pass rendering sequences in a cache tiling architecture
US10678544B2 (en) * 2015-09-19 2020-06-09 Microsoft Technology Licensing, Llc Initiating instruction block execution using a register access instruction
US10146535B2 (en) 2016-10-20 2018-12-04 Intel Corporatoin Systems, apparatuses, and methods for chained fused multiply add
WO2018125250A1 (en) 2016-12-31 2018-07-05 Intel Corporation Systems, methods, and apparatuses for heterogeneous computing

Also Published As

Publication number Publication date
JP2019197531A (ja) 2019-11-14
KR20230002229A (ko) 2023-01-05
EP4170486A1 (en) 2023-04-26
US20190303167A1 (en) 2019-10-03
EP3547120A1 (en) 2019-10-02
US20200387383A1 (en) 2020-12-10
KR20190114745A (ko) 2019-10-10
US10664287B2 (en) 2020-05-26
CN115686633A (zh) 2023-02-03
US11416260B2 (en) 2022-08-16
JP2023051994A (ja) 2023-04-11

Similar Documents

Publication Publication Date Title
CN110337635B (zh) 用于点积操作的系统、方法和装置
CN110321159A (zh) 用于实现链式区块操作的系统和方法
CN105278917B (zh) 无局部性提示的向量存储器访问处理器、方法、设备、制品和电子设备
CN110321525A (zh) 用于稀疏-密集矩阵乘法的加速器
CN109791488A (zh) 用于执行用于复数的融合乘-加指令的系统和方法
CN104126168B (zh) 打包数据重新安排控制索引前体生成处理器、方法、系统及指令
CN104137060B (zh) 高速缓存协处理单元
CN109992304A (zh) 用于加载片寄存器对的系统和方法
CN104049954B (zh) 多数据元素与多数据元素比较处理器、方法、系统和指令
CN113050990A (zh) 用于矩阵操作加速器的指令的装置、方法和系统
CN117724766A (zh) 用于执行将矩阵变换为行交错格式的指令的系统和方法
CN104185837B (zh) 在不同的粒度等级下广播数据值的指令执行单元
CN110909883A (zh) 用于执行指定三元片逻辑操作的指令的系统和方法
CN107003846A (zh) 用于向量索引加载和存储的方法和装置
CN104040487A (zh) 用于合并掩码模式的指令
CN108681465A (zh) 用于产生整数序列的处理器、处理器核及系统
CN104011665A (zh) 超级乘加(超级madd)指令
CN109992305A (zh) 用于将片寄存器对归零的系统和方法
CN108292227A (zh) 用于步进加载的系统、设备和方法
CN104081337A (zh) 用于响应于单个指令来执行横向部分求和的系统、装置和方法
CN110058886A (zh) 用于计算两个区块操作数中的半字节的数量积的系统和方法
CN108701028A (zh) 用于执行用于置换掩码的指令的系统和方法
CN109313553A (zh) 用于跨步加载的系统、装置和方法
CN109992243A (zh) 用于矩阵操作的系统、方法和装置
CN110909882A (zh) 用于执行水平铺块操作的系统和方法

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