CN114662048A - 用于共轭转置和乘法的装置和方法 - Google Patents

用于共轭转置和乘法的装置和方法 Download PDF

Info

Publication number
CN114662048A
CN114662048A CN202111467173.0A CN202111467173A CN114662048A CN 114662048 A CN114662048 A CN 114662048A CN 202111467173 A CN202111467173 A CN 202111467173A CN 114662048 A CN114662048 A CN 114662048A
Authority
CN
China
Prior art keywords
complex
matrix
values
imaginary
conjugate
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
CN202111467173.0A
Other languages
English (en)
Inventor
M·阿德尔曼
R·凡伦天
D·唐纳
A·格雷德斯廷
M·J·查尼
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 CN114662048A publication Critical patent/CN114662048A/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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/4806Computations with complex numbers
    • G06F7/4812Complex multiplication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • G06F7/78Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor
    • 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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Advance Control (AREA)

Abstract

本申请公开了用于共轭转置和乘法的装置和方法。处理器包括:解码器,用于对复数矩阵共轭和乘法指令解码;执行电路,用于执行指令,执行电路包括:矩阵共轭硬件逻辑,用于确定多个复数共轭值;转置硬件逻辑,用于对多个复数共轭值进行转置以生成共轭转置矩阵;并行乘法电路,用于:将来自共轭转置矩阵的多个复数共轭值的实值与来自第二多个复数值的对应的虚值相乘以生成第一多个虚数乘积;以及将来自共轭转置矩阵的多个复数共轭值的虚值与来自第二多个复数值的对应的实值相乘以生成第二多个虚数乘积;以及加法/减法电路,用于将第一多个虚数乘积中的每个虚数乘积与第二多个虚数乘积中的对应的虚数乘积相加以产生结果矩阵中的对应的虚分量。

Description

