CN113849770A - 矩阵数据按行分散和收集 - Google Patents

矩阵数据按行分散和收集 Download PDF

Info

Publication number
CN113849770A
CN113849770A CN202011545444.5A CN202011545444A CN113849770A CN 113849770 A CN113849770 A CN 113849770A CN 202011545444 A CN202011545444 A CN 202011545444A CN 113849770 A CN113849770 A CN 113849770A
Authority
CN
China
Prior art keywords
instruction
matrix
tile
data
memory
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
CN202011545444.5A
Other languages
English (en)
Inventor
C·J·休斯
A·F·海内克
R·瓦伦汀
M·阿德尔曼
E·乔甘纳斯
M·J·查尼
N·A·舒斯特罗夫
S·巴格索尔基
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 CN113849770A publication Critical patent/CN113849770A/zh
Pending legal-status Critical Current

Links

Images

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/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
    • 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
    • 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/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/30098Register arrangements
    • 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/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Medical Informatics (AREA)
  • Evolutionary Computation (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Artificial Intelligence (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Advance Control (AREA)

Abstract

公开了用于按行收集和分散矩阵数据的实施例。在实施例中,处理器包括储存器矩阵、解码器和执行电路。所述解码器要对具有格式的指令进行解码,所述格式包括用于指定操作码的操作码字段和用于指定不规则间隔存储器位置集合的第一操作数字段。所述执行电路要响应于经解码的指令,计算与所述不规则间隔存储器位置集合相对应的地址集合,并在所述储存器与所述不规则间隔存储器位置集合之间转移数据行集合。

Description

矩阵数据按行分散和收集
技术领域
本发明的领域总体涉及计算机处理器架构,并且更具体地涉及处理矩阵数据。
背景技术
矩阵在许多计算任务(诸如,机器学习和其他批量数据处理)中日益重要。深度学习是一类机器学习算法。深度学习架构(诸如,深度神经网络)已经被应用于包括计算机视觉、话音识别、自然语言处理、音频识别、社交网络过滤、机器翻译、生物信息学和药物设计的领域。
推断和训练(用于深度学习的两个工具)趋向于低精度算术。最大化深度学习算法和计算的吞吐量可以有助于满足深度学习处理器(例如,数据中心中的执行深度学习的那些处理器)的需要。
矩阵-矩阵乘法(也称作GEMM或一般矩阵乘法)是现今的处理器上的公共重计算操作。用于矩阵乘法(例如,GEMM)的特殊硬件是用于改进某些应用(诸如,深度学习)的峰值计算(和能量效率)的良好选项。包括深度学习的这些应用中的一些可以在不损失准确度的情况下利用相对少的比特在输入数据元素上操作,只要输出元素具有足够比特(即,多于输入)即可。
附图说明
作为示例而非限制在附图的各图中图示了本发明,在附图中,相似的附图标记指示类似的元素,并且在附图中:
图1A图示了所配置的图块的实施例;
图1B图示了所配置的图块的实施例;
图2图示了矩阵储存器的若干示例;
图3图示了利用矩阵(图块)操作加速器的系统的实施例;
图4和5示出了如何使用矩阵操作加速器来共享存储器的不同实施例;
图6图示了使用图块的矩阵乘法累加操作(“TMMA”)的实施例;
图7图示了链式融合乘法累加指令的迭代的执行的子集的实施例;
图8图示了链式融合乘法累加指令的迭代的执行的子集的实施例;
图9图示了链式融合乘法累加指令的迭代的执行的子集的实施例;
图10图示了链式融合乘法累加指令的迭代的执行的子集的实施例;
图11图示了根据实施例的2的幂次大小的SIMD实现方式,其中累加器使用比乘法器的输入大的输入大小;
图12图示了利用矩阵操作电路的系统的实施例;
图13图示了使用图块支持矩阵操作的处理器核流水线的实施例;
图14图示了使用图块支持矩阵操作的处理器核流水线的实施例;
图15图示了以行优先格式和列优先格式表达的矩阵的示例;
图16图示了矩阵(图块)的使用的示例;
图17图示了矩阵(图块)的使用的方法的实施例;
图18图示了根据实施例的针对图块的使用的配置的支持;
图19图示了要支持的矩阵(图块)的描述的实施例;
图20(A)-(D)图示了寄存器的示例;
图21A、21B和21C是图示了根据一些实施例的TILETFM2RI指令的执行的框图;
图22A是图示了根据一些实施例的TGATHERROW指令的执行的框图;
图22B是图示了根据一些实施例的TSCATTERROW指令的执行的框图;
图23图示了处理器执行处理TGATHERROW或TSCATTERROW指令的流程的实施例;
图24是图示了根据一些实施例的TGATHERROW或TSCATTERROW指令的格式的框图;
图25A-25B是图示了根据实施例的一般矢量友好指令格式及其指令模板的框图;
图25A是图示了根据实施例的一般矢量友好指令格式及其类别A指令模板的框图;
图25B是图示了根据实施例的一般矢量友好指令格式及其类别B指令模板的框图;
图26A是图示了根据实施例的示例性具体矢量友好指令格式的框图;
图26B是图示了根据一个实施例的组成完整操作码字段的具体矢量友好指令格式的字段的框图;
图26C是图示了根据一个实施例的组成寄存器索引字段的具体矢量友好指令格式的字段的框图;
图26D是图示了根据一个实施例的组成扩增操作字段的具体矢量友好指令格式的字段的框图;
图27是根据一个实施例的寄存器架构的框图;
图28A是图示了根据实施例的示例性有序流水线和示例性寄存器重命名乱序发布/执行流水线两者的框图;
图28B是图示了根据实施例的要被包括在处理器中的有序架构核和示例性寄存器重命名乱序发布/执行架构核两者的示例性实施例的框图;
图29A-B图示了更具体示例性有序核架构的框图,该核将是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他核)之一;
图29A是根据实施例的单个处理器核连同其到管芯上互连网络和与其本地等级2(L2)高速缓存子集的连接的框图;
图29B是根据实施例的图29A中的处理器核的一部分的扩展视图;
图30是根据实施例的可具有多于一个核、可具有集成存储器控制器和可具有集成图形的处理器的框图;
图31-34是示例性计算机架构的框图;
图31示出了根据本发明一个实施例的系统的框图;
图32是根据本发明实施例的第一更具体示例性系统的框图;
图33是根据本发明实施例的第二更具体示例性系统的框图;
图34是根据本发明实施例的片上系统(SoC)的框图;以及
图35是对照根据实施例的使用软件指令转换器以将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
在以下描述中,阐述了许多具体细节。然而,应当理解,可以在没有这些具体细节的情况下实践实施例。在其他实例中,未详细示出公知的电路、结构和技术,以便不使该描述的理解模糊。
说明书中对“一个实施例”、“一实施例”、“示例实施例”等的引用指示所描述的实施例可以包括特定特征、结构或特性,但可以不是每个实施例都必然包括该特定特征、结构或特性。此外,这种短语不必然指代相同实施例。此外,当结合一实施例描述特定特征、结构或特性时,应当认为其处于本领域技术人员的认知内,以结合其他实施例(不论是否被显式描述)影响这种特征、结构或特性。
如本说明书和权利要求书中所使用并且除非以其他方式指定,使用序数形容词“第一”、“第二”、“第三”等以描述元素仅仅指示了元素的特定实例或相似元素的不同实例正在被提及,而不意在暗示如此描述的元素必须按特定顺序,时间上、空间上、等级上或以任何其他方式。而且,如本发明实施例的描述中所使用,术语之间的“/”字符可以意味着所描述的内容可以包括第一术语和/或第二术语(和/或任何其他附加术语)或者可以是使用、利用和/或根据第一术语和/或第二术语(和/或任何其他附加术语)来实现的。
在许多主流处理器中,处置矩阵是困难的和/或指令密集型的任务。例如,矩阵的行可以被放到多个打包数据(例如,SIMD或矢量)寄存器中且然后被个体地操作。例如,取决于数据大小,两个8×2矩阵的加法可能要求负载或收集到四个打包数据寄存器中。然后,执行与来自每个矩阵的第一行相对应的打包数据寄存器的第一次加法,并且执行与来自每个矩阵的第二行相对应的打包数据寄存器的第二次加法。然后,将所得到的打包数据寄存器分散回到存储器。尽管对于小矩阵而言该场景可以是可接受的,但其常常对较大矩阵来说不可接受。
讨论
本文描述了用于支持计算机硬件(诸如中央处理单元(CPU)、图形处理单元(GPU)和加速器)中的矩阵操作的机制。矩阵操作利用表示存储器(诸如寄存器)的一个或多个打包区的2维(2-D)数据结构。遍及该描述,这些2-D数据结构被称作图块。注意,矩阵可以小于图块(使用并非全部图块)或利用多个图块(矩阵大于任一个图块的大小)。遍及该描述,使用矩阵(图块)语言以指示使用影响矩阵的图块而执行的操作;该矩阵是否大于任一个图块不是典型相关的。除了其他可能性以外,用于支持和/或以其他方式涉及矩阵数据的处理的架构、操作、指令、数据等可以被称作矩阵、图块和图块矩阵乘法累加(TMMA)架构、操作、指令、数据等。在一些上下文中,可以可互换地使用矩阵和图块。
每个图块可以被不同操作(诸如,本文详述的那些操作)作用于其上,且包括但不限于:矩阵(图块)乘法、图块加法、图块减法、图块对角线、图块归零、图块变换、图块点积、图块广播、图块行广播、图块列广播、图块乘法、图块乘法和累加、图块移动等。另外,针对操作符的支持(诸如,标度和/或偏置的使用)可以是与这些操作一起使用的或者是为了未来支持非数值应用(例如OpenCL“本地存储器”、数据压缩/解压缩等)而使用的。本文还描述了用于在数据类型转换的情况下加载和存储矩阵(图块)数据的指令。
储存器(诸如存储器(非易失性和易失性)、寄存器、高速缓存等)的部分被布置到不同水平和垂直尺寸的图块中。例如,图块可以具有为4的水平尺寸(例如,矩阵的四行)和为8的垂直尺寸(例如,矩阵的8列)。典型地,水平尺寸与元素大小(例如2、4、8、16、32、64、128比特等)相关。可以支持多个数据类型(单精度浮点、双精度浮点、整型等)。
所配置的图块的示例性使用
在一些实施例中,可以配置图块参数。例如,给定图块可以被配置成提供图块选项。示例性图块选项包括但不限于:图块的行数、图块的列数、图块是否有效、以及图块是否由一对相等大小的图块构成。
图1A图示了所配置的图块的实施例。如所示的那样,应用存储器102的4 kB已经在其上存储了4个1kB图块:图块t0 104、图块t1 106、图块t2 108和图块t3 110。在该示例中,这4个图块不由对构成,并且每个图块具有以行和列布置的元素。图块t0 104和图块t1 106具有K行和N列的4字节元素(例如,单精度数据),其中K等于8并且N=32。图块t2 108和图块t3 110具有K行和N/2列的8字节元素(例如,双精度数据)。由于双精度操作数是单精度的宽度的两倍,因此该配置与用于提供图块选项从而给至少4个名称供给至少4 kB总储存的调色板一致。在操作中,可以使用加载和存储操作来从存储器加载图块并将图块存储到存储器。取决于所使用的指令编码方案,可用应用存储器的量以及可用图块的大小、数目和配置不同。
图1B图示了所配置的图块的实施例。如所示的那样,应用存储器122的4 kB已经在其上存储了2对1kB图块,第一对是图块t4L 124和图块t4R 126,并且第二对是图块t5L 128和图块t5R 130。如所示的那样,这些对图块被划分成左图块和右图块。在其他实施例中,该对图块被划分成偶图块和奇图块。在该示例中,这4个图块均具有以行和列布置的元素。图块t4L 124和图块t4R 126具有K行和N列的4字节元素(例如,单精度浮点数据),其中K等于8并且N等于32。图块t5L 128和图块t5R 130具有K行和N/2列的8字节元素(例如,双精度浮点数据)。由于双精度操作数是单精度的宽度的两倍,因此该配置与用于提供图块选项从而给至少2个名称供给至少4 kB总储存的调色板一致。图1A的四个图块使用4个名称,每个名称命名1 kB图块,而图1B中的2对图块可以使用2个名称以指定成对的图块。在一些实施例中,图块指令接受成对的图块的名称作为操作数。在操作中,可以使用加载和存储操作来从存储器加载图块并将图块存储到存储器。取决于所使用的指令编码方案,可用应用存储器的量以及可用图块的大小、数目和配置不同。
在一些实施例中,图块参数是可定义的。例如,“调色板”用于提供图块选项。示例性选项包括但不限于:图块名称的数目、储存器的行中的字节的数目、图块中的行和列的数目等。例如,图块的最大“高度”(行数)可以被定义为:图块最大行=所架构的储存器/(调色板名称的数目*每行的字节的数目)。
由此,应用可以被编写成使得名称的固定使用将能够利用跨实现方式的不同储存器大小。
可以使用图块配置(“TILECONFIG”)指令来完成图块的配置,其中在所选调色板中定义特定图块使用。该声明包括要使用的图块名称的数目、所请求的每名称(图块)的行和列的数目、以及在一些实施例中每个图块的所请求的数据类型。在一些实施例中,在TILECONFIG指令的执行期间执行一致性检验,以确定其匹配于调色板条目的约束。
示例性图块储存器类型
图2图示了矩阵储存器的若干示例。在(A)中,图块被存储在存储器中。如所示的那样,每个“行”由四个打包数据元素构成。为了到达下一“行”,使用跨距(stride)值。注意,行可以被连续存储在存储器中。跨距的存储器访问允许当图块储存器未映射下层存储器阵列行宽度时一行对下一行的访问。
典型地,图块从存储器的加载和到存储器的存储是从应用存储器到打包数据行的跨距访问。在一些实施例中,示例性TILELOAD和TILESTORE指令或作为加载操作指令中的TILE操作数而对应用存储器的其他指令引用是可重启的,以处置(多达)2行的页面错误、非屏蔽浮点异常和/或每指令的中断。
在(B)中,矩阵被存储在由多个寄存器(诸如,打包数据寄存器(单指令多数据(SIMD)或矢量寄存器))组成的图块中。在该示例中,图块覆盖在三个物理寄存器上。典型地,使用连续寄存器,然而,不必是这种情况。
在(C)中,矩阵被存储在对在图块操作中使用的融合多重累加(FMA)电路来说可访问的非寄存器储存器中的图块中。该储存器可以处于FMA内部或邻近于FMA。另外,在下面讨论的一些实施例中,储存器可以用于数据元素,而不是用于整个行或图块。
经由CPUID来报告针对TMMA架构的所支持的参数。在一些实施例中,信息的列表包括最大高度和最大SIMD尺寸。配置TMMA架构要求指定每个图块的尺寸、每个图块的元素大小和调色板标识符。该配置是通过执行TILECONFIG指令来完成的。
TILECONFIG指令的成功执行启用后续TILE操作符。TILERELEASEALL指令清除图块配置并禁用TILE操作(直到接下来的TILECONFIG指令执行)。在一些实施例中,在使用图块的上下文切换中使用XSAVE、XSTORE等。在一些实施例中,在XSAVE中使用2个XCR0比特,一个用于TILECONFIG元数据并且一个比特对应于实际图块有效载荷数据。
TILECONFIG不仅配置图块使用,而且设置指示程序处于配置有图块的码的区中的状态变量。实现方式可以列举对可与图块区一起使用的其他指令的约束,诸如不使用现有寄存器集合等。
典型地,退出图块区是利用TILERELEASEALL指令完成的。它不取得参数,且迅速使所有图块无效(指示数据不再需要任何保存或恢复),且清除与处于图块区中相对应的内部状态。
在一些实施例中,图块操作可以使由图块配置指定的尺寸外的任何行和任何列归零。例如,随着每行被写入,图块操作可以使列的所配置的数目(考虑到元素的大小)外的数据归零。例如,关于64字节行以及利用10行和12列配置的图块,写入FP32元素的操作将利用输出/结果数据写入具有12*4字节的前10行中的每一个,并使每行中的剩余4*4字节归零。图块操作还使前10个所配置的行后的任何行完全归零。当使用具有64字节行的1K图块时,将存在16行,因此在该示例中,最后6行也将被归零。
在一些实施例中,上下文恢复指令(例如,XRSTOR)在加载数据时强制执行下述内容:图块的所配置的行外的数据可以被维持为0。如果不存在有效配置,则所有行被归零。图块数据的XRSTOR可以加载所配置的那些列外的列中的废物。XRSTOR清除所配置的列的数目外应当不可能,这是因为不存在与图块配置相关联的元素宽度。
上下文保存(例如,XSAVE)在将整个TILE储存器区域写入到存储器时暴露它。如果XRSTOR将废物数据加载到了图块的最右侧部分中,则该数据可以由XSAVE保存。XSAVE可以对于针对每个图块而指定的数目外的行写入0。
在一些实施例中,图块指令是可重启的。访问存储器的操作允许在页面错误之后重启。应对浮点操作的计算指令还允许非屏蔽浮点异常,其中异常的屏蔽由控制和/或状态寄存器控制。
为了支持在这些事件之后重启指令,指令将信息存储在下面详述的状态寄存器中。
矩阵(图块)操作系统
示例性硬件支持
图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。注意,这些存储器可以属于不同类型。
在一些实施例中,使用物理寄存器上的覆盖层来支持图块。例如,取决于实现方式,图块可以利用16个1024比特寄存器、32个512比特寄存器等。在一些实施例中,矩阵操作利用表示存储器(诸如,寄存器)的一个或多个打包区的2维(2-D)数据结构。遍及该描述,这些2-D数据结构被称作图块或图块寄存器。
在一些实施例中,矩阵操作加速器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”)的实施例。
矩阵(TILE A 601)中的行数匹配于包括计算的等待时间的串行(链式)FMA的数目。实现方式没有在更小高度的网格上再循环,但计算保持不变。
源/目的地矢量来自于N行的图块(TILE C 605),并且FMA 611的网格执行N个矢量矩阵操作,从而导致完整指令执行图块的矩阵乘法。图块B 603是另一矢量源,且在每个阶段中将“广播”项供给到FMA。
在操作中,在一些实施例中,矩阵B的元素(被存储在图块B 603中)跨FMA的矩形网格而散布。矩阵B(被存储在图块A 601中)使其行的元素变换,以匹配于FMA的矩形网格的列尺寸。在网格中的每个FMA处,将A和B的元素相乘并加到传入的被加数(来自图中的上方),并且将传出的和传递到FMA的下一行(或最终输出)。
单个步骤的等待时间与K(矩阵B的行高度)成比例,并且从属的TMMA典型地具有足够的源-目的地行(在单个图块中或跨图块)以隐藏该等待时间。实现方式还可以跨时间步长分割SIMD(打包数据元素)尺寸M(矩阵A的行高度),但这仅仅改变了与K相乘的常量。当程序指定比由TMACC列举的最大值小的K时,实现方式没有利用“屏蔽”或“提早退出”实现这一点。
整个TMMA的等待时间与N*K成比例。重复率与N成比例。每TMMA指令的MAC的数目是N*K*M。
图7图示了链式融合乘法累加指令的迭代的执行的子集的实施例。特别地,这图示了目的地的一个打包数据元素位置的迭代的执行电路。在该实施例中,链式融合乘法累加在有符号源上操作,其中累加器是输入数据大小的2倍。
第一有符号源(源1 701)和第二有符号源(源2 703)均具有四个打包数据元素。这些打包数据元素中的每一个存储有符号数据,诸如浮点数据。第三有符号源(源3 709)具有两个打包数据元素,其中每一个存储有符号数据。第一和第二有符号源701和703的大小是第三有符号源(初始值或前一结果)709的大小的一半。例如,第一和第二有符号源701和703可以具有32比特打包数据元素(例如,单精度浮点),而第三有符号源709可以具有64比特打包数据元素(例如,双精度浮点)。
在该图示中,仅示出了第一和第二有符号源701和703的两个最高有效(mostsignificant)打包数据元素位置以及第三有符号源709的最高有效打包数据元素位置。当然,还将处理其他打包数据元素位置。
如所图示的那样,成对地处理打包数据元素。例如,使用乘法器电路705将第一和第二有符号源701和703的最高有效打包数据元素位置的数据相乘,并且使用乘法器电路707将来自第一和第二有符号源701和703的第二高有效打包数据元素位置的数据相乘。在一些实施例中,这些乘法器电路705和707是针对其他打包数据元素位置重用的。在其他实施例中,使用附加乘法器电路,使得打包数据元素被并行处理。在一些上下文中,使用有符号第三源709的大小的通道来完成并行执行。使用加法电路711将乘法中的每一个的结果相加。
将乘法的结果的加法的结果与来自有符号源3 709的最高有效打包数据元素位置的数据相加(使用不同加法器713或相同加法器711)。
最后,将第二次加法的结果存储到与来自有符号第三源709的所使用的打包数据元素位置相对应的打包数据元素位置中的有符号目的地715中,或者如果存在一次迭代的话,将第二次加法的结果继续传递到下一次迭代。在一些实施例中,将写屏蔽应用于该储存,使得如果对应写屏蔽(比特)被设置,则储存发生,并且如果未被设置,则储存不发生。
图8图示了链式融合乘法累加指令的迭代的执行的子集的实施例。特别地,这图示了目的地的一个打包数据元素位置的迭代的执行电路。在该实施例中,链式融合乘法累加在有符号源上操作,其中累加器是输入数据大小的2倍。
第一有符号源(源1 801)和第二有符号源(源2 803)均具有四个打包数据元素。这些打包数据元素中的每一个存储有符号数据,诸如整型数据。第三有符号源(源3 809)具有两个打包数据元素,其中每一个存储有符号数据。第一和第二有符号源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图示了链式融合乘法累加指令的迭代的执行的子集的实施例。特别地,这图示了目的地的一个打包数据元素位置的迭代的执行电路。在该实施例中,链式融合乘法累加在有符号源和无符号源上操作,其中累加器是输入数据大小的4倍。
第一有符号源(源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的第三高有效打包数据元素位置的数据相乘,并且使用乘法器电路911将来自第一和第二源901和903的最低有效(least significant)打包数据元素位置的数据相乘。在一些实施例中,对第一源901的有符号打包数据元素进行符号扩展,并且在乘法之前对第二源903的无符号打包数据元素进行零扩展。
在一些实施例中,这些乘法器电路905-911是针对其他打包数据元素位置重用的。在其他实施例中,使用附加乘法器电路,使得打包数据元素被并行处理。在一些上下文中,使用有符号第三源915的大小的通道来完成并行执行。使用加法电路913将乘法中的每一个的结果相加。
将乘法的结果的加法的结果与来自有符号源3 915的最高有效打包数据元素位置的数据相加(使用不同加法器917或相同加法器913)。
最后,将第二次加法的结果919存储到与来自有符号第三源915的所使用的打包数据元素位置相对应的打包数据元素位置中的有符号目的地中,或者将第二次加法的结果919传递到下一次迭代。在一些实施例中,将写屏蔽应用于该储存,使得如果对应写屏蔽(比特)被设置,则储存发生,并且如果未被设置,则储存不发生。
图10图示了链式融合乘法累加指令的迭代的执行的子集的实施例。特别地,这图示了目的地的一个打包数据元素位置的迭代的执行电路。在该实施例中,链式融合乘法累加在有符号源和无符号源上操作,其中累加器是输入数据大小的4倍。
第一有符号源1001和第二无符号源1003均具有四个打包数据元素。这些打包数据元素中的每一个存储诸如浮点或整型数据之类的数据。第三有符号源1015(初始或前一结果)具有存储有符号数据的打包数据元素。第一和第二源的大小是第三有符号源1015(初始或前一结果)的四分之一。例如,第一和第二源可以具有16比特打包数据元素(例如,字),并且第三有符号源1015(初始或前一结果)可以具有64比特打包数据元素(例如,双精度浮点或64比特整型)。
在该图示中,示出了第一有符号源1001和第二无符号源1003的四个最高有效打包数据元素位置以及第三有符号源1015的最高有效打包数据元素位置。当然,还将处理其他打包数据元素位置,如果存在的话。
如所图示的那样,以四元组处理打包数据元素。例如,使用乘法器电路1005将第一有符号源1001和第二无符号源1003的最高有效打包数据元素位置的数据相乘,使用乘法器电路1007将来自第一有符号源1001和第二无符号源1003的第二高有效打包数据元素位置的数据相乘,使用乘法器电路1009将来自第一有符号源1001和第二无符号源1003的第三高有效打包数据元素位置的数据相乘,并且使用乘法器电路1011将来自第一有符号源1001和第二无符号源1003的最低有效打包数据元素位置的数据相乘。在一些实施例中,对第一有符号源1001的有符号打包数据元素进行符号扩展,并且在乘法之前对第二无符号源1003的无符号打包数据元素进行零扩展。
在一些实施例中,这些乘法器电路1005-1011是针对其他打包数据元素位置重用的。在其他实施例中,使用附加乘法器电路,使得打包数据元素被并行处理。在一些上下文中,使用第三有符号源1015(初始或前一结果)的大小的通道来完成并行执行。使用加法器/饱和1013电路将乘法的结果的加法的结果与来自第三有符号源1015(初始或前一结果)的最高有效打包数据元素位置的数据相加。
当加法得到对于有符号饱和而言太大或太小的值时,加法/饱和(累加器)电路1013保存操作数的符号。特别地,饱和评估发生在多路加法与向目的地的写入之间的无限精度结果上。当累加器1013是浮点并且输入项是整型时,将积之和以及浮点累加器输入值转换成无限精度值(数百比特的固定点数),执行乘法结果和第三输入的加法,并且执行到实际累加器类型的单个舍入。
将加法和饱和检验的结果1019存储到与来自第三有符号源1015(初始或前一结果)的所使用的打包数据元素位置相对应的打包数据元素位置中的有符号目的地中,或者将加法和饱和检验的结果1019传递到下一次迭代。在一些实施例中,将写屏蔽应用于该储存,使得如果对应写屏蔽(比特)被设置,则储存发生,并且如果未被设置,则储存不发生。
图11图示了根据实施例的2的幂次大小的SIMD实现方式,其中累加器使用比乘法器的输入大的输入大小。注意,源(到乘法器)和累加器值可以是有符号或无符号值。对于具有2倍输入大小的累加器(换言之,累加器输入值是源的打包数据元素大小的两倍大小),表1101图示了不同配置。对于字节大小的源,累加器使用16比特大小的字或半精度浮点(HPFP)值。对于字大小的源,累加器使用32比特大小的32比特整型或单精度浮点(SPFP)值。对于SPFP或32比特整型大小的源,累加器使用64比特大小的64整型或双精度浮点(DPFP)值。
对于具有4倍输入大小的累加器(换言之,累加器输入值是源的打包数据元素大小的四倍大小),表1103图示了不同配置。对于字节大小的源,累加器使用32比特大小的32比特整型或单精度浮点(SPFP)值。在一些实施例中,对于字大小的源,累加器使用64比特大小的64比特整型或双精度浮点(DPFP)值。
对于具有8倍输入大小的累加器(换言之,累加器输入值是源的打包数据元素大小的八倍大小),表1105图示了配置。对于字节大小的源,累加器使用64比特整型。
如前面所暗示的那样,矩阵操作电路可以被包括在核中或者作为外部加速器。图12图示了利用矩阵操作电路的系统的实施例。在该图示中,多个实体与环状互连1245耦合。
多个核(核0 1201、核1 1203、核2 1205和核N 1207)提供不基于图块的指令支持。在一些实施例中,矩阵操作电路1251被提供在核1203中,并且在其他实施例中,矩阵操作电路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是一个或多个执行电路的集合以及用于访问高速缓存1313的存储器访问电路1325,该一个或多个执行电路的集合包括标量电路1321、矢量/SIMD电路1323和矩阵操作电路1327。执行电路执行各种操作(例如移位、加法、减法、乘法),并且在各种类型的数据(例如,标量浮点、打包整型、打包浮点、矢量整型、矢量浮点)上执行。尽管一些实施例可以包括专用于具体功能或功能集合的多个执行单元,但其他实施例可以包括仅一个执行单元或全部执行所有功能的多个执行单元。标量电路1321执行标量操作,矢量/SIMD电路1323执行矢量/SIMD操作,并且矩阵操作电路1327执行本文详述的矩阵(图块)操作。
作为示例,示例性寄存器重命名乱序发布/执行核架构可以实现流水线如下:1)指令获取电路执行获取和长度解码阶段;2)分支和解码电路1303执行解码阶段;3)分配/重命名1307电路执行分配阶段和重命名阶段;4)调度器电路1309执行调度阶段;5)耦合到调度器电路1309和分配/重命名1307电路或者被包括在调度器电路1309和分配/重命名1307电路中的物理寄存器堆以及存储器单元执行寄存器读取/存储器读取阶段;执行电路1311执行执行阶段;6)存储器单元和物理寄存器堆单元执行写回/存储器写阶段;7)在异常处置阶段中可以涉及各种单元;以及8)引退单元和物理寄存器堆单元执行提交阶段。
核可以支持包括本文描述的指令的一个或多个指令集(例如,x86指令集(具有已被添加有更新的版本的一些扩展名);Sunnyvale, CA的MIPS Technologies的MIPS指令集;Sunnyvale, CA的ARM Holdings的ARM指令集(具有诸如NEON之类的可选附加扩展名))。在一个实施例中,核1390包括下述逻辑:其支持打包数据指令集扩展名(例如,AVX1、AVX2),从而允许使用打包数据来执行许多多媒体应用所使用的操作。
应当理解,核可以支持多线程(执行操作或线程的两个或更多个并行集合),且可以以多种方式这样做,该多种方式包括时间切片的多线程、同时多线程(其中单个物理核提供针对该物理核同时多线程执行的每个线程的逻辑核)、或其组合(例如,时间切片的获取和解码以及此后的同时多线程,诸如在Intel® Hyperthreading技术中)。
图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的集合和用于访问高速缓存1413的一个或多个存储器访问电路1425的集合。执行电路1427执行本文详述的矩阵(图块)操作。
作为示例,示例性寄存器重命名乱序发布/执行核架构可以实现流水线如下:1)指令获取电路执行获取和长度解码阶段;2)分支和解码电路1403执行解码阶段;3)分配/重命名1407电路执行分配阶段和重命名阶段;4)调度器电路1409执行调度阶段;5)耦合到调度器电路1409和分配/重命名1407电路或者被包括在调度器电路1409和分配/重命名1407电路中的物理寄存器堆以及存储器单元执行寄存器读取/存储器读取阶段;执行电路1411执行执行阶段;6)存储器单元和物理寄存器堆单元执行写回/存储器写阶段;7)在异常处置阶段中可以涉及各种单元;以及8)引退单元和物理寄存器堆单元执行提交阶段。
核可以支持包括本文描述的指令的一个或多个指令集(例如,x86指令集(具有已被添加有更新的版本的一些扩展名);Sunnyvale, CA的MIPS Technologies的MIPS指令集;Sunnyvale, CA的ARM Holdings的ARM指令集(具有诸如NEON之类的可选附加扩展名))。在一个实施例中,核1490包括下述逻辑:其支持打包数据指令集扩展名(例如,AVX1、AVX2),从而允许使用打包数据来执行许多多媒体应用所使用的操作。
应当理解,核可以支持多线程(执行操作或线程的两个或更多个并行集合),且可以以多种方式这样做,该多种方式包括时间切片的多线程、同时多线程(其中单个物理核提供针对该物理核同时多线程执行的每个线程的逻辑核)、或其组合(例如,时间切片的获取和解码以及此后的同时多线程,诸如在Intel® Hyperthreading技术中)。
布局
遍及该描述,使用行优先数据布局来表达数据。列优先用户应当根据他们的倾向来对项进行转译。图15图示了以行优先格式和列优先格式表达的矩阵的示例。如所示的那样,矩阵A是2×3矩阵。当该矩阵以行优先格式存储时,行的数据元素是连续的。当该矩阵以列优先格式存储时,列的数据元素是连续的。A T * B T = (BA) T 是矩阵的公知属性,其中上标T意指变换。将列优先数据读作行优先数据导致矩阵看起来像变换矩阵。
在一些实施例中,行优先语义是以硬件利用的,并且列优先数据要交换操作数次序,其中结果是矩阵的变换,但对于来自存储器的后续列优先读取,它是正确的未变换的矩阵。
例如,如果存在两个列优先矩阵以相乘:
a b g i k ag+bh ai+bj ak+bl
c d * h j l =cg+dh ci+dj ck+dl
e f eg+fh ei+fj ek+fl
(3x2) (2x3) (3x3)
输入矩阵将被存储在线性存储器中(列优先)作为:
a c e b d f
g h i j k l
将那些矩阵读作具有尺寸2×3和3×2的行优先,它们将显现为:
a c e 和 g h
b d f i j
k l
交换次序并且矩阵相乘:
g h a c e ag+bh cg+dh eg+fh
i j * b d f = ai+bj ci+dj ei+fj
k l ak+bl ck+dl ek+fl
变换矩阵为输出,且然后可以按行优先次序存储:
ag+bh cg+dh eg+fh ai+bj ci+dj ei+fj ak+bl ck+dl ek+fl
且被用在后续列优先计算中,它是正确的未变换的矩阵:
ag+bh ai+bj ak+bl
cg+dh ci+dj ck+dl
eg+fh ei+fj ek+fl
示例性使用
图16图示了矩阵(图块)的使用的示例。在该示例中,矩阵C 1601包括两个图块,矩阵A 1603包括一个图块,并且矩阵B 1605包括两个图块。该图示出了用于计算矩阵乘法的算法的内循环的示例。在该示例中,使用来自矩阵C 1601的两个结果图块tmm0和tmm1以累加中间结果。来自矩阵A 1603的一个图块(tmm2)被重用两次,这是由于它与来自矩阵B1605的两个图块相乘。指针要从由箭头指示的方向加载新A矩阵(图块)和两个新B矩阵(图块)。外循环(未示出)调整针对C图块的指针。
如所示的示例性代码包括图块配置指令的使用,且被执行以配置图块使用、加载图块、循环以处理图块、将图块存储到存储器并释放图块使用。
图17图示了矩阵(图块)的使用的实施例。在1701处,配置图块使用。例如,TILECONFIG指令被执行以配置图块使用,包括设置每图块的行和列的数目。典型地,在1703处从存储器加载至少一个矩阵(图块)。在1705处使用矩阵(图块)来执行至少一个矩阵(图块)操作。在1707处,将至少一个矩阵(图块)存储出去到存储器,并且在1709处,上下文切换可以发生。
示例性配置
图块配置硬件支持
如上所讨论,图块使用典型地需要在使用之前被配置。例如,可能不需要所有行和列的完全使用。不仅在一些实施例中配置这些行和列不节约功率,而且配置可以用于确定操作是否将生成差错。例如,典型地,如果M和L不相同,则形式(N×M) * (L×N)的矩阵乘法不适用。
在使用利用图块的矩阵之前,在一些实施例中,要配置图块支持。例如,配置每图块有多少行和列、要使用的图块等。TILECONFIG指令是对计算机自身的改进,这是由于它提供了支持以将计算机配置成使用矩阵加速器(作为处理器核的一部分或者作为外部设备)。特别地,TILECONFIG指令的执行使配置从存储器检索且被应用于矩阵加速器内的矩阵(图块)设置。
图块使用配置
图18图示了根据实施例的针对图块的使用的配置的支持。存储器1801包含要支持的矩阵(图块)的图块描述1803。
存储器/核1805的指令执行资源1811将图块描述1803的方面存储到图块配置1817中。图块配置1817包括调色板表1813,以详述针对调色板的什么图块被配置(每个图块中的行和列的数目)以及矩阵支持处于使用中的标记。特别地,指令执行资源1811被配置成使用如图块配置1817所指定的图块。指令执行资源1811还可以包括机器特定寄存器或配置寄存器以指示图块使用。还设置附加值,诸如在使用中和起始值。图块配置1817利用寄存器1819以存储图块使用和配置信息。
图19图示了要支持的矩阵(图块)的描述的实施例。这是要在STTILECFG指令的执行时存储的描述。在该示例中,每个字段是字节。在字节[0]中,存储调色板ID 1901。调色板ID用于给调色板表1813编索引,调色板表1813针对每调色板ID存储图块中的字节的数目以及如配置所定义的与该ID相关联的图块的每行的字节。
字节1存储要在“startRow”寄存器1903中存储的值,并且字节2存储要在寄存器startP 1905中存储的值。为了支持在这些事件之后重启指令,指令将信息存储到这些寄存器。为了支持在打断事件(诸如,上面详述的那些)之后重启指令,指令将信息存储在这些寄存器中。startRow值指示应当用于重启的行。startP值指示当使用对时针对存储操作的行内的位置,且在一些实施例中指示行的较低一半(在一对中的较低图块中)或行的较高一半(在一对中的较高图块中)。一般地,不需要行(列)中的位置。
关于TILECONFIG和STTILECFG的异常,成功执行矩阵(图块)指令可以将startRow和startP两者设置成0。
在任何时候所中断的矩阵(图块)指令未被重启,使startRow和startP值归零都是软件的责任。例如,非屏蔽浮点异常处置器可能决定以软件完成操作并将程序计数器值改变成另一指令,通常为下一指令。在该情况下,软件异常处置器必须在重新开始程序之前使由操作系统呈现给它的异常中的startRow和startP值归零。操作系统可以后续使用恢复指令来重新加载那些值。
字节3存储图块1907的对(1b每图块)的指示。
字节16-17存储针对图块0的行1913和列1915的数目,字节18-19存储针对图块1的行和列的数目,等等。换言之,每个2字节组指定针对图块的行和列的数目。如果未使用2个字节的组以指定图块参数,则它们应当具有值0。指定针对比实现方式界限或调色板界限更多的图块的图块参数导致故障。未配置的图块被设置成具有0行、0列的初始状态。
最后,存储器中的配置典型地以结束描绘(诸如,针对若干连续字节的全0)而结束。
示例性图块和图块配置储存器
图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和StartRow被存储在分离的寄存器2011和2013中。一个或多个状态寄存器2015被设置(例如,TILES_CONFIGURED = 1)成指示图块被配置以用于使用。
可想到其他组合,诸如将起始寄存器组合成其中它们被分离地示出的单个寄存器等。
TILETFM2RI
如上所提及,用于一般矩阵乘法(也称作GEMM)的特殊硬件是用于改进某些应用(诸如,深度学习)的峰值计算(和能量效率)的良好选项。包括深度学习的这些应用中的一些可以在不损失准确度的情况下利用相对少的比特在输入数据元素上操作,只要输出元素具有足够比特(即,多于输入)即可。
相应地,所公开的方法和系统执行变换指令TILETFM2RI,其变换矩阵(图块)——即,二维(2D)数据块——并将其结果写入到行交错(RowInt)格式化矩阵/图块/2D寄存器中。特别地,当执行融合乘法-加法(FMA)操作(或其他算术)以执行FMA且然后组合(加在一起)相邻操作的结果使,可以使用RowInt格式化矩阵。例如,可以执行由矢量或图块FMA指定的所有逐元素乘法,并且然后将相邻元素对加在一起到作为输入值两倍大的累加器中,这在输出中产生了与在输入中相同总数的比特。TILETFM2RI指令在GEMM上下文中实现这种优化。
深度学习训练(和可能地其他应用)将一些图块用作RowInt格式化的和规则格式化的两者。因此,如果将图块从传统2D块格式(即,具有正常行和列)变换成RowInt格式,则应用将被加速。RowInt格式占据“正常”格式的矩阵的一组连续行,且使那些行合并/交错。在GEMM矩阵乘法操作的上下文中,最终所需的内容是将矩阵A的每行与矩阵B的每列相乘。如果B是该RowInt格式的,则实际上矩阵B的每列“更短”。
图21A是图示了根据一些实施例的使用TILETFM2RI指令以加速矩阵乘法的框图。如所示的那样,指令2101包括操作码2102(例如,TILETFM2RI),其指示处理器要将指定源矩阵变换成具有行交错(RowInt)格式的指定目的地矩阵。特别地,响应于该操作码,处理器要按行优先次序使指定源矩阵的每个J元素子列的J个元素交错成指定目的地矩阵的K宽度子矩阵,该K宽度子矩阵具有K个列和足够行以保持这J个元素。
要以若干方式中的一种或多种指定J 2108和K 2110(这里等于4和2):作为操作数指定给TILETFM2RI指令(如这里那样);作为后缀或前缀指定给指定操作码;作为被提供有指令的立即数的一部分(例如,J要由16比特立即数的较低8个比特指定,并且K要由16比特立即数的较高8个比特指定);作为由软件在发布指令(例如,XTILECONFIG)之前编程的控制寄存器的一部分;或者甚至作为架构缺省值。J和K均可以从整数值的无限范围中选择。
指令2101进一步指定目的地矩阵(图块)位置2104和源矩阵(图块)位置2106。每个指定矩阵位置可以处于存储器位置、一批矢量寄存器和一批图块寄存器中的任一个中。这里,指定源矩阵2112和目的地矩阵2116均包括三十二(32)个字大小的元素。指定源矩阵2112包括四行和八列,而指定目的地矩阵2116包括2行和16列。如所示的那样,指定目的地矩阵2116是指定源矩阵2112的行交错(RowInt)格式变换。
还示出了用于执行TILETFM2RI指令的系统2100。该系统包括指定源矩阵(图块)2112、执行电路2114和指定目的地矩阵(图块)2116。指定目的地矩阵(图块)2116和“正常”形式的指定源矩阵2112两者均被路由到矩阵乘法电路(GEMM)2118,从而改进了GEMM性能和效率。
对变换矩阵数据来说备选的较差途径可能存在,但未实现执行TILETFM2RI指令的所公开的实施例的功率和性能增益。在一些其他途径中,软件可以将数据加载到矢量/SIMD寄存器中,使用矢量指令来执行变换,将重新格式化的数据写入到存储器,且然后将重新格式化的数据加载到2D/矢量/图块寄存器中。但是,在矢量指令中完成格式转变是缓慢的,要求复杂软件调谐,且可能要求高速缓存中的更多空间。
所公开的实施例通过允许软件执行TILETFM2RI指令以变换数据的二维(2D)矩阵(图块)且将它们放置到RowInt格式化2D矩阵(图块)寄存器中,来在备选途径上改进。有利地,与被限于使用矢量寄存器的途径相比,它被期望为简单的以供软件使用该指令。
在一个实施例中,如下面关于图21C进一步图示和描述的那样,处理器要执行TILETFM2RI指令以变换来自一对源矩阵(图块)的字并将结果存储到一对目的地矩阵(图块)中。TILETFM2RI将数据的2D图块变换成所谓的RowInt格式,并将它们放置到一个或多个2D(即,图块)寄存器中。在一个实施例中,源寄存器对的较低编号的图块表示图块对的前16行,而源寄存器对的较高编号的图块表示图块对的接下来16行。第一目的地图块将包含来自源寄存器对的前16列的数据,而第二目的地图块将将包含来自源寄存器对的第二16列的数据。在该实施例中,源图块(寄存器块)对显现为上/下(这意味着:第一图块保持行1-16并且第二图块保持其余的行17-32)。目的地图块(寄存器块)对显现为左/右(这意味着:第一图块保持列1-16并且第二图块保持其余的列17-32)。
有利地,所公开的实施例可以处置任何大小(例如,1个字节、2个字节、4个字节)的数据元素。这包括子字节大小的元素,诸如2比特或4比特数据元素。
作为另一优势,所公开的实施例还可以处置不同数目的输入和输出图块,包括单个图块、一对或多于一对。
针对该指令的输入数据可以来自于一个或多个图块寄存器、来自于矢量寄存器集合或来自于存储器。指令可以将多个图块或矢量寄存器指定为源和目的地,且可以显式地对每一个进行编码。在一些实施例中,另一方面,指令指定第一寄存器(例如,X),并且剩余寄存器是该一个寄存器的固定函数(例如,X+1、X+2等,或者X+2、X+4等)。在一些实施例中,TILETFM2RI指令将存储器位置指定为一个或多个源或目的地矩阵(图块)的位置。
当变换矩形图块(其中行比列多或者反过来)时,架构可以具有对行和列的数目的非对称限制。因此,与输出相比,一些实施例要求更多或更少寄存器以保持输入。
在一些实施例中,软件要将填充物添加到输出图块(例如,以使图块成为正方形)或从输入图块中移除填充物。所公开的实施例允许这一点。在一些实施例中,TILETFM2RI指令使用指示要作为填充物而添加到每个输出行(或列)的元素的数目的参数(例如,在寄存器中、作为立即数或作为操作码的一部分)。所填充的元素的值可以是0或某个其他预选值,或者这可以是指令的输入(作为寄存器、立即数、或操作码的一部分)。备选地或另外,指令可以取得指示要从每个输入行或列中移除的元素以及它们是在每个行/列的开始、结尾还是每个中的一些处的参数。
图21B图示了根据一些实施例的TILETFM2RI指令的示例性执行。如所示的那样,指令2121包括操作码2122(例如,TILETFM2RI),其指示处理器要将指定源矩阵变换成具有行交错(RowInt)格式的指定目的地矩阵。特别地,响应于操作码,处理器要按行优先次序使指定源矩阵的每个J元素子列的J个元素交错成指定目的地矩阵的K宽度子矩阵,该K宽度子矩阵具有K个列和足够行以保持这J个元素。
要以若干方式中的一种或多种指定J 2128和K 2130(这里等于4和2):作为操作数指定给TILETFM2RI指令(如这里那样);作为后缀或前缀指定给指定操作码;作为被提供有指令的立即数的一部分(例如,J要由16比特立即数的较低8个比特指定,并且K要由16比特立即数的较高8个比特指定);作为由软件在发布指令(例如,XTILECONFIG)之前编程的控制寄存器的一部分;或者甚至作为架构缺省值。J和K均可以从整数值的无限范围中选择。
指令2121进一步指定目的地矩阵(图块)位置2124和源矩阵(图块)位置2126。每个指定矩阵位置可以处于存储器位置、一批矢量寄存器和一批图块寄存器中的任一个中。这里,指定源矩阵2132和目的地矩阵2136均包括三十二(32)个字大小的元素。指定的源矩阵2132包括四行和八列,而指定的目的地矩阵2136包括2行和16列。如所示的那样,指定目的地矩阵2136是指定源矩阵2132的行交错(RowInt)格式变换。
还示出了用于执行TILETFM2RI指令的系统2120。该系统包括指定源矩阵(图块)2132、执行电路2134和指定目的地矩阵(图块)2136。
在操作中,获取和解码电路(未示出)要获取TILETFM2RI指令2121并对其进行解码。执行电路2136要通过下述操作来对经解码的变换指令作出响应:通过按行优先次序使指定源矩阵的每个J元素子列的J个元素交错成指定目的地矩阵的K宽度子矩阵,将指定源矩阵变换成指定RowInt格式化目的地矩阵,该K宽度子矩阵具有K个列和足够行以保持这J个元素。
图21C图示了根据一些实施例的TILETFM2RI指令的示例性执行。如所示的那样,指令2172的格式包括用于指定操作码2174(例如,TILETFM2RI)以及目的地矩阵(图块)2176、第二目的地矩阵(图块)2178、源矩阵(图块)2180和第二源矩阵(图块)2182的位置的字段。
指令2172进一步指定J 2184和K 2186,这里,它们分别等于4和2。然而,应当注意,要以若干其他方式中的一种或多种指定J和K:作为操作数指定给TILETFM2RI指令;作为后缀或前缀指定给指定操作码;作为被提供有指令的立即数的一部分(例如,J要由16比特立即数的较低8个比特指定,并且K要由16比特立即数的较高8个比特指定);作为由软件在发布指令(例如,XTILECONFIG)之前编程的控制寄存器的一部分;或者甚至作为架构缺省值。J和K均可以被设置到整数值的无限范围。
还示出了用于执行TILETFM2RI指令2172的系统2170。该系统包括第一指定源矩阵(图块)2188和第二指定源矩阵(图块)2195。系统2170进一步包括执行电路2192以及指定第一和第二目的地矩阵(图块)2194和2196。
在操作中,处理器要执行TILETFM2RI指令2172以变换来自源矩阵(图块)对的字并将结果存储到目的地矩阵(图块)对中。TILETFM2RI将指定源1 2184和指定源2 2186矩阵(图块)变换成行交错(RowInt)格式,并将它们放置到指定目的地1和目的地2 2195和2192中。在一个实施例中,如所示的那样,源图块对中的较低编号的图块表示图块对的前16行,而源图块对中的较高编号的图块表示图块对的接下来16行。第一目的地图块要包含来自源图块对的前16列的数据,而第二目的地图块要包含来自源图块对的第二16列的数据。在该实施例中,源图块(寄存器块)对显现为上/下(这意味着:第一图块保持行1-16并且第二图块保持剩余的行17-32)。目的地图块(寄存器块)对显现为左/右(这意味着:第一图块保持列1-16并且第二图块保持剩余的列17-32)。在其他实施例中,目的地图块(寄存器块)对显现为上/下。
在操作中,获取和解码电路(未示出)要获取TILETFM2RI指令2172并对其进行解码。执行电路2192要通过下述操作来对经解码的矩阵变换指令作出响应:通过按行优先次序使指定源矩阵的每个J元素子列的J个元素交错成指定目的地矩阵的K宽度子矩阵,将指定源矩阵变换成指定RowInt格式化目的地矩阵,该K宽度子矩阵具有K个列和足够行以保持这J个元素。在其他实施例中,要按列优先次序使这J个元素交错成K宽度子矩阵。
按行分散和收集
如上所描述的那样,可以关于诸如TILELOAD和TILESTORE之类的指令分别执行从存储器的图块加载和到存储器的存储。本发明实施例还提供了:将到矩阵(图块)的行中的数据和从矩阵(图块)的行出来的数据从任意(根据跨距或模式而不规则地间隔和/或未选择/指定)存储器位置转移以及转移到该任意存储器位置。这种实施例可以是期望的,以更高效地在未在存储器中作为规则二维块而组织的矩阵数据上执行计算,以用于其中矩阵的部分行和列被重排序的稀疏矩阵乘法使用、用于其中矩阵的仅某些行要被读取或存储而其他行要被填充有0或其他值的使用、以及用于各种其他使用。所公开的实施例通过允许软件使用单个指令的一个实例以在任意(根据跨距或模式而不规则地间隔和/或未选择/指定)存储器位置与矩阵寄存器的行之间执行收集或分散操作,来在现有途径上改进。
例如,根据实施例,可以使用可被称为TSCATTERROW指令或简称为TSCATTERROW的单个指令,以将矩阵(图块)的行分散到任意(根据跨距或模式而不规则地间隔和/或未选择/指定)存储器位置。类似地,根据实施例,可以使用可被称为TGATHERROW指令或简称为TGATHERROW的单个指令,以从任意(根据跨距或模式而不规则地间隔和/或未选择/指定)存储器位置收集矩阵(图块)的行。除TILESTORE和/或TILELOAD指令外或者取代TILESTORE和/或TILELOAD指令,实施例可以包括多种类型的TSCATTERROW和/或TGATHERROW指令中的任何一种或多种,以将矩阵(图块)数据转移到存储器以及从存储器转移矩阵(图块)数据。像上面描述的TILESTORE和TILELOAD指令那样,每个这种TSCATTERROW、TGATHERROW、TSCATTERROW类型和/或TGATHERROW类型指令可以是可重启的。
在各种实施例中,这些指令(例如,TSCATTERROW、TGATHERROW、TSCATTERROW类型、TGATHERROW类型)的任何集合或子集可以被实现为完全分离的指令(例如,用于区分要执行的操作(例如,行分散或收集)和/或要被使用以找到要转移的矩阵行的/针对要转移的矩阵行的存储器位置的索引的大小的完全分离的操作码,如下面所描述的那样)、相关指令(例如,将操作码的一个或多个比特与一个或多个前缀、后缀、立即数和/或其他比特共享,以区分操作/大小)、和/或指令的树或层级中的叶(例如,操作/大小可以通过在指令被使用时一个或多个寄存器和/或其他储存器的内容而区分),每一个可以如下面进一步描述的那样。例如,针对TSCATTERROW和/或TGATHERROW指令的操作/大小可以:由指令的操作码指定;在一个或多个前缀或后缀中被显式地指定给操作码;被显式地指定为指令的一个或多个操作数或立即数;显式地在一个或多个配置或控制寄存器中指定(例如,在执行TSCATTERROW/TGATHERROW指令之前由软件编程);隐式地由与一个或多个寄存器、存储器范围或其他储存器相关联的一个或多个数据类型和/或大小指定;被隐式地指定为一个或多个架构缺省值;等等。不论这种集合或子集的实现方式如何,实施例都提供了信息处理系统的指令集架构(ISA),其允许编程者或软件开发者使用单个指令而不是多个指令,以将系统编程成向和/或从任意(根据跨距或模式而不规则地间隔和/或未选择/指定)存储器位置分散和/或收集矩阵的行。
例如,在实施例中,处理器或处理器核可以包括指令单元和执行单元,如描绘根据本发明实施例的处理器和处理器核的图中所示以及如结合这些图所描述。指令单元可以包括用于解码或以其他方式接收指令集架构的指令的解码器或其他指令硬件,该指令集架构包括一种或多种类型的TSCATTERROW和/或TGATHERROW指令,并且,响应于解码器解码和/或以其他方式接收到TSCATTERROW或TGATHERROW指令的实例,执行单元中和/或与执行单元相关联的硬件(例如,连接到执行单元的算术逻辑单元的存储器管理和/或加载/存储硬件)可以执行计算(例如,以确定存储器位置)和数据转移操作(例如,以在处理器与系统存储器之间移动数据),以完成向/从所确定的存储器位置分散或收集矩阵的行。
在实施例中,可以实现处理器或处理器核的解码器和执行硬件,以解码和执行一种或多种类型的TSCATTERROW和/或TGATHERROW指令;例如:第一TGATHERROW指令(例如,TGATHERROWD),要从使用第一大小(例如,双字)的索引而找到的存储器位置收集矩阵行;第二TGATHERROW指令(例如,TGATHERROWQ),要从使用第二大小(例如,四字)的索引而找到的存储器位置收集矩阵行;第一TSCATTERROW指令(例如,TSCATTERROWD),要向使用第一大小(例如,双字)的索引而找到的存储器位置分散矩阵行;以及第二TSCATTERROW指令(例如,TSCATTERROWQ),要从使用第二大小(例如,四字)的索引而找到的存储器位置分散矩阵行。
在实施例中,可以通过指定(例如,使用指令的一个或多个操作数)从/向其收集或分散的存储器位置的集合来从/向任意(根据跨距或模式而不规则地间隔和/或未选择/指定)存储器位置收集和分散图块行。例如,指令可以具有:一个或多个操作数,要指定(例如,根据ModRM/SIB地址编码,如下面所描述)开始存储器地址和索引或偏移的集合,利用它们,根据实施例的硬件可以计算存储器地址集合(例如通过将每个索引值添加到开始存储器地址、通过将每个索引值添加到集合中的前一存储器地址等),从该存储器地址集合,根据实施例的硬件可以向/从矩阵(图块)加载/存储行。索引集合可以包括任何期望值(受制于索引大小限制;各种实施例提供了各种索引大小)。因此,可从/向其加载/存储矩阵行的存储器位置集合不限于邻接、规则地间隔(例如,如跨距值所定义)或者通过任何其他条件或模式。在实施例中,索引值集合可以是在由行分散/收集指令的操作数指示的存储器位置/范围(例如,由开始存储器地址指定的邻接存储器位置集合)或者一个或多个寄存器(例如,整型、矢量或图块寄存器)中存储(例如,在执行行分散/收集指令之前)和/或从该存储器位置/范围或者该一个或多个寄存器读取的整数值的矢量、列表、阵列或其他数据结构等。
在实施例中,行分散/收集指令可以(例如,使用如下面的伪码中的“[T1]”所表示的操作码、前缀、后缀、立即数、暗示字段等)允许(例如,由编程者)与去往处理器硬件的下述指示(术语“暗示”可以用于指代该指示、可用于提供该指示的比特和/或提供该指示的比特的特定设置)一起使用指令:要转移的数据应当绕过(即,不被高速缓存在其中,如果不是已经在那里的话)行分散/收集指令的源和目的地之间的存储器层级中的一个(例如,等级一或L1高速缓存)或多个高速缓冲存储器,这是因为数据是流送数据和/或不预期在一时段内被再次(即,在计算/使用之后,对于该计算/使用,数据被行分散/收集指令转移)使用,在该时段期间,数据在被高速缓存的情况下将预期被保留或以其他方式保持在高速缓存中(例如,不期待基于局部性(时间上或空间上)的性能效益)。
在实施例中,可以执行TGATHERROWD指令以从使用第一大小(例如,双字)的索引而找到的存储器位置收集矩阵行。实施例可以包括用于执行如以下伪码中阐述且如下面描述的存储器地址计算和图块加载操作(其中每一个可以是作为单个操作中或两个分离操作中的存储器读取和寄存器写入而执行的)的硬件:
Figure 38961DEST_PATH_IMAGE001
在实施例中,可以执行TGATHERROWQ指令以从使用第二大小(例如,四字)的索引而找到的存储器位置收集矩阵行。实施例可以包括用于执行如以下伪码中阐述且如下面描述的存储器地址计算和图块加载操作(其中每一个可以是作为单个操作中或两个分离操作中的存储器读取和寄存器写入而执行的)的硬件:
Figure 699749DEST_PATH_IMAGE002
如可以从伪码中看到的那样,TGATHERROWD和/或TGATHERROWQ指令可以具有下述格式:以该格式,第一操作数指定目的地位置(例如,tdest,其可以表示用于指定图块寄存器或针对图块的其他位置的操作数),并且第二操作数指定源位置集合(例如,tsib2,其可以表示用于使用ModRM字节、SIB字节和位移(每一个如下面所描述)指定存储器中的位置集合的操作数);并且指令的执行可以包括:确定存储器地址集合中的开始存储器地址(例如,通过将位移添加到由SIB字节指定的基本地址);将来自(由开始存储器地址指定的)开始存储器位置的行加载到图块中;以及继续确定集合中的每个剩余存储器地址(例如,通过向开始存储器地址添加在由SIB字节指定的索引寄存器中的存储器位置处起始的矢量、列表等中的索引或偏移值集合中的每个索引或偏移值);以及将来自(由剩余存储器地址指定的)每个剩余存储器位置的行加载到图块中。在该示例和其他实施例中,忽略SIB字节中的缩放字段(例如,它不对地址生成有影响,并且在缩放字段中不存在将触发故障的值)。
图22A是图示了根据一些实施例的使用行收集指令以从任意(根据跨距或模式而不规则地间隔和/或未选择/指定)存储器位置加载矩阵行的框图。如所示的那样,指令2201包括:操作码2202(例如,TGATHERROW),其指示处理器要从指定源位置收集数据并将它加载到目的地位置处的矩阵的行中。指令2201具有用于指定目的地矩阵(图块)位置的第一操作数2204和用于指定源位置(例如,使用根据ModRM/SIB地址编码的基本、位移和索引,如上面和下面所描述)以使得源位置可以在存储器中不规则地、任意地或灵活地间隔的第二操作数2206。换言之,源位置不必是在存储器中邻接的或均匀间隔的。因此,实施例提供了要在存储器中非均匀间隔的和/或不根据模式的源位置(尽管在实施例中源位置可能全部对准到公共字节边界,例如,在其中矩阵行宽度是64个字节的实施例中的64字节边界)。
还示出了用于执行TGATHERROW指令的系统2200。该系统包括源位置2216、2217、2218和2219、执行电路2220以及目的地矩阵(图块)2214。这里,指定源位置2216、2217、2218和2219均是64字节宽以便以FP32格式存储十六个元素,且在存储器中不规则地间隔,并且目的地矩阵2214包括四个64字节宽的行和十六个32比特宽的列。执行电路2220可以包括地址生成电路2222和加载电路2224。
在实施例中,可以执行TSCATTERROWD指令以向使用第一大小(例如,双字)的索引而找到的存储器位置分散矩阵行。实施例可以包括用于执行如以下伪码中阐述且如下面描述的存储器地址计算和图块加载操作(其中每一个可以是作为单个操作中或两个分离操作中的寄存器读取和存储器写入而执行的)的硬件:
Figure 779701DEST_PATH_IMAGE003
在实施例中,可以执行TSCATTERROWQ指令以向使用第二大小(例如,四字)的索引而找到的存储器位置分散矩阵行。实施例可以包括用于执行如以下伪码中阐述且如下面描述的存储器地址计算和图块加载操作(其中每一个可以是作为单个操作中或两个分离操作中的寄存器读取和存储器写入而执行的)的硬件:
Figure 867742DEST_PATH_IMAGE004
如可以从伪码中看到的那样,TSCATTERROWD和/或TSCATTERROWQ指令可以具有下述格式:以该格式,第一操作数指定目的地位置集合(例如,tsib2,其可以表示用于使用ModRM字节、SIB字节和位移(每一个如下面所描述)指定存储器中的位置集合的操作数),并且第二操作数指定源位置(例如,tsrc1,其可以表示用于指定图块寄存器或针对图块的其他位置的操作数);并且指令的执行可以包括:确定存储器地址集合中的开始存储器地址(例如,通过将位移添加到由SIB字节指定的基本地址);将来自图块的行存储到(由开始存储器地址指定的)开始存储器位置;以及继续确定集合中的每个剩余存储器地址(例如,通过向开始存储器地址添加在由SIB字节指定的索引寄存器中的存储器位置处起始的矢量、列表等中的索引或偏移值集合中的每个索引或偏移值);以及将来自图块的行存储到(由剩余存储器地址指定的)每个剩余存储器位置中。在该示例和其他实施例中,忽略SIB字节中的缩放字段(例如,它不对地址生成有影响,并且在缩放字段中不存在将触发故障的值)。
图22B是图示了根据一些实施例的使用行分散指令以向任意(例如,根据跨距或模式而不规则地间隔和/或未选择/指定)存储器位置存储矩阵行的框图。如所示的那样,指令2251包括:操作码2252(例如,TSCATTERROW),其指示处理器要将来自指定源位置处的矩阵的行分散到指定存储器位置中。指令2251具有用于指定源矩阵(图块)位置的第二操作数2256和用于指定目的地位置(例如,使用根据ModRM/SIB地址编码的基本、位移和索引,如上面和下面所描述)以使得目的地位置可以在存储器中不规则地、任意地或灵活地间隔的第一操作数2254。换言之,目的地位置不必是在存储器中邻接的或均匀间隔的。因此,实施例提供了要在存储器中非均匀间隔的和/或不根据模式的目的地位置(尽管在实施例中目的地位置可能全部对准到公共字节边界,例如,在其中矩阵行宽度是64个字节的实施例中的64字节边界)。
还示出了用于执行TSCATTERROW指令的系统2250。该系统包括目的地位置2266、2267、2268和2269、执行电路2270以及源矩阵(图块)2264。这里,指定目的地位置2266、2267、2268和2269均是64字节宽以便以FP32格式存储十六个元素,且在存储器中不规则地间隔,并且源矩阵2264包括四个64字节宽的行和十六个32比特宽的列。执行电路2270可以包括地址生成电路2272和存储电路2274。
在一些实施例中,可以预留索引的具体值(例如,MAXINT或-MAXINT)。对于行分散,当软件针对行指定该索引时,硬件将跳过向存储器的写入。对于行收集,当软件针对行指定该索引时,硬件将对该行归零,而不是从存储器读取任何内容。这对软件给出了用于通过使用具有保持该特殊值的预定索引集合的收集、利用一些零行容易地填充图块的机制,该机制可以是期望的,以取代下述途径:在该途径中,软件分配存储器中的零行并针对所填充的行将索引提供给它(这浪费了存储器和高速缓存带宽)。
在一些实施例中,对于仅行收集,可以将行收集功能与向行交错格式的转换(也称作VNNI转换)进行组合,如上所描述的那样。例如,行收集指令可以从存储器读取两个数据图块而不是一个,并在图块上执行VNNI转换。在包括使用VNNI格式的被乘数图块作为输入而执行矩阵乘法的硬件的实施例中,可以通过使用具有VNNI转换的行收集指令以加载要用作针对矩阵乘法的输入的图块,来改进性能。
示例性执行方法
图23图示了处理器执行处理TSCATTERROW或TGATHERROW指令的流程2300的实施例。如所示的那样,在2301处,处理器要使用获取电路来获取具有格式的指令,该格式具有用于指定矩阵数据的源和目的地行的操作码和位置的字段,其中该操作码指示处理器要从源行读取数据并将其写入到目的地行。对于TSCATTERROW指令,源行可以处于矩阵(图块)寄存器中,并且目的地行可以在存储器中的任意(根据跨距或模式而不规则地间隔和/或未选择/指定)位置处。对于TGATHERROW指令,源行可以在存储器中的任意(例如,根据跨距或模式而不规则地间隔和/或未选择/指定)位置处,并且目的地行可以处于矩阵(图块)寄存器中。
在2303处,处理器要使用解码电路来对所获取的指令进行解码。例如,所获取的TSCATTERROW或TGATHERROW指令被解码电路(诸如本文详述的解码电路)解码。在所图示的系统的上下文中,解码电路类似于至少关于图13、14和28A-B图示和描述的解码电路。
在2305处调度(如所需的那样)经解码的指令的执行,在其可以在不同的时间处发生或根本不发生的限度内,其是可选的(如其虚线边界所指示)。在2307处,处理器要使用执行电路、通过下述操作来对经解码的指令作出响应:执行计算,以生成针对TSCATTERROW指令的目的地行或针对TGATHERROW指令的源行的任意位置的地址;以及针对TSCATTERROW指令将数据存储到存储器或针对TGATHERROW指令从存储器加载数据。
关于图3-14来进一步图示和描述执行电路。在一些实施例中,执行电路包括矩阵操作加速器,诸如,被图示和描述为加速器307(图3)的矩阵操作加速器。在一些实施例中,执行电路包括矩阵操作电路,诸如矩阵操作电路405(图4)、505(图5)或1213(图12)和1327(图13)。
示例性指令格式
图24是图示了根据一些实施例的TSCATTERROW/TGATHERROW指令的格式的框图。如所示的那样,TSCATTERROW/TGATHERROW指令2400包括用于指定操作码2402的字段,操作码2402指示处理器要从源行读取数据并将其写入到目的地行。
指令2400进一步包括目的地操作数2404和源操作数2406。对于TSCATTERROW指令,源操作数可以指定矩阵(图块)寄存器,并且目的地操作数可以指定存储器中的任意位置。对于TGATHERROW指令,源操作数可以执行存储器中的任意位置,并且目的地操作数可以指定矩阵(图块)寄存器。
在一些实施例中,在可选地随指令2400一起包括的另一操作数和/或立即数字段中对可选指令修改符2420(例如,上面讨论的任何参数)中的一个或多个进行编码。在一些实施例中,可以经由配置/状态寄存器(例如,XTILECONFIG)来指定可选的指令修改符中的一个或多个。换言之,当可选的修改符2420中的任何一个或多个未被指令指定时,它们有时使用从图块架构的其他部分继承的隐式参数。
详细示例性系统、处理器和仿真
本文详述了用于执行上面描述的指令的硬件、软件等的示例。例如,下面描述的内容详述了包括各种流水线阶段(诸如获取、解码、调度、执行、引退等)的指令执行的方面。
指令集
指令集可以包括一种或多种指令格式。给定指令格式可以定义用于除了其他以外指定要执行的操作(例如,操作码)和要在其上执行该操作的操作数的各种字段(例如比特数目、比特位置)和/或其他数据字段(例如,屏蔽)。通过指令模板(或子格式)的定义来进一步分解一些指令格式。例如,给定指令格式的指令模板可以被定义成具有指令格式的字段(所包括的字段典型地按相同次序,但至少一些具有不同比特位置,这是因为存在更少字段被包括)的不同子集和/或被定义成具有以不同方式解释的给定字段。因此,ISA的每个指令是使用给定指令格式(并且如果被定义的话,以该指令格式的指令模板中给定的一个模板)表达的,且包括用于指定操作和操作数的字段。例如,示例性ADD指令具有具体操作码和指令格式,该指令格式包括用于指定该操作码的操作码字段和用于选择操作数的操作数字段(源1/目的地和源2);并且该ADD指令在指令流中的出现可以具有选择具体操作数的操作数字段中的具体内容。已经发布和/或公布被称作高级矢量扩展名(AVX)(AVX1和AVX2)且使用矢量扩展名(VEX)编码方案的SIMD扩展名集合(例如,参见Intel® Advanced VectorExtensions Programming Reference(高级矢量扩展编程参考),2014年10月)。
示例性指令格式
本文描述的指令的实施例可以以不同格式体现。另外,下面详述示例性系统、架构和流水线。指令的实施例可以在这种系统、架构和流水线上执行,但不限于所详述的那些。
一般矢量友好指令格式
矢量友好指令格式是适于矢量指令的指令格式(例如,存在专用于矢量操作的某些字段)。尽管描述了其中通过矢量友好指令格式支持矢量和标量操作两者的实施例,但备选实施例仅使用矢量友好指令格式的矢量操作。
图25A-25B是框图,其图示了根据实施例的一般矢量友好指令格式和其指令模板。图25A是框图,其图示了根据实施例的一般矢量友好指令格式和其类别A指令模板;而图25B是框图,其图示了根据实施例的一般矢量友好指令格式和其类别B指令模板。具体地,对于一般矢量友好指令格式2500,定义了类别A和类别B指令模板,它们两者包括无存储器访问2505指令模板和存储器访问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字节矢量操作数)。
图25A中的类别A指令模板包括:1)在无存储器访问2505指令模板内,示出了无存储器访问、完整舍入(full round)控制类型操作2510指令模板,和无存储器访问、数据变换类型操作2515指令模板;以及2)在存储器访问2520指令模板内,示出了存储器访问、暂时2525指令模板,和存储器访问、非暂时2530指令模板。图25B中的类别B指令模板包括:1)在无存储器访问2505指令模板内,示出了无存储器访问、写屏蔽控制、部分舍入控制类型操作2512指令模板,和无存储器访问、写屏蔽控制、vsize类型操作2517指令模板;以及2)在存储器访问2520指令模板内,示出了存储器访问、写屏蔽控制2527指令模板。
一般矢量友好指令格式2500包括图25A-25B中所图示的以下按顺序列出的以下字段。
格式字段2540—此字段中的具体值(指令格式标识符值)唯一地标识矢量友好指令格式,并因此标识指令流中矢量友好指令格式中的指令的出现。因而,此字段在它对于仅具有一般矢量友好指令格式的指令集不被需要的意义中是可选的。
基础操作字段2542—它的内容识别出不同的基础操作。
寄存器索引字段2544—它的内容直接或通过地址生成来指定源和目的地操作数的位置(它们在寄存器中或在存储器中)。这些包括用于从PxQ(例如32x512、16x128、32x1024、64x1024)寄存器堆选择N个寄存器的比特的足够数量。虽然在一个实施例中N可多至三个源和一个目的地寄存器,但备选实施例可支持更多或更少的源和目的地寄存器(例如,可支持多至两个源,其中这些源之一还充当目的地;可支持多至三个源,其中这些源之一还充当目的地;可支持多至两个源和一个目的地)。
修改符(modifier)字段2546—它的内容识别出一般矢量指令格式中指定存储器访问的指令与不指定存储器访问的那些指令的出现;那就是说,在无存储器访问2505指令模板和存储器访问2520指令模板之间进行识别。存储器访问操作对存储器层级进行读和/或写(在使用寄存器中的值来指定源和/或目的地地址的一些情况中),而非存储器访问操作不进行(例如,源和目的地是寄存器)。虽然在一个实施例中此字段还在三个不同方式之间选择以执行存储器地址运算,但备选实施例可支持用于执行存储器地址运算的更多、更少、或不同方式。
扩增(augmentation)操作字段2550—它的内容识别出除了基础操作之外还要被执行的多种不同操作的哪一个。此字段是上下文特定的。在一个实施例中,此字段被划分成类别字段2568、α字段2552、和β字段2554。扩增操作字段2550允许操作的通用组在单个指令而不是2、3或4个指令中被执行。
缩放(scale)字段2560—它的内容允许用于存储器地址生成(例如,用于使用2缩放*索引+基址的地址生成)的索引字段的内容的缩放。
位移(displacement)字段2562A—它的内容作为存储器地址生成(例如,用于使用2缩放*索引+基址+位移的地址生成)的部分被使用。
位移因子字段2562B(注意,直接在位移因子字段2562B上的位移字段2562A的并置指示一个或另一个被使用)—它的内容作为地址生成的部分被使用;它指定要通过存储器访问的大小(N)来缩放的位移因子—其中N是存储器访问中的字节的数量(例如,用于使用2缩放*索引+基址+缩放的位移的地址生成)。冗余低顺序比特被忽略,并且因此,位移因子字段的内容被乘以存储器操作数总大小(N)以便生成要在运算有效地址中被使用的最终位移。N的值由处理器硬件在运行时处基于完整操作码字段2574(本文中较后所描述)和数据操纵字段2554C来确定。位移字段2562A和位移因子字段2562B在它们不被用于无存储器访问2505指令模板和/或不同实施例可实现所述两个的仅一个或没有一个的意义中是可选的。
数据元素宽度字段2564—它的内容识别出多个数据元素宽度的哪一个要被使用(在对于所有指令的一些实施例中;在对于指令的仅一些指令的其他实施例中)。此字段在以下意义上是可选的:如果仅一个数据元素宽度被支持和/或使用操作码的一些方面来支持数据元素宽度,则不需要此字段。
写屏蔽字段2570—它的内容在按数据元素位置的基础上控制目的地矢量操作数中的那个数据元素位置是否反映基础操作和扩增操作的结果。类别A指令模板支持合并写掩蔽,而类别B指令模板支持合并和归零写掩蔽两者。在合并时,矢量屏蔽允许目的地中的元素的任何集合被保护免于在任何操作(由基础操作和扩增操作所指定的)的执行期间更新;在另一个实施例中,保存其中对应屏蔽比特具有0的目的地的每个元素的旧值。相比之下,在归零时,矢量屏蔽允许目的地中的元素的任何集合在任何操作(由基础操作和扩增操作所指定的)的执行期间被归零;在一个实施例中,在对应屏蔽比特具有0值时,目的地的元素被设置成0。此功能性的子集是用于控制正被执行的操作的矢量长度(那就是说,正被修改的元素的跨度,从第一个到最后一个)的能力;然而,被修改的元素不必要是连续的。因此,写屏蔽字段2570允许部分矢量操作,包括加载、存储、算术、逻辑、等等。虽然实施例被描述,其中写屏蔽字段2570的内容选择含有要被使用的写屏蔽的多个写屏蔽寄存器之一(并且因此写屏蔽字段2570的内容间接标识要被执行的掩蔽),但备选实施例转而或附加允许屏蔽写字段2570的内容直接指定要被执行的掩蔽。
立即数字段2572—它的内容允许立即数的规格。此字段在它在不支持立即数的一般矢量友好格式的实现中不存在和它在不使用立即数的指令中不存在的意义中是可选的。
类别字段2568—它的内容在指令的不同类别之间进行识别。参考图25A-B,此字段的内容在类别A和类别B指令之间选择。在图25A-B中,圆角方形被用于指示在字段中呈现的具体值(例如,在图25A-B中相应对于类别字段2568的类别A 2568A和类别B 2568B)。
类别A的指令模板
在类别A的非存储器访问2505指令模板的情况中,α字段2552被解译为RS字段2552A,其内容识别出不同扩增操作类型的哪一个要被执行(例如,舍入2552A.1和数据变换2552A.2对于无存储器访问、舍入类型操作2510,和无存储器访问、数据变换类型操作2515指令模板被相应指定),而β字段2554识别出所指定的类型的操作的哪个要被执行。在无存储器访问2505指令模板中,缩放字段2560、位移字段2562A、和位移缩放字段2562B不存在。
无存储器访问指令模板—完整舍入控制类型操作
在无存储器访问完整舍入控制类型操作2510指令模板中,β字段2554被解译为舍入控制字段2554A,其内容提供静态舍入。虽然在所描述的实施例中,舍入控制字段2554A包括所有浮点异常(SAE)字段2556和舍入操作控制字段2558的抑制,但备选实施例可支持可将这些概念两者编码成相同字段,或仅具有这些概念/字段的一个或另一个(例如,可具有仅舍入操作控制字段2558)。
SAE字段2556—它的内容识别出是否禁用异常事件报告;在SAE字段2556的内容指示抑制被启用时,给定的指令不报告任何种类的浮点异常标记且不唤起(raise)任何浮点异常处置器。
舍入操作控制字段2558—它的内容识别出一组舍入操作的哪一个要执行(例如,上舍入、下舍入、朝零舍入和往最近舍入)。因此,舍入操作控制字段2558允许按指令的基础上的舍入模式的改变。在一个实施例中,其中处理器包括用于指定舍入模式的控制寄存器,舍入操作控制字段2550的内容覆盖那个寄存器值。
无存储器访问指令模板—数据变换类型操作
在无存储器访问数据变换类型操作2515指令模板中,β字段2554被解译为数据变换字段2554B,其内容识别出多个数据变换的哪一个要被执行(例如,无数据变换、打乱、广播)。
在类别A的存储器访问2520指令模板的情况中,α字段2552被解译为驱逐提示字段2552B,其内容识别出驱逐提示的哪一个要被使用(在图25A中,暂时2552B.1和非暂时2552B.2对于存储器访问、暂时2525指令模板,和存储器访问、非暂时2530指令模板被相应指定),而β字段2554被解译为数据操纵字段2554C,其内容识别出多个数据操纵操作(还已知为原语(primitive))的哪一个要被执行(例如,无操纵;广播;源的上转换;以及目的地的下转换)。存储器访问2520指令模板包括缩放字段2560、并可选地包括位移字段2562A或位移缩放字段2562B。
矢量存储器指令通过转换支持来执行自存储器的矢量加载和往存储器的矢量存储。如通过常规矢量指令,矢量存储器指令以数据元素式的方式将数据转移自/往存储器,实际上被转移的元素由作为写屏蔽被选择的矢量屏蔽的内容来指示。
存储器访问指令模板—暂时
暂时数据是这样的数据,其有可能被足够快地再使用以受益于进行高速缓冲存储器。然而,这是提示,并且不同处理器可以采用不同方式来实现它,包括完全忽略该提示。
存储器访问指令模板—非暂时
非暂时数据是这样的数据,其不太可能被足够快地再使用以受益于在第1等级高速缓冲存储器中进行高速缓冲存储器并应被给定用于驱逐的优先权。然而,这是提示,并且不同处理器可以采用不同方式来实现它,包括完全忽略该提示。
类别B的指令模板
在类别B的指令模板的情况中,α字段2552被解译为写屏蔽控制(Z)字段2552C,其内容识别出由写屏蔽字段2570所控制的写掩蔽应是合并还是归零。
在类别B的非存储器访问2505指令模板的情况中,β字段2554的部分被解译为RL字段2557A,其内容识别出不同扩增操作类型的哪一个要被执行(例如,舍入2557A.1和矢量长度(VSIZE)2557A.2对于无存储器访问、写屏蔽控制、部分舍入控制类型操作2512指令模板,和无存储器访问、写屏蔽控制、VSIZE类型操作2517指令模板被相应指定),而β字段2554的剩余部分识别出指定类型的操作的哪个要被执行。在无存储器访问2505指令模板中,缩放字段2560、位移字段2562A、和位移缩放字段2562B不存在。
在无存储器访问、写屏蔽控制、部分舍入控制类型操作2510指令模板中,β字段2554的剩余部分被解译为舍入操作字段2559A,并且异常事件报告被禁用(给定的指令不报告任何种类的浮点异常标记且不唤起任何浮点异常处置器)。
舍入操作控制字段2559A—正如舍入操作控制字段2558,它的内容识别出一组舍入操作的哪一个要执行(例如,上舍入、下舍入、朝零舍入和往最近舍入)。因此,舍入操作控制字段2559A允许在按指令的基础上的舍入模式的改变。在一个实施例中,其中处理器包括用于指定舍入模式的控制寄存器,舍入操作控制字段2550的内容覆盖那个寄存器值。
在无存储器访问、写屏蔽控制、VSIZE类型操作2517指令模板中,β字段的剩余部分2554被解译为矢量长度字段2559B,其内容识别出多个数据矢量长度的哪一个要被执行(例如,128、256或512字节)。
在类别B的存储器访问2520指令模板的情况中,β字段2554的部分被解译为广播字段2557B,其内容识别出广播类型数据操纵操作是否要被执行,而β字段2554的剩余部分被解译为矢量长度字段2559B。存储器访问2520指令模板包括缩放字段2560、并可选地包括位移字段2562A或位移缩放字段2562B。
关于一般矢量友好指令格式2500,完整操作码字段2574被示出,包括格式字段2540、基础操作字段2542、和数据元素宽度字段2564。虽然一个实施例被示出,其中完整操作码字段2574包括所有这些字段,但在不支持所有这些字段的实施例中,完整操作码字段2574包括少于所有这些字段。完整操作码字段2574提供操作代码(操作码)。
扩增操作字段2550、数据元素宽度字段2564和写屏蔽字段2570允许这些特征在一般矢量友好指令格式中在按指令的基础上被指定。
写屏蔽字段和数据元素宽度字段的组合创建分类的(typed)指令,因为它们允许屏蔽基于不同数据元素宽度而被应用。
在类别A和类别B内建立的各种指令模板在不同情境中是有益的。在一些实施例中,不同处理器或处理器内的不同核可支持仅类别A、仅类别B、或两个类别。例如,打算用于通用计算的高性能通用乱序核可支持仅类别B,打算主要用于图形和/或科学(吞吐量)计算的核可支持仅类别A,以及打算用于两者的核可支持两个类别(当然,具有来自两个类别的模板和指令但不是来自两个类别的所有模板和指令的某些混合的核在本发明的界限之内)。同样,单个处理器可包括多个核,其的所有支持相同类别或其中不同核支持不同类别。例如,在带有单独的图形和通用核的处理器中,打算主要用于图形和/或科学计算的图形核之一可支持仅类别A,而通用核的一个或多个通用核可以是支持仅类别B的打算用于通用计算的带有乱序执行和寄存器重命名的高性能通用核。不具有单独的图形核的另一个处理器可包括支持类别A和类别B两者的更多一个通用有序或乱序核。当然,来自一个类别的特征可还被实现于不同实施例中的另一类别中。以高等级语言所写的程序将被翻译(例如,准时编译或静态编译)成多种不同可执行的形式,包括:1)具有用于执行的由目标处理器所支持的类别的仅指令的形式;或2)具有使用所有类别的指令的不同组合所写的备选例程并具有选择例程以基于由处理器(其当前正执行代码)所支持的指令来执行的控制流程代码(control flow code)的形式。
具体矢量友好指令格式
图26A是框图,其图示了根据实施例的示例性具体矢量友好指令格式。图26A示出了具体矢量友好指令格式2600,其在它指定位置、大小、解译、和字段的顺序、以及那些字段的一些字段的值的意义中是具体的。具体矢量友好指令格式2600可被用于扩展x86指令集,并且因此字段的一些字段与现存x86指令集和其扩展(例如,AVX)中所使用的那些字段类似或相同。此格式与带有扩展的现存x86指令集的前缀编码字段、真操作码字节字段、MOD R/M字段、SIB字段、位移字段,和立即数字段保持一致。来自图26A的字段所映射到其中的来自图25的字段被图示。
应当理解的是,尽管实施例为了说明性目的而参考一般矢量友好指令格式2600的上下文中的具体矢量友好指令格式2500来描述,但除非在声明之处,本发明不限于具体矢量友好指令格式2600。例如,一般矢量友好指令格式2500对于各种字段设想多种可能大小,而具体矢量友好指令格式2600被示出为具有具体大小的字段。通过具体示例的方式,虽然数据元素宽度字段2564被图示为具体矢量友好指令格式2600中的一个比特字段,但本发明不被如此限制(那就是说,一般矢量友好指令格式2500设想数据元素宽度字段2564的其他大小)。
一般矢量友好指令格式2500包括图26A中所图示的以下按顺序列出的以下字段。
EVEX前缀2602(字节0-3)以四字节形式来编码。
格式字段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比特字段相同的功能性,并使用1s补码形式来编码,即ZMM0被编码为1111B,ZMM15被编码为0000B。指令的其他字段编码如本领域中已知的寄存器索引的较低三个比特(rrr、xxx、和bbb),使得Rrrr、Xxxx、和Bbbb可通过添加EVEX.R、EVEX.X、和EVEX.B来形成。
REX'字段2510—这是REX'字段2510的第一部分并且是被用于编码扩展的32寄存器集合的较上16或较低16的EVEX.R'比特字段(EVEX字节1,比特[4]-R')。在一个实施例中,这个比特连同如以下所指示的其他比特以比特倒置的格式被存储以(在公知的x86 32-比特模式中)识别出BOUND指令,其真操作码字节是62,但在MOD R/M字段(以下所描述的)中不接受MOD字段中的11的值;备选实施例不以倒置的格式来存储这个比特和以下所指示的另一个比特。1的值被用于编码较低16个寄存器。换句话说,R'Rrrr通过组合EVEX.R'、EVEX.R、和来自其他字段的另一个RRR来形成。
操作码映射字段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编码以倒置(1s补码)的形式所指定的第一源寄存器操作数,并对于带有2个或更多源操作数的指令有效;2)EVEX.vvvv编码对于某些矢量移位以1s补码形式所指定的目的地寄存器操作数;或者3)EVEX.vvvv不编码任何操作数,字段被保留并应含有1111b。因此,EVEX.vvvv字段2620编码以倒置(1s补码)的形式所存储的第一源寄存器指定符(specifier)的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'字段2510—这是REX'字段的其余部分并且是可被用于编码扩展的32寄存器集合的较上16或较低16的EVEX.V'比特字段(EVEX字节3,比特[3]-V')。此比特以比特倒置的格式来存储。1的值被用于编码较低16个寄存器。换句话说,V'VVVV通过组合EVEX.V'、EVEX.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)—如之前所描述的,SIB 2650的内容被用于存储器地址生成。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比特位移。因此,位移因子字段2562B以与x86指令集8比特位移相同的方式来编码(所以在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含有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 2557A.2)时,β字段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在如以下表中所图示的这些覆载寄存器堆上操作。
Figure 275721DEST_PATH_IMAGE005
换句话说,矢量长度字段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包括耦合到指令高速缓冲存储器单元2834的分支预测单元2832,所述指令高速缓冲存储器单元2834被耦合到指令翻译旁视(lookaside)缓冲器(TLB)2836,其被耦合到指令获取单元2838,指令获取单元2838被耦合到解码单元2840。解码单元2840(或解码器)可解码指令,并生成为输出一个或多个微操作、微代码条目点、微指令、其他指令、或其他控制信号,其被解码自、或其以其他方式反映、或被推导自原始指令。使用各种不同机制,解码单元2840可被实现。适合的机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)、等等。在一个实施例中,核2890包括存储用于某些宏指令的微代码的微代码ROM或另一介质(例如,在解码单元2840中或以别的方式在前端单元2830内)。解码单元2840被耦合到执行引擎单元2850中的重命名/分配器单元2852。
执行引擎单元2850包括耦合到引退单元2854和一个或多个调度器单元2856的集合的重命名/分配器单元2852。调度器单元2856代表任何数量的不同调度器,包括保留站、中央指令窗口、等等。调度器单元2856被耦合到物理寄存器堆单元2858。物理寄存器堆单元2858中的每个代表一个或多个物理寄存器堆,其不同物理寄存器堆存储一个或多个不同数据类型,诸如标量整数、标量浮点、打包的整数、打包的浮点、矢量整数、矢量浮点、状态(例如,是要被执行的下一个指令的地址的指令指针)、等等。在一个实施例中,物理寄存器堆单元2858包括矢量寄存器单元、写屏蔽寄存器单元、和标量寄存器单元。这些寄存器单元可提供架构上的矢量寄存器、矢量屏蔽寄存器、和通用寄存器。物理寄存器堆单元2858通过引退单元2854来重叠以图示其中寄存器重命名和乱序执行可被实现的各种方式(例如,使用重排序缓冲器和引退寄存器堆;使用未来堆、历史缓冲器、和引退寄存器堆;使用寄存器映射和寄存器的池;等等)。引退单元2854和物理寄存器堆单元2858被耦合到执行集群2860。执行集群2860包括一个或多个执行单元2862的集合和一个或多个存储器访问单元2864的集合。执行单元2862可执行各种操作(例如,移位、加法、减法、乘法)以及在各种类型的数据(例如,标量浮点、打包的整数、打包的浮点、矢量整数、矢量浮点)上执行。虽然一些实施例可包括专用于具体功能或功能的集合的多个执行单元,其他实施例可包括都执行所有功能的多个执行单元或仅一个执行单元。调度器单元2856、物理寄存器堆单元2858和执行集群2860被示出为可能是复数的,因为某些实施例对于某些类型的数据/操作来创建单独流水线(例如,标量整数流水线、标量浮点/打包的整数/打包的浮点/矢量整数/矢量浮点流水线、和/或存储器访问流水线,其各自具有它们自己的调度器单元、物理寄存器堆单元、和/或执行集群—并且在单独的存储器访问流水线的情况中,其中此流水线的仅执行集群具有存储器访问单元2864的某些实施例被实现)。还应当理解的是,在单独流水线被使用之处,这些流水线的一个或多个流水线可以是乱序发布/执行,并且剩余的是有序。
存储器访问单元2864的集合被耦合到存储器单元2870,存储器单元2870包括耦合到数据高速缓冲存储器单元2874的数据TLB单元2872,数据高速缓冲存储器单元2874耦合到等级2(L2)高速缓冲存储器单元1576。在一个示例性实施例中,存储器访问单元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 Technologies of Sunnyvale,CA的MIPS指令集;ARM Holdings ofSunnyvale,CA的ARM指令集(带有诸如NEON的可选附加扩展)),包括本文中所描述的指令。在一个实施例中,核2890包括用于支持打包数据指令集扩展(例如,AVX1、AVX2)的逻辑,因此允许由许多多媒体应用来使用的操作使用打包的数据来执行。
应当理解的是,核可以支持多线程(执行操作或线程的两个或更多并行集合),并可以以多种方式来如此做,所述多种方式包括时间切片的多线程、同时多线程(在单个物理核为线程的每个提供逻辑核的情况中,那个物理核正进行同时多线程),或其组合(例如,诸如在Intel®超线程技术中的时间切片的获取和解码以及其后的同时多线程)。
虽然寄存器重命名在乱序执行的上下文中被描述,但应理解的是,寄存器重命名可被用在有序架构中。虽然处理器的所图示的实施例还包括单独的指令和数据高速缓冲存储器单元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高速缓冲存储器被划分成单独的本地子集,每处理器核一个。每个处理器核具有到L2高速缓冲存储器2904的它自己的本地子集的直接访问路径。由处理器核所读的数据被存储在其L2高速缓冲存储器子集2904中并可以被快速地访问,并行于其他处理器核访问它们自己的本地L2高速缓冲存储器子集。由处理器核所写的数据被存储在其自己的L2高速缓冲存储器子集2904中并且如果必要则从其他子集中被冲刷。环网络确保共享的数据的一致性。环网络是双向的以允许诸如处理器核、L2高速缓冲存储器、和其他逻辑块的代理在芯片内互相通信。每个环数据-路径每方向是1012-比特宽。
图29B是根据实施例的图29A中的处理器核的部分的扩展的视图。图29B包括L1高速缓冲存储器2904的L1数据高速缓冲存储器2906A部分,以及关于矢量单元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)CPU,带有是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核)的专用逻辑3008、以及是一个或多个通用核(例如,通用有序核、通用乱序核、所述两个核的组合)的核3002A-N;2)带有是打算主要用于图形和/或科学(吞吐量)的大量的专用核的核3002A-N的协同处理器;以及3)带有是大量的通用有序核的核3002A-N的协同处理器。因此,处理器3000可以是通用处理器、协同处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量许多集成核(MIC)协同处理器(包括30个或更多个核)、嵌入式处理器等等。处理器可被实现在一个或多个芯片上。使用多个处理技术的任何个(诸如例如,BiCMOS、CMOS或NMOS),处理器3000可被实现在一个或多个衬底上和/或是其部分。
存储器层级包括核内高速缓冲存储器的一个或多个等级、共享的高速缓冲存储器单元3006的集合或一个或多个、和耦合到集成存储器控制器单元3014的集合的外部存储器(未示出)。共享的高速缓冲存储器单元3006的集合可包括一个或多个中等级高速缓冲存储器,诸如等级2(L2)、等级3(L3)、等级4(L4)、或其他等级的高速缓冲存储器、最后等级高速缓冲存储器(LLC)、和/或其组合。虽然在一个实施例中,基于环的互连单元3012将专用逻辑3008(集成图形逻辑是专用逻辑的示例且在本文中也被称作专用逻辑)、共享的高速缓冲存储器单元3006的集合、以及系统代理单元3010/集成存储器控制器单元3014互连,但备选实施例可使用用于互连此类单元的任何数量的公知技术。在一个实施例中,一个或多个高速缓冲存储器单元3006和核3002A-N之间的一致性被维持。
在一些实施例中,核3002A-N的一个或多个核有多线程的能力。系统代理3010包括协调和操作核3002A-N的那些组件。系统代理单元3010可包括例如功率控制单元(PCU)和显示器单元。PCU可以是或包括为调节专用逻辑3008和核3002A-N的功率状态所需要的逻辑和组件。显示器单元用于驱动一个或多个外部连接的显示器。
核3002A-N可关于架构指令集是同质或异质的;那就是说,核3002A-N的两个或更多核可有执行相同指令集的能力,而其他核可有执行不同指令集或那个指令集的仅子集的能力。
示例性计算机架构
图31-34是示例性计算机架构的框图。在对于膝上型计算机、桌上型计算机、手持型PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备、以及各种其他电子设备的领域中已知的其他系统设计和配置也是适合的。一般来说,能够合并如本文中所公开的处理器和/或其他执行逻辑的极多种的系统或电子设备一般是适合的。
现在参考图31,所示出的是根据本发明一个实施例的系统3100的框图。系统3100可包括被耦合到控制器集线器3120的一个或多个处理器3110、3115。在一个实施例中,控制器集线器3120包括图形存储器控制器集线器(GMCH)3190和输入/输出集线器(IOH)3150(其可在单独的芯片上);GMCH 3190包括存储器3140和协同处理器3145被耦合到的存储器和图形控制器;IOH 3150将输入/输出(I/O)设备3160耦合到GMCH 3190。备选地,存储器和图形控制器之一或两者被集成在处理器(如本文中所描述的)内,存储器3140和协同处理器3145被直接耦合到处理器3110、和带有IOH 3150的单个芯片中的控制器集线器3120。
附加处理器3115的可选性质在图31中用断线来指代。每个处理器3110、3115可包括本文中所描述的处理核中的一个或多个,并可以是处理器3000的某版本。
存储器3140可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)、或所述两个存储器的组合。对于至少一个实施例,控制器集线器3120经由诸如前侧总线(FSB)的多点总线、诸如快速路径互连(QPI)的点对点接口、或类似连接3195来与处理器3110、3115通信。
在一个实施例中,协同处理器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。使用P-P接口电路3278、3288,处理器3270、3280可经由点对点(P-P)接口3250来互换信息。如图32中所示出的,IMC 3272和3282将处理器耦合到相应存储器(就是存储器3232和存储器3234),其可以是本地附连到相应处理器的主存储器的部分。
使用点对点接口电路3276、3294、3286、3298,处理器3270、3280可各自经由各个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可连同总线桥3218被耦合到第一总线3216,总线桥3218将第一总线3216耦合到第二总线3220。在一个实施例中,诸如协同处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列、或任何其他处理器的一个或多个附加处理器3215被耦合到第一总线3216。在一个实施例中,第二总线3220可以是低管脚计数(LPC)总线。各种设备可被耦合到第二总线3220,包括例如键盘和/或鼠标3222、通信设备3227和诸如硬盘驱动器或其他大容量储存设备的储存单元3228,其可包括指令/代码和数据3230(在一个实施例中)。进一步地,音频I/O3224可被耦合到第二总线3220。注意,其他架构是可能的。例如,取代图32的点对点架构,系统可实现多点总线或另一此类架构。
现在参考图33,所示出的是根据本发明实施例的第二更具体示例性系统3300的框图。图32和33中的相似元件标有相似附图标记,并且图32的某些方面已从图33中被省略以便避免使图33的其他方面难以理解。
图33图示了处理器3270、3280可相应包括集成存储器以及I/O控制逻辑(“CL”)3372和3382。因此,CL 3372、3382包括集成存储器控制器单元并包括I/O控制逻辑。图33图示了不仅存储器3232、3234被耦合到CL 3372、3382,而且I/O设备3314也被耦合到控制逻辑3372、3382。遗留I/O设备3315被耦合到芯片集3290。
现在参考图34,所示出的是根据本发明实施例的SoC 3400的框图。图30中的类似元件标有相似附图标记。同样,虚线框在更高级的SoC上是可选特征。在图34中,互连单元3402被耦合到:应用处理器3410,其包括一个或多个核3002A-N的集合和共享的高速缓冲存储器单元3006,该一个或多个核3002A-N的集合包括高速缓存单元3004A-N;系统代理单元3010;总线控制器单元3016;集成存储器控制器单元3014;协同处理器3420的集合或一个或多个,其可包括集成图形逻辑、图像处理器、音频处理器、以及视频处理器;静态随机存取存储器(SRAM)单元3430;直接存储器访问(DMA)单元3432;以及用于耦合到一个或多个外部显示器的显示器单元3440。在一个实施例中,协同处理器3420包括专用处理器,诸如例如,网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等等。
本文中所公开的机制的实施例可被实现在硬件、软件、固件、或此类实现手段的组合中。实施例可被实现为在可编程系统上执行的程序代码或计算机程序,所述可编程系统包括至少一个处理器、储存系统(包括易失性和非易失性存储器和/或储存元件)、至少一个输入设备、和至少一个输出设备。
诸如图32中所图示的代码3230之类的程序代码可被应用于输入指令以执行本文中所描述的功能并生成输出信息。输出信息可以已知方式被应用于一个或多个输出设备。为了此应用的目的,处理系统包括具有处理器(诸如例如:数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)、或微处理器)的任何系统。
程序代码可被实现在高等级规程上(procedural)或面向对象的编程语言中以与处理系统通信。如果期望的话,则程序代码可还被实现在汇编或机器语言中。事实上,本文中所描述的机制不限于对任何具体编程语言的范畴中。在任何情况中,语言可以是编译或解译的语言。
至少一个实施例的一个或多个方面可由存储在机器可读介质上的代表性指令来实现,所述代表性指令表示处理器内的各种逻辑,其当由机器来读时促使该机器制作用于执行本文中所描述的技术的逻辑。此类表示(已知为“IP核”)可被存储在有形的、机器可读介质上并被供应给各种客户或制造设施以加载到实际做出逻辑或处理器的制作机器。
此类机器可读储存介质可包括由机器或设备所制造或形成的物品(article)的非暂态、有形的布置而没有限制,包括储存介质(诸如硬盘、包括软盘、光盘、紧致盘只读存储器(CD-ROM)、可重写紧致盘(CD-RW)、和磁光盘的任何其他类型的盘)、半导体设备(诸如只读存储器(ROM),诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)的随机存取存储器(RAM),可擦除可编程只读存储器(EPROM)、闪速存储器、电可擦除可编程只读存储器(EEPROM)、相变存储器(PCM)、磁或光卡、或适合于存储电子指令的任何其他类型的介质)。
因此,实施例还包括非暂态、有形的机器可读介质,所述介质含有指令或含有设计数据,诸如硬件描述语言(HDL),其定义本文中所描述的结构、电路、设备、处理器和/或系统特征。此类实施例可还被称为程序产品。
仿真(包括二进制翻译、代码融合等)
在一些情况中,指令转换器可被用于将指令从源指令集转换成目标指令集。例如,指令转换器可翻译(例如,使用静态二进制翻译、包括动态编译的动态二进制翻译)、变形、仿真、或以其他方式将指令转换成要由核来处理的一个或多个其他指令。指令转换器被实现在软件、硬件、固件、或其组合中。指令转换器可在处理器上、离开处理器、或部分在处理器上而部单独开处理器。
图35是框图,其对照根据实施例的使用软件指令转换器以将源指令集中的二进制指令转换成目标指令集中的二进制指令。在所图示的实施例中,指令转换器是软件指令转换器,尽管备选地指令转换器可被实现在软件、固件、硬件、或其各种组合中。图35示出使用x86编译器3504,用高等级语言3502的程序可被编译以生成x86二进制代码3506,其可由带有至少一个x86指令集核的处理器3516来原生执行。带有至少一个x86指令集核的处理器3516表示可如带有至少一个x86指令集核的Intel处理器一样大体上执行相同功能的任何处理器,这通过兼容地执行或以其他方式处理(1)Intel x86指令集核的指令集的实质部分,或(2)针对于在带有至少一个x86指令集核的Intel处理器上运行的应用或另一软件的对象(object)代码版本,以便取得大体上与带有至少一个x86指令集核的Intel处理器相同的结果。x86编译器3504表示可操作以生成x86二进制代码3506(例如,对象代码)的编译器,x86二进制代码3506可通过或不通过附加联接处理而在带有至少一个x86指令集核的处理器3516上被执行。类似地,图35示出了使用备选指令集编译器3508,用高等级语言3502的程序可被编译以生成备选指令集二进制代码3510,其可由不带有至少一个x86指令集核的处理器3514(例如,带有执行MIPS Technologies of Sunnyvale,CA的MIPS指令集和/或执行ARM Holdings of Sunnyvale,CA的ARM指令集的核的处理器)来原生执行。指令转换器3512被用于将x86二进制代码3506转换成可由不带有x86指令集核的处理器3514来原生执行的代码。此被转换的代码不可能与备选指令集二进制代码3510相同,因为能够这样做的指令转换器难以做出;然而,被转换的代码将完成一般操作并由来自备选指令集的指令构成。因此,指令转换器3512表示软件、固件、硬件、或其组合,其通过仿真、模拟或任何其他过程而允许不具有x86指令集处理器或核的处理器或另一电子设备执行x86二进制代码3506。

