CN114661348A - 用于复数矩阵共轭转置的装置和方法 - Google Patents
用于复数矩阵共轭转置的装置和方法 Download PDFInfo
- Publication number
- CN114661348A CN114661348A CN202111396243.8A CN202111396243A CN114661348A CN 114661348 A CN114661348 A CN 114661348A CN 202111396243 A CN202111396243 A CN 202111396243A CN 114661348 A CN114661348 A CN 114661348A
- Authority
- CN
- China
- Prior art keywords
- complex
- matrix
- values
- instruction
- registers
- 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
Links
- 239000011159 matrix material Substances 0.000 title claims abstract description 417
- 238000000034 method Methods 0.000 title claims abstract description 50
- 230000015654 memory Effects 0.000 claims abstract description 121
- 230000021615 conjugation Effects 0.000 claims abstract description 8
- 239000013598 vector Substances 0.000 claims description 74
- 238000006243 chemical reaction Methods 0.000 claims 2
- 239000000306 component Substances 0.000 description 102
- 238000012545 processing Methods 0.000 description 44
- 238000007667 floating Methods 0.000 description 23
- 238000006073 displacement reaction Methods 0.000 description 14
- 230000006870 function Effects 0.000 description 13
- 238000007792 addition Methods 0.000 description 11
- 239000000872 buffer Substances 0.000 description 11
- 230000000295 complement effect Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 8
- 230000000873 masking effect Effects 0.000 description 7
- 238000013519 translation Methods 0.000 description 6
- 230000014616 translation Effects 0.000 description 6
- 239000003795 chemical substances by application Substances 0.000 description 5
- 230000001427 coherent effect Effects 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 230000004044 response Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 230000006835 compression Effects 0.000 description 4
- 238000007906 compression Methods 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 230000017105 transposition Effects 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000001066 destructive effect Effects 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- -1 i.e. Substances 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- VOXZDWNPVJITMN-ZBRFXRBCSA-N 17β-estradiol Chemical compound OC1=CC=C2[C@H]3CC[C@](C)([C@H](CC4)O)[C@@H]4[C@@H]3CCC2=C1 VOXZDWNPVJITMN-ZBRFXRBCSA-N 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 230000004069 differentiation Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 229910052754 neon Inorganic materials 0.000 description 1
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000001105 regulatory effect Effects 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30196—Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/355—Indexed addressing
- G06F9/3555—Indexed addressing using scaling, e.g. multiplication of index
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
- G06F9/384—Register renaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
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 Analysis (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Advance Control (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Executing Machine-Instructions (AREA)
Abstract
用于复数矩阵共轭的装置和方法被提供。例如,一种处理器的一个实施例包括:解码器,对复数共轭转置指令解码,该复数共轭转置指令指令包括用于识别复数源矩阵的源操作对象来和用于识别复数结果矩阵的目的地操作对象,复数源矩阵存储第一多个复数值,并且复数结果矩阵存储第二多个复数值,第一多个复数值和第二多个复数值中的每个复数值包括实部分量和虚部分量;多个寄存器或本地存储器,存储第一多个复数值的全部或子集;以及执行电路,执行复数共轭转置指令,其中执行使用了矩阵共轭硬件逻辑来确定与第一多个复数值相对应的多个复数共轭值并使用转置硬件逻辑来利用多个复数共轭值执行矩阵转置操作以生成结果矩阵。
Description
技术领域
本发明的实施例概括而言涉及计算机处理器的领域。更具体而言,实 施例涉及用于复数矩阵共轭转置的装置和方法。
背景技术
指令集,或者说指令集体系结构(instruction set architecture,ISA), 是计算机体系结构的与编程有关的部分,包括原生数据类型、指令、寄存 器体系结构、寻址模式、存储器体系结构、中断和异常处理、以及外部输 入和输出(I/O)。应当注意,术语“指令”在本文中一般指的是宏指令— —即被提供到处理器以便执行的指令——而不是微指令或微操作——这是 处理器的解码器对宏指令进行解码的结果。微指令或微操作可被配置为指示处理器上的执行单元执行操作,以实现与宏指令相关联的逻辑。
ISA与微体系结构是有区别的,微体系结构是用于实现指令集的处理 器设计技术的集合。具有不同的微体系结构的处理器可以共享共同的指令 集。例如,奔腾4处理器、酷睿TM处理器和来自加州桑尼 维尔的超微半导体公司的处理器实现了x86指令集的几乎相同的版本(随 着较新的版本而添加了一些扩展),但具有不同的内部设计。例如,可以 使用公知的技术在不同的微体系结构中以不同的方式实现ISA的相同寄存器体系结构,所述技术包括专用的物理寄存器、使用寄存器重命名机制的 一个或多个动态分配的物理寄存器(例如,使用寄存器别名表(Register Alias Table,RAT)、重排序缓冲器(Reorder Buffer,ROB)和引退寄存 器文件)。除非另有指明,否则本文中使用短语“寄存器体系结构”、 “寄存器文件”和“寄存器”来指软件/程序员可见的东西,以及指令指定 寄存器的方式。在要求区分的地方,形容词“逻辑的”、“体系结构的” 或“软件可见的”将被用来指示寄存器体系结构中的寄存器/文件,而不同 的形容词将被用来指定给定的微体系结构中的寄存器(例如,物理寄存器、 重排序缓冲器、引退寄存器、寄存器池)。
发明内容
根据本申请实施例的一方面,提供一种处理器,包括:解码器,对复 数共轭转置指令解码,该复数共轭转置指令包括源操作对象以及目的地操 作对象,所述源操作对象用于识别复数源矩阵,所述目的地操作对象用于 识别复数结果矩阵,所述复数源矩阵存储第一多个复数值,并且所述复数 结果矩阵存储第二多个复数值,所述第一多个复数值和所述第二多个复数 值中的每个复数值包括实部分量和虚部分量;多个寄存器或本地存储器, 存储所述第一多个复数值的全部或子集;以及与所述多个寄存器或本地存 储器耦合的执行电路,执行所述复数共轭转置指令,所述执行电路包括矩 阵共轭硬件逻辑以及转置硬件逻辑,所述矩阵共轭硬件逻辑用于确定与所 述第一多个复数值相对应的多个复数共轭值,所述转置硬件逻辑用于利用 所述多个复数共轭值执行矩阵转置操作以生成结果矩阵。
根据本申请实施例的另一方面,提供一种方法,包括:对复数共轭转 置指令解码,该复数共轭转置指令包括源操作对象以及目的地操作对象, 所述源操作对象用于识别复数源矩阵,所述目的地操作对象用于识别复数 结果矩阵,所述复数源矩阵存储第一多个复数值,并且所述复数结果矩阵 存储第二多个复数值,所述第一多个复数值和第二多个复数值中的每个复 数值包括实部分量和虚部分量;在多个寄存器或本地存储器中存储所述第一多个复数值的全部或子集;并且执行所述复数共轭转置指令,其中所述 执行使用矩阵共轭硬件逻辑来确定与所述第一多个复数值相对应的多个复 数共轭值,并且使用转置硬件逻辑来利用所述多个复数共轭值执行矩阵转 置操作以生成结果矩阵。
根据本申请实施例的另一方面,提供一种机器可读介质,其上存储有 程序代码,所述程序代码当被机器执行时,使得所述机器执行以下操作: 对复数共轭转置指令解码,该复数共轭转置指令包括源操作对象以及目的 地操作对象,所述源操作对象用于识别复数源矩阵,所述目的地操作对象 用于识别复数结果矩阵,所述复数源矩阵存储第一多个复数值,并且所述 复数结果矩阵存储第二多个复数值,所述第一多个复数值和第二多个复数值中的每个复数值包括实部分量和虚部分量;在多个寄存器或本地存储器 中存储所述第一多个复数值的全部或子集;并且执行所述复数共轭转置指 令,其中所述执行使用矩阵共轭硬件逻辑来确定与所述第一多个复数值相 对应的多个复数共轭值,并且使用转置硬件逻辑来利用所述多个复数共轭 值执行矩阵转置操作以生成结果矩阵。
根据本申请实施例的又一方面,提供一种设备,包括:用于对复数共 轭转置指令解码的装置,该复数共轭转置指令包括源操作对象和目的地操 作对象,所述源操作对象用于识别复数源矩阵,所述目的地操作对象用于 识别复数结果矩阵,所述复数源矩阵存储第一多个复数值,并且所述复数 结果矩阵存储第二多个复数值,所述第一多个复数值和所述第二多个复数 值中的每个复数值包括实部分量和虚部分量;用于在多个寄存器或本地存储器中存储所述第一多个复数值的全部或子集的装置;以及用于执行所述 复数共轭转置指令的装置,其中所述执行使用矩阵共轭硬件逻辑来确定与 所述第一多个复数值相对应的多个复数共轭值,并且使用转置硬件逻辑来 利用所述多个复数共轭值执行矩阵转置操作以生成结果矩阵。
附图说明
从接下来结合附图的详细描述中可获得对本发明的更好理解,附图中:
图1图示了示例计算机系统体系结构;
图2图示了包括多个核心的处理器;
图3A图示了处理管线的多个阶段;
图3B图示了核心的一个实施例的细节;
图4图示了根据一个实施例的执行电路;
图5图示了寄存器体系结构的一个实施例;
图6图示了指令格式的一个示例;
图7图示了根据一个实施例的寻址技术;
图8图示了指令前缀的一个实施例;
图9A-9D图示了如何使用前缀的R、X和B字段的实施例;
图10A-10B图示了第二指令前缀的示例;
图11图示了指令前缀的一个实施例的有效载荷字节;
图12图示了用于执行不同指令集体系结构的技术;
图13A-13B图示了配置的瓦片和关联的寄存器/存储的实施例;
图14图示了利用矩阵操作加速器的系统的实施例;
图15和图16示出了如何利用矩阵操作加速器来共享存储器的不同实 施例;
图17图示了用于执行矩阵乘法操作的示例管线;
图18图示了包括处理阵列的执行电路;
图19图示了包含复数值的矩阵的示例;
图20A-20C图示了矩阵处理电路的不同实现方式;
图21图示了用于执行复数矩阵乘法指令的体系结构;
图22A-22B图示了用于执行复数矩阵乘法的方法;
图23图示了用于执行复数矩阵转置和乘法指令的体系结构;
图24A-24B图示了用于执行复数矩阵转置和乘法的方法;
图25图示了用于执行复数共轭转置指令的体系结构;
图26图示了用于执行复数矩阵共轭操作的方法;
图27图示了用于执行复数矩阵共轭和乘法指令的体系结构;并且
图28图示了用于执行复数矩阵共轭和乘法的方法。
具体实施方式
示范性计算机体系结构
下面详细描述示范性计算机体系结构。本领域中已知的用于膝上型电 脑、桌面型电脑、手持PC、个人数字助理、工程工作站、服务器、网络 设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(digital signal processor,DSP)、图形设备、视频游戏设备、机顶盒、微控制器、 蜂窝电话、便携式媒体播放器、手持设备、以及各种其他电子设备的其他系统设计和配置,也是适当的。总之,能够包含本文公开的处理器和/或其 他执行逻辑的各种各样的系统或电子设备一般是适当的。
图1图示了示范性系统的实施例。多处理器系统100是一种点到点互 连系统,并且包括多个处理器,其中包括经由点到点互连150耦合的第一 处理器170和第二处理器180。在一些实施例中,第一处理器170和第二 处理器180是同构的。在一些实施例中,第一处理器170和第二处理器 180是异构的。
处理器170和180被示为分别包括集成存储器控制器(integrated memorycontroller,IMC)单元电路172和182。处理器170还包括点到点 (P-P)接口176和178作为其互连控制器单元的一部分;类似地,第二处 理器180包括P-P接口186和188。处理器170、180可利用P-P接口电路 178、188经由点到点(P-P)接口150交换信息。IMC 172和182将处理器170、180耦合到各自的存储器,即存储器132和存储器134,这些存储器 可以是在本地附接到各个处理器的主存储器的一部分。
处理器170、180可各自利用点到点接口电路176、194、186、198经 由个体P-P互连152、154来与芯片组190交换信息。芯片组190可以可选 地经由高性能接口(I/F)192与协处理器138交换信息。在一些实施例中, 协处理器138是专用处理器,例如,高吞吐量MIC处理器、网络或通信处 理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。
共享缓存(未示出)可被包括在任一处理器170、180中,或者被包 括在两个处理器之外,但经由P-P互连与处理器连接,从而使得任一个或 两个处理器的本地缓存信息在处理器被置于低功率模式中的情况下可被存 储在该共享缓存中。
芯片组190可经由接口196耦合到第一互连116。在一些实施例中, 第一互连116可以是外围组件互连(Peripheral Component Interconnect, PCI)互连,或者诸如快速PCI互连或另一I/O互连之类的互连。在一些实 施例中,互连之一耦合到功率控制单元(powercontrol unit,PCU)117, 它可包括电路、软件和/或固件,以执行关于处理器170、180和/或协处理 器138的功率管理操作。PCU 117向电压调节器提供控制信息以使得电压 调节器生成适当的调节电压。PCU 117还提供控制信息以控制生成的操作 电压。在各种实施例中,PCU 117可包括多种功率管理逻辑单元(电路) 来执行基于硬件的功率管理。这种功率管理可以是完全受处理器控制的 (例如,由各种处理器硬件控制,并且可由工作负载和/或功率约束、热约 束或其他处理器约束所触发),和/或功率管理可响应于外部源(例如,平 台或功率管理源或系统软件)而被执行。
PCU 117被图示为作为与处理器170和/或处理器180分开的逻辑存在。 在其他情况下,PCU 117可在处理器170或180的核心(未示出)中的给 定的一个或多个上执行。在一些情况下,PCU 117可被实现为被配置为执 行其自己的专用功率管理代码(有时称为P代码)的微控制器(专用或通 用)或者其他控制逻辑。在另外的其他实施例中,PCU 117要执行的功率 管理操作可被实现在处理器外部,例如借由单独的功率管理集成电路 (powermanagement integrated circuit,PMIC)或者在处理器外部的另一组 件来实现。在另外的其他实施例中,PCU 117要执行的功率管理操作可被 实现在BIOS或其他系统软件内。
各种I/O设备114可耦合到第一互连116,以及互连(总线)桥118 将第一互连116耦合到第二互连120。在一些实施例中,一个或多个额外 的处理器115,例如协处理器、高吞吐量MIC处理器、GPGPU、加速器 (例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列 (FPGA)、或者任何其他处理器,耦合到第一互连116。在一些实施例中, 第二互连120可以是低引脚数(low pin count,LPC)互连。各种设备可耦 合到第二互连120,包括例如键盘和/或鼠标122、通信设备127、和存储 单元电路128。存储单元电路128可以是盘驱动器或其他大容量存储设备, 在一些实施例中,它可包括指令/代码和数据130。另外,音频I/O 124可 耦合到第二互连120。注意,除了上述的点到点体系结构以外其他体系结 构也是可能的。例如,取代点到点体系结构,诸如多处理器系统100之类 的系统可实现多点分支互连或者其他这种体系结构。
示范性核心体系结构、处理器和计算机体系结构
可以按不同的方式、为了不同的目的、在不同的处理器中实现处理器 核心。例如,这种核心的实现方式可包括:1)打算用于通用计算的通用 有序核心;2)打算用于通用计算的高性能通用无序核心;3)主要打算用 于图形和/或科学(吞吐量)计算的专用核心。不同处理器的实现方式可包 括:1)包括打算用于通用计算的一个或多个通用有序核心和/或打算用于 通用计算的一个或多个通用无序核心的CPU;以及2)包括主要打算用于 图形和/或科学(吞吐量)的一个或多个专用核心的协处理器。这样的不同 处理器导致不同的计算机系统体系结构,这些体系结构可包括:1)协处 理器在与CPU分开的芯片上;2)协处理器在与CPU相同的封装中、分开 的管芯上;3)协处理器与CPU在同一管芯上(在此情况下,这种协处理 器有时被称为专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者被 称为专用核心);以及4)片上系统,其可在与所描述的CPU(有时称为 (一个或多个)应用核心或者(一个或多个)应用处理器)相同的管芯上 包括上述的协处理器以及额外的功能。接下来描述示范性核心体系结构, 然后是对示范性处理器和计算机体系结构的描述。
图2图示了处理器200的实施例的框图,该处理器可具有多于一个核 心,可具有集成的存储器控制器,并且可具有集成的图形。实线框图示了 具有单个核心202A、系统代理210和一组一个或多个互连控制器单元电 路216的处理器200,而虚线框的可选添加图示了具有多个核心202(A)- (N)、系统代理单元电路210中的一组一个或多个集成存储器控制单元电路 214和专用逻辑208以及一组一个或多个互连控制器单元电路216的替代 的处理器200。注意处理器200可以是图1的处理器170或180或者协处 理器138或115之一。
从而,处理器200的不同实现方式可包括:1)其中专用逻辑208是 集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核心,未示出), 并且核心202(A)-(N)是一个或多个通用核心(例如,通用有序核心、通用 无序核心、或者两者的组合)的CPU;2)其中核心202(A)-(N)是大量的 主要打算用于图形和/或科学(吞吐量)的专用核心的协处理器;以及3)其中核心202(A)-(N)是大量的通用有序核心的协处理器。从而,处理器 200可以是通用处理器、协处理器或者专用处理器,例如,网络或通信处 理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元电路)、高吞 吐量集成众核(many integrated core,MIC)协处理器(包括30个或更多 个核心)、嵌入式处理器,等等。处理器可被实现在一个或多个芯片上。 处理器200可以是一个或多个衬底的一部分和/或可利用若干个工艺技术中 的任何一者被实现在一个或多个衬底上,这些技术例如是BiCMOS、 CMOS或NMOS。
存储器层次体系包括核心202(A)-(N)内的一级或多级缓存单元电路 204(A)-(N)、一组或一个或多个共享缓存单元电路206、以及耦合到该组集 成存储器控制器单元电路214的外部存储器(未示出)。该组一个或多个 共享缓存单元电路206可包括一个或多个中间级别缓存(例如第2级 (L2)、第3级(L3)、第4级(4)或者其他级别的缓存),比如最后 一级缓存(last level cache,LLC),和/或这些的组合。虽然在一些实施例 中基于环的互连网络电路212互连专用逻辑208(例如,集成图形逻辑)、 该组共享缓存单元电路206和系统代理单元电路210,但替代实施例使用 任何数目的公知技术来互连这种单元。在一些实施例中,在共享缓存单元 电路206中的一个或多个和核心202(A)-(N)之间维持一致性。
在一些实施例中,核心202(A)-(N)中的一个或多个能够进行多线程处 理。系统代理单元电路210包括协调和操作核心202(A)-(N)的那些组件。 系统代理单元电路210可包括例如功率控制单元(power control unit,PCU) 电路和/或显示单元电路(未示出)。PCU可以是或者可以包括调节核心 202(A)-(N)和/或专用逻辑208(例如,集成图形逻辑)的功率状态所需要 的逻辑和组件。显示单元电路用于驱动一个或多个在外部连接的显示器。
核心202(A)-(N)就体系结构指令集而言可以是同构的或者异构的;也 就是说,核心202(A)-(N)中的两个或更多个可能够执行同一指令集,而其 他核心可能够只执行该指令集的子集或者不同的指令集。
示范性核心体系结构
有序和无序核心框图
图3(A)是根据本发明的实施例图示出示范性有序管线和示范性寄存器 重命名、无序发出/执行管线两者的框图。图3(B)是根据本发明的实施例图 示出要被包括在处理器中的有序体系结构核心的示范性实施例和示范性寄 存器重命名、无序发出/执行体系结构核心两者的框图。图3(A)-3(B)中的 实线框图示了有序管线和有序核心,而虚线框的可选添加图示了寄存器重 命名、无序发出/执行管线和核心。考虑到有序方面是无序方面的子集,将 描述无序方面。
在图3(A)中,处理器管线300包括取得阶段302、可选的长度解码阶 段304、解码阶段306、可选的分配阶段308、可选的重命名阶段310、调 度(也称为调遣或发出)阶段312、可选的寄存器读取/存储器读取阶段 314、执行阶段316、写回/存储器写入阶段318、可选的异常处理阶段322、 以及可选的提交阶段324。在这些处理器管线阶段的每一者中可执行一个或多个操作。例如,在取得阶段302期间,从指令存储器取得一个或多个 指令,在解码阶段306期间,可以对取得的一个或多个指令进行解码,可 以生成使用转发寄存器端口的地址(例如,加载存储单元(load store unit, LSU)地址),并且可以执行分支转发(例如,立即数偏移或者链接寄存 器(link register,LR))。在一个实施例中,解码阶段306和寄存器读取/ 存储器读取阶段314可以被组合到一个管线阶段中。在一个实施例中,在 执行阶段316期间,可以执行解码的指令,可以执行到高级微控制器总线 (Advanced MicrocontrollerBus,AHB)接口的LSU地址/数据管线化,可 以执行乘法和加法运算,可以执行具有分支结果的算术运算,等等。
作为示例,示范性寄存器重命名、无序发出/执行核心体系结构可实现 管线300如下:1)指令取得338执行取得和长度解码阶段302和304;2) 解码单元电路340执行解码阶段306;3)重命名/分配器单元电路352执 行分配阶段308和重命名阶段310;4)调度器单元电路356执行调度阶段 312;5)物理寄存器文件单元电路358和存储器单元电路370执行寄存器 读取/存储器读取阶段314;执行集群360执行执行阶段316;6)存储器单 元电路370和物理寄存器文件单元电路358执行写回/存储器写入阶段318; 7)在异常处理阶段322中可涉及各种单元(单元电路);并且8)引退单 元电路354和物理寄存器文件单元电路358执行提交阶段324。
图3(B)示出了处理器核心390包括耦合到执行引擎单元电路350的前 端单元电路330,并且两者都耦合到存储器单元电路370。核心390可以 是精简指令集计算(reducedinstruction set computing,RISC)核心、复杂 指令集计算(complex instruction setcomputing,CISC)核心、超长指令字 (very long instruction word,VLIW)核心、或者混合或替代的核心类型。 作为另外一个选项,核心390可以是专用核心,例如,网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(general purpose computing graphicsprocessing unit,GPGPU)核心、图形核心,等等。
前端单元电路330可包括分支预测单元电路332,其耦合到指令缓存 单元电路334,指令缓存单元电路334耦合到指令转化后备缓冲器 (translation lookasidebuffer,TLB)336,指令TLB 336耦合到指令取得 单元电路338,指令取得单元电路338耦合到解码单元电路340。在一个 实施例中,指令缓存单元电路334被包括在存储器单元电路370中,而不 是前端单元电路330。解码单元电路340(或解码器)可对指令解码,并 且生成一个或多个微操作、微代码入口点、微指令、其他指令或者其他控 制信号作为输出,这些微操作、微代码入口点、微指令、其他指令或者其 他控制信号是从原始指令解码来的,或者以其他方式反映原始指令,或者 是从原始指令得出的。解码单元电路340可还包括地址生成单元电路 (AGU,未示出)。在一个实施例中,AGU使用转发的寄存器端口来生 成LSU地址,并且可进一步执行分支转发(例如,立即数偏移分支转发, LR寄存器分支转发,等等)。可利用各种不同的机制来实现解码单元电 路340。适当机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵 列(programmable logic array,PLA)、微代码只读存储器(read onlymemory,ROM),等等。在一个实施例中,核心390包括微代码ROM (未示出)或其他介质,其为某些宏指令存储微代码(例如,存储在解码 单元电路340中或者以其他方式存储在前端单元电路330内)。在一个实 施例中,解码单元电路340包括微操作(micro-op)或操作缓存(未示 出),以保持/缓存在解码或处理器管线300的其他阶段期间生成的经解码 的操作、微标记或微操作。解码单元电路340可耦合到执行引擎单元电路350中的重命名/分配器单元电路352。
执行引擎电路350包括重命名/分配器单元电路352,其耦合到引退单 元电路354和一组一个或多个调度器电路356。调度器电路356表示任何 数目的不同调度器,包括预留站、中央指令窗口,等等。在一些实施例中, 调度器电路356可包括算术逻辑单元(arithmetic logic unit,ALU)调度器/ 调度电路、ALU队列、算术生成单元(arithmeticgeneration unit,AGU) 调度器/调度电路、AGU队列,等等。调度器电路356耦合到物理寄存器 文件电路358。物理寄存器文件电路358的每一者表示一个或多个物理寄 存器文件,这些物理寄存器文件中的不同物理寄存器文件存储一个或多个 不同的数据类型,例如标量整数、标量浮点、紧缩(packed)整数、紧缩 浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址 的指令指针),等等。在一个实施例中,物理寄存器文件单元电路358包 括向量寄存器单元电路、写入掩码寄存器单元电路、以及标量寄存器单元 电路。这些寄存器单元可提供体系结构式向量寄存器、向量掩码寄存器、 通用寄存器,等等。物理寄存器文件单元电路358与引退单元电路354 (也称为退役队列或引退队列)重叠以说明可用来实现寄存器重命名和无 序执行的各种方式(例如,利用(一个或多个)重排序缓冲器(reorderbuffer,ROB)和(一个或多个)引退寄存器文件;利用(一个或多个) 未来文件、(一个或多个)历史缓冲器、以及(一个或多个)引退寄存器 文件;利用寄存器图谱和寄存器的池;等等)。引退单元电路354和物理 寄存器文件电路358耦合到(一个或多个)执行集群360。(一个或多个) 执行集群360包括一组一个或多个执行单元电路362和一组一个或多个存 储器访问电路364。执行单元电路362可在各种类型的数据(例如,标量 浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)上执行各种算术、逻 辑、浮点或其他类型的运算(例如,移位、加法、减法、乘法)。虽然一 些实施例可包括专用于特定功能或功能集合的若干个执行单元或执行单元 电路,但其他实施例可只包括一个执行单元电路或者全部执行所有功能的 多个执行单元/执行单元电路。调度器电路356、物理寄存器文件单元电路 358、以及(一个或多个)执行集群360被示为可能是多个,因为某些实 施例为某些类型的数据/操作创建单独的管线(例如,标量整数管线、标量 浮点/紧缩整数/紧缩浮点/向量整数/向量浮点管线和/或存储器访问管线,它 们各自具有其自己的调度器电路、物理寄存器文件单元电路和/或执行集群 —并且在单独的存储器访问管线的情况下,实现了某些实施例,其中只有 此管线的执行集群具有存储器访问单元电路364)。还应当理解,在使用 分开管线的情况下,这些管线中的一个或多个可以是无序发出/执行,并且 其余的是有序的。
在一些实施例中,执行引擎单元电路350可以执行到高级微控制器总 线(AHB)接口(未示出)的加载存储单元(LSU)地址/数据管线化,以 及地址阶段和写回、数据阶段加载、存储、以及分支。
存储器访问电路364的集合耦合到存储器单元电路370,存储器单元 电路370包括数据TLB单元电路372,数据TLB单元电路372耦合到数据 缓存电路374,数据缓存电路374耦合到第2级(L2)缓存电路376。在 一个示范性实施例中,存储器访问单元电路364可包括加载单元电路、存 储地址单元电路、以及存储数据单元电路,它们中的每一者耦合到存储器单元电路370中的数据TLB电路372。指令缓存电路334进一步耦合到存 储器单元电路370中的第2级(L2)缓存单元电路376。在一个实施例中, 指令缓存334和数据缓存374在L2缓存单元电路376、第3级(L3)缓存 单元电路(未示出)和/或主存储器中被组合成单个指令和数据缓存(未示 出)。L2缓存单元电路376耦合到一个或多个其他级别的缓存并且最终耦 合到主存储器。
核心390可支持一个或多个指令集(例如,x86指令集(随着较新版 本添加了一些扩展);MIPS指令集;ARM指令集(带有可选的额外扩展, 例如NEON)),包括本文描述的(一个或多个)指令。在一个实施例中, 核心390包括逻辑来支持紧缩数据指令集扩展(例如,AVX1、AVX2), 从而允许了被许多多媒体应用使用的操作被利用紧缩数据来执行。
示范性执行单元电路
图4图示了执行单元电路的实施例,例如图3(B)的执行单元电路362。 如图所示,执行单元电路362可包括一个或多个ALU电路401、向量 /SIMD单元电路403、加载/存储单元电路405、和/或分支/跳转单元电路 407。ALU电路401执行整数算术和/或布尔运算。向量/SIMD单元电路 403对紧缩数据(例如,SIMD/向量寄存器)执行向量/SIMD运算。加载/ 存储单元电路405执行加载和存储指令,以将数据从存储器加载到寄存器 中,或者从寄存器存储到存储器。加载/存储单元电路405也可以生成地址。 分支/跳转单元电路407依据指令引起到某个存储器地址的分支或跳转。浮 点单元(floating-point unit,FPU)电路409执行浮点算术。执行单元电路 362的宽度依据实施例而有所不同,并且可以在从16比特到1024比特的 范围中。在一些实施例中,两个或更多个更小的执行单元被从逻辑上组合 以形成更大的执行单元(例如,两个128比特执行单元被从逻辑上组合以 形成256比特执行单元)。
示范性寄存器体系结构
图5是根据一些实施例的寄存器体系结构500的框图。如图所示,存 在向量/SIMD寄存器510,其宽度从128比特到1024比特不等。在一些实 施例中,向量/SIMD寄存器510在物理上是512比特的,并且取决于映射, 只有一些低位比特被使用。例如,在一些实施例中,向量/SIMD寄存器 510是512比特的ZMM寄存器:低位256比特被用于YMM寄存器,并且 低位128比特被用于XMM寄存器。因此,存在寄存器的覆盖。在一些实 施例中,向量长度字段在最大长度和一个或多个其他更短的长度之间做出 选择,其中每个这种更短长度是前一长度的一半长度;标量运算是在 ZMM/YMM/XMM寄存器中的最低阶数据元素位置上执行的运算;更高阶 数据元素位置或者被保持为与其在该指令之前相同,或者被归零,这取决 于实施例。
在一些实施例中,寄存器体系结构500包括写入掩码/谓词寄存器515。 例如,在一些实施例中,有8个写入掩码/谓词寄存器(有时称为k0至 k7),其中每一者是16比特、32比特、64比特或128比特大小的。写入 掩码/谓词寄存器515可以允许合并(例如,允许目的地中的任何元素集合 在任何操作的执行期间免受更新)和/或归零(例如,归零向量掩码允许了 目的地中的任何元素集合在任何操作的执行期间被归零)。在一些实施例 中,给定的写入掩码/谓词寄存器515中的每个数据元素位置对应于目的地 的一个数据元素位置。在其他实施例中,写入掩码/谓词寄存器515是可缩 放的,并且对于给定向量元素由设定数目的使能比特组成(例如,每个64 比特向量元素有8个使能比特)。
寄存器体系结构500包括多个通用寄存器525。这些寄存器可以是16 比特、32比特、64比特等等,并且可被用于标量运算。在一些实施例中, 这些寄存器被用名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP 以及R8至R15来引用。
在一些实施例中,寄存器体系结构500包括标量浮点(EP)寄存器 545,它被用于使用x87指令集扩展对32/64/80比特浮点数据进行标量浮 点运算,或者作为MMX寄存器来对64比特紧缩整数数据执行运算,以 及为MMX和XMM寄存器之间执行的一些运算保存操作对象(operand)。
一个或多个标志寄存器540(例如,EFLAGS,RFLAGS,等等)存储 针对算术、比较和系统操作的状态和控制信息,。例如,一个或多个标志 寄存器540可以存储条件代码信息,例如进位、奇偶性、辅助进位、零、 符号、以及溢出。在一些实施例中,一个或多个标志寄存器540被称为程 序状态和控制寄存器。
片段寄存器520包含用于访问存储器的片段点。在一些实施例中,这 些寄存器由名称CS、DS、SS、ES、FS和GS来称呼。
机器特定寄存器(machine-specific register,MSR)535控制和报告处 理器性能。大多数MSR 535处理与系统有关的功能,并且是应用程序不可 访问的。机器检查寄存器560由用于检测和报告硬件差错的控制、状态和 差错报告MSR组成。
一个或多个指令指针寄存器530存储指令指针值。(一个或多个)控 制寄存器555(例如,CR0-CR4)确定处理器(例如,处理器170、180、 138、115和/或200)的操作模式和当前执行任务的特性。调试寄存器550 控制并允许监视处理器或核心的调试操作。
存储器管理寄存器565指定用于保护模式存储器管理中的数据结构的 位置。这些寄存器可包括GDTR、IDRT、任务寄存器、以及LDTR寄存器。
本发明的替代实施例可使用更宽或更窄的寄存器。此外,本发明的替 代实施例可使用更多、更少或不同的寄存器文件和寄存器。
指令集
指令集体系结构(ISA)可包括一个或多个指令格式。给定的指令格 式可定义各种字段(例如,比特的数目、比特的位置)来指定要执行的操 作(例如,操作码)和要在其上执行该操作的(一个或多个)操作对象和/ 或其他(一个或多个)数据字段(例如,掩码),等等。一些指令格式通 过指令模板(或子格式)的定义被进一步分解。例如,给定的指令格式的指令模板可被定义为具有该指令格式的字段的不同子集(包括的字段通常 是按相同顺序的,但至少一些具有不同的比特位置,因为包括的字段更少) 和/或被定义为具有以不同方式被解读的给定字段。从而,ISA的每个指令 是利用给定的指令格式来表达的(并且如果定义了的话,以该指令格式的 指令模板中的给定一个指令模板来表达)并且包括用于指定操作和操作对 象的字段。例如,示范性ADD指令具有特定的操作码和指令格式,该指 令格式包括操作码字段以指定该操作码并且包括操作对象字段来选择操作 对象(源1/目的地和源2);并且此ADD指令在指令流中的出现将在选择 特定操作对象的操作对象字段中具有特定内容。
示范性指令格式
可按不同的格式来实现本文描述的(一个或多个)指令的实施例。此 外,下文详述了示范性系统、体系结构和管线。(一个或多个)指令的实 施例可在这种系统、体系结构和管线上被执行,但不限于详述的那些。
图6图示了指令格式的实施例。如图所示,指令可包括多个组件,包 括但不限于一个或多个字段,用于:一个或多个前缀601、操作码603、 寻址信息605(例如,寄存器标识符、存储器寻址信息,等等)、位移值 607、和/或立即数609。注意,一些指令利用了该格式的一些或所有字段, 而其他指令可能只使用操作码603的字段。在一些实施例中,图示的顺序是这些字段要被编码的顺序,然而,应当明白,在其他实施例中,这些字 段可被以不同的顺序来编码、被组合,等等。
(一个或多个)前缀字段601当被使用时会修改指令。在一些实施例 中,一个或多个前缀被用于重复字符串指令(例如,0xF0、0xF2、0xF3, 等等),以提供片段覆盖(例如,0x2E、0x36、0x3E、0x26、0x64、0x65、 0x2E、0x3E,等等),以执行总线锁定操作,和/或改变操作对象(例如, 0x66)和地址大小(例如,0x67)。某些指令要求强制性的前缀(例如, 0x66、0xF2、0xF3,等等)。这些前缀中的某些可能被认为是“传统”前 缀。其他前缀——其一个或多个示例在此详述——指示出和/或提供了进一 步的能力,例如指定特定的寄存器,等等。其他前缀通常在“传统”前缀 之后。
操作码字段603被用于至少部分地定义在指令解码时要执行的操作。 在一些实施例中,在操作码字段603中编码的主操作码的长度为1、2或3 个字节。在其他实施例中,主操作码可以是不同的长度。额外的3比特操 作码字段有时被编码在另一个字段中。
寻址字段605被用于寻址指令的一个或多个操作对象,例如存储器中 的位置或者一个或多个寄存器。图7图示了寻址字段605的实施例。在这 个图示中,示出了可选的ModR/M字节702和可选的缩放比例、索引、基 址(Scale,Index,Base,SIB)字节704。ModR/M字节702和SIB字节704 被用于编码一指令的多达两个操作对象,每个操作对象是直接寄存器或有 效存储器地址。注意,这些字段中的每一者是可选的,即,不是所有的指 令都包括这些字段中的一个或多个。MOD R/M字节702包括MOD字段 742、寄存器(REG)字段744、和R/M字段746。
MOD字段742的内容区分存储器访问和非存储器访问模式。在一些 实施例中,当MOD字段742的值为b11时,就利用了寄存器直接寻址模 式,否则就使用寄存器间接寻址。
寄存器字段744可编码目的地寄存器操作对象或者源寄存器操作对象, 或者可编码操作码扩展,并且可不被用于编码任何指令操作对象。寄存器 索引字段744的内容直接指定或者通过地址生成来指定源或目的地操作对 象的位置(在寄存器中或者在存储器中的位置)。在一些实施例中,寄存 器字段744被补充以来自前缀(例如,前缀601)的额外比特,以允许更 大的寻址。
R/M字段746可被用于编码引用存储器地址的指令操作对象,或者可 被用于编码目的地寄存器操作对象或源寄存器操作对象。注意R/M字段 746在一些实施例中可被与MOD字段742相组合以规定寻址模式。
SIB字节704包括缩放比例字段752、索引字段754、以及基址字段 756,以用于地址的生成。缩放比例字段752指示缩放因子。索引字段754 指定要使用的索引寄存器。在一些实施例中,索引字段754被补充以来自 前缀(例如,前缀601)的额外比特,以允许更大的寻址。基址字段756 指定了要使用的基址寄存器。在一些实施例中,基址字段756被补充以来自前缀(例如,前缀601)的额外比特,以允许更大的寻址。在实践中, 缩放比例字段752的内容允许了缩放索引字段754的内容以进行存储器地 址生成(例如,对于使用2缩放比例*索引+基址的地址生成)。
一些寻址形式利用位移值来生成存储器地址。例如,可以根据2缩放比例 *索引+基址+位移、索引*缩放比例+位移、r/m+位移、指令指针 (RIP/EIP)+位移、寄存器+位移等等来生成存储器地址。该位移可以 是1字节、2字节、4字节等等的值。在一些实施例中,位移字段607提供 这个值。此外,在一些实施例中,在寻址字段605的MOD字段中编码了 位移因子用法,其指示出压缩位移方案,对于该方案,位移值是通过将 disp8与缩放因子N结合相乘来计算的,该缩放因子N是基于向量长度、b 比特的值和指令的输入元素大小而确定的。该位移值被存储在位移字段 607中。
在一些实施例中,立即数字段609为指令指定立即数。立即数可以被 编码为1字节值、2字节值、4字节值,等等。
图8图示了第一前缀601(A)的实施例。在一些实施例中,第一前缀 601(A)是REX前缀的实施例。使用这个前缀的指令可以指定通用寄存器、 64比特紧缩数据寄存器(例如,单指令、多数据(single instruction, multiple data,SIMD)寄存器或向量寄存器)、和/或控制寄存器和调试寄 存器(例如,CR8-CR15和DR8-DR15)。
使用第一前缀601(A)的指令可以使用3比特字段指定最多达三个寄存 器,这取决于格式:1)使用Mod R/M字节702的reg字段744和R/M字 段746;2)使用Mod R/M字节702与SIB字节704,包括使用reg字段 744和基址字段756和索引字段754;或者3)使用操作码的寄存器字段。
在第一前缀601(A)中,比特位置7:4被设置为0100。比特位置3(W) 可被用于确定操作对象大小,但可能不会单独确定操作对象宽度。因此, 当W=0时,操作对象大小由代码段描述符(code segment descriptor, CS.D)决定,而当W=1时,操作对象大小为64比特。
注意,添加另一个比特则允许了寻址16(24)个寄存器,而单独的 MOD R/M reg字段744和MOD R/M R/M字段746各自只能寻址8个寄存 器。
在第一前缀601(A)中,比特位置2(R)可以是MOD R/M reg字段 744的扩展,并且当该字段编码通用寄存器、64比特紧缩数据寄存器(例 如,SSE寄存器)或者控制或调试寄存器时,可被用来修改ModR/M reg 字段744。当Mod R/M字节702指定其他寄存器或定义扩展操作码时,R 被忽略。
比特位置1(X)X比特可以修改SIB字节索引字段754。
比特位置B(B)B可以修改Mod R/M R/M字段746中的基址或SIB字 节基址字段756;或者它可以修改用于访问通用寄存器(例如,通用寄存 器525)的操作码寄存器字段。
图9(A)-(D)图示了如何使用第一前缀601(A)的R、X和B字段的实施 例。图9(A)图示了当SIB字节7 04不被用于存储器寻址时,来自第一前缀 601(A)的R和B被用来扩展MODR/M字节702的reg字段744和R/M字 段746。图9(B)图示了当不使用SIB字节7 04时,来自第一前缀601(A)的 R和B被用来扩展MOD R/M字节702的reg字段744和R/M字段746 (寄存器-寄存器寻址)。图9(C)图示了当SIB字节7 04被用于存储器寻 址时,来自第一前缀601(A)的R、X和B被用于扩展MOD R/M字节702 的reg字段744以及索引字段754和基址字段756。图9(D)图示了当寄存 器被编码在操作码603中时来自第一前缀601(A)的B被用来扩展MOD R/M字节702的reg字段744。
图10(A)-(B)图示了第二前缀601(B)的实施例。在一些实施例中,第二 前缀601(B)是VEX前缀的实施例。第二前缀601(B)编码允许了指令具有 多于两个操作对象,并且允许了SIMD向量寄存器(例如,向量/SIMD寄 存器2410)长于64比特(例如,128比特和256比特)。第二前缀601(B) 的使用提供了三操作对象(或更多)的语法。例如,先前的两操作对象指 令执行比如A=A+B之类的操作,这覆写了源操作对象。对第二前缀 601(B)的使用使得操作对象能够执行非破坏性操作,比如A=B+C。
在一些实施例中,第二前缀601(B)有两种形式——两字节形式和三字 节形式。两字节的第二前缀601(B)被主要用于128比特、标量和一些256 比特指令;而三字节的第二前缀601(B)提供了对第一前缀601(A)的紧凑替 代和3字节操作码指令。
图10(A)图示了第二前缀601(B)的两字节形式的实施例。在一个示例 中,格式字段1001(字节0 1003)包含值C5H。在一个示例中,字节1 1005在比特[7]中包括“R”值。这个值是第一前缀601(A)的相同值的补码。 比特[2]被用来规定向量的长度(L)(其中0的值是标量或者128比特向 量,而1的值是256比特向量)。比特[1:0]提供等同于一些传统前缀的操 作码外延性(例如,00=无前缀,01=66H,10=F3H,并且11=F2H)。 被示为vvvv的比特[6:3]可被用于:1)编码第一源寄存器操作对象,以反 转(1的补码(1s complement))形式指定并且对于具有2个或更多个源 操作对象的指令是有效的;2)编码目的地寄存器操作对象,对于某些向 量移位以1的补码(1s complement)形式指定的;或者3)不编码任何操 作对象,该字段被保留并且应当包含某个值,例如1111b。
使用这个前缀的指令可以使用Mod R/M R/M字段746来编码引用存 储器地址的指令操作对象,或者编码目的地寄存器操作对象或源寄存器操 作对象。
使用这个前缀的指令可以使用Mod R/M reg字段744来编码目的地寄 存器操作对象或者源寄存器操作对象,被作为操作码扩展来对待,而不被 用于编码任何指令操作对象。
对于支持四个操作对象(即,vvvv)的指令语法,Mod R/M R/M字段 746和Mod R/Mreg字段744编码了四个操作对象中的三个。然后立即数 609的比特[7:4]被用来编码第三源寄存器操作对象。
图10(B)图示了第二前缀601(B)的三字节形式的实施例。在一个示例 中,格式字段1011(字节0 1013)包含值C4H。字节1 1015在比特[7:5] 中包括“R”、“X”和“B”,它们是第一前缀601(A)的相同值的补码。 字节1 1015的比特[4:0](示为mmmmm)包括用于根据需要编码一个或多 个隐含的前导操作码字节的内容。例如,00001意味着0FH前导操作码,00010意味着0F38H前导操作码,00011意味着前导0F3AH操作码,等等。
字节2 1017的比特[7]与第一前缀601(A)的W被类似地使用,包括帮 助确定可提升的操作对象大小。比特[2]被用来规定向量的长度(L)(其 中0的值是标量或者128比特向量,而1的值是256比特向量)。比特 [1:0]提供等同于一些传统前缀的操作码外延性(例如,00=无前缀,01= 66H,10=F3H,并且11=F2H)。被示为vvvv的比特[6:3]可被用于:1) 编码第一源寄存器操作对象,以反转(1的补码(1s complement))形式 指定并且对于具有2个或更多个源操作对象的指令是有效的;2)编码目 的地寄存器操作对象,对于某些向量移位以1的补码(1s complement)) 形式指定;或者3)不编码任何操作对象,该字段被保留并且应当包含某 个值,例如1111b。
使用这个前缀的指令可以使用Mod R/M R/M字段746来编码引用存 储器地址的指令操作对象,或者编码目的地寄存器操作对象或源寄存器操 作对象。
使用这个前缀的指令可以使用Mod R/M reg字段744来编码目的地寄 存器操作对象或者源寄存器操作对象,被作为操作码扩展来对待,而不被 用于编码任何指令操作对象。
对于支持四个操作对象(即,vvvv)的指令语法,Mod R/M R/M字段 746和Mod R/Mreg字段744编码了四个操作对象中的三个。然后立即数 609的比特[7:4]被用来编码第三源寄存器操作对象。
图11图示了第三前缀601(C)的实施例。在一些实施例中,第一前缀 601(A)是EVEX前缀的实施例。第三前缀601(C)是四字节前缀。
第三前缀601(C)可以在64比特模式中编码32个向量寄存器(例如, 128比特、256比特和512比特寄存器)。在一些实施例中,利用写入掩码 /操作掩码(见先前图中对于寄存器的论述,例如图5)或预测的指令利用 这个前缀。操作掩码寄存器允许了条件处理或选择控制。操作掩码指令— —其源/目的地操作对象是操作掩码寄存器并且将操作掩码寄存器的内容视 为单个值——是使用第二前缀601(B)来编码的。
第三前缀601(C)可以编码指令类所特定的功能(例如,具有“加载+ 操作”语义的紧缩指令可以支持嵌入式广播功能,具有舍入语义的浮点指 令可以支持静态舍入功能,具有非舍入算术语义的浮点指令可以支持“抑 制所有异常”功能,等等)。
第三前缀601(C)的第一字节是格式字段1111,它在一个示例中具有 62H的值。随后的字节被称为有效载荷字节1115-1119,并且共同形成 P[23:0]的24比特值,以一个或多个字段的形式提供特定的能力(在此详 述)。
在一些实施例中,有效载荷字节1119的P[1:0]与低位的两个 mmmmm比特相同。在一些实施例中,P[3:2]被保留。比特P[4](R’) 在与P[7]和ModR/M reg字段744相组合时允许了访问高16个向量寄存器 集合。当不需要SIB类型寻址时,P[6]也可提供对高16个向量寄存器的访 问。P[7:5]由R、X和B构成,它们是针对向量寄存器、通用寄存器、存 储器寻址的操作对象指定符修饰符比特,并且当与ModR/M寄存器字段 744和ModR/M R/M字段746相组合时,允许访问低8个寄存器之外的下 一组8个寄存器。P[9:8]提供等同于一些传统前缀的操作码外延性(例如, 00=无前缀,01=66H,10=F3H,并且11=F2H)。P[10]在一些实施例 中是固定值1。被示为vvvv的P[14:11]可被用于:1)编码第一源寄存器 操作对象,以反转(1的补码(1s complement))形式指定,并且对于具 有2个或更多个源操作对象的指令是有效的;2)编码目的地寄存器操作 对象,对于某些向量移位以1的补码(1s complement)形式指定的;或 者3)不编码任何操作对象,该字段被保留并且应当包含某个值,例如 1111b。
P[15]类似于第一前缀601(A)和第二前缀611(B)的W,并且可以作为 操作码扩展比特或操作对象大小提升。
P[18:16]指定操作掩码(写入掩码)寄存器(例如,写入掩码/谓词寄 存器515)中的寄存器的索引。在本发明的一个实施例中,特定值aaa= 000具有特殊行为,暗示着没有操作掩码被用于特定指令(这可按多种方 式来实现,包括使用硬连线到全部一的操作掩码或者绕过掩蔽硬件的硬 件)。当合并时,向量掩码允许了目的地中的任何元素集合被保护以免于 在(由基本操作和增强操作指定的)任何操作的执行期间的更新;在其他 的一个实施例中,保留目的地的相应的掩码比特具有0的每个元素的旧值。 与之不同,归零向量掩码允许了目的地中的任何元素集合在(由基本操作 和增强操作指定的)任何操作的执行期间被归零;在一个实施例中,目的 地的元素在相应的掩码比特具有0值时被设置到0。这个功能的子集是控 制被执行的操作的向量长度(即,被修改的元素的跨度,从第一个到最后 一个)的能力;然而,被修改的元素不是必须要连续。从而,操作掩码字 段允许了部分向量操作,包括加载、存储、算术、逻辑,等等。虽然描述 了其中操作掩码字段的内容选择若干个操作掩码寄存器中包含要使用的操 作掩码的那一个(从而操作掩码字段的内容间接识别要执行的该掩蔽)的 本发明实施例,但替代实施例作为替代或附加允许掩码写入字段的内容直 接指定要执行的掩蔽。
P[19]可以与P[14:11]相组合,来以非破坏性源语法编码第二源向量寄 存器,该语法可以使用P[19]来访问高16个向量寄存器。P[20]编码多种功 能,这些功能在不同类别的指令中有所不同,并且可影响向量长度/舍入控 制指定符字段(P[22:21])的含义。P[23]指示出对合并-写入掩蔽的支持 (例如,当被设置为0时)或者对归零和合并-写入掩蔽的支持(例如,当 被设置为1时)。
在下面的表格中详述了在使用第三前缀601(C)的指令中对寄存器的编 码的示范性实施例。
表格1:64比特模式中的32寄存器支持
[2:0] | 寄存器类型 | 通常用途 | |
寄存器 | ModR/M reg | GPR,向量 | 目的地或源 |
VVVV | vvvv | GPR,向量 | 第2源或目的地 |
RM | ModR/M R/M | GPR,向量 | 第1源或目的地 |
基址 | ModR/M R/M | GPR | 存储器寻址 |
索引 | SIB.索引 | GPR | 存储器寻址 |
VIDX | SIB.索引 | 向量 | VSIB存储器寻址 |
表格2:32比特模式中的编码寄存器指定符
[2:0] | 寄存器类型 | 通常用途 | |
寄存器 | ModR/M reg | k0-k7 | 源 |
VVVV | vvvv | k0-k7 | 第2源 |
RM | ModR/M R/M | k0-7 | 第1源 |
{k1] | aaa | k0<sup>1</sup>-k7 | 操作掩码 |
表格3:操作掩码寄存器指定符编码
程序代码可被应用到输入指令以执行本文描述的功能并且生成输出信 息。输出信息可按已知的方式被应用到一个或多个输出设备。对于本申请 而言,处理系统包括任何具有处理器的系统,例如数字信号处理器 (digital signal processor,DSP)、微控制器、专用集成电路(application specific integrated circuit,ASIC)、或者微处理器。
可以用高级别过程式或面向对象的编程语言来实现程序代码以与处理 系统进行通信。如果希望,也可以用汇编或机器语言来实现程序代码。实 际上,本文描述的机制在范围上不限于任何特定的编程语言。在任何情况 下,该语言可以是经编译或者经解译的语言。
可以用硬件、软件、固件或者这种实现方案的组合来实现本文公开的 机制的实施例。本发明的实施例可被实现为在包括至少一个处理器、存储 系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备、 以及至少一个输出设备的可编程系统上执行的计算机程序或程序代码。
至少一个实施例的一个或多个方面可由被存储在机器可读介质上的表 示处理器内的各种逻辑的代表性指令来实现,这些代表性指令当被机器读 取时使得该机器制作逻辑来执行本文描述的技术。这种被称为“IP核心” 的表现形式可被存储在有形机器可读介质上并且被提供到各种客户或制造 设施以加载到实际制作该逻辑或处理器的制作机器中。
这种机器可读存储介质可包括但不限于由机器或设备制造或形成的物 品的非暂态有形布置,包括诸如以下项之类的存储介质:硬盘,任何其他 类型的盘(包括软盘、光盘、致密盘只读存储器(compact disk read-only memory,CD-ROM)、可改写致密盘(compactdisk rewritable,CD-RW)、 以及磁光盘),半导体设备(诸如,只读存储器(read-onlymemory, ROM),诸如动态随机访问存储器(dynamic random access memory, DRAM)、静态随机访问存储器(static random access memory,SRAM) 之类的随机访问存储器(randomaccess memory,RAM),可擦除可编程 只读存储器(erasable programmable read-onlymemory,EPROM),闪速 存储器,电可擦除可编程只读存储器(electrically erasableprogrammable read-only memory,EEPROM),相变存储器(phase change memory,PCM)),磁卡或光卡,或者适合用于存储电子指令的任何其他类型的介 质。
因此,本发明的实施例还包括非暂态有形机器可读介质,其包含指令 或者包含定义本文描述的结构、电路、装置、处理器和/或系统特征的设计 数据,例如硬件描述语言(Hardware Description Language,HDL)。这种 实施例也可被称为程序产品。
仿真(包括二进制转化、代码变形等等)
在一些情况下,指令转换器可被用于将指令从源指令集转换到目标指 令集。例如,指令转换器可将指令转化(例如,利用静态二进制转化、包 括动态编译的动态二进制转化)、变形、仿真或者以其他方式转换到要被 核心处理的一个或多个其他指令。可以用软件、硬件、固件或者其组合来 实现指令转换器。指令转换器可以在处理器上、在处理器外、或者一部分 在处理器上一部分在处理器外。
图12是根据本发明的实施例与使用软件指令转换器来将源指令集中 的二进制指令转换成目标指令集中的二进制指令相对比的框图。在图示的 实施例中,指令转换器是软件指令转换器,虽然可替代地,可以用软件、 固件、硬件或者其各种组合来实现指令转换器。图12示出了高级别语言 1202的程序可被利用第一ISA编译器1204来编译以生成第一ISA二进制 代码1206,第一ISA二进制代码1206可由具有至少一个第一指令集核心 的处理器1216原生执行。具有至少一个第一ISA指令集核心的处理器 1216表示任何这样的处理器:这种处理器可通过兼容地执行或以其他方式 处理(1)第一ISA指令集核心的指令集的实质部分或者(2)目标为在具 有至少一个第一ISA指令集核心的英特尔处理器上运行的应用或其他软件 的目标代码版本,来执行与具有至少一个第一ISA指令集核心的处理器基本上相同的功能,以便实现与具有至少一个第一ISA指令集核心 的处理器基本上相同的结果。第一ISA编译器1204表示可操作来生成第 一ISA二进制代码1206(例如,目标代码)的编译器,第一ISA二进制代 码1206可在有或没有额外的链接处理的情况下被在具有至少一个第一ISA 指令集核心的处理器1216上执行。
类似地,图12示出了高级别语言1202的程序可被利用替代的指令集 编译器1208来编译以生成替代的指令集二进制代码1210,替代的指令集 二进制代码1210可由没有第一ISA指令集核心的处理器1214原生地执行。 指令转换器1212用于将第一ISA二进制代码1206转换成可由没有第一 ISA指令集核心的处理器1214原生地执行的代码。这个转换后的代码不太 可能与替代的指令集二进制代码1210相同,因为能够做到这一点的指令 转换器是难以制作的;然而,转换后的代码将实现一般操作并且由来自替 代的指令集的指令构成。从而,指令转换器1212表示通过仿真、模拟或 任何其他过程允许不具有第一ISA指令集处理器或核心的处理器或其他电 子设备执行第一ISA二进制代码1206的软件、固件、硬件或者其组合。
示范性瓦片/矩阵操作和硬件
图13A图示了配置的瓦片的实施例。如图所示,有四个瓦片1304、 1306、1308和1310被从应用存储器1302加载。在这个示例中,瓦片T0 1304和T1 1306具有K行和N列,有4元素字节(4B)(例如,单精度 数据)。瓦片T2 1308和T3 1310具有M行和N/2列,有8元素字节(8B) (例如,双精度数据)。由于双精度操作对象是单精度的宽度的两倍,所 以此配置符合用于提供瓦片选项的调色板,其提供至少4个名称,总存储 为16*N*M字节。取决于所使用的指令编码方案,可用的瓦片的数目有所 变化。
在一些实施例中,瓦片参数是可定义的。例如,“调色板”(palette) 被用来提供瓦片选项。示范性选项包括但不限于:瓦片名称的数目、一行 存储中的字节的数目、瓦片中的行和列的数目,等等。例如,瓦片的最大 “高度”(行数目)可被定义为:瓦片最大行=体系结构存储/(调色板名 称的数目*每行的字节的数目)。
这样,应用可被编写成使得对名称的固定使用将能够在各实现方式间 利用不同的存储大小。
瓦片的配置是利用瓦片配置(“TILECONFIG”)指令完成的,其中 特定的瓦片使用是在选定的调色板中定义的。这个声明包括要使用的瓦片 名称的数目、所请求的每名称(瓦片)的行和列的数目、以及在一些实施 例中还有所请求的每个瓦片的数据类型。在一些实施例中,在 TILECONFIG指令的执行期间执行一致性检查以确定其匹配调色板条目的 限制。
图13B图示了矩阵存储的若干个示例。在(A)中,瓦片被存储在存 储器中。如图所示,每“行”由四个紧缩数据元素构成。为了到达下一 “行”,使用步幅值。注意行可被连续存储在存储器中。跨步的存储器访 问允许在瓦片存储不映射底层存储器阵列行宽度时,访问一行,然后访问 下一行。
从存储器的瓦片加载和到存储器的瓦片存储通常是从应用存储器到紧 缩数据行的跨步访问。示范性瓦片加载(TILELOAD)和瓦片存储 (TILESTORE)指令或者作为加载操作指令中的TILE操作对象对应用存 储器的其他指令引用在一些实施例中是可重启的,以处理(多达)2*行的 页出错、未掩蔽的浮点异常、和/或每指令中断。
在(B)中,矩阵被存储在由多个寄存器(REG)组成的瓦片中,例 如紧缩数据寄存器(单指令、多数据(SIMD)或向量寄存器)。在这个 示例中,瓦片被覆盖在三个物理寄存器上。通常,使用连续的寄存器,然 而,不是必需要这样。
在(C)中,矩阵被存储在对于瓦片操作中使用的融合多重累加 (fused multipleaccumulate,FMA)电路而言可访问的非寄存器存储中的 瓦片中。这个存储可在FMA内部,或者与FMA相邻。此外,在下文论述 的一些实施例中,存储可以是针对数据元素的,而不是针对整个行或瓦片 的。
经由CPUID来报告对于TMMA体系结构的支持参数。在一些实施例 中,信息的列表包括最大高度和最大SIMD维度。配置TMMA体系结构 要求指定每个瓦片的维度、每个瓦片的元素大小和调色板标识符。这个配 置是通过执行TILECONFIG指令来完成的。
TILECONFIG指令的成功执行使能了后续TILE操作对象。瓦片清除 全部(TILERELEASEALL)指令清除瓦片配置并且禁止TILE操作(直到 下一个TILECONFIG指令执行为止)。在一些实施例中,XSAVE、 XSTORE等等被用于使用瓦片的情境切换中。在一些实施例中,2XCRO 比特被用于XSAVE中,一个用于TILECONFIF元数据,并且一个比特对 应于实际瓦片有效载荷数据。
TILECONFIG不仅配置瓦片使用,而且还设置指示出程序处于配置了 瓦片的代码区域中的状态变量。实现方式可列举对可用于瓦片区域的其他 指令的限制,例如不使用现有寄存器集合,等等。
退出瓦片区域通常是利用TILERELEASEALL指令来完成的。它不取 任何参数并且迅速地无效所有瓦片(表明数据不再需要任何保存或恢复) 并且清除与在瓦片区域中相对应的内部状态。
在一些实施例中,瓦片操作将使得超出瓦片配置所指定的维度之外的 任何行和任何列归零。例如,瓦片操作将在每行被写入时使得超出列的配 置数目(将元素的大小考虑在内)的数据归零。例如,对于64字节行和 配置有10行和12列的瓦片,写入FP(浮点)32元素的操作将用带有输 出/结果数据的12*4字节写入前10行的每一者并且将每一行中的剩余4*4 字节归零。瓦片操作还在前10个配置的行之后将任何行完全归零。当使 用具有64字节行的1K瓦片时,将存在16行,因此在这个示例中,后6 行也将被归零。
在一些实施例中,在加载数据时,情境恢复(例如,XRSTOR)实施 如下:瓦片的超出配置的行的数据将被维持为零。如果没有有效配置,则 所有行被归零。对瓦片数据的XRSTOR可向超出所配置列的那些列中加载 垃圾。XRSTOR应当不可能在超出配置的那些数目的列以外进行清除,因 为没有与瓦片配置相关联的元素宽度。
情境保存(例如,XSAVE)在将TILE存储区域写入到存储器时暴露 整个。如果XRSTOR将垃圾数据加载到了瓦片的最右部分中,则该数据将 被XSAVE保存。XSAVE将对超出为每个瓦片指定的数目的那些行写入零。
在一些实施例中,瓦片指令是可重启的。访问存储器的操作允许页出 错之后的重启。应对浮点运算的计算指令也允许未掩蔽的浮点异常,其中 对异常的掩蔽由控制和/或状态寄存器来控制。
为了支持在这些事件之后重启指令,指令在启动寄存器中存储信息, 这在下文详述。
图14图示了利用矩阵(瓦片)操作加速器的系统的实施例。在这个 图示中,主机处理器/处理系统1401向矩阵操作加速器1407传达命令 1411(例如,矩阵操纵操作,比如算术或矩阵操纵操作,或者加载和存储 操作)。然而,这样示出只是为了论述。如后文详述的,这个加速器1407 可以是处理核心的一部分。通常,作为瓦片操纵操作子指令的命令1411 将把瓦片称呼为寄存器-寄存器(“reg-reg”)或寄存器-存储器(“reg- mem”)格式。诸如TILESTORE、TILELOAD、TILECONFIG等等之类 的其他命令不在瓦片上执行数据操作。命令可以是解码的指令(例如,微 操作)或者宏指令来供加速器1407处理。
在这个示例中,一致存储器接口1403耦合到主机处理器/处理系统 1401和矩阵操作加速器1407,从而它们可共享存储器。
图15和图16示出了如何利用矩阵操作加速器来共享存储器的不同实 施例。如图15所示,主机处理器1501和矩阵操作加速器电路1505共享相 同的存储器1503。图16图示了一实施例,其中主机处理器1601和矩阵操 作加速器1605不共享存储器,但可访问彼此的存储器。例如,处理器 1601可访问瓦片存储器1607并且像通常那样利用其主机存储器1603。类 似地,矩阵操作加速器1605可访问主机存储器1603,但更通常使用其自 己的存储器1607。注意这些存储器可以是不同类型的。
矩阵操作加速器1407包括与数据缓冲器1405耦合的多个FMA 1409 (在一些实现方式中,这些缓冲器1405中的一个或多个被存储在如图所 示的网格的FMA中)。数据缓冲器1405缓冲从存储器加载的瓦片和/或要 被存储到存储器的瓦片(例如,利用TILESTORE或TILELOAD指令)。 数据缓冲器可例如是多个寄存器。通常,这些FMA被布置为链式FMA 1409的网格,它们能够读取和写入瓦片。在这个示例中,矩阵操作加速器 1407将利用瓦片T0、T1和T2执行矩阵乘法操作。瓦片中的至少一者被 容纳在FMA网格1409中。在一些实施例中,操作中的所有瓦片被存储在FMA网格1409中。在其他实施例中,只有子集被存储在FMA网格1409 中。如图所示,T1被容纳,而T0和T2没有。注意A、B和C指的是这些 瓦片的矩阵,这些矩阵可能占据或者没有占据瓦片的整个空间。
图17是根据一些实施例图示出用于执行(一个或多个)可变格式矩 阵乘法指令1703的处理组件的框图。如图所示,存储装置1701存储要被 执行的(一个或多个)指令1703。如下文进一步描述的,在一些实施例中, 计算系统1700是单指令、多数据(SIMD)处理器,以基于单个指令并发 地处理多个数据元素。
在操作中,指令1703将被取得电路1705从存储装置1701取得。取得 的指令1707将被解码电路1709解码。本文进一步图示和描述的指令格式 具有指定操作码以及目的地、乘数、被乘数和被加数复向量的字段(此处 未示出)。解码电路1709将取得的指令1707解码成一个或多个操作。在 一些实施例中,这个解码包括生成要被执行电路(例如执行电路1719)联 合路由电路1718执行的多个微操作。解码电路1709还对指令后缀和前缀 (如果使用的话)解码。执行电路1719与路由电路1717联合操作来执行 经解码的指令。
在一些实施例中,寄存器重命名、寄存器分配和/或调度电路1713提 供用于以下各项中的一项或多项的功能:1)将逻辑操作对象值重命名为 物理操作对象值(例如,一些实施例中的寄存器别名表),2)向解码的 指令分配状态比特和标志,以及3)调度经解码的VFVSMM指令1711以 在指令池之外在执行电路1719上执行(例如,在一些实施例中使用预留站)。
寄存器(寄存器文件)和/或存储器1715存储数据作为要被执行电路 1719进行操作的经解码的VFVSMM指令1711的操作对象。示范性寄存 器类型包括写入掩码寄存器、紧缩数据寄存器、通用寄存器、以及浮点寄 存器,如本文进一步描述。在一些实施例中,写回电路1720提交对经解 码的指令1711的执行的结果。
图18是处理阵列1810的方框图,用于执行矩阵乘法指令(或指令序 列),以执行并行乘法累加操作,来将第一矩阵1802(具有M×K元素的 矩阵A)乘以第二矩阵1804(具有K×N元素的矩阵B),以生成输出矩 阵(矩阵C)。在一个实施例中,矩阵乘法指令是可变稀疏度矩阵乘法 (VFVSMM)指令,它执行密集-密集、稀疏-密集和稀疏-稀疏矩阵乘法。 然而,本发明的底层原理不限于任何特定的矩阵类型。
在一个实施例中,处理阵列1810包括(M×N)个处理单元1814,每 个处理单元将来自第一矩阵1802的一个或多个数据元素与来自第二矩阵 1804的一个或多个数据元素相乘,并且累加所得到的乘积(例如,将乘积 和累加值相加)。在一些实施例中,处理阵列1810中的每个处理单元是 一个乘法累加电路,其一个示例被示为MAC 1814。虽然图示的MAC1814示出了单个乘法器,但每个MAC 1814可包括多个并行乘法器以执行 并行乘法。在一个实施例中,并行乘法的数目是基于输入操作对象的大小 的。例如,每个MAC单元1814可能够执行一个16比特整数乘法,两个8 比特整数乘法,或者四个4比特整数乘法,所有这些都可被累加到32比 特整数值。类似地,每个MAC单元1814可能够将一个32比特浮点值、 两个16比特浮点值(例如,FP16或Bfloat16)相乘,并且将结果累加到 32比特或64比特浮点值中。
在一些实施例中,例如,当处理8比特整数数据时,通过配置每个处 理单元来执行2×2矩阵乘法,将执行电路吞吐量变成四倍。
如本文所描述,处理单元有时被称为处理元件,有时被称为处理电路, 有时可能被称为处理节点。无论采用何种措辞,处理单元都旨在包括执行 数据路径计算和提供控制逻辑的电路。
复数矩阵处理实施例
本发明的一个实施例包括专用的瓦片矩阵乘法硬件逻辑,来执行具有 复数数据类型的矩阵乘法。例如,不同的实施例可包括专用的张量核心来 执行本文的复数矩阵乘法操作。替代地或者额外地,现有核心的执行电路 被修改为带有矩阵处理电路以执行本文描述的矩阵乘法。下面针对图22A- 22B对不同的示例实现方式进行描述。
本发明的一个实施例包括两个指令,以执行两个瓦片源(例如,下面 示例中的矩阵A和B)的复数矩阵乘法。在这个实现方式中,一个指令计 算结果的实部,另一个指令计算虚部。另一对指令在执行复数矩阵乘法之 前,首先对两个矩阵中的一个进行转置(例如,下面示例中的矩阵A)。 第一指令确定结果的实部,第二指令确定虚部。另一个指令使用一个或多 个源矩阵值执行复数矩阵共轭,并且另一个指令执行两个瓦片/矩阵源的复 数矩阵共轭和乘法。
虽然下面描述的一些实现方式包括用于确定实部的第一指令和用于确 定虚部的第二指令,但一个实施例包括单个指令计算矩阵操作的实部和虚 部两者。在一个实现方式中,单个指令的指令字段(例如,立即数)可指 示出正在执行的操作的类型(例如,实部或虚部)。在对指令进行解码时, 基于指令字段生成不同的微操作序列。
在一个实施例中,瓦片/矩阵源包含16比特浮点(FP16)实部和虚部 对格式的复数:源瓦片中的每个元素是32比特宽的复数,其中低16比特 代表FP16格式的实部,并且高16比特代表FP16格式的虚部。图19图示 了示例矩阵——矩阵A——具有m行和k列的复数数据元素,其中每个数 据元素包括FP16实部分量1901和FP16虚部分量1902。
在一个实施例中,结果矩阵C可包括32比特实部值(矩阵CR)或32 比特虚部值(矩阵CI),这取决于正在执行的指令。在其他实施例中,实 部值和虚部值可被组合为单个结果矩阵(矩阵C)。
虽然本文描述了某些特定的数据元素大小,但应当注意,可以为源/结 果实部值和虚部值使用各种其他数据类型来实现本发明的底层原理,包括 但不限于8比特整数、16比特整数、32比特整数、Bfloat16、TensorFloat (TF)-32、32比特浮点、以及64比特浮点(FP),仅举几例。
A.用于复数矩阵乘法的装置和方法
矩阵乘法指令的一个实施例将16FP*16FP乘积累加到FP32值中。然 而,可以使用其他的累加值,包括上面列出的任何数据类型以及更大的数 据类型(例如,128比特,256比特,等等)。
图20A-20C图示了不同的体系结构,其中可实现本文描述的实施例。 在图20A中,每个核心2001a内的矩阵解码电路2090对矩阵乘法指令进 行解码,并且矩阵执行电路2091执行矩阵乘法指令(例如,如下面针对 图21的更详细描述)。在这个实施例中,矩阵处理电路2090-2091是与每 个核心2001a的管线一体的。或者,在图20B中,矩阵处理加速器2095与多个核心2001a-d在同一芯片上并且被它们共享。在图20C中,矩阵处 理加速器2096与核心2001a-b在不同的芯片上(但可能在同一封装中)。 在每个实现方式中,本发明的底层原理都是按本文描述的方式动作。
首先转到图20A,图示的体系结构包括核心区域2001和共享的或者 说“非核心”区域2010。共享区域2010包括被核心2001a-b的全部或子 集所共享的数据结构和电路。在图示的实施例中,多个核心2001a-b是能 够并发地执行多个指令流或线程的同时多线程核心。虽然在图20A中为了 简单只图示了两个核心2001a-b,但将会明白,核心区域2001可包括任何 数目的核心,其中每一者可包括与对核心2001a所示相同的体系结构。另 一实施例包括异构核心,这些核心可具有不同的指令集体系结构和/或不同 的功率和性能特性(例如,低功率核心与高功率/性能核心相组合)。
图20A中所示的各种组件可按与上文描述的相应组件相同的方式来实 现。例如,核心2001a可使用本文描述的指令格式和寄存器体系结构之一 来执行矩阵乘法指令。此外,核心2001a可包括图3B所示的核心490的 组件,并且可包括本文描述的任何其他处理器/核心组件(例如,图2、图 4,等等)。
核心2001a-b的每一者包括用于执行指令流的同时执行的指令管线组 件,包括从系统存储器2060或L1指令缓存2010取得指令的指令取得电 路2018以及对指令解码的解码器2009。执行电路2008执行经解码的指令 以执行由指令操作对象、操作码和任何中间值指定的底层操作。
在图示的实施例中,解码器2009包括矩阵解码电路2090以将某些指 令解码成微操作(uop)供矩阵执行电路2091(在此实施例中集成在执行 电路2008内)执行。虽然在图20A中被图示为分开的块,但矩阵解码电 路2090和矩阵执行2091可分布为散布在解码器2009和执行电路2008各 处的功能电路(例如,乘法器、多路复用器,等等)。
在图20B中所示的实施例中,矩阵处理加速器2095通过缓存一致互 连2006与处理器核心2001a-b紧密耦合。此实施例的矩阵处理加速器 2095被配置作为核心的对等体,与核心参与同一组缓存一致存储器事务。 如图所示,矩阵处理加速器2095可包括它自己的寄存器集合2018a(例如, 瓦片寄存器、向量寄存器、掩码寄存器,等等),以执行本文描述的操作。 在此实施例中,解码器2009对要被矩阵处理加速器900执行的指令解码 并且所得到的微操作被通过互连2006传递到矩阵处理加速器2095以便执 行。在另一实施例中,矩阵处理加速器2095包括其自己的取得和解码电 路来分别从系统存储器2060的特定区域取得指令并解码指令。在任一实 现方式中,在执行指令之后,矩阵加速器900可将结果存储到系统存储器 2460中的区域(该区域可被核心2001a-b访问)。
图20C图示了另一实施例,其中矩阵处理加速器2096与核心2001a-b 在不同芯片上,但通过缓存一致接口2096耦合到核心。在一个实施例中, 缓存一致接口2096使用基于封包的事务来确保由矩阵处理加速器2096访 问/缓存的数据与核心2001a-b的缓存层次体系保持一致。
图20A-20C中还图示了通用寄存器(general purpose register,GPR) 2018d、一组向量/瓦片寄存器2018b、一组掩码寄存器2018a(其可包括如 下所述的瓦片掩码寄存器)、以及一组控制寄存器2018c。在一个实施例 中,多个向量数据元素被打包到每个向量寄存器中,其中每个向量寄存器 可具有512比特宽度,用于存储两个256比特值、四个128比特值、八个 64比特值、十六个32比特值,等等。向量寄存器的群组可被组合以形成 本文描述的瓦片寄存器。或者,可以使用单独的一组2D瓦片/张量寄存器。 然而,本发明的底层原理不限于任何特定大小/类型的向量/瓦片数据。在 一个实施例中,掩码寄存器2018a包括八个64比特操作对象掩码寄存器, 用于对存储在向量寄存器2006中的值执行比特掩蔽操作(例如,实现为 上文描述的掩码寄存器k0-k7)。然而,本发明的底层原理不限于任何特定掩码寄存器大小/类型。
控制寄存器2018c存储各种类型的控制比特或“标志”,它们被执行 指令用来确定处理器核心2001a的当前状态。作为示例,而非限制,在 x86体系结构中,控制寄存器包括EFLAGS寄存器。
诸如片上互连(in-die interconnect,IDI)之类的互连2006或者实现 IDI/一致性协议的存储器架构将核心2001a-b(以及可能矩阵加速器2095) 通信地耦合到彼此并且耦合到各种组件。例如,互连2006经由接口2007 将核心2001a耦合到第3级(L3)缓存2020和集成存储器控制器2030。 此外,在一些实施例中,互连2006可用于将核心2001a-b耦合到矩阵处理 加速器2095。
集成存储器控制器2030提供对系统存储器2060的访问。诸如快速 PCI电路之类的一个或多个输入/输出(I/O)电路(未示出)也可被包括在 共享区域2010中。
指令指针寄存器2012存储识别要取得、解码和执行的下一指令的指 令指针地址。可以从系统存储器2060和/或诸如L2缓存2013、共享L3缓 存2020或者L1指令缓存2010之类的一个或多个共享缓存级别取得或预 取得指令。此外,L1数据缓存2002存储从系统存储器2060加载和/或从 既缓存指令也缓存数据的其他缓存级别2013、2020之一取回的数据。指令TLB(ITLB)2011为由取得电路2018取得的指令存储虚拟地址到物理 地址转化,并且数据TLB(DTLB)2003为被解码电路2009和执行电路 2008处理的数据存储虚拟到物理地址转化。
分支预测单元2021推测性地预测指令分支地址和用于存储分支地址 和目标地址的分支目标缓冲器(branch target buffer,BTB)2022。在一个 实施例中,分支历史表格(未示出)或其他数据结构被维护并且对于每个 分支预测/误预测被进行更新,并且被分支预测单元2002用于做出后续分 支预测。
注意图20A-20C并不打算提供示例处理器内采用的所有电路和互连的 详尽视图。更确切地说,与本发明的实施例不相关的各种组件未被示出。 相反,一些组件只是为了提供可用来实现本发明的实施例的示例体系结构 而示出的,而并不一定是遵守本发明的底层原理所必需的。
在一实施例中,执行第一指令以确定复数的实部(real)分量,并且 执行第二指令以确定虚部(image)分量,第一指令执行操作:real(C)+= real(A)*real(B)–imag(A)*imag(B),对于源矩阵A和B和目的地矩阵CR。 此外,第二指令执行操作:imag(C)+=real(A)*imag(B)+imag(A)*real(B), 对于源矩阵A和B和目的地矩阵CI。
下面提供了示例伪代码,示出了一个实施例确定实部分量和虚部分量 的细节。
用于确定实部分量的示例伪代码:
在上述伪代码中指定的实施例中,来自指定行的实部和虚部数据元素 被相乘以生成乘积(即,第一伪代码序列中的实部乘积和第二伪代码序列 中的虚部乘积)。然后,这些乘积被累加起来以生成存储在实部结果矩阵 CR和虚部结果矩阵CI中的实部分量和虚部分量。或者,可生成单个结果 矩阵C来存储实部分量和虚部分量两者。在伪代码中,对于第一源矩阵遍 历行[m],其中每个选定的值被乘以来自第二源矩阵的行[k]的值。然而, 要注意,这种识别相应元素进行相乘的方式对于遵守本发明的底层原理不 是必需的。
如图21中所示,矩阵执行电路2091的一个实施例包括并行乘法电路 2110(例如,多个并行乘法器)和加法器电路2020,以使用来自源矩阵A 2101和源矩阵B 2102的复数数据元素执行并行乘法和加法/减法,以生成 实部结果矩阵CR 2103A和虚部结果矩阵CI2103B的复数数据元素。为了 图示,只示出了来自矩阵A 2101和矩阵B 2102的复数数据元素的一小部 分。然而,应当注意,在这些复数数据元素上执行的操作可以在来自各个 矩阵的其他复数数据元素上并行执行。此外,虽然没有图示,但可以用实 部分量和虚部分量两者生成单个结果矩阵C(例如,具有32比特或64比 特复数数据元素)。
图示的操作涉及到包括实部分量A1R和虚部分量A1I的复数数据元素 A1和包括实部分量B1R和虚部分量B1I的复数数据元素B1。第一乘法器 2111将A1的实部分量和B1的实部分量相乘(即,A1R*B1R),而第二乘 法器2112将A1的虚部分量和B1的虚部分量相乘(即,A1I*B1I),以分 别生成第一实部乘积A1R*B1R和第二实部乘积A1I*B1I。类似地,第三乘 法器2113将A1的实部分量和B1的虚部分量相乘(即,A1R*B1I),而第 四乘法器2114将A1的虚部分量和B1的实部分量相乘(即,A1I*B1R), 以分别生成第一虚部乘积A1R*B1I和第二虚部乘积A1I*B1R。
加法器电路2120的第一加法/减法单元2151从第一实部乘积A1R*B1R中减去第二实部乘积A1I*B1I,以生成实部结果值C1R=A1R*B1R-A1I* B1I。类似地,加法器电路2120的第二加法/减法单元2152将第一虚部乘 积A1R*B1I和第二虚部乘积A1I*B1R相加,以生成虚部结果值C1I=A1I *B1R+A1R*B1I。然后,实部分量和虚部分量可被组合,以形成结果矩 阵即矩阵C 2103中的复数值C1。
总之,执行电路执行操作C1R=A1R*B1R-A1I*B1I和C1I=A1R* B1I+A1I*B1R以生成实部分量和复数分量,它们分别被存储在结果矩阵 CR 2103A和CI 2103B中。在一个实施例中,执行第一指令以生成实部分 量,并且执行第二指令以生成虚部分量。在这个实施例中,第一指令和第 二指令都包括第一源操作对象字段和第二源操作对象字段,以识别矩阵A 和B中的复数源值的个体实部分量和虚部分量(例如,第一结果数据元素 的A1R、B1R、A1I和B1I),并且包括目的地操作对象字段,以分别指示 出所得到的实部结果矩阵CR 2103A和虚部结果矩阵CI 2103B的位置。
第一指令和第二指令可依据矩阵执行电路2091的并行处理能力,对 各种大小的矩阵并行地执行所描述的操作。例如,可以使用并行乘法电路 2110的额外乘法器和加法器网络2120内的额外加法器来并行执行与以上 所述相同的一组操作,以生成矩阵C中的所有复数值(或者其指定子集), 得到了矩阵A和矩阵B的乘法。
在替代实现方式中,实部和虚部结果值都可响应于单个复数矩阵乘法 指令而生成(例如,响应于单个指令执行图21所示操作)。在这个实施 例中,解码器响应于单个指令生成两组微操作——一组用于确定实部值, 一组用于确定虚部值。
如前所述,在一个实施例中,每个实部分量和虚部分量被编码为16 比特浮点值(FP16,Bfloat16,等等)。然而,也可使用各种其他数据格 式(例如,8比特整数、16比特整数、32比特整数、TensorFloat(TF)- 32、32比特浮点、以及64比特浮点(FP))。
图22A中图示了根据一个实施例生成目的地矩阵的实部值的方法。该 方法可利用上文描述的各种体系结构来实现,但不限于任何特定的体系结 构。
在2201,取得第一复数矩阵乘法指令,该指令包括第一源操作对象、 第二源操作对象以及第一目的地操作对象,第一源操作对象用于识别具有 实部值和虚部值的第一源矩阵,第二源操作对象用于识别具有实部值和虚 部值的第二源矩阵,以及第一目的地操作对象用于识别具有实部值和虚部 值的结果矩阵。
在2202,对第一复数矩阵乘法指令进行解码。在一些实施例中,对指 令解码包括识别第一源矩阵和第二源矩阵的位置,并且生成将由执行电路 执行的微操作的序列。
在2203,执行经解码的第一复数矩阵乘法指令,以将第一源矩阵中的 实部值乘以第二源矩阵中的相应实部值,并且将第一源矩阵中的虚部值乘 以第二源矩阵中的相应虚部值,以生成成对的实部乘积,其中每一对包括 实部-实部乘法中的一个和虚部-虚部乘法中的相应一个。在一个实施例中, 然后确定每对实部乘积之间的差值,以生成结果矩阵中的相应实部值。在 一个实施例中,在一对实部乘积内,通过将两个虚部值相乘计算出的每个 乘积被从通过将两个实部值相乘计算出的每个乘积中减去。
图22B中图示了根据一个实施例生成目的地矩阵的虚部值的方法。如 图所示,图22A-22B中的方法可以被(或不被)并行执行。这些方法可利 用上文描述的各种体系结构来实现,但不限于任何特定的体系结构。
在2211,取得第二复数矩阵乘法指令,该指令包括第三源操作对象、 第四源操作对象以及第二目的地操作对象,第三源操作对象用于识别具有 实部值和虚部值的第一源矩阵,第四源操作对象用于识别具有实部值和虚 部值的第二源矩阵,以及第二目的地操作对象用于识别具有实部值和虚部 值的结果矩阵。
在2212,对第二复数矩阵乘法指令进行解码。在一些实施例中,对指 令解码包括识别第一源矩阵和第二源矩阵的位置,并且生成将由执行电路 执行的微操作的序列。
在2213,执行经解码的第二复数矩阵乘法指令,以将第一源矩阵中的 实部值乘以第二源矩阵中的相应虚部值,并且将第一源矩阵中的虚部值乘 以第二源矩阵中的相应实部值,以生成成对的虚部乘积。在一个实施例中, 然后将成对的虚部乘积相加,以生成结果矩阵中的相应虚部值。
虽然在图22A-22B中没有示出,但在一个实施例中,由图22A中的第 一复数矩阵乘法指令产生的实部分量可与由图22B中的第二复数矩阵乘法 指令产生的虚部分量相组合,以产生复数结果矩阵C。或者,实部值和虚 部值可分别被存储在单独的结果矩阵CR 2103A和CI 2103B中。
B.用于复数矩阵转置和乘法的装置和方法
本发明的一个实施例包括两个指令,用于对两个瓦片源执行复数矩阵 转置和乘法。第一指令计算结果的实部,第二指令计算虚部。替代地,或 者额外地,单个指令可同时确定实部和虚部,并且/或者可基于指令的立即 数(或其他指令控制字段)来确定实部或虚部。
与上述实施例中一样,瓦片源可包含采取FP16实部和虚部对的格式 的复数。源瓦片中的每个元素是32比特宽的复数,其中低16比特代表 FP16格式的实部,并且高16比特代表FP16格式的虚部。结果可被累加成 FP32实部值或虚部值(取决于指令)。
在一个实施例中,用于计算实部的第一指令执行计算:real(C)+= real(AT)*real(B)–imag(AT)*imag(B),其中A代表矩阵A,B代表矩阵 B,并且AT是矩阵A的转置版本。在一个实施例中,实部结果矩阵CR包 括32比特实部值。
在一个实施例中,第二指令用于基于以下计算来计算虚部结果矩阵CI:imag(C)+=real(AT)*imag(B)+imag(AT)*real(B),其中A代表矩阵A,B 代表矩阵B,并且AT是矩阵A的转置版本。在一个实施例中,虚部结果 矩阵CI包括32比特虚部值。
在替代实施例中,由第一指令产生的实部值和由第二指令产生的虚部 值被存储在单个复数矩阵C中,其包括实部分量和虚部分量两者。例如, 64比特数据元素可同时存储32比特的实部分量和虚部分量两者。
如图23中所示,矩阵执行电路2091的一个实施例包括并行乘法电路 2310(例如,多个并行乘法器)和加法器电路2020,以使用来自源矩阵A 2301和源矩阵B 2302的复数数据元素执行并行乘法和加法/减法,以分别 生成结果矩阵CR 2303A的实部数据元素和CI2303B的虚部数据元素。为 了图示,只示出了来自矩阵A 2301和矩阵B 2302的复数数据元素的一小 部分。然而,应当注意,在这些复数数据元素上执行的操作可以在来自各 个矩阵的其他复数数据元素上并行执行。
在图示的实现方式中,转置硬件逻辑2315对矩阵A执行矩阵转置操 作,以生成转置的矩阵AT。例如,转置硬件逻辑2315可切换矩阵A的行 和列索引,以产生转置的复数矩阵AT。然后,存储在转置矩阵AT中的值 被用于与矩阵B 2302的乘法累加操作。
具体地,图示的操作是在包括实部分量A1R T和虚部分量A1I T的复数 数据元素A1T和包括实部分量B1R和虚部分量B1I的复数数据元素B1上执 行的。第一乘法器2311将A1T的实部分量和B1的实部分量相乘(即, A1R T*B1R),而第二乘法器2312将A1T的虚部分量和B1的虚部分量相 乘(即,A1I T*B1I),以分别生成第一实部乘积A1R T*B1R和第二实部乘 积A1I T*B1I。
类似地,第三乘法器2313将A1T的实部分量和B1的虚部分量相乘 (即,A1R T*B1I),而第四乘法器2314将A1T的虚部分量和B1的实部 分量相乘(即,A1I T*B1R),以分别生成第一虚部乘积A1R T*B1I和第二 虚部乘积A1I T*B1R。
加法器电路2320的第一加法/减法单元2351从第一实部乘积A1R T* B1R中减去第二实部乘积A1I T*B1I,以生成实部结果值C1R=A1R T*B1R- A1I T*B1I。在一个实施例中,C1R是矩阵CR 2302中的32比特实部值。类 似地,加法器电路2320的第二加法/减法单元2352将第一虚部乘积A1R T* B1I和第二虚部乘积A1I T*B1R相加,以生成虚部结果值C1I=A1I T*B1R+ A1R T*B1I。实部和虚部数据元素C1R和C1I可分别被存储在结果矩阵CR 2303A和CI 2303B中。
总之,执行电路执行操作C1R=A1R T*B1R-A1I T*B1I和C1I=A1R T* B1I+A1I T*B1R以分别生成矩阵C 2303中的一个复数结果值的实部分量和 复数分量。如前所述,在一个实施例中,执行第一指令以生成实部分量, 并且执行第二指令以生成虚部分量。在这个实施例中,第一指令和第二指 令都包括第一源操作对象字段和第二源操作对象字段,以识别矩阵AT和 B中的复数源值的个体实部分量和虚部分量(例如,第一结果数据元素的 A1R T、B1R、A1I T和B1I),并且包括目的地操作对象字段,以指示出所得 到的实部矩阵C1R和虚部矩阵C1I的位置。
第一指令和第二指令可依据矩阵执行电路2091的并行处理能力,对 各种大小的矩阵并行地执行所描述的操作。例如,可以使用并行乘法电路 2310的额外乘法器和加法器网络2320内的额外加法器来并行执行与以上 所述相同的一组操作,以生成所有的实部数据元素和虚部数据元素。
在一个实现方式中,第一指令根据以下伪代码操作:
在一个实施例中,(用于计算矩阵C的虚部)的第二指令执行计算: imag(C)+=real(AT)*imag(B)+imag(AT)*real(B),其中A代表矩阵A,B 代表矩阵B,并且AT是矩阵A的转置版本。
在一个实施例中,第二指令根据以下伪代码操作:
图24A中图示了根据一个实施例生成目的地矩阵的实部值的方法。该 方法可利用上文描述的各种体系结构来实现,但不限于任何特定的体系结 构。
在2401,取得第一复数矩阵转置和乘法指令,该指令包括第一源操作 对象、第二源操作对象以及第一目的地操作对象,第一源操作对象用于识 别具有实部值和虚部值的第一源矩阵,第二源操作对象用于识别具有实部 值和虚部值的第二源矩阵,以及第一目的地操作对象用于识别具有实部值 和虚部值的结果矩阵。
在2402,对第一复数矩阵转置和乘法指令进行解码。在一些实施例中, 对指令解码包括识别第一源矩阵和第二源矩阵的位置,并且生成将由执行 电路执行的微操作的序列。
在2403,执行经解码的第一复数矩阵转置和乘法指令。第一复数矩阵 (矩阵A)被转置以生成转置的复数矩阵AT。例如,矩阵A的行和列索 引可被切换以产生转置的复数源矩阵AT。
在一个实施例中,转置的复数源矩阵中的实部值与第二复数源矩阵中 的相应实部值相乘,并且转置的复数源矩阵中的虚部值与第二复数源矩阵 中的相应虚部值相乘,以生成成对的实部乘积,每一对包括实部-实部乘法 中的一个和虚部-虚部乘法中的相应一个。在一个实施例中,然后确定每对 实部乘积之间的差值,以生成结果矩阵中的相应实部值(例如,矩阵 C1R)。在一个实施例中,包括两个虚部值的乘法的每个乘积被从包括两 个相应实部值的乘法的乘积中减去。
图24B中图示了根据一个实施例生成目的地矩阵的虚部值的方法。如 图所示,图24A-24B中的方法可以被(或不被)并行执行。这些方法可利 用上文描述的各种体系结构来实现,但不限于任何特定的体系结构。
在2411,取得第二复数矩阵转置和乘法指令,该指令包括第三源操作 对象、第四源操作对象以及第二目的地操作对象,第三源操作对象用于识 别具有实部值和虚部值的第一复数源矩阵,第四源操作对象用于识别具有 实部值和虚部值的第二复数源矩阵,以及第二目的地操作对象用于识别复 数结果矩阵。
在2412,对第二复数矩阵转置和乘法指令进行解码。在一些实施例中, 对指令解码包括识别第一源矩阵和第二源矩阵的位置,并且生成将由执行 电路执行的微操作的序列。
在2413,执行经解码的第二复数矩阵转置和乘法指令。如果转置的复 数源矩阵AT尚未被生成,则第一复数源矩阵A被转置以产生转置的复数 源矩阵AT。转置的复数源矩阵中的实部值与第二源矩阵中的相应虚部值相 乘,并且转置的复数源矩阵中的虚部值与第二源矩阵中的相应实部值相乘, 以生成成对的虚部乘积。在一个实施例中,然后将成对的虚部乘积相加, 以生成结果矩阵中的相应虚部值(例如,矩阵C1I)。
虽然在图24A-24B中没有示出,但在一个实施例中,由图24A中的第 一复数矩阵乘法指令产生的实部分量可被存储在实部结果矩阵C1R中,并 且由图24B中的第二复数矩阵乘法指令产生的虚部分量可被存储在虚部结 果矩阵C1I中。
C.用于复数矩阵共轭转置的装置和方法
本发明的一个实施例包括执行复数矩阵共轭转置的指令。复数值的复 数共轭是通过颠倒虚部分量的符号来确定的。从而,例如,复数值a+ib 的复数共轭是a-ib。复数矩阵共轭对源矩阵中的每个复数数据元素执行这 个操作。然后将所得到的共轭源矩阵转置,以生成结果数据元素。
在一个实施例中,源矩阵包含采取FP16实部和虚部对的格式的复数。 源瓦片/矩阵中的每个元素是32比特宽的复数,其中低16比特代表FP16 格式的实部,并且高16比特代表FP16格式的虚部。
图25图示了一个实施例,包括共轭转置硬件逻辑2513,用于使用矩 阵A 2101作为复数源矩阵来执行复数矩阵共轭转置指令。复数源矩阵 2101包括复数数据元素A1、A2、A3、A4等等,分别包括实部分量A1R、 A2R、A3R、A4R,以及虚部分量A1I、A2I、A3I、A4I等等。复数矩阵共轭 硬件逻辑2510响应于复数共轭转置指令,让每个实部分量A1R、A2R、 A3R、A4R等等通过,并且包括多个反转器2521-2522(例如,非门),以 分别反转矩阵A 2701的每个虚部值A1I、A2I、A3I、A4I等等的符号比特 2511-2513,以生成虚部值-A1I、-A2I、-A3I、-A4I等等。然后,矩阵转置 硬件逻辑2315对符号反转的虚部值-A1I、-A2I、-A3I、-A4I等等和实部值 A1R、A2R、A3R、A4R等等共轭矩阵进行转置,以生成结果矩阵C 2103, 它是源矩阵A 2101的共轭转置。
在图26中图示了根据本发明的一个实施例的方法。该方法可被实现 在上文描述的体系结构上,但不限于任何特定的处理器或系统体系结构。
在2601,取得复数共轭转置指令。复数共轭转置指令的源操作对象识 别复数源矩阵(例如,识别存储复数数据元素的寄存器或其他存储位置的 集合),并且目的地操作对象识别复数结果矩阵(例如,用于存储复数结 果数据元素的寄存器或其他存储位置的集合)。复数源矩阵和复数结果矩 阵都包括多个复数矩阵数据元素,其中每个数据元素包括实部分量和虚部 分量。
在2602,复数共轭转置指令被解码。在一些实施例中,对指令解码包 括识别第一源矩阵和第二源矩阵的位置,并且生成将由执行电路执行的微 操作的序列。
在2603,执行经解码的复数共轭转置指令,以确定与复数源矩阵中的 每个复数值相对应的复数共轭值。在一个实施例中,复数源矩阵中每个虚 部分量的符号被反转。然后对结果进行转置,以生成复数共轭转置结果矩 阵C。
复数共轭转置指令的一个实施例根据以下伪代码向目的地瓦片/向量寄 存器中执行复数矩阵共轭。
在以上代码中,tmp.dword[j].fp16[0]:=tsrc.row[j].dword[i].fp16[0]将复数结果矩阵中的下一个实部值设置为复数源矩阵中的相应实部值,并且 tmp.dword[j].fp16[1]:=-tsrc.row[j].dword[i].fp16[1]将复数结果矩阵中的下 一个虚部值设置为相应源矩阵中的相应虚部值的反转值。随着结果矩阵的 每一列被填充以来自源矩阵的指定行的值,矩阵转置被执行。
D.用于共轭转置和乘法的装置和方法
本发明的一个实施例包括对存储在瓦片/向量寄存器中的第一复数源矩 阵和第二复数源矩阵执行复数矩阵共轭和乘法的指令。复数矩阵共轭转置 和乘法指令的一个实现方式确定复数结果矩阵的虚部分量。复数源矩阵包 含采取FP16实部分量和虚部分量对的格式的复数。第一源矩阵和第二源 矩阵中的每个数据元素是32比特宽的复数,其中低16比特代表FP16格 式的实部分量,并且高16比特代表FP16格式的虚部分量。一个实施例将结果累加到FP32值中。
如图27所示,矩阵执行电路2091的一个实施例包括复数矩阵共轭转 置硬件逻辑2513以产生源矩阵2101的共轭转置,并行乘法电路2710(例 如,多个并行乘法器)以执行实部和虚部数据元素的并行乘法,以及加法 器电路2020以执行与乘积的加法/减法。为了图示,只示出了来自源矩阵 A 2701、源矩阵B 2702和结果矩阵C 2703的复数数据元素的一小部分。 然而,应当注意,在这些复数数据元素上执行的操作可以在各个矩阵的其 他复数数据元素上并行执行。
在图示的实现方式中,共轭转置硬件逻辑2510包括多个反转器2521- 2522(例如,非门),以分别反转矩阵A 2701的每个虚部值A1I、A2I、 A3I、A4I等等的符号比特2511-2513,以使用反转的符号比特和实部值 A1R、A2R、A3R、A4R等等生成虚部值-A1I、-A2I、-A4I等等。
转置硬件逻辑2315使用这些值执行矩阵转置操作,以生成共轭转置 矩阵2703。在一个实施例中,并行乘法器2710将共轭转置矩阵2703 的每个实部数据元素与复数矩阵B 2702的相应虚部数据元素相乘,并且将 共轭矩阵2703的每个虚部数据元素与复数矩阵B 2702的相应实部数据 元素相乘(即,)。
复数矩阵共轭转置和乘法指令的一个实施例根据以下伪代码进行操作, 以生成结果矩阵中的每个数据元素的虚部分量:
在上述代码中,s1e和s1o分别是第一源矩阵(例如,矩阵A)的复数 数据元素的实部值和虚部值,并且s2e和s2o是第二源矩阵(例如,矩阵 B)的复数数据元素的实部值和虚部值。“e”和“o”指定每个矩阵的行 或列内的偶数和奇数数据元素位置。第一复数源矩阵的每个虚部值的符号 通过s1o=cvt_fp16_to_fp32(-tsrc1.row[k].fp16[2*m+1])被反转。转置操作是 通过将源矩阵的行读取到结果矩阵的列中来执行的。如图27所示,对于 单个复数数据元素执行融合乘法-加法/累加(FMA)操作。
在本实施例中,复数共轭和转置操作的顺序与图27中所示的相反。 在本实施例中,转置硬件逻辑2315对第一复数源矩阵A 2101进行转置, 以生成转置矩阵。然后复数矩阵共轭硬件逻辑2510为转置矩阵中的复数 值确定复数共轭值,以生成共轭转置矩阵。
图28中图示了根据一个实施例的矩阵共轭转置和乘法指令的方法。 该方法可被实现在上文描述的体系结构上,但不限于任何特定的处理器或 系统体系结构。
在2801,取得矩阵共轭转置和乘法指令。矩阵共轭转置和乘法指令包 括第一源操作对象以识别第一复数源矩阵,并且包括第二源操作对象以识 别第二复数源矩阵。例如,与先前实施例中一样,第一操作对象和第二操 作对象可识别存储与操作对象相对应的值的寄存器,或者这些值的存储器/ 缓存位置。目的地操作对象识别复数结果矩阵(例如,用于存储复数结果 数据元素的寄存器或其他存储位置的集合)。第一复数源矩阵和第二复数源矩阵以及复数结果矩阵都包括多个复数矩阵数据元素,其中每个数据元 素包括实部分量和虚部分量。
在2802,对矩阵共轭转置和乘法指令进行解码。在一些实施例中,对 指令解码包括识别第一源矩阵和第二源矩阵的位置,并且生成将由执行电 路执行的微操作的序列。
在2803,执行经解码的矩阵共轭转置和乘法指令,以确定第一复数源 矩阵的共轭矩阵。在一个实施例中,第一复数源矩阵中的每个虚部分量的 符号被反转并且与共轭矩阵中的相应实部分量相组合。
然后共轭矩阵中的每个实部值被乘以第二复数源矩阵中的相应虚部值, 并且共轭矩阵中的每个虚部值(即,来自第一复数源矩阵的虚部值的反转 值)被乘以第二复数源矩阵中的相应实部值,以生成成对的虚部乘积。每 一对的虚部乘积被相加,以生成复数结果矩阵中的相应虚部值。
说明书中提及“一个实施例”、“一实施例”、“一示例实施例”等 等表明描述的实施例可包括特定的特征、结构或特性,但可能不一定每个 实施例都包括该特定特征、结构或特性。此外,这种短语不一定指的是同 一实施例。另外,当联系一实施例来描述特定的特征、结构或特性时,认 为联系其他实施例(无论是否明确描述)来实现这种特征、结构或特性, 是在本领域技术人员的知识范围内的。
示例
以下是本发明的不同实施例的示例实现方式。
示例1.一种处理器,包括:解码器,对复数共轭转置指令解码,该复 数共轭转置指令包括源操作对象以及目的地操作对象,所述源操作对象用 于识别复数源矩阵,所述目的地操作对象用于识别复数结果矩阵,所述复 数源矩阵存储第一多个复数值,并且所述复数结果矩阵存储第二多个复数 值,所述第一多个复数值和第二多个复数值中的每个复数值包括实部分量 和虚部分量;多个寄存器或本地存储器,存储所述第一多个复数值的全部或子集;以及与所述多个寄存器或本地存储器耦合的执行电路,执行所述 复数共轭转置指令,所述执行电路包括矩阵共轭硬件逻辑以及转置硬件逻 辑,所述矩阵共轭硬件逻辑用于确定与所述第一多个复数值相对应的多个 复数共轭值,所述转置硬件逻辑用于利用所述多个复数共轭值执行矩阵转 置操作以生成结果矩阵。
示例2.如示例1所述的处理器,其中所述复数矩阵共轭硬件逻辑包括 多个反转器,每个反转器更改所述第一多个复数值的相应虚部分量的符号 以生成多个转换后的虚部分量。
示例3.如示例2所述的处理器,其中所述多个复数共轭值的每一者包 括所述第一多个复数值之一的实部分量和相应的转换后虚部分量。
示例4.如示例1所述的处理器,其中所述解码器将所述复数共轭转置 指令解码成多个微操作,并且所述执行电路执行所述多个微操作来执行所 述复数共轭转置指令。
示例5.如示例1所述的处理器,其中所述第一多个复数值和所述第二 多个复数值中的每个复数值包括16比特浮点实部值和16比特浮点虚部值。
示例6.如示例5所述的处理器,其中所述复数源矩阵包括m×k矩阵, 具有m行和k列的所述第一多个复数值。
示例7.如示例5所述的处理器,其中所述多个寄存器包括一个或多个 瓦片寄存器或向量寄存器,其中所述第一多个复数值和第二多个复数值的 每一者被作为紧缩数据元素存储在所述一个或多个瓦片寄存器或向量寄存 器中。
示例8.一种方法,包括:对复数共轭转置指令解码,该复数共轭转置 指令包括源操作对象以及目的地操作对象,所述源操作对象用于识别复数 源矩阵,所述目的地操作对象用于识别复数结果矩阵,所述复数源矩阵存 储第一多个复数值,并且所述复数结果矩阵存储第二多个复数值,所述第 一多个复数值和第二多个复数值中的每个复数值包括实部分量和虚部分量; 在多个寄存器或本地存储器中存储所述第一多个复数值的全部或子集;并 且执行所述复数共轭转置指令,其中所述执行使用矩阵共轭硬件逻辑来确 定与所述第一多个复数值相对应的多个复数共轭值,并且使用转置硬件逻 辑来利用所述多个复数共轭值执行矩阵转置操作以生成结果矩阵。
示例9.如示例8所述的方法,其中所述复数矩阵共轭硬件逻辑包括多 个反转器,每个反转器更改所述第一多个复数值的相应虚部分量的符号以 生成多个转换后的虚部分量。
示例10.如示例9所述的方法,其中所述多个复数共轭值的每一者包 括所述第一多个复数值之一的实部分量和相应的转换后虚部分量。
示例11.如示例8所述的方法,其中对所述复数共轭转置指令解码包 括:生成多个微操作,所述多个微操作将由包括所述矩阵共轭硬件逻辑的 执行电路执行。
示例12.如示例8所述的方法,其中所述第一多个复数值和所述第二 多个复数值中的每个复数值包括16比特浮点实部值和16比特浮点数值。
示例13.如示例12所述的方法,其中所述复数源矩阵包括m×k矩阵, 具有m行和k列的所述第一多个复数值。
示例14.如示例12所述的方法,其中所述多个寄存器包括一个或多个 瓦片寄存器或向量寄存器,其中所述第一多个复数值和所述第二多个复数 值的每一者被作为紧缩数据元素存储在所述一个或多个瓦片寄存器或向量 寄存器中。
示例15.一种机器可读介质,其上存储有程序代码,所述程序代码当 被机器执行时,使得所述机器执行以下操作:对复数共轭转置指令解码, 该复数共轭转置指令包括源操作对象以及目的地操作对象,所述源操作对 象用于识别复数源矩阵,所述目的地操作对象用于识别复数结果矩阵,所 述复数源矩阵存储第一多个复数值,并且所述复数结果矩阵存储第二多个 复数值,所述第一多个复数值和第二多个复数值中的每个复数值包括实部分量和虚部分量;在多个寄存器或本地存储器中存储所述第一多个复数值 的全部或子集;并且执行所述复数共轭转置指令,其中所述执行使用矩阵 共轭硬件逻辑来确定与所述第一多个复数值相对应的多个复数共轭值,并 且使用转置硬件逻辑来利用所述多个复数共轭值执行矩阵转置操作以生成 结果矩阵。
示例16.如示例15所述的机器可读介质,其中所述复数矩阵共轭硬件 逻辑包括多个反转器,每个反转器更改所述第一多个复数值的相应虚部分 量的符号以生成多个转换后的虚部分量。
示例17.如示例16所述的机器可读介质,其中所述多个复数共轭值的 每一者包括所述第一多个复数值之一的实部分量和相应的转换后虚部分量。
示例18.如示例15所述的机器可读介质,其中对所述复数共轭转置指 令解码包括:生成多个微操作,所述多个微操作将由包括所述矩阵共轭硬 件逻辑的执行电路执行。
示例19.如示例15所述的机器可读介质,其中所述第一多个复数值和 所述第二多个复数值中的每个复数值包括16比特浮点实部值和16比特浮 点虚部值。
示例20.如示例19所述的机器可读介质,其中所述复数源矩阵包括 m×k矩阵,具有m行和k列的所述第一多个复数值。
示例21.如示例19所述的机器可读介质,其中所述多个寄存器包括一 个或多个瓦片寄存器或向量寄存器,其中所述第一多个复数值和第二多个 复数值的每一者被作为紧缩数据元素存储在所述一个或多个瓦片寄存器或 向量寄存器中。
此外,在上文描述的各种实施例中,除非另有特别注明,否则诸如短 语“A、B或C中的至少一者”之类的析取语言打算被理解为意指A、B 或C,或者其任何组合(例如,A、B和/或C)。因此,析取语言并不打 算也不应当被理解为暗示给定的实施例要求至少一个A、至少一个B或者 至少一个C各自都存在。
说明书和附图因此应被认为是说明性的,而不是限制性的。然而,很 明显,在不脱离如权利要求中记载的本公开的更宽精神和范围的情况下, 可对其进行各种修改和改变。
在此详细描述各处,出于说明目的,记载了许多具体细节以便提供对 本发明的透彻理解。然而,本领域技术人员将会清楚,没有这些具体细节 中的一些也可实现本发明。在某些情况中,没有详尽地描述公知的结构和 功能,以避免模糊本发明的主题。因此,本发明的范围和精神应当按照所 附权利要求来判断。
Claims (28)
1.一种处理器,包括:
解码器,对复数共轭转置指令解码,该复数共轭转置指令包括源操作对象以及目的地操作对象,所述源操作对象用于识别复数源矩阵,所述目的地操作对象用于识别复数结果矩阵,所述复数源矩阵存储第一多个复数值,并且所述复数结果矩阵存储第二多个复数值,所述第一多个复数值和所述第二多个复数值中的每个复数值包括实部分量和虚部分量;
多个寄存器或本地存储器,存储所述第一多个复数值的全部或子集;以及
与所述多个寄存器或本地存储器耦合的执行电路,执行所述复数共轭转置指令,所述执行电路包括矩阵共轭硬件逻辑以及转置硬件逻辑,所述矩阵共轭硬件逻辑用于确定与所述第一多个复数值相对应的多个复数共轭值,所述转置硬件逻辑用于利用所述多个复数共轭值执行矩阵转置操作以生成结果矩阵。
2.如权利要求1所述的处理器,其中所述复数矩阵共轭硬件逻辑包括多个反转器,每个反转器更改所述第一多个复数值的相应虚部分量的符号以生成多个转换后的虚部分量。
3.如权利要求2所述的处理器,其中所述多个复数共轭值的每一者包括所述第一多个复数值之一的实部分量和相应的转换后虚部分量。
4.如权利要求1至3中任一项所述的处理器,其中所述解码器将所述复数共轭转置指令解码成多个微操作,并且所述执行电路执行所述多个微操作来执行所述复数共轭转置指令。
5.如权利要求1或4所述的处理器,其中所述第一多个复数值和所述第二多个复数值中的每个复数值包括16比特浮点实部值和16比特浮点虚部值。
6.如权利要求5所述的处理器,其中所述复数源矩阵包括m×k矩阵,该矩阵具有m行和k列的所述第一多个复数值。
7.如权利要求5或6所述的处理器,其中所述多个寄存器包括一个或多个瓦片寄存器或向量寄存器,其中所述第一多个复数值和所述第二多个复数值的每一者被作为紧缩数据元素存储在所述一个或多个瓦片寄存器或向量寄存器中。
8.一种方法,包括:
对复数共轭转置指令解码,该复数共轭转置指令包括源操作对象以及目的地操作对象,所述源操作对象用于识别复数源矩阵,所述目的地操作对象用于识别复数结果矩阵,所述复数源矩阵存储第一多个复数值,并且所述复数结果矩阵存储第二多个复数值,所述第一多个复数值和第二多个复数值中的每个复数值包括实部分量和虚部分量;
在多个寄存器或本地存储器中存储所述第一多个复数值的全部或子集;并且
执行所述复数共轭转置指令,其中所述执行使用矩阵共轭硬件逻辑来确定与所述第一多个复数值相对应的多个复数共轭值,并且使用转置硬件逻辑来利用所述多个复数共轭值执行矩阵转置操作以生成结果矩阵。
9.如权利要求8所述的方法,其中所述复数矩阵共轭硬件逻辑包括多个反转器,每个反转器更改所述第一多个复数值的相应虚数分量的符号以生成多个转换后的虚数分量。
10.如权利要求9所述的方法,其中所述多个复数共轭值的每一者包括所述第一多个复数值之一的实部分量和相应的转换后虚部分量。
11.如权利要求8至10中任一项所述的方法,其中对所述复数共轭转置指令解码包括:生成多个微操作,所述多个微操作将由包括所述矩阵共轭硬件逻辑的执行电路执行。
12.如权利要求8或11所述的方法,其中所述第一多个复数值和所述第二多个复数值中的每个复数值包括16比特浮点实部值和16比特浮点虚部值。
13.如权利要求12所述的方法,其中所述复数源矩阵包括m×k矩阵,具有m行和k列的所述第一多个复数值。
14.如权利要求12或13所述的方法,其中所述多个寄存器包括一个或多个瓦片寄存器或向量寄存器,其中所述第一多个复数值和所述第二多个复数值的每一者被作为紧缩数据元素存储在所述一个或多个瓦片寄存器或向量寄存器中。
15.一种机器可读介质,其上存储有程序代码,所述程序代码当被机器执行时,使得所述机器执行以下操作:
对复数共轭转置指令解码,该复数共轭转置指令包括源操作对象以及目的地操作对象,所述源操作对象用于识别复数源矩阵,所述目的地操作对象用于识别复数结果矩阵,所述复数源矩阵存储第一多个复数值,并且所述复数结果矩阵存储第二多个复数值,所述第一多个复数值和第二多个复数值中的每个复数值包括实部数分量和虚部分量;
在多个寄存器或本地存储器中存储所述第一多个复数值的全部或子集;并且
执行所述复数共轭转置指令,其中所述执行使用矩阵共轭硬件逻辑来确定与所述第一多个复数值相对应的多个复数共轭值,并且使用转置硬件逻辑来利用所述多个复数共轭值执行矩阵转置操作以生成结果矩阵。
16.如权利要求15所述的机器可读介质,其中所述复数矩阵共轭硬件逻辑包括多个反转器,每个反转器更改所述第一多个复数值的相应虚数分量的符号以生成多个转换后的虚数分量。
17.如权利要求16所述的机器可读介质,其中所述多个复数共轭值的每一者包括所述第一多个复数值之一的实部分量和相应的转换后虚部分量。
18.如权利要求15至17中任一项所述的机器可读介质,其中对所述复数共轭转置指令解码包括:生成多个微操作,所述多个微操作将由包括所述矩阵共轭硬件逻辑的执行电路执行。
19.如权利要求15或18所述的机器可读介质,其中所述第一多个复数值和所述第二多个复数值中的每个复数值包括16比特浮点实部值和16比特浮点虚部值。
20.如权利要求19所述的机器可读介质,其中所述复数源矩阵包括m×k矩阵,具有m行和k列的所述第一多个复数值。
21.如权利要求19或20所述的机器可读介质,其中所述多个寄存器包括一个或多个瓦片寄存器或向量寄存器,其中所述第一多个复数值和所述第二多个复数值的每一者被作为紧缩数据元素存储在所述一个或多个瓦片寄存器或向量寄存器中。
22.一种设备,包括:
用于对复数共轭转置指令解码的装置,该复数共轭转置指令包括源操作对象和目的地操作对象,所述源操作对象用于识别复数源矩阵,所述目的地操作对象用于识别复数结果矩阵,所述复数源矩阵存储第一多个复数值,并且所述复数结果矩阵存储第二多个复数值,所述第一多个复数值和所述第二多个复数值中的每个复数值包括实部分量和虚部分量;
用于在多个寄存器或本地存储器中存储所述第一多个复数值的全部或子集的装置;以及
用于执行所述复数共轭转置指令的装置,其中所述执行使用矩阵共轭硬件逻辑来确定与所述第一多个复数值相对应的多个复数共轭值,并且使用转置硬件逻辑来利用所述多个复数共轭值执行矩阵转置操作以生成结果矩阵。
23.如权利要求22所述的设备,其中所述复数矩阵共轭硬件逻辑包括多个反转器,每个反转器更改所述第一多个复数值的相应虚数分量的符号以生成多个转换后的虚数分量。
24.如权利要求23所述的设备,其中所述多个复数共轭值的每一者包括所述第一多个复数值之一的实部分量和相应的转换后虚部分量。
25.如权利要求22至24中任一项所述的设备,其中对所述复数共轭转置指令解码包括:生成多个微操作,所述多个微操作将由包括所述矩阵共轭硬件逻辑的执行电路执行。
26.如权利要求22或25所述的设备,其中所述第一多个复数值和所述第二多个复数值中的每个复数值包括16比特浮点实部值和16比特浮点虚部值。
27.如权利要求26所述的设备,其中所述复数源矩阵包括m×k矩阵,具有m行和k列的所述第一多个复数值。
28.如权利要求26或27所述的设备,其中所述多个寄存器包括一个或多个瓦片寄存器或向量寄存器,其中所述第一多个复数值和所述第二多个复数值的每一者被作为紧缩数据元素存储在所述一个或多个瓦片寄存器或向量寄存器中。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/133,400 | 2020-12-23 | ||
US17/133,400 US20220197654A1 (en) | 2020-12-23 | 2020-12-23 | Apparatus and method for complex matrix conjugate transpose |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114661348A true CN114661348A (zh) | 2022-06-24 |
Family
ID=77910642
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111396243.8A Pending CN114661348A (zh) | 2020-12-23 | 2021-11-23 | 用于复数矩阵共轭转置的装置和方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20220197654A1 (zh) |
EP (1) | EP4020177A1 (zh) |
CN (1) | CN114661348A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115880132A (zh) * | 2023-02-06 | 2023-03-31 | 南京砺算科技有限公司 | 图形处理器、矩阵乘法任务处理方法、装置及存储介质 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4972361A (en) * | 1988-05-13 | 1990-11-20 | Massachusetts Institute Of Technology | Folded linear systolic array |
US9268746B2 (en) * | 2008-03-07 | 2016-02-23 | St Ericsson Sa | Architecture for vector memory array transposition using a block transposition accelerator |
US9280382B1 (en) * | 2011-08-31 | 2016-03-08 | The Mathworks, Inc. | Parallel processing of multidimensional arrays |
WO2013095552A1 (en) * | 2011-12-22 | 2013-06-27 | Intel Corporation | Vector instruction for presenting complex conjugates of respective complex numbers |
US9456276B1 (en) * | 2014-09-30 | 2016-09-27 | Amazon Technologies, Inc. | Parameter selection for audio beamforming |
US9231608B1 (en) * | 2015-03-19 | 2016-01-05 | Teledyne Lecroy, Inc. | Method and apparatus for correction of time interleaved ADCs |
US10488483B2 (en) * | 2016-06-22 | 2019-11-26 | Comsats Institute Of Information Technology | Parameterized FPGA implementation of a real-time sensitivity encoding reconstruction |
US11023231B2 (en) * | 2016-10-01 | 2021-06-01 | Intel Corporation | Systems and methods for executing a fused multiply-add instruction for complex numbers |
US10649772B2 (en) * | 2018-03-30 | 2020-05-12 | Intel Corporation | Method and apparatus for efficient matrix transpose |
-
2020
- 2020-12-23 US US17/133,400 patent/US20220197654A1/en active Pending
-
2021
- 2021-09-23 EP EP21198423.2A patent/EP4020177A1/en active Pending
- 2021-11-23 CN CN202111396243.8A patent/CN114661348A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115880132A (zh) * | 2023-02-06 | 2023-03-31 | 南京砺算科技有限公司 | 图形处理器、矩阵乘法任务处理方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
EP4020177A1 (en) | 2022-06-29 |
US20220197654A1 (en) | 2022-06-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP4020176A1 (en) | Apparatus and method for conjugate transpose and multiply | |
US20200310820A1 (en) | Apparatus and method for controlling complex multiply-accumulate circuitry | |
CN114691211A (zh) | 从fp16转换到bf8的指令 | |
EP4020177A1 (en) | Apparatus and method for complex matrix conjugate transpose | |
EP4020174A1 (en) | Apparatus and method for complex matrix multiplication | |
EP4016290A1 (en) | Efficient multiply and accumulate instruction when an operand is equal to or near a power of two | |
EP4020179A1 (en) | Apparatus and method for complex matrix transpose and multiply | |
EP4109245A1 (en) | Apparatus and method for vector packed signed/unsigned shift, round, and saturate | |
US20230221958A1 (en) | Memory controller with arithmetic logic unit and/or floating point unit | |
EP4202656A1 (en) | Random data usage | |
EP4109248A1 (en) | Dual sum of quadword 16x16 multiply and accumulate | |
US20230205436A1 (en) | Zero cycle memory initialization | |
US20230205685A1 (en) | Read all zeros or random data upon a first read from volatile memory | |
US20220308873A1 (en) | Apparatuses, methods, and systems for instructions for downconverting a tile row and interleaving with a register | |
NL2029086B1 (en) | Loop support extensions | |
EP4016289A1 (en) | Efficient divide and accumulate instruction when an operand is equal to or near a power of two | |
EP4109247A1 (en) | Apparatuses, methods, and systems for instructions for matrix multiplication instructions | |
US20230205527A1 (en) | Conversion instructions | |
US20240004661A1 (en) | Add with rotation instruction and support | |
EP4202659A1 (en) | Conversion instructions | |
US20240103865A1 (en) | Vector multiply-add/subtract with intermediate rounding | |
US20230205522A1 (en) | Conversion instructions | |
CN115525252A (zh) | 四字16×16乘法和累加的双求和 | |
CN115729620A (zh) | Bfloat16平方根和/或平方根倒数指令 | |
CN115729617A (zh) | Bfloat16融合乘法指令 |
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 |