用于共轭转置和乘法的装置和方法
背景
技术领域
本发明的实施例总体上关于计算机处理器领域。更具体地,实施例涉及用于复数矩阵共轭转置和乘法的装置和方法。
背景技术
指令集或指令集架构(ISA)是计算机架构中涉及编程的部分,包括原生数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置、以及外部输入和输出(I/O)。应当注意,术语“指令”在本文中一般是指宏指令——即,提供给处理器以供执行的指令——而不是微指令或微操作——即,该微指令或微操作是处理器的解码器对宏指令解码的结果。微指令或微操作可以被配置成用于指示处理器上的执行单元执行操作以实现与宏指令相关联的逻辑。
ISA与微架构不同,微架构是用于实现指令集的处理器设计技术的集合。具有不同微架构的处理器可共享共同的指令集。例如,
Figure RE-GDA0003436918580000011
Figure RE-GDA0003436918580000012
奔腾4(Pentium 4)处理器、
Figure RE-GDA0003436918580000013
酷睿TM(CoreTM)处理器、以及来自加利福尼亚州桑尼威尔(Sunnyvale)的超微半导体有限公司 (Advanced Micro Devices,Inc.)的多个处理器实现几乎相同版本的x86指令集(具有已随更新的版本加入的一些扩展),但具有不同的内部设计。例如,ISA的相同寄存器架构在不同的微架构中可使用公知的技术以不同方法来实现,包括专用物理寄存器、使用寄存器重命名机制(例如,使用寄存器别名表(RAT)、重排序缓冲器(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、个人数字助理、工程工作站、服务器、网络设备、网络中枢、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持式设备以及各种其他电子设备的其他系统设计和配置也是合适的。一般地,能够包含如本文中所公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备一般都是合适的。
图1图示示例性系统的实施例。多处理器系统100是点对点互连系统,并且包括多个处理器,多个处理器包括经由点对点互连150耦合的第一处理器170和第二处理器180。在一些实施例中,第一处理器170 和第二处理器180是同构的。在一些实施例中,第一处理器170和第二处理器180是异构的。
处理器170和180示出为分别包括集成存储器控制器(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 可以任选地经由高性能接口192来与协处理器138交换信息。在一些实施例中,协处理器138是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。
共享高速缓存(未示出)可被包括在任一处理器170、180 中,或在这两个处理器的外部但经由P-P互连与这些处理器连接,使得如果处理器被置于低功率模式,则任一个或这两个处理器的本地高速缓存信息可被存储在共享高速缓存中。
芯片组190可以经由接口196耦合到第一互连116。在一些实施例中,第一互连116可以是外围组件互连(PCI)互连或诸如PCI快捷互连或另一I/O互连之类的互连。在一些实施例中,互连中的一个互连耦合到功率控制单元(PCU)117,功率控制单元117可以包括用于执行与处理器170、180和/或协处理器138有关的功率管理操作的电路、软件和/或固件。PCU117将控制信息提供给电压调节器,以使电压调节器生成适当的经调节的电压。PCU 117还提供控制信息以控制所生成的操作电压。在各实施例中,PCU 117可包括用于执行基于硬件的功率管理的各种功率管理逻辑单元(电路)。此类功率管理可以完全由处理器控制(例如,由各种处理器硬件控制,并且其可以由工作负载和/或功率、热约束或其他处理器约束触发),并且/或者功率管理可以响应于外部源(诸如,平台或管理功率源或系统软件)而被执行。
PCU 117被图示为作为与处理器170和/或处理器180分开的逻辑存在。在其他情形下,PCU 117可以在处理器170或180的核中的给定的一个或多个核(未示出)上执行。在一些情况下,可将PCU 117实现为被配置成用于执行其自身的专用功率管理代码(有时被称为P代码)的 (专用的或通用的)微控制器或其他控制逻辑。在另外的其他实施例中,将由PCU117执行的功率管理操作可在处理器外部实现,诸如,通过分开的功率管理集成电路(PMIC)或处理器外部的另一组件的方式。在另外的其他实施例中,将由PCU 117执行的功率管理操作可在BIOS或其他系统软件内实现。
各种I/O设备114可连同互连(总线)桥118耦合至第一互连116,互连桥118将第一互连116耦合至第二互连120。在一些实施例中,诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列(FPGA)或任何其他处理器的一个或多个附加处理器115耦合到第一互连116。在一些实施例中,第二互连120可以是低引脚数(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)CPU,其中专用逻辑208是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核,未示出),并且核202(A)-(N)是一个或多个通用核(例如,通用有序核、通用乱序核、或这两者的组合);2)协处理器,其中核202(A)-(N)是旨在主要用于图形和/或科学(吞吐量)的大量专用核;以及3)协处理器,其中核202(A)-(N)是大量通用有序核。因此,处理器200可以是通用处理器、协处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元电路)、高吞吐量的集成众核(MIC) 协处理器(包括30个或更多核)、嵌入式处理器,等等。处理器可以被实现在一个或多个芯片上。处理器200可以是一个或多个基板的一部分,和/ 或可使用多种工艺技术(诸如例如,BiCMOS、CMOS、或NMOS)中的任何技术被实现在一个或多个基板上。
存储器层级结构包括核202(A)-(N)内的一个或多个级别的高速缓存单元电路204(A)-(N)、一个或多个共享高速缓存单元电路的集合206、以及耦合至集成存储器控制器单元电路的集合214的外部存储器(未示出)。一个或多个共享高速缓存单元电路的集合206可包括一个或多个中间级别的高速缓存(诸如第二级(L2)、第三级(L3)、第四级(L4)) 或其他级别的高速缓存(诸如末级高速缓存(LLC))和/或以上各项的组合。尽管在一些实施例中,基于环的互连网络电路212将专用逻辑208(例如,集成图形逻辑)、共享高速缓存单元电路的集合206以及系统代理单元电路210互连,但替代实施例使用任何数量的公知技术来将这些单元互连。在一些实施例中,维持共享高速缓存单元电路206和核202(A)-(N)中的一个或多个之间的一致性。
在一些实施例中,核202(A)-(N)中的一个或多个能够实现多线程化。系统代理单元电路210包括协调和操作核202(A)-(N)的那些组件。系统代理单元电路210可包括例如功率控制单元(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期间,可以对所取出的一条或多条指令进行解码,可以生成使用所转发的寄存器端口的地址(例如,加载存储单元(LSU)地址),并且可以执行分支转发(例如,立即数偏移或链接寄存器(LR))。在一个实施例中,解码级306和寄存器读取/存储器读取级314可以组合成一个流水线级。在一个实施例中,在执行级316期间,可以执行经解码的指令,可以执行LSU 地址/数据流水线到高级微控制器总线(AHB)接口,可以执行乘法和加法操作,可以执行具有分支结果的算术操作,等等。
作为示例,示例性寄存器重命名的乱序发布/执行核架构可如下所述地实现流水线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,处理器核390包括耦合到执行引擎单元电路350的前端单元电路330,并且两者耦合到存储器单元电路370。核390可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核、或混合或替代的核类型。作为又一选项,核390 可以是专用核,诸如例如,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核,等等。
前端单元电路330可包括耦合至指令高速缓存单元电路334 的分支预测单元电路332,该指令高速缓存单元电路334耦合至指令转换后备缓冲器(TLB)336,该指令转换后备缓冲器336耦合至指令取出单元电路338,该指令取出单元电路338耦合至解码单元电路340。在一个实施例中,指令高速缓存单元电路334被包括在存储器单元电路370中,而不是在前端单元电路330中。解码单元电路340(或解码器)可对指令解码,并且生成从原始指令解码出的、或以其他方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出。解码单元电路340可进一步包括地址生成单元电路 (AGU,未示出)。在一个实施例中,AGU使用所转发的寄存器端口生成 LSU地址,并且可以进一步执行分支转发(例如,立即数偏移分支转发、 LR寄存器分支转发等)。解码单元电路340可使用各种不同的机制来实现。合适机制的示例包括但不限于,查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核390包括存储用于某些宏指令的微代码的微代码ROM(未示出)或其他介质(例如,在解码单元电路340中,或以其他方式在前端单元电路330内)。在一个实施例中,解码单元电路340包括微操作(micro-op)或操作高速缓存(未示出)以保持/高速缓存在处理器流水线300的解码级或其他级期间生成的经解码的操作、微标签或微操作。解码单元电路340可耦合到执行引擎单元电路350 中的重命名/分配器单元电路352。
执行引擎电路350包括重命名/分配器单元电路352,该重命名/分配器单元电路352耦合到引退单元电路354和一个或多个调度器电路的集合356。(多个)调度器电路356表示任意数量的不同调度器,包括预留站、中央指令窗口等。在一些实施例中,(多个)调度器电路356可以包括算术逻辑单元(ALU)调度器/调度电路、ALU队列、算术生成单元 (AGU)调度器/调度电路、AGU队列,等等。(多个)调度器电路356 耦合到(多个)物理寄存器堆电路358。(多个)物理寄存器堆电路358 中的每个物理寄存器堆电路表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一种或多种不同的数据类型,诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一条指令的地址的指令指针)等。在一个实施例中,(多个)物理寄存器堆单元电路358包括向量寄存器单元电路、写掩码寄存器单元电路和标量寄存器单元电路。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器、通用寄存器等。(多个)物理寄存器堆单元电路358由引退单元电路354(也称为引退队列)重叠,以图示可实现寄存器重命名和乱序执行的各种方式(例如,使用(多个)重排序缓冲器(ROB)和(多个)引退寄存器堆;使用(多个)未来文件、(多个)历史缓冲器和(多个)引退寄存器堆;使用寄存器映射和寄存器池,等等)。引退单元电路354和(多个)物理寄存器堆电路358耦合到(多个)执行集群360。(多个)执行集群360包括一个或多个执行单元电路的集合362以及一个或多个存储器访问电路的集合364。执行单元电路362可执行各种算术、逻辑、浮点或其他类型的操作(例如,移位、加法、减法、乘法)并可对各种数据类型(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元或执行单元电路,但是其他实施例可包括仅一个执行单元电路或全都执行所有功能的多个执行单元/执行单元电路。(多个)调度器电路356、(多个)物理寄存器堆单元电路358和(多个)执行集群360示出为可能有多个,因为某些实施例为某些类型的数据/操作创建分开的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线,和/或各自具有其自身的调度器电路、(多个)物理寄存器堆单元电路和/或执行集群的存储器访问流水线——并且在分开的存储器访问流水线的情况下,实现其中仅该流水线的执行集群具有(多个)存储器访问单元电路364的某些实施例)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以是乱序发布/执行,并且其余流水线可以是有序的。
在一些实施例中,执行引擎单元电路350可以执行加载存储单元(LSU)地址/数据流水线到高级微控制器总线(AHB)接口(未示出)、以及地址分阶段和写回、数据分阶段加载、存储和分支。
存储器访问电路的集合364耦合到存储器单元电路370,该存储器单元电路370包括数据TLB单元电路372,该数据TLB单元电路372 耦合到数据高速缓存电路374,该数据高速缓存电路374耦合到第二级(L2) 高速缓存电路376。在一个示例性实施例中,存储器访问单元电路364可包括加载单元电路、存储地址单元电路和存储数据单元电路,其中的每一个均耦合至存储器单元电路370中的数据TLB电路372。指令高速缓存电路 334还耦合到存储器单元电路370中的第二级(L2)高速缓存单元电路376。在一个实施例中,指令高速缓存334和数据高速缓存374被组合为L2高速缓存单元电路376、第三级(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取决于指令而引起到存储器地址的分支或跳转。浮点单元(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包括标量浮点寄存器545,标量浮点寄存器545用于使用x87指令集扩展的对32/64/80位浮点数据的标量浮点操作,或者作为MMX寄存器对64位紧缩整数数据执行操作,以及用于为在MMX和XMM寄存器之间执行的一些操作保存操作数。
一个或多个标志寄存器540(例如,EFLAGS,RFLAGS等) 存储用于算术、比较和系统操作的状态和控制信息。例如,一个或多个标志寄存器540可以存储条件代码信息,诸如进位、奇偶性、辅助进位、零、符号和溢出。在一些实施例中,一个或多个标志寄存器540被称为程序状态和控制寄存器。
段寄存器520包含用于访问存储器的段点。在一些实施例中,这些寄存器通过名称CS、DS、SS、ES、FS和GS来引用。
机器专用寄存器(MSR)535控制和报告处理器性能。大多数MSR 535处置与系统有关的功能,并且不可由应用程序访问。机器校验寄存器560由控制、状态和错误报告MSR组成,这些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的实施例。在该图示中,示出可选的Mod R/M字节702和可选的比例、索引、基址(SIB) 字节704。Mod R/M字节702和SIB字节704用于编码指令的多达两个操作数,其中每一个是直接的寄存器或有效的存储器地址。注意,这些字段中的每一个都是可选的,因为并非所有的指令都包括这些字段中的一个或多个。MOD R/M字节702包括MOD字段742、寄存器字段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与基于向量长度、b的值和指令的输入元素尺寸确定的比例因数N相乘来计算位移值。位移值被存储在位移字段 607中。
在一些实施例中,立即数字段609指定指令的立即数。立即数可以被编码为1字节的值、2字节的值、4字节的值,等等。
图8图示第一前缀601(A)的实施例。在一些实施例中,第一前缀601(A)是REX前缀的实施例。使用该前缀的指令可以指定通用寄存器、 64位紧缩数据寄存器(例如,单指令多数据(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时,操作数尺寸由代码段描述符(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)-图9(D)图示如何使用第一前缀601(A)的R、X和B 字段的实施例。图9(A)图示当SIB字节704不用于存储器寻址时,来自第一前缀601(A)的R和B用于扩展MOD R/M字节702的reg字段744和R/M 字段746。图9(B)图示当SIB字节704未被使用时(寄存器-寄存器寻址),来自第一前缀601(A)的R和B用于扩展MOD R/M字节702的reg字段744 和R/M字段746。图9(C)图示当SIB字节704用于存储器寻址时,来自第一前缀601(A)的R、X和B用于扩展MODR/M字节702的reg字段744 以及索引字段754和基址字段756。图9(D)图示当寄存器被编码在操作码 603中时,来自第一前缀601(A)的B用于扩展MOD R/M字节702的reg 字段744。
图10(A)-图10(B)图示第二前缀601(B)的实施例。在一些实施例中,第二前缀601(B)是VEX前缀的实施例。第二前缀601(B)编码允许指令具有多于两个操作数,并允许SIMD向量寄存器(例如,向量/SIMD 寄存器510)长于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)。位[6:3]示出为 vvvv,可用于:1)编码第一源寄存器操作数,以反转(1补码)的形式指定,并且对具有2个或更多个源操作数的指令有效;2)编码目的地寄存器操作数,以1补码的形式指定,用于某些向量移位;或者3)不编码任何操作数,字段被保留,并且应当包含某个值,诸如1111b。
使用该前缀的指令可以使用Mod R/M R/M字段746来编码引用存储器地址的指令操作数,或者编码目的地寄存器操作数或源寄存器操作数。
使用该前缀的指令可以使用Mod R/M reg字段744来编码目的地寄存器操作数或源寄存器操作数,被视为操作码扩展并且不用于编码任何指令操作数。
对于支持四个操作数的指令语法,vvvv、Mod R/M R/M字段 746和Mod R/M reg字段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)。位[6:3]示出为vvvv,可用于:1)编码第一源寄存器操作数,以反转(1补码)的形式指定,并且对具有2个或更多个源操作数的指令有效;2)编码目的地寄存器操作数,以1补码的形式指定,用于某些向量移位;或者3)不编码任何操作数,字段被保留,并且应当包含某个值,诸如1111b。
使用该前缀的指令可以使用Mod R/M R/M字段746来编码引用存储器地址的指令操作数,或者编码目的地寄存器操作数或源寄存器操作数。
使用该前缀的指令可以使用Mod R/M reg字段744来编码目的地寄存器操作数或源寄存器操作数,被视为操作码扩展并且不用于编码任何指令操作数。
对于支持四个操作数的指令语法,vvvv、Mod R/M R/M字段 746和Mod R/M reg字段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,在一个示例中,格式字段1111的值为62H。后续的字节被称为有效载荷字节1115-1119,并且共同形成24位值P[23:0],从而以一个或多个字段的形式提供特定能力 (本文中详述)。
在一些实施例中,有效载荷字节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组成,它们是用于向量寄存器、通用寄存器、存储器寻址的操作数指定符修饰符位,并且当与Mod R/M寄存器字段744和Mod R/M R/M字段746组合时,允许对低8个寄存器之外的下一组8个寄存器的访问。P[9:8]提供操作码扩展性,相当于一些传统前缀(例如,00=无前缀,01=66H,10=F3H,并且11=F2H)。在一些实施例中,P[10]是固定值1。P[14:11]示出为vvvv,可用于:1)编码第一源寄存器操作数,以反转(1 补码)的形式指定,并且对具有2个或更多个源操作数的指令有效;2)编码目的地寄存器操作数,以1补码的形式指定,用于某些向量移位;或者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)的指令中的对寄存器的编码的示例性实施例在下面的表中详述。
Figure RE-GDA0003436918580000211
表1:64位模式下的32寄存器支持
[2:0] 寄存器类型 常见用途
REG ModR/M reg GPR,向量 目的地或源
VVVV vvvv GPR,向量 第二源或目的地
RM ModR/M R/M GPR,向量 第一源或目的地
基址 ModR/M R/M GPR 存储器寻址
索引 SIB.索引 GPR 存储器寻址
VIDX SIB.索引 向量 VSIB存储器寻址
表2:32位模式下的编码寄存器指定符
Figure RE-GDA0003436918580000212
Figure RE-GDA0003436918580000221
表3:操作掩码寄存器指定符编码
可将程序代码应用于输入指令以执行本文描述的功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有处理器的任何系统,该处理器诸如例如,数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。
程序代码可以用高级的面向过程的编程语言或面向对象的编程语言来实现,以便与处理系统通信。如果需要,也可用汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制不限于任何特定的编程语言的范围。在任何情况下,该语言可以是编译语言或解释语言。
本文公开的机制的各实施例可以被实现在硬件、软件、固件或此类实现方式的组合中。本发明的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统 (包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表示性指令来实现,该指令表示处理器中的各种逻辑,该指令在被机器读取时使得该机器制造用于执行本文中所述的技术的逻辑。被称为“IP 核”的此类表示可以被存储在有形的机器可读介质上,并可被供应给各个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。
此类机器可读存储介质可以包括但不限于通过机器或设备制造或形成的制品的非暂态、有形布置,其包括存储介质,诸如硬盘;任何其他类型的盘,包括软盘、光盘、紧致盘只读存储器(CD-ROM)、可重写紧致盘(CD-RW)以及磁光盘;半导体器件,诸如,只读存储器(ROM)、诸如动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM);相变存储器(PCM);磁卡或光卡;或适于存储电子指令的任何其他类型的介质。
因此,本发明的实施例还包括非暂态有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(HDL),它定义本文中描述的结构、电路、装置、处理器和/或系统特征。这些实施例也可被称为程序产品。
仿真(包括二进制变换、代码变形等)
在一些情况下,指令转换器可用于将指令从源指令集转换至目标指令集。例如,指令转换器可以将指令变换(例如,使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其他方式转换成要由核处理的一条或多条其他指令。指令转换器可以用软件、硬件、固件、或其组合来实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上且部分在处理器外。
图12图示根据本发明的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所图示的实施例中,指令转换器是软件指令转换器,但替代地,该指令转换器可以用软件、固件、硬件或其各种组合来实现。图12示出可使用第一 ISA编译器1204来编译高级语言1202形式的程序,以生成可由具有至少一个第一指令集核的处理器1216原生执行的第一ISA二进制代码1206。具有至少一个第一ISA指令集核的处理器1216表示任何处理器,这些处理器能通过兼容地执行或以其它方式处理以下内容来执行与具有至少一个第一ISA指令集核的
Figure RE-GDA0003436918580000231
处理器基本相同的功能:1)第一ISA指令集核的指令集的实质部分,或2)目标为在具有至少一个第一ISA指令集核的英特尔处理器上运行的应用或其他软件的目标代码版本,以便取得与具有至少一个第一ISA指令集核的处理器基本相同的结果。第一ISA编译器1204 表示可用于生成第一ISA二进制代码1206(例如,目标代码)的编译器,该第一ISA二进制代码1206能够通过附加的链接处理或无需附加的链接处理而在具有至少一个第一ISA指令集核的处理器1216上被执行。
类似地,图12示出可使用替代的指令集编译器1208来编译高级语言1202形式的程序,以生成可由不具有第一ISA指令集核的处理器1214原生执行的替代的指令集二进制代码1210。指令转换器1212用于将第一ISA二进制代码1206转换成可以由不具有第一ISA指令集核的处理器 1214原生执行的代码。该转换后的代码不大可能与替代的指令集二进制代码1210相同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成一般操作,并且由来自替代指令集的指令构成。因此,指令转换器1212通过仿真、模拟或任何其他过程来表示允许不具有第一ISA指令集处理器或核的处理器或其他电子设备执行第一ISA二进制代码1206的软件、固件、硬件或其组合。
示例性片/矩阵操作和硬件
图13A图示经配置的片的实施例。如图所示,存在从应用存储器1302加载的四个片1304、1306、1308和1310。在该示例中,片T0 1304 和T1 1306具有带有4元素字节(例如,单精度数据)的K行和N列。片 T2 1308和片T3 1310具有带有8元素字节(例如,双精度数据)的M行和N/2列。由于双精度操作数的宽度是单精度操作数的宽度的两倍,因此该配置与用于提供片选项的调色板一致,将16*N*M字节的总存储提供给至少4个名称。取决于所使用的指令编码方案,可用的片的数量有所不同。
在一些实施例中,片参数是可定义的。例如,“调色板”用于提供片选项。示例性选项包括但不限于:片名称的数量、存储的行中的字节数、片中的行数和列数,等等。例如,片的最大“高度”(行数)可定义为:片最大行=所构造的存储/(调色板名称的数量*每行的字节数)
由此,可以写入应用,以使得对名称的固定使用将能够利用跨实现方式的不同存储尺寸。
使用片配置指令(“TILECONFIG”)完成对片的配置,其中,在所选择的调色板中定义特定的片使用。该声明包括要使用的片名称的数量、每个名称(片)的所请求的行数和列数,并且在一些实施例中包括每个片的所请求的数据类型。在一些实施例中,在TILECONFIG指令的执行期间执行一致性校验,以确定其匹配调色板条目的限制。
图13B图示矩阵存储的若干示例;在(A)中,片被存储在存储器中。如图所示,每“行”由四个紧缩数据元素组成。为了达到下一“行”,使用跨步值。注意,行可被连续地存储在存储器中。当片存储不映射底层存储器阵列行宽度时,跨步式存储器访问允许对一行以及随后对下一行的访问。
从存储器加载片以及向存储器存储片典型地是从应用存储器到紧缩的数据行的跨步式访问。示例性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)强制使超出片的所配置的行的数据将被维持为零。如果没有有效配置,则所有行被归零。对片数据的XRSTOR能够加载超出那些所配置的列的列中的无用信息。XRSTOR对超出所配置的列数进行清除不应当是可能的,因为不存在与片配置相关联的元素宽度。
当将整个TILE存储区写入存储器时,上下文保存(例如, XSAVE)暴露整个TILE存储区。如果XRSTOR将无用数据加载到片的最右边部分中,则将由XSAVE保存那个数据。对于超出为每个片指定的数量的行,XSAVE将写入零。
在一些实施例中,片指令是可重新开始的。访问存储器的操作允许在页错误之后重新开始。凭借由控制和/或状态寄存器控制的对异常的掩码,处理浮点操作的计算指令也允许未掩码的浮点异常。
为了支持在这些事件后重新开始指令,这些指令将信息存储在下文详述的开始寄存器中。
图14图示利用矩阵(片)操作加速器的系统的实施例。在该图示中,主机处理器/处理系统1401将命令1411(例如,矩阵操纵操作,诸如,算术或矩阵操纵操作、或加载和存储操作)传递至矩阵操作加速器 1407。然而,这以这种方式示出,仅用于讨论的目的。如稍后所详述,该加速器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对(例如,使用片加载或片存储指令)从存储器加载的片和/或将向存储器存储的片进行缓冲。数据缓冲器可以是例如多个寄存器。典型地,这些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)结合路由电路1717执行的多个微操作。解码电路1709还对指令后缀和前缀(如果使用)进行解码。与路由电路1717结合地进行操作,执行电路1719执行经解码的指令。
在一些实施例中,寄存器重命名、寄存器分配和/或调度电路 1713提供用于以下一项或多项的功能:1)将逻辑操作数值重命名为物理操作数值(例如,一些实施例中的寄存器别名表);2)将状态位和标志分配给经解码的指令;和3)(例如,在一些实施例中,使用预留站)调度经解码的VFVSMM指令1711供在指令池外部的执行电路1719上执行。
寄存器(寄存器堆)和/或存储器1715将数据存储为要被执行电路1719操作的经解码的VFVSMM指令1711的操作数。如本文进一步描述,示例性寄存器类型包括写掩码寄存器、紧缩数据寄存器、通用寄存器和浮点寄存器。在一些实施例中,写回电路1720提交经解码的指令1711 的执行的结果。
图18是处理阵列1810的框图,处理阵列1810用于执行矩阵乘法指令(或指令序列)以执行并行乘法累加操作,以将第一矩阵1802(具有M x K个元素的矩阵A)与第二矩阵1804(具有K x N个元素的矩阵B) 相乘以生成输出矩阵(矩阵C)。在一个实施例中,矩阵乘法指令是可变稀疏度矩阵乘法(VFVSMM)指令,其执行密集-密集、稀疏-密集、以及稀疏-稀疏的矩阵乘法。然而,本发明的根本性原理不限于任何特定矩阵类型。
在一个实施例中,处理阵列1810包括(M x N个)处理单元 1814,处理单元1814中的每个处理单元将来自第一矩阵1802的一个或多个数据元素与来自第二矩阵1804的一个或多个数据元素相乘,并将所得的乘积累加(例如,将乘积与累加值相加)。在一些实施例中,处理阵列1810 中的处理单元中的每个处理单元是乘法-累加电路,乘法-累加电路的一个示例被示出为MAC 1814。虽然所图示的MAC 1814示出单个乘法器,但每个 MAC 1814可以包括多个并行乘法器以执行并行乘法。在一个实施例中,并行乘法的数量基于输入操作数的尺寸。例如,每个MAC单元1814可能能够执行一个16位整数乘法、两个8位整数乘法、或四个4位整数乘法,这些乘法中的所有乘法可以被累加为32位整数值。类似地,每个MAC单元1814可能能够将一个32位浮点、两个16位浮点值(例如,FP16或Bfloat16) 相乘,并将结果累加为32位或64位浮点值。
在一些实施例中,例如当处理8位整数数据时,通过将每个处理单元配置为执行2x2矩阵乘法,执行电路吞吐量变成四倍。
如本文所述,处理单元有时被称为处理元件,并且有时被称为处理电路,并且有时可以被称为处理节点。无论采用何种措辞,处理单元旨在包括用于执行数据路径计算并提供控制逻辑的电路。
复数矩阵处理实施例
本发明的一个实施例包括专用片矩阵乘法硬件逻辑,用于执行利用复数数据类型的矩阵乘法。例如,不同的实施例可以包括专用张量核,用于执行本文中的复数矩阵乘法操作。替代地或者附加地,现有核的执行电路被修改为具有矩阵处理电路,以执行本文所述的矩阵乘法。下文参照图20A-图20C描述不同示例实现方式。
本发明的一个实施例包括用于执行两个片源(例如,下面示例中的矩阵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在同一芯片上并由多个核2001a-d共享。在图20C中,矩阵处理加速器2096与核2001a-b在不同的芯片上(但可能在同一封装中)。在每个实现方式中,本发明的根本性原理如本文所述地操作。
首先转向图20A,所图示的架构包括核区域2001以及共享或“非核”区域2010。共享区域2010包括由所有的核2001a-b或核2001a-b的子集共享的数据结构和电路。在所图示的实施例中,多个核2001a-b是能够并发执行多个指令流或线程的同时多线程核。虽然为了简单起见在图20A 中仅图示两个核2001a-b,但是将会领会,核区域2001可包括任何数量的核,这些核中的每个核可包括与针对核2001a所示相同的架构。另一实施例包括异构核,这些异构核可具有不同的指令集架构和/或不同的功率和性能特性(例如,低功率核与高功率/性能核组合)。
图20A中图示的各组件能以与上文描述的对应组件相同的方式来实现。例如,核2001a可以使用本文描述的指令格式和寄存器架构中的一种来执行矩阵乘法指令。另外,核2001a可包括图3B中示出的核390 的组件,并且可包括本文中(例如,图2、图4等)所描述的其他处理器/ 核组件中的任何组件。
核2001a-b中的每个核包括用于执行指令流的同时执行的指令流水线组件,这些指令流水线组件包括从系统存储器2060或L1指令高速缓存2010取出指令的指令取出电路2018以及用于对指令进行解码的解码器2009。执行电路2008执行经解码的指令以执行如由指令操作数、操作码和任何立即数值所指定的底层操作。
在所图示的实施例中,解码器2009包括用于将某些指令解码为微操作以供矩阵执行电路2091(在该实施例中,被集成在执行电路2008 内)执行的矩阵解码电路2090。尽管在图20A中被图示为分开的框,但矩阵解码电路2090和矩阵执行电路2091可以被分布为跨越解码器2009和执行电路2008的功能电路(例如,乘法器、复用器等)。
在图20B所示的实施例中,矩阵处理加速器2095通过高速缓存一致性互连2006紧密地耦合至处理器核2001a-b。该实施例的矩阵处理加速器2095被配置成核的对等方,参与和这些核相同的高速缓存一致性存储器事务集合。如所示,矩阵处理加速器2095可以包括其自己的寄存器集合2018a(例如,片寄存器、向量寄存器、掩码寄存器等)以执行本文中描述的操作。在该实施例中,解码器2009对将要由矩阵处理加速器2095 执行的指令进行解码,并且得到的微操作通过互连2006被传递至矩阵处理加速器2095以供执行。在另一实施例中,矩阵处理加速器2095包括其自己的取出和解码电路,以分别对来自系统存储器2060的特定区域的指令进行取出和解码。在任一实现方式中,在执行这些指令之后,矩阵加速器2095 可将结果存储到系统存储器2060中的区域(其可以由核2001a-b访问)。
图20C图示其中矩阵处理加速器2096与核2001a-b处于不同芯片上但通过高速缓存一致性接口2096耦合至这些核的另一实施例。在一个实施例中,高速缓存一致性接口2096使用基于分组的事务来确保由矩阵处理加速器2096访问/高速缓存的数据被保持为与核2001a-c的高速缓存层级结构一致。
通用寄存器(GPR)2018d、向量/片寄存器的集合2018b、掩码寄存器的集合2018a(其可包括如下文所述的片掩码寄存器)、以及控制寄存器的集合2018c也在图20A至图20C中被图示出。在一个实施例中,将多个向量数据元素紧缩到每个向量寄存器中,每个向量寄存器可具有512 位宽度以用于存储两个256位值、四个128位值、八个64位值、十六个32 位值等等。多组向量寄存器可被组合,以形成本文中所描述的片寄存器。替代地,可使用单独的2-D片/张量寄存器的集合。然而,本发明的根本性原理不限于任何特定尺寸/类型的向量/片数据。在一个实施例中,掩码寄存器2018a包括用于对存储在向量寄存器2018b中的值执行位掩码操作的八个64位操作数掩码寄存器(例如,实现为上文所描述的掩码寄存器k0-k7)。然而,本发明的根本性原理不限于任何特定掩码寄存器尺寸/类型。
控制寄存器2018c存储各种类型的控制位或“标志”,这些控制位或“标志”通过执行指令而用于确定处理器核2001a的当前状态。作为示例而非限制,在x86架构中,控制寄存器包括EFLAGS寄存器。
实现管芯中互连(IDI)/一致性协议的诸如IDI或存储器结构之类的互连2006将核2001a-b(以及潜在地矩阵加速器2095)通信地彼此耦合并通信地耦合至各种组件。例如,互连2006经由接口2007将核2001a 耦合至第三级(L3)高速缓存2020和集成存储器控制器2030。另外,在一些实施例中,可使用互连2006将核2001a-b耦合至矩阵处理加速器2095。
集成存储器控制器2030提供对系统存储器2060的访问。诸如PCI快捷(PCIexpress)电路之类的一个或多个输入/输出(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推测性地预测指令分支地址,并且分支目标缓冲器(BTB)2022用于存储分支地址和目标地址。在一个实施例中,为每次分支预测/误预测维护并更新分支历史表(未示出)或其他数据结构,并且由分支预测单元2002使用该分支历史表(未示出)或其他数据结构以作出后续分支预测。
注意,图20A-图20C不旨在提供示例处理器内采用的所有电路和互连的穷举性视图。相反,未示出与本发明的实施例不相关的各种组件。相反,一些组件仅出于提供其中可以实现本发明的实施例的示例架构的目的而被示出,而不必要求符合本发明的根本性原理。
在其中执行第一指令以确定复数数字的实分量、并且执行第二指令以确定虚分量的实施例中,第一指令针对源矩阵A和源矩阵B以及目的地矩阵CR执行以下操作:real(C)+=real(A)*real(B)– imag(A)*imag(B)。此外,第二指令针对源矩阵A和源矩阵B以及目的地矩阵CI执行以下操作:imag(C)+=real(A)*imag(B)+imag(A)*real(B)。
下面提供示例伪代码,示出用于确定实分量和虚分量的一个实施例的细节。
用于确定实分量的示例伪代码:
Figure RE-GDA0003436918580000331
Figure RE-GDA0003436918580000341
用于确定虚分量的示例伪代码:
Figure RE-GDA0003436918580000351
Figure RE-GDA0003436918580000361
在上述伪代码中指定的实施例中,来自指定行的实数和虚数数据元素被相乘以生成乘积(即,第一伪代码序列中的实数乘积和第二伪代码序列中的虚数乘积)。然后,乘积被累加以生成存储在实数结果矩阵 CR中的实分量和存储在虚数结果矩阵CI中的虚分量。替代地,可以生成单个结果矩阵C以存储实分量和虚分量两者。在伪代码中,针对第一源矩阵遍历行[m],其中每个被选择的值与来自第二源矩阵的行[k]的值相乘。然而,注意,这种标识要相乘的对应元素的方式对于符合本发明的根本性原理不是必需的。
如图21所示,矩阵执行电路2091的一个实施例包括并行乘法电路2110(例如,多个并行乘法器)和加法器电路2020,用于使用来自源矩阵A 2101和源矩阵B 2102的复数数据元素执行并行乘法和加法/减法,以生成实数结果矩阵CR 2103A和虚数结果矩阵CI 2103B的复数数据元素。出于说明的目的,仅示出来自矩阵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的实数数据元素和结果矩阵CI 2303B的虚数数据元素。出于说明的目的,仅示出来自矩阵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是矩阵CR2303A中的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内的附加加法器来并行地执行上述同一组操作以生成所有实数数据元素和虚数数据元素。
在一个实现方式中,第一指令根据以下伪代码操作:
Figure RE-GDA0003436918580000411
Figure RE-GDA0003436918580000421
在一个实施例中,(用于计算矩阵C的虚部的)第二指令执行以下计算:imag(C)+=real(AT)*imag(B)+imag(AT)*real(B),其中A表示矩阵A,B表示矩阵B,并且AT是矩阵A的经转置版本。
在一个实施例中,第二指令根据以下伪代码操作:
Figure RE-GDA0003436918580000422
Figure RE-GDA0003436918580000431
在图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的一个实施例,共轭转置硬件逻辑2513用于使用矩阵A 2101作为复数源矩阵来执行复数矩阵共轭转置指令。复数源矩阵2101包括复数数据元素A1、A2、A3、A4等,分别包括实分量A1R、A2R、A3R、A4R和虚分量A1I、A2I、A3I、A4I等。响应于复数矩阵共轭指令,复数矩阵共轭硬件逻辑2510传递通过每个实分量A1R、A2R、A3R、A4R等,并且包括多个反相器2521-2524(例如,NOT (非)门)以分别反转矩阵A 2101的每个虚值A1I、A2I、A3I、A4I等的符号位2511-2513,以生成虚值-A1I、-A2I、-A3I、-A4I等。矩阵转置硬件逻辑2513然后对具有符号反转的虚值-A1I、-A2I、-A3I、-A4I等和实值A1R、 A2R、A3R、A4R等的共轭矩阵转置,以生成结果矩阵C 2103,该结果矩阵 C 2103是源矩阵A 2101的共轭转置。
在图26中图示根据本发明的一个实施例的方法。该方法可以在上述的架构上实现,但不限于任何特定处理器或系统架构。
在2601处,取出复数矩阵共轭指令。复数矩阵共轭指令的源操作数标识复数源矩阵(例如,标识复数数据元素被存储在的一组寄存器或其他存储位置),并且目的地操作数标识复数结果矩阵(例如,用于存储复数结果数据元素的一组寄存器或其他存储位置)。复数源矩阵和复数结果矩阵两者都包括多个复数矩阵数据元素,其中每一个复数矩阵数据元素包括实分量和虚分量。
在2602处,对复数矩阵共轭指令解码。在一些实施例中,对指令解码包括:标识第一源矩阵和第二源矩阵的位置;以及生成要由执行电路执行的微操作序列。
在2603处,执行经解码的复数矩阵共轭指令以确定与复数源矩阵中的复数值中的每一个复数值对应的复数共轭值。在一个实施例中,对复数源矩阵中的每个虚分量的符号进行反转。然后对结果进行转置以生成复数共轭转置结果矩阵C。
复数矩阵共轭指令的一个实施例根据以下伪代码执行到目的地片/向量寄存器中的复数矩阵共轭:
Figure RE-GDA0003436918580000451
Figure RE-GDA0003436918580000461
在以上代码中,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值。
复数矩阵共轭转置和乘法指令的一个实施例使用来自复数源矩阵A和复数源矩阵B的实值和虚值执行操作
Figure RE-GDA0003436918580000462
Figure RE-GDA0003436918580000463
实数结果和虚数结果被存储在复数结果矩阵C中。
如图27所示,矩阵执行电路2091的一个实施例包括:复数矩阵共轭转置硬件逻辑2513,用于产生源矩阵2101的共轭转置;并行乘法电路2710(例如,多个并行乘法器),用于执行实数数据元素和复数数据元素的并行乘法;以及加法器电路2720,用于利用乘积执行加法/减法。出于说明的目的,仅示出来自源矩阵A 2101、源矩阵B 2702和结果矩阵C 2703的复数数据元素的一小部分。然而,应注意,对这些复数数据元素执行的操作可以并行地对每个相应矩阵的其他复数数据元素执行。
在所示的实现方式中,共轭转置硬件逻辑2510包括多个反相器2521-2524(例如,NOT门),用于分别反转矩阵A 2101的每个虚值A1I、A2I、A3I、A4I等的符号位2511-2513以生成虚值-A1I、-A2I、-A3I、-A4I等,使用经反转的符号位和实值A1R、A2R、A3R、A4R等。
转置硬件逻辑2315使用这些值执行矩阵转置操作以生成共轭转置矩阵
Figure RE-GDA0003436918580000472
2703。在一个实施例中,并行乘法器2710将共轭转置矩阵
Figure RE-GDA0003436918580000473
2703的每个实数数据元素与复数矩阵B 2702的对应的虚数数据元素相乘,并且将共轭矩阵
Figure RE-GDA0003436918580000474
2703的每个虚数数据元素与复数矩阵B 2702的对应的实数数据元素相乘(即,
Figure RE-GDA0003436918580000475
)。
在图27中,例如,乘法器2711执行操作
Figure RE-GDA0003436918580000476
并且乘法器2712执行操作
Figure RE-GDA0003436918580000477
加法器网络2720的加法器2751将两个值相加以生成结果矩阵C 2703中的对应的复数数据元素的虚分量C1I
复数矩阵共轭转置和乘法指令的一个实施例根据以下伪代码操作以生成结果矩阵中的每个数据元素的虚分量:
TCONJCMMIMFP16PS tsrcdest,tsrc1,tsrc2
Figure RE-GDA0003436918580000471
Figure RE-GDA0003436918580000481
在以上代码中,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:如示例3的处理器,其中,第一多个复数值和第二多个复数值中的复数值包括32位浮点值,各自具有16位实分量和16位虚分量。
示例5:如示例4的处理器,其中,第一源矩阵包括具有k 行和m列的复数数据元素的k x m矩阵,共轭转置矩阵包括具有m行和k 列的复数数据元素的m x k矩阵,并且第二源矩阵包括具有k行和n列的复数数据元素的k x n矩阵。
示例6:如示例5的处理器,其中,并行乘法电路包括多个乘法器,用于执行共轭转置矩阵中的实值和虚值的至少一部分分别与第二源矩阵中的对应的虚值和实值的第一多个并行乘法以生成第一多个虚数乘积和第二多个虚数乘积。
示例7:如示例3的处理器,其中,对多个复数共轭值进行转置包括交换第一复数源矩阵的行和列的索引。
示例8:一种处理器,包括:解码器,用于对复数矩阵共轭和乘法指令解码,复数矩阵共轭和乘法指令包括用于标识包括第一多个复数值的第一复数源矩阵的第一源操作数、用于标识包括第二多个复数值的第二复数源矩阵的第二源操作数、以及用于标识结果矩阵的第一目的地操作数;执行电路,用于执行复数矩阵共轭和乘法指令,执行电路包括:转置硬件逻辑,用于对第一复数源矩阵进行转置以生成包括第一多个复数值的经转置的复数源矩阵;矩阵共轭硬件逻辑,用于确定与经转置的复数源矩阵中的第一多个复数值对应的多个复数共轭值以生成共轭转置矩阵;并行乘法电路,用于:将来自共轭转置矩阵的多个复数共轭值的实值与来自第二多个复数值的对应的虚值相乘以生成第一多个虚数乘积;以及将来自共轭转置矩阵的多个复数共轭值的虚值与来自第二多个复数值的对应的实值相乘以生成第二多个虚数乘积;以及加法/减法电路,用于将第一多个虚数乘积中的每个虚数乘积与第二多个虚数乘积中的对应的虚数乘积相加以产生结果矩阵中的对应的虚分量。
示例9:一种方法,包括:对复数矩阵共轭和乘法指令解码,复数矩阵共轭和乘法指令包括用于标识包括第一多个复数值的第一复数源矩阵的第一源操作数、用于标识包括第二多个复数值的第二复数源矩阵的第二源操作数、以及用于标识结果矩阵的第一目的地操作数;利用执行电路执行复数矩阵共轭和乘法指令以执行以下操作:由执行电路的矩阵共轭硬件逻辑确定与第一多个复数值对应的多个复数共轭值;由执行电路的转置硬件逻辑对多个复数共轭值进行转置以生成包括复数共轭值的共轭转置矩阵;将来自共轭转置矩阵的多个复数共轭值的实值与来自第二多个复数值的对应的虚值相乘以生成第一多个虚数乘积;以及将来自共轭转置矩阵的多个复数共轭值的虚值与来自第二多个复数值的对应的实值相乘以生成第二多个虚数乘积;以及将第一多个虚数乘积中的每个虚数乘积与第二多个虚数乘积中的对应的虚数乘积相加以产生结果矩阵中的对应的虚分量。
示例10:如示例9的方法,其中,复数矩阵共轭硬件逻辑包括多个反相器,每个反相器用于改变第一多个复数值的对应的虚分量的符号以生成多个经转换的虚分量。
示例11:如示例10的方法,其中,多个复数共轭值中的每一个复数共轭值包括第一多个复数值中的一个复数值的实分量和对应的经转换的虚分量。
示例12:如示例11的方法,其中,第一多个复数值和第二多个复数值中的复数值包括32位浮点值,各自具有16位实分量和16位虚分量。
示例13:如示例12的方法,其中,第一源矩阵包括具有k 行和m列的复数数据元素的k x m矩阵,共轭转置矩阵包括具有m行和k 列的复数数据元素的m x k矩阵,并且第二源矩阵包括具有k行和n列的复数数据元素的k x n矩阵。
示例14:如示例13的方法,其中,并行乘法电路包括多个乘法器,用于执行共轭转置矩阵中的实值和虚值的至少一部分分别与第二源矩阵中的对应的虚值和实值的第一多个并行乘法以生成第一多个虚数乘积和第二多个虚数乘积。
示例15:如示例11的方法,其中,对多个复数共轭值进行转置包括交换第一复数源矩阵的行和列的索引。
示例16:一种机器可读介质,具有存储于其上的程序代码,程序代码当由机器执行时,使机器执行以下操作:对复数矩阵共轭和乘法指令解码,复数矩阵共轭和乘法指令包括用于标识包括第一多个复数值的第一复数源矩阵的第一源操作数、用于标识包括第二多个复数值的第二复数源矩阵的第二源操作数、以及用于标识结果矩阵的第一目的地操作数;利用执行电路执行复数矩阵共轭和乘法指令以执行以下操作:由执行电路的矩阵共轭硬件逻辑确定与第一多个复数值对应的多个复数共轭值;由执行电路的转置硬件逻辑对多个复数共轭值进行转置以生成包括复数共轭值的共轭转置矩阵;将来自共轭转置矩阵的多个复数共轭值的实值与来自第二多个复数值的对应的虚值相乘以生成第一多个虚数乘积;以及将来自共轭转置矩阵的多个复数共轭值的虚值与来自第二多个复数值的对应的实值相乘以生成第二多个虚数乘积;以及将第一多个虚数乘积中的每个虚数乘积与第二多个虚数乘积中的对应的虚数乘积相加以产生结果矩阵中的对应的虚分量。
示例17:如示例16的机器可读介质,其中,复数矩阵共轭硬件逻辑包括多个反相器,每个反相器用于改变第一多个复数值的对应的虚分量的符号以生成多个经转换的虚分量。
示例18:如示例17的机器可读介质,其中,多个复数共轭值中的每一个复数共轭值包括第一多个复数值中的一个复数值的实分量和对应的经转换的虚分量。
示例19:如示例18的机器可读介质,其中,第一多个复数值和第二多个复数值中的复数值包括32位浮点值,各自具有16位实分量和16位虚分量。
示例20:如示例19的机器可读介质,其中,第一源矩阵包括具有k行和m列的复数数据元素的k x m矩阵,共轭转置矩阵包括具有m 行和k列的复数数据元素的m x k矩阵,并且第二源矩阵包括具有k行和n 列的复数数据元素的k x n矩阵。
示例21:如示例20的机器可读介质,其中,并行乘法电路包括多个乘法器,用于执行共轭转置矩阵中的实值和虚值的至少一部分分别与第二源矩阵中的对应的虚值和实值的第一多个并行乘法以生成第一多个虚数乘积和第二多个虚数乘积。
示例22:如示例18的机器可读介质,其中,对多个复数共轭值进行转置包括交换第一复数源矩阵的行和列的索引。
此外,在上文描述的各实施例中,除非另外专门指出,否则,诸如短语“A、B或C中的至少一个”之类的分隔语言旨在被理解为意味着A、 B、或C、或其任何组合(例如,A、B、和/或C)。由此,分隔语言不旨在也不应当被理解为暗示给定的实施例要求A中的至少一个、B中的至少一个或C中的至少一个各自都存在。
因此,说明书和附图应被认为是说明性而非限制性意义。然而,将显而易见的是,可对这些实现方式作出各种修改和改变,而不背离如权利要求中所述的本公开的更宽泛的精神和范围。
贯穿此具体实施方式,出于解释的目的,阐述了众多特定细节以便提供对本发明的透彻理解。然而,对于本领域的技术人员而言将显而易见的是,可以在没有这些特定细节中的一些的情况下实现本发明。在某些实例中,未详细地描述公知结构和功能以避免使本发明的主题模糊。因此,本发明的范围和精神应根据所附权利要求来判定。

Claims (29)

1.一种处理器,包括:
解码器,用于对复数矩阵共轭和乘法指令解码,所述复数矩阵共轭和乘法指令包括用于标识包括第一多个复数值的第一复数源矩阵的第一源操作数、用于标识包括第二多个复数值的第二复数源矩阵的第二源操作数、以及用于标识结果矩阵的第一目的地操作数;
执行电路,用于执行所述复数矩阵共轭和乘法指令,所述执行电路包括:
矩阵共轭硬件逻辑,用于确定与所述第一多个复数值对应的多个复数共轭值;
转置硬件逻辑,用于对所述多个复数共轭值进行转置以生成包括所述复数共轭值的共轭转置矩阵;
并行乘法电路,用于:
将来自所述共轭转置矩阵的所述多个复数共轭值的实值与来自所述第二多个复数值的对应的虚值相乘以生成第一多个虚数乘积;以及
将来自所述共轭转置矩阵的所述多个复数共轭值的虚值与来自所述第二多个复数值的对应的实值相乘以生成第二多个虚数乘积;以及
加法/减法电路,用于将所述第一多个虚数乘积中的每个虚数乘积与所述第二多个虚数乘积中的对应的虚数乘积相加以产生所述结果矩阵中的对应的虚分量。
2.如权利要求1所述的处理器,其中,所述复数矩阵共轭硬件逻辑包括多个反相器,每个反相器用于改变所述第一多个复数值的对应的虚分量的符号以生成多个经转换的虚分量。
3.如权利要求2所述的处理器,其中,所述多个复数共轭值中的每一个复数共轭值包括所述第一多个复数值中的一个复数值的实分量和对应的经转换的虚分量。
4.如权利要求3所述的处理器,其中,所述第一多个复数值和所述第二多个复数值中的复数值包括32位浮点值,各自具有16位实分量和16位虚分量。
5.如权利要求4所述的处理器,其中,所述第一源矩阵包括具有k行和m列的复数数据元素的k x m矩阵,所述共轭转置矩阵包括具有m行和k列的复数数据元素的m x k矩阵,并且所述第二源矩阵包括具有k行和n列的复数数据元素的k x n矩阵。
6.如权利要求5所述的处理器,其中,所述并行乘法电路包括多个乘法器,用于执行所述共轭转置矩阵中的实值和虚值的至少一部分分别与所述第二源矩阵中的对应的虚值和实值的第一多个并行乘法以生成所述第一多个虚数乘积和所述第二多个虚数乘积。
7.如权利要求3至6中任一项所述的处理器,其中,对所述多个复数共轭值进行转置包括交换所述第一复数源矩阵的行和列的索引。
8.一种处理器,包括:
解码器,用于对复数矩阵共轭和乘法指令解码,所述复数矩阵共轭和乘法指令包括用于标识包括第一多个复数值的第一复数源矩阵的第一源操作数、用于标识包括第二多个复数值的第二复数源矩阵的第二源操作数、以及用于标识结果矩阵的第一目的地操作数;
执行电路,用于执行所述复数矩阵共轭和乘法指令,所述执行电路包括:
转置硬件逻辑,用于对所述第一复数源矩阵进行转置以生成包括所述第一多个复数值的经转置的复数源矩阵;
矩阵共轭硬件逻辑,用于确定与所述经转置的复数源矩阵中的所述第一多个复数值对应的多个复数共轭值以生成共轭转置矩阵;
并行乘法电路,用于:
将来自所述共轭转置矩阵的所述多个复数共轭值的实值与来自所述第二多个复数值的对应的虚值相乘以生成第一多个虚数乘积;以及
将来自所述共轭转置矩阵的所述多个复数共轭值的虚值与来自所述第二多个复数值的对应的实值相乘以生成第二多个虚数乘积;以及
加法/减法电路,用于将所述第一多个虚数乘积中的每个虚数乘积与所述第二多个虚数乘积中的对应的虚数乘积相加以产生所述结果矩阵中的对应的虚分量。
9.一种方法,包括:
对复数矩阵共轭和乘法指令解码,所述复数矩阵共轭和乘法指令包括用于标识包括第一多个复数值的第一复数源矩阵的第一源操作数、用于标识包括第二多个复数值的第二复数源矩阵的第二源操作数、以及用于标识结果矩阵的第一目的地操作数;
利用执行电路执行所述复数矩阵共轭和乘法指令以执行以下操作:
由所述执行电路的矩阵共轭硬件逻辑确定与所述第一多个复数值对应的多个复数共轭值;
由所述执行电路的转置硬件逻辑对所述多个复数共轭值进行转置以生成包括所述复数共轭值的共轭转置矩阵;
将来自所述共轭转置矩阵的所述多个复数共轭值的实值与来自所述第二多个复数值的对应的虚值相乘以生成第一多个虚数乘积;以及
将来自所述共轭转置矩阵的所述多个复数共轭值的虚值与来自所述第二多个复数值的对应的实值相乘以生成第二多个虚数乘积;以及
将所述第一多个虚数乘积中的每个虚数乘积与所述第二多个虚数乘积中的对应的虚数乘积相加以产生所述结果矩阵中的对应的虚分量。
10.如权利要求9所述的方法,其中,所述复数矩阵共轭硬件逻辑包括多个反相器,每个反相器用于改变所述第一多个复数值的对应的虚分量的符号以生成多个经转换的虚分量。
11.如权利要求10所述的方法,其中,所述多个复数共轭值中的每一个复数共轭值包括所述第一多个复数值中的一个复数值的实分量和对应的经转换的虚分量。
12.如权利要求11所述的方法,其中,所述第一多个复数值和所述第二多个复数值中的复数值包括32位浮点值,各自具有16位实分量和16位虚分量。
13.如权利要求12所述的方法,其中,所述第一源矩阵包括具有k行和m列的复数数据元素的k x m矩阵,所述共轭转置矩阵包括具有m行和k列的复数数据元素的m x k矩阵,并且所述第二源矩阵包括具有k行和n列的复数数据元素的k x n矩阵。
14.如权利要求13所述的方法,其中,所述并行乘法电路包括多个乘法器,用于执行所述共轭转置矩阵中的实值和虚值的至少一部分分别与所述第二源矩阵中的对应的虚值和实值的第一多个并行乘法以生成所述第一多个虚数乘积和所述第二多个虚数乘积。
15.如权利要求11至14中任一项所述的方法,其中,对所述多个复数共轭值进行转置包括交换所述第一复数源矩阵的行和列的索引。
16.一种机器可读介质,具有存储于其上的程序代码,所述程序代码当由机器执行时,使所述机器执行以下操作:
对复数矩阵共轭和乘法指令解码,所述复数矩阵共轭和乘法指令包括用于标识包括第一多个复数值的第一复数源矩阵的第一源操作数、用于标识包括第二多个复数值的第二复数源矩阵的第二源操作数、以及用于标识结果矩阵的第一目的地操作数;
利用执行电路执行所述复数矩阵共轭和乘法指令以执行以下操作:
由所述执行电路的矩阵共轭硬件逻辑确定与所述第一多个复数值对应的多个复数共轭值;
由所述执行电路的转置硬件逻辑对所述多个复数共轭值进行转置以生成包括所述复数共轭值的共轭转置矩阵;
将来自所述共轭转置矩阵的所述多个复数共轭值的实值与来自所述第二多个复数值的对应的虚值相乘以生成第一多个虚数乘积;以及
将来自所述共轭转置矩阵的所述多个复数共轭值的虚值与来自所述第二多个复数值的对应的实值相乘以生成第二多个虚数乘积;以及
将所述第一多个虚数乘积中的每个虚数乘积与所述第二多个虚数乘积中的对应的虚数乘积相加以产生所述结果矩阵中的对应的虚分量。
17.如权利要求16所述的机器可读介质,其中,所述复数矩阵共轭硬件逻辑包括多个反相器,每个反相器用于改变所述第一多个复数值的对应的虚分量的符号以生成多个经转换的虚分量。
18.如权利要求17所述的机器可读介质,其中,所述多个复数共轭值中的每一个复数共轭值包括所述第一多个复数值中的一个复数值的实分量和对应的经转换的虚分量。
19.如权利要求18所述的机器可读介质,其中,所述第一多个复数值和所述第二多个复数值中的复数值包括32位浮点值,各自具有16位实分量和16位虚分量。
20.如权利要求19所述的机器可读介质,其中,所述第一源矩阵包括具有k行和m列的复数数据元素的k x m矩阵,所述共轭转置矩阵包括具有m行和k列的复数数据元素的m x k矩阵,并且所述第二源矩阵包括具有k行和n列的复数数据元素的k x n矩阵。
21.如权利要求20所述的机器可读介质,其中,所述并行乘法电路包括多个乘法器,用于执行所述共轭转置矩阵中的实值和虚值的至少一部分分别与所述第二源矩阵中的对应的虚值和实值的第一多个并行乘法以生成所述第一多个虚数乘积和所述第二多个虚数乘积。
22.如权利要求18至21中任一项所述的机器可读介质,其中,对所述多个复数共轭值进行转置包括交换所述第一复数源矩阵的行和列的索引。
23.一种设备,包括:
用于对复数矩阵共轭和乘法指令解码的装置,所述复数矩阵共轭和乘法指令包括用于标识包括第一多个复数值的第一复数源矩阵的第一源操作数、用于标识包括第二多个复数值的第二复数源矩阵的第二源操作数、以及用于标识结果矩阵的第一目的地操作数;
用于执行所述复数矩阵共轭和乘法指令以执行以下操作的装置:
由所述执行电路的矩阵共轭硬件逻辑确定与所述第一多个复数值对应的多个复数共轭值;
由所述执行电路的转置硬件逻辑对所述多个复数共轭值进行转置以生成包括所述复数共轭值的共轭转置矩阵;
将来自所述共轭转置矩阵的所述多个复数共轭值的实值与来自所述第二多个复数值的对应的虚值相乘以生成第一多个虚数乘积;以及
将来自所述共轭转置矩阵的所述多个复数共轭值的虚值与来自所述第二多个复数值的对应的实值相乘以生成第二多个虚数乘积;以及
将所述第一多个虚数乘积中的每个虚数乘积与所述第二多个虚数乘积中的对应的虚数乘积相加以产生所述结果矩阵中的对应的虚分量。
24.如权利要求23所述的设备,其中,所述复数矩阵共轭硬件逻辑包括多个反相器,每个反相器用于改变所述第一多个复数值的对应的虚分量的符号以生成多个经转换的虚分量。
25.如权利要求24所述的设备,其中,所述多个复数共轭值中的每一个复数共轭值包括所述第一多个复数值中的一个复数值的实分量和对应的经转换的虚分量。
26.如权利要求25所述的设备,其中,所述第一多个复数值和所述第二多个复数值中的复数值包括32位浮点值,各自具有16位实分量和16位虚分量。
27.如权利要求26所述的设备,其中,所述第一源矩阵包括具有k行和m列的复数数据元素的k x m矩阵,所述共轭转置矩阵包括具有m行和k列的复数数据元素的m x k矩阵,并且所述第二源矩阵包括具有k行和n列的复数数据元素的k x n矩阵。
28.如权利要求27所述的设备,其中,所述并行乘法电路包括多个乘法器,用于执行所述共轭转置矩阵中的实值和虚值的至少一部分分别与所述第二源矩阵中的对应的虚值和实值的第一多个并行乘法以生成所述第一多个虚数乘积和所述第二多个虚数乘积。
29.如权利要求25至28中任一项所述的设备,其中,对所述多个复数共轭值进行转置包括交换所述第一复数源矩阵的行和列的索引。
CN202111467173.0A 2020-12-23 2021-12-03 用于共轭转置和乘法的装置和方法 Pending CN114662048A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/133,456 US20220197975A1 (en) 2020-12-23 2020-12-23 Apparatus and method for conjugate transpose and multiply
US17/133,456 2020-12-23

Publications (1)

Publication Number Publication Date
CN114662048A true CN114662048A (zh) 2022-06-24

Family

ID=77864486

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111467173.0A Pending CN114662048A (zh) 2020-12-23 2021-12-03 用于共轭转置和乘法的装置和方法

Country Status (3)

Country Link
US (1) US20220197975A1 (zh)
EP (1) EP4020176A1 (zh)
CN (1) CN114662048A (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
EP4024223A1 (en) 2019-03-15 2022-07-06 Intel Corporation Systems and methods for cache optimization
AU2020241262A1 (en) 2019-03-15 2021-11-04 Intel Corporation Sparse optimizations for a matrix accelerator architecture
US12013808B2 (en) 2019-03-15 2024-06-18 Intel Corporation Multi-tile architecture for graphics operations
US11861761B2 (en) 2019-11-15 2024-01-02 Intel Corporation Graphics processing unit processing and caching improvements

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7395298B2 (en) * 1995-08-31 2008-07-01 Intel Corporation Method and apparatus for performing multiply-add operations on packed data
US7072929B2 (en) * 2000-11-01 2006-07-04 Pts Corporation Methods and apparatus for efficient complex long multiplication and covariance matrix implementation
US7430577B2 (en) * 2002-09-24 2008-09-30 Interdigital Technology Corporation Computationally efficient mathematical engine
US9065690B2 (en) * 2011-05-02 2015-06-23 Mediatek Inc. Method and apparatus for performing channel shortening equalization with frequency notch mitigation
US9411583B2 (en) * 2011-12-22 2016-08-09 Intel Corporation Vector instruction for presenting complex conjugates of respective complex numbers
US10073696B2 (en) * 2013-07-15 2018-09-11 Texas Instruments Incorporated Streaming engine with cache-like stream data storage and lifetime tracking
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
US10664277B2 (en) * 2017-09-29 2020-05-26 Intel Corporation Systems, apparatuses and methods for dual complex by complex conjugate multiply of signed words
US10521226B2 (en) * 2018-03-30 2019-12-31 Intel Corporation Efficient implementation of complex vector fused multiply add and complex vector multiply
US10649772B2 (en) * 2018-03-30 2020-05-12 Intel Corporation Method and apparatus for efficient matrix transpose

Also Published As

Publication number Publication date
US20220197975A1 (en) 2022-06-23
EP4020176A1 (en) 2022-06-29

Similar Documents

Publication Publication Date Title
EP4020176A1 (en) Apparatus and method for conjugate transpose and multiply
US20220414182A1 (en) Apparatuses, methods, and systems for instructions for matrix multiplication instructions
US20220206743A1 (en) Instructions to convert from fp16 to bf8
US20240248720A1 (en) Instructions to convert from fp16 to bf8
EP4020177A1 (en) Apparatus and method for complex matrix conjugate transpose
EP4020179A1 (en) Apparatus and method for complex matrix transpose and multiply
EP4020174A1 (en) Apparatus and method for complex matrix multiplication
US12086595B2 (en) Apparatuses, methods, and systems for instructions for downconverting a tile row and interleaving with a register
EP4016290A1 (en) Efficient multiply and accumulate instruction when an operand is equal to or near a power of two
EP4109245B1 (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
EP4109248A1 (en) Dual sum of quadword 16x16 multiply and accumulate
US20220197634A1 (en) Efficient divide and accumulate instruction when an operand is equal to or near a power of two
US20230205436A1 (en) Zero cycle memory initialization
US20230205685A1 (en) Read all zeros or random data upon a first read from volatile memory
EP4202656A1 (en) Random data usage
US20240004661A1 (en) Add with rotation instruction and support
US20240264837A1 (en) Instructions for accelerating keccak execution in a processor
US20230205527A1 (en) Conversion instructions
EP4155913A1 (en) Apparatuses, methods, and systems for instructions for structured-sparse tile matrix fma
CN115525252A (zh) 四字16×16乘法和累加的双求和
CN115729620A (zh) Bfloat16平方根和/或平方根倒数指令
CN115729617A (zh) Bfloat16融合乘法指令
CN115729618A (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