Claims (20)

1.一种用于矩阵数据按行分散和收集的处理器,包括:
针对矩阵的储存器;
解码器,要对具有格式的指令进行解码,所述格式包括用于指定操作码的操作码字段和用于指定不规则间隔存储器位置集合的第一操作数字段;以及
执行电路,要响应于经解码的指令,计算与所述不规则间隔存储器位置集合相对应的地址集合,并在所述储存器与所述不规则间隔存储器位置集合之间转移数据行集合。
2.如权利要求1所述的处理器,其中所述第一操作数字段要通过指定索引集合来指定所述不规则间隔存储器位置集合。
3.如权利要求2所述的处理器,其中所述第一操作数字段要通过指定用于存储所述索引集合中的第一索引的地址的寄存器来指定所述索引集合。
4.如权利要求2所述的处理器,其中所述执行电路要通过将所述索引集合中的每个索引添加到开始存储器地址来计算所述地址集合。
5.如权利要求4所述的处理器,其中所述第一操作数字段还要指定所述开始地址或基本地址,利用所述基本地址,所述执行电路要计算所述开始地址。
6.如权利要求1所述的处理器,其中所述格式还要包括用于指定寄存器作为针对所述矩阵的储存器的第二操作数字段。
7.如权利要求1所述的处理器,其中所述指令是行收集指令,并且响应于所述指令,所述执行电路要将所述数据行集合从所述不规则间隔存储器位置集合加载到所述储存器。
8.如权利要求1所述的处理器,其中所述指令是行分散指令,并且响应于所述指令,所述执行电路要将来自所述储存器的数据行集合存储到所述不规则间隔存储器位置集合。
9.一种用于矩阵数据按行分散和收集的方法,包括:
对具有格式的指令进行解码,所述格式包括用于指定操作码的操作码字段和用于指定不规则间隔存储器位置集合的第一操作数字段;以及
执行经解码的指令,其中执行包括:计算与所述不规则间隔存储器位置集合相对应的地址集合;以及在针对矩阵的储存器与所述不规则间隔存储器位置集合之间转移数据行的集合。
10.如权利要求9所述的方法,其中所述第一操作数字段要通过指定索引集合来指定所述不规则间隔存储器位置集合。
11.如权利要求10所述的方法,其中计算地址集合包括:将所述索引集合中的每个索引添加到开始存储器地址。
12.如权利要求9所述的方法,其中所述格式还要包括用于指定寄存器作为针对所述矩阵的储存器的第二操作数字段。
13.如权利要求9所述的方法,其中所述指令是行收集指令,并且执行包括:将所述数据行从所述不规则间隔存储器位置集合加载到所述储存器。
14.如权利要求9所述的方法,其中所述指令是行分散指令,并且执行包括:将来自所述储存器的数据行存储到所述不规则间隔存储器位置集合。
15.一种包含用于矩阵数据按行分散和收集的指令的非暂时机器可读介质,所述指令在由处理器执行时要使所述处理器通过下述操作来作出响应:
对具有格式的指令进行解码,所述格式包括用于指定操作码的操作码字段和用于指定不规则间隔存储器位置集合的第一操作数字段;以及
执行经解码的指令,其中执行包括:计算与所述不规则间隔存储器位置集合相对应的地址集合;以及在针对矩阵的储存器与所述不规则间隔存储器位置集合之间转移数据行集合。
16.如权利要求15所述的非暂时机器可读介质,其中所述第一操作数字段要通过指定索引集合来指定所述不规则间隔存储器位置集合。
17.如权利要求16所述的非暂时机器可读介质,其中计算地址集合包括:将所述索引集合中的每个索引添加到开始存储器地址。
18.如权利要求15所述的非暂时机器可读介质,其中所述格式还要包括用于指定寄存器作为针对所述矩阵的储存器的第二操作数字段。
19.如权利要求15所述的非暂时机器可读介质,其中所述指令是行收集指令,并且执行包括:将所述数据行集合从所述不规则间隔存储器位置集合加载到所述储存器。
20.如权利要求15所述的非暂时机器可读介质,其中所述指令是行分散指令,并且执行包括:将来自所述储存器的数据行集合存储到所述不规则间隔存储器位置集合。
CN202011545444.5A 2020-06-27 2020-12-24 矩阵数据按行分散和收集 Pending CN113849770A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/914321 2020-06-27
US16/914,321 US20210406016A1 (en) 2020-06-27 2020-06-27 Matrix data scatter and gather by row

Publications (1)

Publication Number Publication Date
CN113849770A true CN113849770A (zh) 2021-12-28

Family

ID=73554300

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011545444.5A Pending CN113849770A (zh) 2020-06-27 2020-12-24 矩阵数据按行分散和收集

Country Status (3)

Country Link
US (1) US20210406016A1 (zh)
EP (1) EP3929732A1 (zh)
CN (1) CN113849770A (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118034781A (zh) 2017-03-20 2024-05-14 英特尔公司 用于矩阵加法、减法和乘法的系统、方法和装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6665790B1 (en) * 2000-02-29 2003-12-16 International Business Machines Corporation Vector register file with arbitrary vector addressing
US10509726B2 (en) * 2015-12-20 2019-12-17 Intel Corporation Instructions and logic for load-indices-and-prefetch-scatters operations
US20170337156A1 (en) * 2016-04-26 2017-11-23 Onnivation Llc Computing machine architecture for matrix and array processing
US20200097291A1 (en) * 2018-09-24 2020-03-26 Intel Corporation Apparatus and method for tile gather and tile scatter
US10963256B2 (en) * 2018-09-28 2021-03-30 Intel Corporation Systems and methods for performing instructions to transform matrices into row-interleaved format

Also Published As

Publication number Publication date
EP3929732A1 (en) 2021-12-29
US20210406016A1 (en) 2021-12-30

Similar Documents

Publication Publication Date Title
US11675590B2 (en) Systems and methods for performing instructions to transform matrices into row-interleaved format
CN114356417A (zh) 实行16位浮点矩阵点积指令的系统和方法
CN110955453A (zh) 用于执行矩阵压缩和解压缩指令的系统和方法
CN110968346A (zh) 用于执行用于快速元素解包到二维寄存器中的指令的系统
CN113050990A (zh) 用于矩阵操作加速器的指令的装置、方法和系统
CN114153498A (zh) 用于加载片寄存器对的系统和方法
CN110909883A (zh) 用于执行指定三元片逻辑操作的指令的系统和方法
CN117971315A (zh) 用于执行快速转换片并且将片用作一维向量的指令的系统
EP3716054A2 (en) Interleaved pipeline of floating-point adders
CN113849224A (zh) 用于移动数据的指令的装置、方法和系统
CN111767079A (zh) 用于矩阵操作加速器的转置指令的装置、方法和系统
CN112148251A (zh) 跳过无意义的矩阵运算的系统和方法
CN110909882A (zh) 用于执行水平铺块操作的系统和方法
EP3974966A1 (en) Large scale matrix restructuring and matrix-scalar operations
CN113885942A (zh) 用于将片寄存器对归零的系统和方法
CN116860334A (zh) 用于计算两个区块操作数中的半字节的数量积的系统和方法
CN113849769A (zh) 矩阵转置和乘法
CN114675883A (zh) 用于对齐矩阵操作加速器瓦片的指令的装置、方法和系统
CN116880906A (zh) 用于8位浮点矩阵点积指令的装置、方法和系统
CN113849770A (zh) 矩阵数据按行分散和收集
EP3929734A1 (en) Loading and storing matrix data with datatype conversion
CN114721624A (zh) 用于处理矩阵的处理器、方法和系统
CN116097212A (zh) 用于16比特浮点矩阵点积指令的装置、方法和系统
CN112149050A (zh) 用于增强的矩阵乘法器架构的装置、方法和系统
CN114675888A (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