CN113961874A - 矩阵乘积累加运算的广义加速 - Google Patents

矩阵乘积累加运算的广义加速 Download PDF

Info

Publication number
CN113961874A
CN113961874A CN202111063446.5A CN202111063446A CN113961874A CN 113961874 A CN113961874 A CN 113961874A CN 202111063446 A CN202111063446 A CN 202111063446A CN 113961874 A CN113961874 A CN 113961874A
Authority
CN
China
Prior art keywords
mma
matrix
instruction
logic
unit
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
CN202111063446.5A
Other languages
English (en)
Inventor
B·R·博斯韦尔
M·Y·西乌
J·H·肖凯特
J·M·阿尔本
S·奥伯曼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia 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
Priority claimed from US15/826,435 external-priority patent/US10338919B2/en
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of CN113961874A publication Critical patent/CN113961874A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • 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/544Methods 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 for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • 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/40Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using contact-making devices, e.g. electromagnetic relay
    • G06F7/44Multiplying; Dividing
    • 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/50Adding; Subtracting
    • 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
    • G06F7/5235Multiplying only using indirect methods, e.g. quarter square method, via logarithmic domain
    • 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/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • G06F7/575Basic arithmetic logic units, i.e. devices selectable to perform either addition, subtraction or one of several logical operations, using, at least partially, the same circuitry
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/48Indexing scheme relating to groups G06F7/48 - G06F7/575
    • G06F2207/4802Special implementations
    • G06F2207/4818Threshold devices
    • G06F2207/4824Neural networks

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 Analysis (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Multimedia (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Electromagnetism (AREA)
  • Image Generation (AREA)
  • Advance Control (AREA)

Abstract

公开了用于执行矩阵乘积和累加(MMA)运算的方法、计算机可读介质和处理器。处理器包括数据路径,其被配置为执行MMA运算以在数据路径的输出处生成结果矩阵的多个元素。通过计算与在用于MMA运算的指令中指定的矩阵运算对象相关联的相应向量对的至少一个点积来生成结果矩阵的每个元素。点积操作包括以下步骤:通过将第一向量的每个元素与第二向量的对应元素相乘来生成多个部分乘积;基于与第一向量的每个元素和第二向量的每个元素相关联的指数来对齐多个部分乘积;以及利用至少一个加法器将多个经对齐的部分乘积累加到结果队列中。

Description

矩阵乘积累加运算的广义加速
本申请是分案申请,其原申请的中国国家申请号为201810425869.9,申请日为2018年5月7日,发明名称为“矩阵乘积累加运算的广义加速”。
相关申请的交叉引用
本申请要求于2017年5月8日提交的标题为“矩阵乘积累加运算的广义加速(Generalized Acceleration of Matrix Multiply Accumulate Operations)”的美国临时申请No.62/503,159(代理人案卷号NVIDP1157+)的权益,其全部内容通过引用并入本文。
技术领域
本公开涉及在处理器上实现算术运算,并且更具体地涉及矩阵乘积累加运算的加速。
背景技术
现代计算机处理器基本上是集成电路,设计为完成逻辑任务。处理器真正擅长实现的一项任务是对以不同格式(例如,8位整数、32位整数、32位浮点值等)编码的数字执行算术运算。但是,大多数处理器包含用于对标量运算对象执行这些算术运算的逻辑。例如,设计用于执行加法运算的逻辑被设计为使用两个不同的运算对象来执行运算,每个运算对象编码特定值以与另一个运算对象相加。但是,算术运算不限于标量值。实际上,许多应用可能会对向量或矩阵输入使用算术运算。对向量进行算术运算的一个示例是点积运算。尽管在这些应用(例如,物理学)中计算点积是常见的,但是现代处理器通常没有被设计在电路中以有效地执行这些运算的硬件。相反,使用标量值将较高级别的运算简化为一系列基本的算术运算。例如,在点积运算中,每个向量运算对象包括多个元素,并且通过将两个输入向量的相应元素对相乘以生成多个部分乘积(即,中间结果)和然后对多个部分乘积进行求和来执行点积运算。每个基本算术运算都可以使用被设计到处理器中的硬件逻辑来顺序执行,并且中间结果可以存储在临时存储器中,并且可以重新用作另一个后续算术运算的运算对象。
常规的处理器包括一个或更多个内核,其中每个内核可包括用于对整数和/或浮点值执行基本运算的算术逻辑单元(arithmetic logic unit,ALU)和/或浮点单元。常规的浮点单元可以被设计为实现熔合乘积累加(fused multiply accumulate,FMA)运算,其将两个标量运算对象相乘,并将中间结果以及可选的第三标量运算对象添加到累加寄存器。矩阵乘积和累加(matrix multiply and accumulate,MMA)运算是应用于矩阵运算对象的标量值的FMA运算的扩展。换句话说,MMA运算将两个矩阵相乘,并且可选地将得到的中间矩阵加到第三矩阵运算对象。从根本上说,MMA运算可以被简化为加到累加寄存器中的多个基本点积运算。此外,点积运算可以进一步简化为对标量运算对象对的一系列FMA运算。
常规的处理器可以通过将MMA运算分解为一系列点积运算和加法运算来实现矩阵运算,并且每个点积运算可以进一步分解为对一对向量的相应元素的一系列FMA指令。然而,由于MMA运算必须分解为使用标量运算对象的每个基本算术运算,因此这种技术效率不高。由处理器的逻辑执行的每个基本算术运算涉及移动处理器的寄存器文件和到数据路径(即逻辑电路)的输入之间的标量运算对象。然而,矩阵运算的基本概念是矩阵的相同元素在多个点积运算中被重新使用(例如,第一矩阵的相同行被用于生成与第二矩阵的多个列对应的多个点积)。如果每个基本算术运算都需要在执行算术运算之前将数据从寄存器文件加载到数据路径的输入,那么可以将输入运算对象的每个数据元素从寄存器文件加载到数据路径许多次,这是对寄存器文件带宽的低效使用。尽管可能存在提高处理器效率的技术(例如,具有多个库的寄存器文件,使得运算对象可以高效地存储在单独的库中,并且在单个时钟周期(cycle)中多个运算对象可以从寄存器文件被加载到数据路径的输入),通常,数据路径不是专门针对矩阵运算而设计的。因此,需要解决这些问题和/或与现有技术相关的其他问题。
发明内容
公开了一种用于执行矩阵乘积和累加(MMA)运算的方法、计算机可读介质和处理器。处理器包括数据路径,该数据路径被配置为执行MMA运算以在数据路径的输出处生成结果矩阵的多个元素。通过计算与在用于MMA运算的指令中指定的矩阵运算对象相关联的相应向量对的至少一个点积来生成结果矩阵的每个元素。点积运算包括以下步骤:通过将第一向量的每个元素与第二向量的对应元素相乘来生成多个部分乘积;基于与第一向量的每个元素和第二向量的每个元素相关联的指数来对齐多个部分乘积;以及利用至少一个加法器将多个经对齐的部分乘积累加到结果队列中。
附图说明
图1示出了根据一个实施例的用于执行矩阵乘积和累加运算的方法的流程图;
图2示出了根据一个实施例的并行处理单元(PPU);
图3A示出了根据一个实施例的图2的PPU的通用处理集群;
图3B示出了根据一个实施例的图2的PPU的分区单元;
图4示出了根据一个实施例的图3A的流式多处理器;
图5示出了根据一个实施例的包括图2的PPU的片上系统;
图6是根据一个实施例的由图2的PPU实现的图形处理流水线的概念图;
图7示出了根据一个实施例的矩阵乘积累加运算;
图8是根据一个实施例的点积运算的概念图;
图9示出了根据一个实施例的包括被配置为实现矩阵运算的数据路径的处理器的一部分;
图10示出了根据一个实施例的常规的双精度浮点熔合乘积累加数据路径;
图11示出了根据一个实施例的半精度矩阵乘积和累加数据路径;
图12示出了根据另一个实施例的半精度矩阵乘积和累加数据路径;
图13示出了根据又一实施例的半精度矩阵乘积和累加数据路径;
图14示出了根据一个实施例的、被配置为与图10的双精度浮点熔合乘积累加数据路径共享至少一个流水线阶段的图13的半精度矩阵乘积和累加数据路径;以及
图15示出了在其中可以实现各种先前实施例的各种架构和/或功能的示例性系统。
具体实施方式
许多现代应用可以从处理器对矩阵运算的更高效处理中受益。对矩阵运算对象执行的算术运算常用于各种算法,包括但不限于:深度学习算法、线性代数和图形加速等。通过使用并行处理单元可以获得更高的效率,因为矩阵运算可以被简化为对矩阵运算对象的不同部分的多个并行运算。
本文探讨了一种用于数据路径设计的新的范例,以加速如由处理器执行的矩阵运算。数据路径的基本概念是数据路径对多个向量运算对象执行一个或更多个点积运算。然后可以通过将矩阵运算简化为多个点乘积运算来加速矩阵运算,并且一些点积运算可以受益于数据路径内的数据共享,该数据路径减小了寄存器文件与数据路径的输入之间的带宽。
图1示出了根据一个实施例的用于执行矩阵乘积和累加运算的方法100的流程图。将领会到,方法100在由处理器执行的软件的范围内被描述;然而,在一些实施例中,方法100可以以硬件或以硬件和软件的一些组合的方式被实现。方法100从步骤102开始,其中接收用于矩阵乘积和累加(MMA)运算的指令。在一个实施例中,用于MMA运算的指令指定了多个矩阵运算对象。第一运算对象指定了被乘数输入矩阵A,第二运算对象指定了乘数输入矩阵B,以及第三运算对象指定了用于累加前两个输入矩阵的乘积结果的收集器矩阵C。在指令中指定的每个运算对象是具有行和列的二维阵列中的多个元素的矩阵。
在步骤104,将指令中指定的第一运算对象的至少两个向量和该指令中指定的第二运算对象的至少两个向量从寄存器文件被加载到多个运算对象收集器中。在一个实施例中,运算对象收集器是多个触发器,其耦合到被配置为执行MMA运算的数据路径的输入。多个触发器在数据路径的输入处临时存储用于MMA指令的运算对象的数据,使得多个运算对象可以在多个时钟周期内从寄存器文件被加载到数据路径的输入。通常,寄存器文件在一个或更多个读取端口上具有有限量的带宽,使得在给定的时钟周期内只能从寄存器文件中读取有限量的数据。因此,在启动数据路径上MMA运算的执行之前,运算对象收集器使得在多个时钟周期内能够从数据文件读取数据路径所需的所有运算对象。
在步骤106,执行MMA运算以在数据路径的输出处生成结果矩阵的多个元素。在一个实施例中,通过计算存储在多个运算对象收集器中的相应的向量对的至少一个点积来生成结果矩阵的每个元素。在每次通过(pass)期间消耗存储在运算对象收集器中的不同向量的组合,数据路径可以被设计为在数据路径的多次通过中生成结果矩阵的多个元素。可选地,利用不同的逻辑集来并行地计算多个点积,数据路径可以被设计为在数据路径的单次通过中生成结果矩阵的多个元素。当然,在一些实施例中,为了在单指令周期内生成更多的结果矩阵元素,可以使用多个逻辑集来并行计算多个点积以及可以使用数据路径的多次通过。应当领会,在随后的通过或指令周期中,在不需要从寄存器文件加载到运算对象收集器的新运算对象数据的情况下,生成结果矩阵的多个元素。此外,应当领会,存储在运算对象收集器中的输入矩阵运算对象(即,A和B)的每个向量可以被贡献给结果矩阵的多个元素的多个点积运算消耗。
根据用户的需求,现在将阐述关于可以或不可以实施前述框架的各种可选架构和特征的更多说明性信息。应当特别注意,下面的信息是为了说明的目的而提出的,并且不应该被解释为以任何方式进行限制。任何以下特征可以可选地并入或不包括所描述的其他特征。
并行处理架构
图2示出了根据一个实施例的并行处理单元(parallel processing unit,PPU)200。在一个实施例中,PPU 200是多线程处理器,其在一个或更多个集成电路器件上实现。PPU 200是设计为并行处理大量线程的潜在隐藏架构。线程(即,执行线程)是被配置为由PPU 200执行的一组指令的实例。在一个实施例中,PPU 200是图形处理单元(graphicsprocessing unit,GPU),其被配置为实现用于处理三维(3D)图形数据以生成用于在显示设备(诸如液晶显示(liquid crystal display,LCD)设备)上显示的二维(2D)图像数据的图形渲染流水线。在其他实施例中,PPU 200可以用于执行通用计算。尽管本文为了说明的目的提供了一个示例性并行处理器,但应当特别注意,仅出于说明目的而阐述这种处理器,并且可使用任何处理器来补充和/或替代处理器。
如图2所示,PPU 200包括输入/输出(I/O)单元205、主机接口单元210、前端单元215、调度器单元220、工作分配单元225、集线器230、交叉开关(Xbar)270、一个或更多个通用处理集群(general processing cluster,GPC)250以及一个或更多个分区单元280。PPU200可以经由系统总线202连接到主机处理器或其他外围设备。PPU 200还可以连接到包括多个存储设备204的本地存储器。在一个实施例中,本地存储器可以包括多个动态随机存取存储器(dynamic random access memory,DRAM)设备。
I/O单元205被配置为通过系统总线202从主机处理器(未示出)发送和接收通信(即,命令、数据等)。I/O单元205可以直接经由系统总线202或通过一个或更多个中间设备(诸如存储器桥)与主机处理器通信。在一个实施例中,I/O单元205实现用于通过PCIe总线进行通信的外围组件互连高速(Peripheral Component Interconnect Express,PCIe)接口。在替代实施例中,I/O单元205可以实现用于与外部设备进行通信的其他类型的已知接口。
I/O单元205耦合到主机接口单元210,其对经由系统总线202接收的数据包进行解码。在一个实施例中,数据包表示被配置为使PPU 200执行各种运算的命令。主机接口单元210按照命令指定的方式将解码的命令发送到PPU 200的各种其他单元。例如,一些命令可以被发送到前端单元215。其他命令可以被发送到集线器230或PPU 200的其他单元,诸如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。换句话说,主机接口单元210被配置为在PPU 200的各种逻辑单元之间路由通信。
在一个实施例中,由主机处理器执行的程序在缓冲区中对命令流进行编码,其向PPU 200提供用于处理的工作量。工作量可以包括要由那些指令处理的大量指令和数据。缓冲区是可由主机处理器和PPU 200两者访问(即,读取/写入)的存储器中的区域。例如,主机接口单元210可被配置为经由由I/O单元205在系统总线202上发送的存储器请求,来访问连接到系统总线202的系统存储器中的缓冲区。在一个实施例中,主机处理器将命令流写入到缓冲区,然后将指向命令流起点的指针发送到PPU 200。主机接口单元210向前端单元215提供指向一个或更多个命令流的指针。前端单元215管理一个或更多个流,从流读取命令并将命令转发到PPU 200的各个单元。
前端单元215耦合到调度器单元220,其配置各种GPC 250以处理由一个或更多个流定义的任务。调度器单元220被配置为跟踪与由调度器单元220管理的各种任务有关的状态信息。状态可以指示任务被分配给哪个GPC250,任务是活动的还是不活动的,与任务相关联的优先级等等。调度器单元220管理一个或更多个GPC 250上的多个任务的执行。
调度器单元220耦合到工作分配单元225,其被配置为分派在GPC 250上执行的任务。工作分配单元225可以跟踪从调度器单元220接收的多个调度任务。在一个实施例中,工作分配单元225为GPC 250中的每一个管理待处理(pending)任务池和活动任务池。待处理任务池可以包括多个时隙(例如,32个时隙),其包含分配为由特定GPC 250处理的任务。活动任务池可以包括多个时隙(例如,4个时隙),用于GPC 250正在有效处理的任务。当GPC250完成任务的执行时,该任务从GPC 250的活动任务池中逐出,来自待处理任务池的其他任务之一被选择和调度以在GPC 250上执行。如果GPC 250上的活动任务已经空闲,例如在等待数据依赖性被解决的同时,那么活动任务可能会被从GPC 250中逐出并返回到待处理任务池,同时待处理任务池中的另一任务被选择并被调度以在GPC 250上执行。
工作分配单元225经由XBar 270与一个或更多个GPC 250通信。XBar270是将PPU200的许多单元耦合到PPU 200的其他单元的互连网络。例如,XBar 270可以被配置为将工作分配单元225耦合到特定的GPC 250。虽然没有明确示出,但是PPU 200的一个或更多个其他单元被耦合到主机单元210。其他单元也可以经由集线器230连接到XBar 270。
任务由调度器单元220管理并由工作分配单元225分派到GPC 250。GPC 250被配置为处理该任务并生成结果。结果可以由GPC 250内的其他任务消耗,经由XBar 270路由到不同的GPC 250,或存储在存储器204中。结果可以经由分区单元280写入存储器204,其实现用于向/从存储器204写入/读取数据的存储器接口。在一个实施例中,PPU 200包括数量为U的分区单元280,其等于耦合到PPU 200的分离且不同的存储设备204的数量。将在下面结合图3B更详细地描述分区单元280。
在一个实施例中,主机处理器执行实现应用程序编程接口(applicationprogramming interface,API)的驱动程序内核,该应用程序编程接口(API)使得在主机处理器上执行的一个或更多个应用程序能够调度在PPU200上执行的运算。应用程序可以生成指令(即,API调用),其使得驱动程序内核生成由PPU 200执行的一个或更多个任务。驱动程序内核将任务输出到由PPU 200处理的一个或更多个流。每个任务可以包括一个或更多个相关线程组,本文称为线程束(warp)。线程块可以指包括用于执行任务的指令的多个线程组。同一线程组中的线程可以通过共享存储器交换数据。在一个实施例中,线程组包括32个相关线程。
图3A示出了根据一个实施例的图2的PPU 200的GPC 250。如图3A所示,每个GPC250包括用于处理任务的多个硬件单元。在一个实施例中,每个GPC 250包括流水线管理器310、预光栅操作(pre-raster operation,PROP)单元315、光栅引擎325、工作分配交叉开关(work distribution crossbar,WDX)380、存储器管理单元(memory management unit,MMU)390以及一个或更多个纹理处理集群(Texture Processing Cluster,TPC)
320。应当领会,图3A的GPC 250可以包括代替图3A中所示的单元或除了图3A中所示的单元之外的其他硬件单元。
在一个实施例中,GPC 250的操作由流水线管理器310控制。流水线管理器310管理用于处理分配给GPC 250的任务的一个或更多个TPC 320的配置。在一个实施例中,流水线管理器310可以配置一个或更多个TPC 320中的至少一个来实现图形渲染流水线的至少一部分。例如,TPC 320可被配置为在可编程流式多处理器(streaming multiprocessor,SM)340上执行顶点着色程序。流水线管理器310还可被配置为将从工作分配单元225接收的数据包路由到GPC 250内适当的逻辑单元。例如,一些数据包可以被路由到PROP 315和/或光栅引擎325中的固定功能硬件单元,而其他数据包可以被路由到TPC 320以供图元引擎335或SM 340处理。
PROP单元315被配置为将由光栅引擎325和TPC 320生成的数据路由到分区单元280中的光栅操作(Raster Operation,ROP)单元,下面将更详细地描述。PROP单元315还可以被配置为执行用于颜色混合的优化、组织像素数据、执行地址转换等。
光栅引擎325包括被配置为执行各种光栅操作的多个固定功能硬件单元。在一个实施例中,光栅引擎325包括设置引擎、粗光栅引擎、剔除引擎、裁剪引擎、精细光栅引擎和瓦片(tile)接合引擎。设置引擎接收经变换的顶点并生成与由顶点定义的几何图元相关联的平面方程。平面方程被传输到粗光栅引擎以生成图元的覆盖信息(例如,用于瓦片的x、y覆盖掩模)。粗光栅引擎的输出可以被传输到剔除引擎,其中与未通过z测试的图元相关联的片段被剔除,并且被传输到裁剪引擎,其中位于视锥之外的片段被裁剪掉。那些免于裁剪和剔除的片段可以被传递给精细光栅引擎,以基于由设置引擎生成的平面方程生成像素片段的属性。光栅引擎325的输出包括待处理的片段,例如在TPC 320内实现的片段着色。
包括在GPC 250中的每个TPC 320包括M管路控制器(M-Pipe Controller,MPC)330、图元引擎335、一个或更多个SM 340以及一个或更多个纹理单元345。MPC 330控制TPC320的操作,将从流水线管理器310接收的数据包路由到TPC 320中的适当单元。例如,与顶点相关联的数据包可以被路由到图元引擎335,其被配置为从存储器204获取与顶点相关联的顶点属性。相反,与着色程序相关联的数据包可以被发送到SM 340。
在一个实施例中,纹理单元345被配置为从存储器204加载纹理映射(例如,纹理像素的2D阵列)并对纹理映射进行采样以产生采样纹理值,以供由SM 340执行的着色程序使用。纹理单元345实施纹理运算,诸如使用mip映射(即,不同细节层次的纹理映射)的过滤操作。纹理单元345也被用作SM 340到MMU 390的加载/存储路径。在一个实施例中,每个TPC320包括两个(2)纹理单元345。
SM 340包括可编程流式处理器,其被配置为处理由多个线程表示的任务。每个SM340是多线程的并且被配置为同时执行来自特定线程组的多个线程(例如,32个线程)。在一个实施例中,SM 340实现SIMD(单指令、多数据)架构,其中线程组(即,warp)中的每个线程被配置为基于相同的指令集来处理不同的数据集。该线程组中的所有线程都执行相同的指令。在另一个实施例中,SM 340实现SIMT(单指令、多线程)架构,其中线程组中的每个线程被配置为基于相同的指令集来处理不同的数据集,但是其中线程组中的个体线程在执行期间被允许发散。换句话说,当针对该线程组的指令被分派用于执行时,该线程组中的一些线程可以是活动的,从而执行该指令,而该线程组中的其他线程可以是不活动的,因此执行空操作(no-operation,NOP)而不是执行指令。下面结合图4更详细地描述SM 340。
MMU 390提供GPC 250和分区单元280之间的接口。MMU 390可以提供虚拟地址到物理地址的转换、存储器保护以及存储器请求的仲裁。在一个实施例中,MMU 390提供一个或更多个转译后备缓冲区(translation lookaside buffer,TLB),用于改善虚拟地址到存储器204中的物理地址的转换。
图3B示出了根据一个实施例的图2的PPU 200的分区单元280。如图3B所示,分区单元280包括光栅操作(ROP)单元350、二级(L2)高速缓存360、存储器接口370和L2交叉开关(XBar)365。存储器接口370耦合到存储器204。存储器接口370可以实现用于高速数据传输的16、32、64、128位数据总线等。在一个实施例中,PPU 200包括U个存储器接口370,每个分区单元280有一个存储器接口370,其中每个分区单元280连接到相对应的存储设备204。例如,PPU 200可以连接到多达U个存储设备204,如图形双数据速率、版本5、同步动态随机存取存储器(graphics double-data-rate,version 5,synchronous dynamic randomaccess memory,GDDR5SDRAM)。在一个实施例中,存储器接口370实现DRAM接口并且U等于8。
在一个实施例中,PPU 200实现多级存储器分层结构。存储器204位于耦合到PPU200的SDRAM中的片外。来自存储器204的数据可以被获取并存储在位于芯片上并且在各个GPC 250之间共享的L2高速缓存360中。如图所示,每个分区单元280包括与对应的存储设备204相关联的L2高速缓存360的一部分。然后可以在GPC 250内的各个单元中实现较低级高速缓存。例如,SM 340中的每一个可以实现一级(L1)高速缓存。L1高速缓存是专用于特定SM340的专用存储器。来自L2高速缓存360的数据可以被获取并存储在L1高速缓存的每一个中以在SM 340的功能单元中处理。L2高速缓存360耦合到存储器接口370和XBar 270。
ROP单元350包括ROP管理器355、颜色ROP(CROP)单元352和ZROP(ZROP)单元354。CROP单元352执行与像素颜色相关的光栅操作,诸如颜色压缩、像素混合等等。ZROP单元354结合光栅引擎325实施深度测试。ZROP单元354从光栅引擎325的剔除引擎接收与像素片段相关联的采样位置的深度。ZROP单元354测试相对于深度缓冲区中与片段相关联的采样位置的对应深度的深度。如果片段通过采样位置的深度测试,则ZROP单元354更新深度缓冲区并将深度测试的结果发送给光栅引擎325。ROP管理器355控制ROP单元350的操作。应当领会,分区单元280的数量可以不同于GPC 250的数量,并且因此每个ROP单元350可以耦合到GPC 250中的每一个。因此,ROP管理器355跟踪从不同GPC 250接收到的数据包并确定ROP单元350生成的结果被路由到哪个GPC 250。CROP单元352和ZROP单元354经由L2 XBar 365耦合到L2高速缓存360。
图4示出了根据一个实施例的图3A的流式多处理器340。如图4所示,SM 340包括指令高速缓存405、一个或更多个调度器单元410、寄存器文件420、一个或更多个处理内核450、一个或更多个特殊功能单元(special function unit,SFU)452、一个或更多个加载/存储单元(load/store unit,LSU)454、互连网络480、共享存储器470和L1高速缓存490。
如上所述,工作分配单元225分派用于在PPU 200的GPC 250上执行的任务。任务被分配给GPC 250内的特定TPC 320,并且如果任务与着色程序相关联,该任务可以被分配给SM 340。调度器单元410从工作分配单元225接收任务并且管理用于指派给SM 340的一个或更多个线程组(即,warp)的指令调度。调度器单元410调度用于在并行线程组中执行的线程,其中每个组称为线程束(warp)。在一个实施例中,每个warp包括32个线程。调度器单元410可以管理多个不同的warp、调度warp以执行以及然后在每个时钟周期期间从多个不同warp向各个功能单元(即,内核350、SFU 352和LSU 354)分派指令。
在一个实施例中,每个调度器单元410包括一个或更多个指令分派单元415。每个分派单元415被配置为向功能单元中的一个或更多个传送指令。在图4所示的实施例中,调度器单元410包括两个分派单元415,其使得能够在每个时钟周期期间分派来自相同warp的两个不同指令。在替代实施例中,每个调度器单元410可以包括单个分派单元415或额外的分派单元415。
每个SM 340包括为SM 340的功能单元提供一组寄存器的寄存器文件420。在一个实施例中,寄存器文件420在功能单元的每一个之间被划分,使得每个功能单元被分配寄存器文件420的专用部分。在另一个实施例中,寄存器文件420在由SM 340正在执行的不同的warp之间被划分。寄存器文件420为连接到功能单元的数据路径的运算对象提供临时存储。
每个SM 340包括L个处理内核450。在一个实施例中,SM 340包括大量(例如128个等等)不同的处理内核450。每个内核450可以包括完全流水线、单精度处理单元,其包括浮点算术逻辑单元和整数算术逻辑单元。内核450还可以包括双精度处理单元,其包括浮点算术逻辑单元。在一个实施例中,浮点算术逻辑单元实现用于浮点算术的IEEE 754-2008标准。每个SM 340还包括执行特殊功能(例如,属性评估、倒数平方根等)的M个SFU 452以及在共享存储器470或L1高速缓存490与寄存器文件420之间实现加载和存储操作的N个LSU454。在一个实施例中,SM 340包括128个内核450、32个SFU 452和32个LSU 454。
每个SM 340包括互连网络480,其将功能单元的每一个连接到寄存器文件420并将LSU 454连接到寄存器文件420、共享存储器470和L1高速缓存490的。在一个实施例中,互连网络480是交叉开关,其可被配置为将任何功能单元连接到寄存器文件420中的任何寄存器,并将LSU 454连接到寄存器文件以及共享存储器470和L1高速缓存490中的存储器位置。
共享存储器470是片上存储器阵列,其允许SM 340与图元引擎335之间以及SM 340中的线程之间的数据存储和通信。在一个实施例中,共享存储器470包括64KB的存储容量。L1高速缓存490位于从SM 340到分区单元280的路径中。L1高速缓存490可用于高速缓存读取和写入。在一个实施例中,L1高速缓存490包括24KB的存储容量。
上述PPU 200可以被配置为比传统的CPU更快地执行高度并行计算。并行计算在图形处理、数据压缩、生物统计学、流处理算法等方面具有优势。
当配置用于通用并行计算时,可以使用更简单的配置。在这个模型中,如图2所示,固定功能图形处理单元被绕过,创建了一个更简单的编程模型。在该配置中,工作分配单元225将线程块直接指派并分配给TPC 320。块中的线程执行相同的程序,在计算中使用唯一线程ID以确保每个线程生成唯一结果,使用SM 340以执行程序并执行计算,使用共享存储器470在线程之间通信,并且使用LSU 454通过分区L1高速缓存490和分区单元280读取和写入全局存储器。
当被配置用于通用并行计算时,SM 340还可以写入调度器单元220可以用来在TPC320上启动新工作的命令。
在一个实施例中,PPU 200包括图形处理单元(GPU)。PPU 200被配置为接收指定用于处理图形数据的着色程序的命令。图形数据可以被定义为一组图元,例如点、线、三角形、四边形、三角形带等。典型地,图元包括指定图元的多个顶点(例如,在模型空间坐标系中)的数据以及与图元的每个顶点相关联的属性。PPU 200可以被配置为处理图元以生成帧缓冲区(即,用于显示器的像素中的每一个的像素数据)。
应用程序将场景的模型数据(即,顶点和属性的集合)写入存储器(诸如系统存储器或存储器204)。模型数据定义可能在显示器上可见的对象中的每一个。应用程序然后对驱动程序内核进行API调用,其请求要被渲染和显示的模型数据。驱动程序内核读取模型数据并将命令写入一个或更多个流以执行操作来处理模型数据。这些命令可以引用要在PPU200的SM 340上实现的不同着色程序,包括顶点着色、外壳着色、域着色、几何着色和像素着色中的一个或更多个。例如,SM 340中的一个或更多个可以被配置为执行顶点着色程序,其处理由模型数据定义的多个顶点。在一个实施例中,不同的SM 340可以被配置为同时执行不同的着色程序。例如,SM 340的第一子集可以被配置为执行顶点着色程序,而SM 340的第二子集可以被配置为执行像素着色程序。SM 340的第一子集处理顶点数据以产生经处理的顶点数据,并将经处理的顶点数据写入L2高速缓存360和/或存储器204。在经处理的顶点数据被光栅化(即,从三维数据转换成屏幕空间中的二维数据)以产生片段数据之后,SM 340的第二子集执行像素着色以产生经处理的片段数据,然后将其与其他经处理的片段数据混合并被写入存储器204中的帧缓冲区。顶点着色程序和像素着色程序可以同时执行,以流水线方式处理来自同一场景的不同数据,直到该场景的所有模型数据已经被渲染到帧缓冲区。然后,帧缓冲区的内容被传输到显示控制器以在显示设备上显示。
PPU 200可以被包括在台式计算机、膝上型计算机、平板电脑、智能电话(例如无线、手持设备)、个人数字助理(personal digital assistant,PDA)、数码相机、手持式电子设备等中。在一个实施例中,PPU 200体现在单个半导体衬底上。在另一个实施例中,PPU200与一个或更多个其他逻辑单元(诸如精简指令集计算机(reduced instruction setcomputer,RISC)CPU、存储器管理单元(memory management unit,MMU)、数字-模拟转换器(digital-to-analog converter,DAC)等)一起被包括在片上系统(SoC)中。
在一个实施例中,PPU 200可被包括在图形卡上,其包括一个或更多个存储设备204(诸如GDDR5 SDRAM)。图形卡可以被配置为与台式计算机的主板上的PCIe插槽接口,主板包括例如北桥芯片组和南桥芯片组。在又一个实施例中,PPU 200可以是包含在主板的芯片组(即,北桥)中的集成图形处理单元(iGPU)。
图5示出了根据一个实施例的包括图2的PPU 200的片上系统(System-on-Chip,SoC)500。如图5所示,如上所述,SoC 500包括CPU 550和PPU 200。SoC 500还可以包括系统总线202以启用SoC 500的各种组件之间的通信。由CPU 550和PPU 200生成的存储器请求可以通过由SoC 500的多个组件共享的系统MMU 590路由。SoC 500还可包括耦合到一个或更多个存储设备204的存储器接口595。存储器接口595可实施,例如,DRAM接口。
虽然没有明确示出,但是除了图5所示的组件之外,SoC 500还可以包括其他组件。例如,SoC 500可以包括多个PPU 200(例如四个PPU 200)、视频编码器/解码器和无线宽带收发器以及其他组件。在一个实施例中,SoC 500可以与存储器204一起被包括在封装叠加(package-on-package,PoP)配置中。
图6是根据一个实施例的由图2的PPU 200实现的图形处理流水线600的概念图。图形处理流水线600是被实现以从3D几何数据生成2D计算机生成图像的处理步骤的抽象流程图。众所周知,流水线架构可以通过将操作分成多个阶段来更高效地执行长延迟操作,其中每个阶段的输出耦合到下一个连续阶段的输入。因此,图形处理流水线600接收从图形处理流水线600的一个阶段传输到下一阶段的输入数据601,以生成输出数据602。在一个实施例中,图形处理流水线600可表示由
Figure BDA0003257464010000141
API定义的图形处理流水线。作为选择,图形处理流水线600可以在先前附图和/或一个或更多个任何后续附图的功能和架构的上下文中实现。
如图6所示,图形处理流水线600包括包含多个阶段的流水线架构。这些阶段包括但不限于数据组装阶段610、顶点着色阶段620、图元组装阶段630、几何着色阶段640、视口缩放、剔除和裁剪(viewport scale,cull,and clip,VSCC)阶段650、光栅化阶段660、片段着色阶段670和光栅操作阶段680。在一个实施例中,输入数据601包括命令,其配置处理单元以实现图形处理流水线600的阶段,并配置几何图元(例如,点、线、三角形、四边形、三角形带或扇形等)以由这些阶段处理。输出数据602可以包括像素数据(即,颜色数据),其被复制到存储器中的帧缓冲区或其他类型的表面数据结构中。
数据组装阶段610接收输入数据601,其指定用于高阶表面、图元等的顶点数据。数据组装阶段610收集临时存储或队列中的顶点数据,诸如通过从主机处理器接收包括指向存储器中的缓冲区的指针的命令并从该缓冲区读取顶点数据。顶点数据然后被传输到顶点着色阶段620以进行处理。
顶点着色阶段620通过对顶点中的每一个执行一次一组操作(即,顶点着色器或程序)来处理顶点数据。顶点可以例如被指定为与一个或更多个顶点属性(例如,颜色、纹理坐标、表面法线等)相关联的4坐标向量(即,<x,y,z,w>)。顶点着色阶段620可以操纵各个顶点属性,诸如位置、颜色、纹理坐标等。换句话说,顶点着色阶段620对与顶点相关联的顶点坐标或其他顶点属性执行操作。这些操作通常包括照明操作(即,修改顶点的颜色属性)和变换操作(即,修改顶点的坐标空间)。例如,可以使用对象坐标空间中的坐标来指定顶点,其通过将坐标乘以矩阵进行变换,该矩阵将坐标从对象坐标空间转换到世界空间或标准化设备坐标(normalized-device-coordinate,NCD)空间。顶点着色阶段620生成被传送到图元组装阶段630的经变换的顶点数据。
图元组装阶段630收集由顶点着色阶段620输出的顶点并且将顶点分组成几何图元以由几何着色阶段640处理。例如,图元组装阶段630可以被配置为将每三个连续顶点分组为用于传输到几何着色阶段640的几何图元
(即,三角形)。在一些实施例中,特定顶点可以被重新用于连续几何图元(例如,三角形带中的两个连续三角形可以共享两个顶点)。图元组装阶段630将几何图元(即,相关联的顶点的集合)传输到几何着色阶段640。
几何着色阶段640通过对几何图元执行一组操作(即,几何着色器或程序)来处理几何图元。曲面细分(tessellation)操作可以从每个几何图元生成一个或更多个几何图元。换言之,几何着色阶段640可以将每个几何图元细分为两个或更多个几何图元的更精细的网格,以由图形处理流水线600的其余部分进行处理。几何着色阶段640将几何图元传输到视口SCC阶段650。
在一个实施例中,图形处理流水线600可以在流式多处理器和顶点着色阶段620、图元组装阶段630、几何着色阶段640、片段着色阶段670和/或与其相关联的硬件/软件内操作,可顺序地执行处理操作。一旦顺序处理操作完成,在一个实施例中,视口SCC阶段650可以利用数据。在一个实施例中,由图形处理流水线600中的阶段的一个或更多个处理的图元数据可以被写入高速缓存(例如,L1高速缓存、顶点高速缓存等)中。在这种情况下,在一个实施例中,视口SCC阶段650可以访问高速缓存中的数据。在一个实施例中,视口SCC阶段650和光栅化阶段660被实现为固定功能电路。
视口SCC阶段650执行几何图元的视口缩放、剔除和裁剪。正被渲染的每个表面都与抽象相机位置相关联。相机位置表示正观看该场景的观看者的位置并定义了包围该场景的对象的观看平截头体(viewing frustum)。观看平截头体可以包括观看平面、后平面和四个裁剪平面。完全位于观看平截头体之外的任何几何图元都可被剔除(即丢弃),因为这些几何图元将不会对最终渲染的场景作出贡献。部分位于观看平截头体内并且部分位于观看平截头体外的任何几何图元可以被裁剪(即,转换为被包围在观看平截头体内的新的几何图元)。此外,可以基于观看平截头体的深度来对每个几何图元进行缩放。然后将所有可能可见的几何图元传输到光栅化阶段660。
光栅化阶段660将3D几何图元转换成2D片段(例如,能够用于显示等)。光栅化阶段660可以被配置为利用几何图元的顶点来设置一组平面方程,从中可以内插各种属性。光栅化阶段660还可以计算多个像素的覆盖掩码,其指示像素的一个或更多个采样位置是否拦截几何图元。在一个实施例中,还可以执行z测试以确定几何图元是否被已经被光栅化的其他几何图元遮挡。光栅化阶段660生成片段数据(即,与每个被覆盖像素的特定采样位置相关联的内插顶点属性),其被传输到片段着色阶段670。
片段着色阶段670通过对片段中的每一个执行一组操作(即,片段着色器或程序)来处理片段数据。片段着色阶段670可以生成片段的像素数据(即,颜色值),诸如通过使用片段的内插纹理坐标执行照明操作或采样纹理映射。片段着色阶段670生成发送到光栅操作阶段680的像素数据。
在一个实施例中,片段着色阶段670可以使用PPU 200的一个或更多个纹理单元345对纹理映射进行采样。纹理数据603可以从存储器204读取,并且可以使用纹理单元345硬件对纹理数据603进行采样。纹理单元345可以将采样值返回到片段着色阶段670以由片段着色器处理。
光栅操作阶段680可对像素数据执行各种操作,诸如执行阿尔法测试、模板测试(stencil test)以及将像素数据与对应于与像素相关联的其他片段的其他像素数据混合。当光栅操作阶段680已经完成对像素数据(即,输出数据602)的处理时,可以将像素数据写入渲染目标,诸如帧缓冲区、颜色缓冲区等。
应当领会,除上述阶段中的一个或更多个以外或代替上述阶段中的一个或更多个,一个或更多个额外的阶段可以被包括在图形处理流水线600中。抽象图形处理流水线的各种实现方式可以实现不同的阶段。此外,在一些实施例中,上述阶段中的一个或更多个可以从图形处理流水线中排除(诸如几何着色阶段640)。其他类型的图形处理流水线被认为是在本公开的范围内所预期的。此外,图形处理流水线600的任何阶段可以由图形处理器(诸如PPU 200)内的一个或更多个专用硬件单元来实现。图形处理流水线600的其他阶段可以由可编程硬件单元(诸如PPU 200的SM 340)来实现。
图形处理流水线600可以经由由主机处理器(诸如CPU 550)执行的应用程序来实现。在一个实施例中,设备驱动程序可以实现应用程序编程接口(API),其定义可以被应用程序利用以生成用于显示的图形数据的各种功能。设备驱动程序是软件程序,其包括控制PPU 200的操作的多个指令。API为程序员提供抽象,其允许程序员利用专用图形硬件(诸如PPU 200)来生成图形数据而不要求程序员利用PPU 200的特定指令集。应用程序可以包括被路由到PPU 200的设备驱动程序的API调用。设备驱动程序解释API调用并执行各种操作以响应API调用。在一些情况下,设备驱动程序可以通过执行CPU 550上的指令来执行操作。在其他情况下,设备驱动程序可以至少部分地通过利用CPU 550和PPU 200之间的输入/输出接口启动PPU 200上的操作来执行操作。在一个实施例中,设备驱动程序被配置为利用PPU 200的硬件来实现图形处理流水线600。
可以在PPU 200内执行各种程序以便实现图形处理流水线600的各个阶段。例如,设备驱动程序可以启动PPU 200上的内核以在一个SM 340(或多个SM 340)上执行顶点着色阶段620。设备驱动程序(或由PPU 200执行的初始内核)还可启动PPU 200上的其他内核以执行图形处理流水线600的其他阶段,诸如几何着色阶段640和片段着色阶段670。另外,图形处理流水线600的阶段中的一些可以在固定单元硬件(诸如在PPU 200内实现的光栅器或数据组装器)上实现。应当领会,在被SM 340上的后续内核处理之前,来自一个内核的结果可以由一个或更多个中间固定功能硬件单元处理。
矩阵乘积和累加(MMA)运算
MMA运算将FMA运算的概念扩展到矩阵输入运算对象。换句话说,围绕将第一输入矩阵与第二输入矩阵相乘并且将结果与第三输入矩阵(即,收集器矩阵)相加的基本算术运算来设计许多算法。更具体地,MMA运算可以采用两个输入矩阵(A和B)和第三个收集器矩阵(Cin)来执行以下运算:
Cout=A*B+Cin (等式1)
其中A是大小为N×K的输入矩阵,B是大小为K×M的输入矩阵,C是大小为N×M的收集器矩阵。收集器矩阵C是从寄存器文件读取的,并且MMA运算的结果在寄存器文件中的收集器矩阵C的数据上进行累加和写入。在一个实施例中,收集器矩阵C和结果矩阵D(Cout=D)可以是不同的运算对象,使得MMA运算的结果不写在收集器矩阵C上。
图7示出了根据一个实施例的MMA运算。MMA运算将输入矩阵A710与输入矩阵B 720相乘,并将结果累加到收集器矩阵C 730中。如图7所示,输入矩阵A被给定为8×4矩阵,输入矩阵B被给定为4×8矩阵,并且收集器矩阵C被给定为8×8矩阵。换句话说,图7中所示的MMA运算对应于(1)N=8;(2)M=8;以及(3)K=4。然而,图7中所示的任何内容都不应被解释为将MMA运算限制为这些维度。实际上,处理器的数据路径可以被设计为对任意大小的矩阵运算对象进行运算,如将在下面更详细地示出的,以及与点积运算中的向量输入的基本大小不准确对齐的矩阵运算对象可以简化为使用数据路径的多个中间运算。
现在回到图7,矩阵运算对象的每个元素可以是以特定格式编码的值。各种格式包括但不限于单精度浮点值(例如,根据IEEE 754标准编码的32位值);半精度浮点值(例如,根据IEEE 754标准编码的16位值);有符号/无符号整数(例如,32位二进制补码整数);有符号/无符号短整数(例如,16位二进制补码整数);定点格式;以及其他格式。
在一个实施例中,处理器可以被设计为64位架构,使得数据字被存储在具有64位宽度的寄存器中。典型地,随后处理器将实现数据路径,其对使用高达64位格式编码的值进行运算;然而,有些数据路径可以设计为对使用更少位编码的值进行运算。例如,可以设计一个向量机,将分别用32位或16位编码的两个或四个元素打包到每个64位寄存器中。然后数据路径被配置为在多个相似的向量单元上执行用于并行输入向量的多个元素的相同指令。然而,应当领会,向量机通常对输入向量的元素执行运算,作为完全独立的运算。换句话说,打包到单个64位寄存器中的元素中的每一个仅用于一个向量运算,并且在不同的向量单元之间不共享。
在一个实施例中,输入矩阵A 710的每个元素和输入矩阵B 720的每个元素可以被编码为半精度浮点值。如果每个数据字是64位宽的,则输入矩阵的四个元素可以被打包到每个数据字中。因此,被分配用于存储输入矩阵A710或输入矩阵B 720的至少一部分的寄存器文件中的每个寄存器具有存储对应输入矩阵的四个半精度浮点元素的能力。这使得矩阵运算对象的有效存储能够在与处理器的一个或更多个数据路径相关联的公共寄存器文件中实现。
应当领会,本发明不仅限于半精度浮点数据。在一些实施例中,输入矩阵的每个元素可以被编码为全精度浮点值。在其他实施例中,输入矩阵的每个元素可以被编码为16位有符号整数。在其他实施例中,输入矩阵A 710的元素可以被编码为半精度浮点值,而输入矩阵B 720的元素可以被编码为32位有符号整数。在这样的实施例中,任一输入运算对象的元素可以在数据路径的第一阶段中从一种格式转换为另一种格式,使得输入运算对象中的每一个的格式可以在单个矩阵乘积和累加运算内混合。此外,在另一实施例中,输入矩阵A710和输入矩阵B 720的元素可被编码为半精度浮点值,而收集器矩阵C 730的元素可被编码为全精度浮点值。数据路径甚至可以被设计为使用收集器矩阵C 730的元素,其具有与输入矩阵A 710和输入矩阵B 720的元素不同的精度。例如,数据路径中的累加寄存器可以被扩展为将收集器矩阵C 730的元素存储为全精度浮点值,其将收集器矩阵C 730的元素的初始值添加到对半精度浮点值执行的点积运算的结果,如果乘法是以无损方式执行的话,这些值可以相当于部分乘积的全精度浮点值。
如图7所示,矩阵已被分成视觉上4×4元素子矩阵。在实施例中,其中输入矩阵A710和输入矩阵B 720的每个元素被编码为半精度浮点值(例如,16位浮点),则4×4元素子矩阵实质上是来自矩阵的四个4元素向量。在输入矩阵A 710的情况下,该矩阵被分成上面的向量集和下面的向量集。每个向量可以对应于输入矩阵A 710的一行,其中四个元素的每行可以打包到单个64位寄存器中。在输入矩阵B 720的情况下,矩阵被分成左边的向量集和右边的向量集。每个向量可以对应于输入矩阵B 720的一列,其中四个元素的每列可以打包到单个64位寄存器中。在收集器矩阵C 730的情况下,矩阵被分为定义为左上象限、右上象限、左下象限和右下象限的四个4×4元素子矩阵。只要元素被编码为半精度浮点值,每个象限存储来自收集器矩阵C 730的四个4向量元素。每个象限可对应于收集器矩阵C 730的多个向量(即,行的部分或列的部分)。每个象限还对应于使用来自输入矩阵的相应向量对执行的多个点积运算。
例如,如图7所示,收集器矩阵C0,0的第一个元素是输入矩阵A 710的第一个向量<A0,0,A0,1,A0,2,A0,3>和输入矩阵B 720的第一个向量<B0,0,B1,0,B2,0,B3,0>之间的点积运算的结果而生成的。输入矩阵A 710的第一个向量表示输入矩阵A 710的第一行。输入矩阵B 720的第一个向量表示输入矩阵B 720的第一列。因此,这两个向量之间的点积被给出为:
C0,0=A0,0B0,0+A0,1B1,0+A0,2B2,0+A0,3B3,0+C0,0 (等式2)
其中点积运算基本上是对两个向量的相应元素执行的四个乘法运算随后是四个加法运算的执行,四个加法运算将由乘法运算产生的四个部分乘积与收集器矩阵的元素的初始值求和。然后使用输入矩阵的向量的不同组合,以类似的方式计算收集器矩阵C 730的其他元素中的每一个。例如,收集器矩阵C730的另一个元素(元素C3,2)是作为输入矩阵A710的第四个向量<A3,0,A3,1,A3,2,A3,3>和输入矩阵B 720的第三个向量<B0,2,B1,2,B2,2,B3,2>之间的点积运算的结果而生成的。如图7的MMA运算所示,输入矩阵A 710的每个向量由八个点积运算消耗,八个点积运算被配置为生成收集器矩阵C730的元素的相应行。类似地,输入矩阵B 720的每个向量由八个点积运算消耗,八个点积运算被配置成生成收集器矩阵C 730的元素的相应列。虽然用于生成收集器矩阵C 730的元素的64个点乘积运算中的每一个都是通过使用来自输入矩阵的不同向量对唯一定义的,但是第一输入运算对象的每个向量和第二输入运算对象的每个向量由多个点积运算消耗,并有助于结果矩阵的多个个体元素。
应当领会,只要数据路径可以被配置为以高效的方式消耗向量集以便简化寄存器文件和数据路径的输入之间的带宽,那么上述的MMA运算便可以通过将来自两个输入矩阵的向量集加载到数据路径的输入中来加速。例如,在一个实施例中,收集器矩阵C 730的左上象限的前两行可由数据路径计算,所述数据路径被配置为接收输入矩阵A 710的上面的向量集中的前两个向量以及输入矩阵B 720的左边的向量集中的前四个向量作为输入,以及收集器矩阵C 730的左上象限的前两个向量(即,行)。这样的数据路径将需要输入8个64位字:两个64位字存储输入矩阵A 710的两个向量,四个64位字存储输入矩阵B 720的四个向量,以及两个64位字存储收集器矩阵C 730的两个向量。此外,如果收集器矩阵C 730的元素被编码为全精度浮点值(例如,32位浮点),则至收集器矩阵C 730的两个向量的数据路径的输入的大小将被加倍为四个64位字。
然后数据路径可以被配置为在单次通过、串行多次通过或串行和并行运算的组合中并行地执行八个点积运算。例如,数据路径可以被设计成每次通过执行一个4向量点积运算,其从输入矩阵A 710获取一个向量并从输入矩阵B 720获取一个向量,并且生成收集器矩阵C 730的单个元素。然后在8次通过上,利用来自两个输入矩阵的6个向量的不同组合在8次通过上对数据路径进行运算,以生成收集器矩阵C 730的8个不同元素。可选地,数据路径可以设计为每次通过执行四个4向量点积运算,其从输入矩阵A 710获取一个向量并从输入矩阵B 720获取四个向量,并且并行地生成收集器矩阵C 730的4个元素。然后,在每次通过期间,利用来自输入矩阵A 710的不同向量和来自输入矩阵B 720的相同四个向量在2次通过上对数据路径进行运算,以生成收集器矩阵C 730的8个元素。应当领会,在使用每个点积运算中的输入的不同组合由数据路径执行多个点积运算之前,数据路径的输入可以从寄存器文件加载一次。这会显著减小寄存器文件和数据路径之间的带宽。例如,两个输入矩阵A和B中只有6个向量需要从寄存器文件加载到数据路径的输入中,以便执行八个点积运算,而使用数据路径单独执行所有八个点积运算,所述数据路径能够执行单个点积运算并且仅具有两个向量的输入容量,将需要16个向量从寄存器文件加载到数据路径的输入,因为向量在多个点积运算中被重用。
应当领会,即使数据路径被配置为生成与向量中的每一个的大小不同长度的点积(即,输入矩阵的维度K不等于生成的用于单个点积运算的数据路径内的部分乘积的数量),数据路径使用累加器寄存器(例如,收集器矩阵C 730),使得每个向量可以被分成多个子向量,然后在多个执行循环上被加载到数据路径的输入中(其中每个循环之后,收集器矩阵C730的输出被重新加载到数据路径的输入中用于下一个循环)。因此,输入矩阵A 710和B720的维度K不限于由数据路径执行的点积运算的特定实现方式。例如,如果数据路径仅产生2向量点积(即,对应于一对二元素向量的点积),则输入矩阵A 710的每一行可以被分成行的前半部分的第一个向量和行的后半部分的第二向量,并且输入矩阵B 720的每一列可以被分成列的上半部分的第一向量和列的下半部分的第二向量。然后,在多个指令周期内生成收集器矩阵C 730的元素,其中输入矩阵A 710的向量的前半部分和输入矩阵B 720的向量的上半部分在第一指令周期期间被加载到数据路径的输入中,并且输入矩阵A 710的向量的后半部分和输入矩阵B 720的向量的下半部分以及在第一指令周期期间存储在收集器矩阵C 730中的中间结果在第二指令周期期间被加载到数据路径的输入中。通过将输入矩阵的向量中的每一个分成多个部分,每个部分具有多个元素(其数量等于由数据路径实现的点积运算的大小),可以以这种方式为任意大小的维度K的输入矩阵简化MMA运算。即使维度K不能被点积运算的大小整除,向量也可以用零填充以获得正确的结果。
图8是根据一个实施例的点积运算的概念图。点积运算基本上将多个部分乘积相加。点积运算可以指定三个运算对象,向量A、向量B和标量收集器C。向量A和向量B具有相同的长度(即元素的数量)。如图8所示,向量A和B的长度给定为2;然而,应当领会,点积运算可以具有大于或等于2的任何长度。
点积运算将来自输入向量A和B的元素对相乘。如图8所示,在乘法器822中,来自输入向量A的第一元素A0 812与来自输入向量B的对应元素B0 814相乘以生成部分乘积A0B0826。在乘法器824中,来自输入向量A的第二元素A1 816与来自输入向量B的对应元素B1 818相乘以生成部分乘积A1B1 828。然后利用三元素加法器830来对部分乘积A0B0 826、部分乘积A1B1 828和标量收集器值Cin 820求和以生成结果值Cout 832。结果值Cout 832可以存储在用于标量收集器值Cin 820的寄存器中并且可以被重新用于累加用于较长向量的多个点积运算。
此外,可以通过并行地添加附加的乘法器822、824等来扩展点积运算,以计算附加的部分乘积,然后将附加的部分乘积与更大的元素加法器或者生成中间和的更小的加法器的树中的任一个求和,然后再由附加的多元素加法器求和。
虽然点积运算可以在传统的FMA数据路径中实现,其中在数据路径的一次通过期间计算每个部分乘积并累加到累加寄存器中,然而并行计算点积运算的多个部分乘积并将结果在单个多级流水线中求和是更高效的。此外,虽然在SIMD/SIMT机器中可以同时使用多个内核来并行计算部分乘积,但仍需要对所有部分乘积进行求和的额外步骤,这对于在此类机器中有效地完成并不是微不足道的。
图9示出了根据一个实施例的包括被配置为实现矩阵运算的数据路径930的处理器900的一部分。处理器900可以指中央处理单元(CPU)、图形处理单元(GPU)或其他并行处理单元、精简指令集计算机(RISC)型处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)等。本公开内容中的任何内容都不应被解释为将处理器900限制为诸如PPU 200之类的并行处理单元。
如图9所示,处理器900包括被实现为多个寄存器库910的多库寄存器文件。每个寄存器库910可以将多个数据字存储在多个寄存器中。每个寄存器库910可以具有独立且不同的读取和写入端口,使得可以在任何给定的时钟周期中读取寄存器库910中的一个寄存器并且写入另一个寄存器。因此,可以在单个时钟周期期间从每个寄存器库910同时读取一个数据字并将其加载到运算对象收集器920中。寄存器文件被配置为存储在用于MMA运算的指令中指定的运算对象。在一个实施例中,在指令中指定的每个运算对象是矩阵,其具有二维阵列的行和列中的多个元素,并且每个寄存器可以存储特定运算对象的一个或更多个元素。当然,在一个实施例中,寄存器文件可以仅包括单个库,意味着每个时钟周期只有一个寄存器可以从寄存器文件读取并加载到运算对象收集器920中。
处理器900还包括耦合到一个或更多个数据路径的输入的多个运算对象收集器。在一个实施例中,运算对象收集器920包括多个异步触发器(flip-flop),其使得能够在任何特定的时钟周期期间将数据加载到运算对象收集器920中,然后在任何后续时钟周期中从运算对象收集器920读取数据。换句话说,基于在触发器的输入处的信号,触发器在每个时钟周期内都不会设置或重置。相反,控制逻辑基于输入信号确定触发器何时被设置或重置以及存储在触发器中的数据何时被传输到触发器的输出。这使得多个运算对象收集器920能够在多个时钟周期内从寄存器文件加载运算对象,然后在单个时钟周期期间将多个运算对象并行地提供给数据路径的输入。应当领会,运算对象收集器920可以多种不同方式来实现,包括各种不同类型的锁存器和/或触发器,并且各种实施例可以使用不同的基础技术来实现运算对象收集器920。然而,运算对象收集器920的功能是暂时存储对数据路径执行运算所需的运算对象,其中运算对象可以在一个或更多个时钟周期内从寄存器文件910加载,这取决于运算对象被存储在哪个寄存器库910中以及在那些寄存器库910中有多少读取端口可用。
交叉开关915或其他类型的可切换互连可以耦合到寄存器库910的读取端口和运算对象收集器的输入。交叉开关915可以被配置为将来自与任何寄存器库910相关联的读取端口的信号路由到特定运算对象收集器920。例如,寄存器库1 910(1)的读取端口可以包括与包含在寄存器文件的单个寄存器中的64位相对应的64个互连进位信号(interconnectscarrying signal)。这64个互连可以连接到多个不同运算对象收集器920中的一个,每个运算对象收集器920包括64个触发器,用于存储由经由读取端口传输的由信号编码的64位。如果数据路径需要与数据路径的输入耦合的三个运算对象收集器920,则每个运算对象收集器920包括64个触发器以存储数据路径的相应运算对象的64位,然后交叉开关915可以被配置为将读取端口的64个互连上的64个信号路由到三个运算对象收集器920中的任何一个。
运算对象收集器920可以耦合到一个或更多个数据路径的输入。如图9所示,运算对象收集器920可以耦合到半精度矩阵乘积累加(HMMA)数据路径930以及双精度(64位)浮点(FP64)数据路径940。FP64数据路径940可以是传统的双精度浮点FMA数据路径,其使得能够对双精度浮点运算对象执行加法、减法、乘法、除法以及其他运算。在一个实施例中,FP64数据路径940可以包括用于对三个标量双精度浮点运算对象(例如,A、B和C)执行FMA运算的逻辑,如本领域所公知的。
FP64数据路径940的输出耦合到结果队列950。结果队列950存储由FP64数据路径940产生的结果。在一个实施例中,结果队列950包括用于存储由FP64数据路径940产生的结果的多个位的多个触发器。例如,结果队列950可以包括用于存储FP64数据路径940的双精度浮点结果的64个触发器。结果队列950使得能够在等待写入端口的可用性以将值写回到寄存器文件时临时存储该结果。应当领会,FP64数据路径940可以被包括在共享多库寄存器文件910的多个类似内核的每一个中。在特定时钟周期期间,只有一个内核可以将值写回到每个寄存器库。因此,如果在给定的时钟周期中两个或更多个内核产生结果并且两个结果都需要被写回到相同的寄存器库910,则可以在第一时钟周期期间将一个结果写入寄存器库910,并且可以在第二时钟周期期间将另一个结果写入寄存器库910。
应当领会,结果队列950可以附加到包含在数据路径内部的不需要在执行多个指令之间被写回寄存器文件的累加寄存器。例如,FMA指令可以在第一指令期间包括A、B和C运算对象,然后在一个或更多个后续指令期间仅包括A和B运算对象,利用内部累加寄存器将多个指令链接在一起,重新使用累加值C作为每个后续指令的第三运算对象。在一些实施例中,如果由FP64数据路径940产生的结果总是在其变得可用时被立即写入寄存器文件,则结果队列950可以被省略。然而,这样的架构需要对多库寄存器文件的存储器分配进行更高级的控制以避免与写入端口的任何冲突,以及需要共享寄存器文件的两个或更多个内核的流水线长度的知识,以适当地调度哪些内核将会需要在特定的时钟周期内访问给定的写入端口。在存在大量内核的处理器中,根据需要利用结果队列950将值写回寄存器文件可能更容易,使任何内核停止完成后续指令直到结果已被写回到寄存器文件。
在一个实施例中,HMMA数据路径930与FP64数据路径940共享可用的相同运算对象收集器920。HMMA数据路径930和FP64数据路径940可以被包括在处理器900的公共内核中,处理器900包括多个内核,每个内核包括一个FP64数据路径940和HMMA数据路径930以及可能还包括整数算术逻辑单元(arithmetic logic unit,ALU)。在一个实施例中,HMMA数据路径930被配置为执行矩阵乘积和累加(MMA)运算。用于MMA运算的指令指定多个矩阵运算对象,其被配置为执行与由上述等式1指定的函数等同的运算。
在一个实施例中,多个运算对象收集器920包括用于指令中指定的第一运算对象(即,输入矩阵A 710)的至少两个向量和指令中指定的第二运算对象(即,输入矩阵B 720)的至少两个向量的存储。至少两个向量的每个向量具有矩阵运算对象的行或列中的至少两个元素。例如,在一个实施例中,HMMA数据路径930被配置为接收来自第一运算对象的两个向量和来自第二运算对象的四个向量作为数据路径的输入。因此,运算对象收集器920的数量应该足以存储两个输入矩阵运算对象的至少六个向量(例如,最少六个64位运算对象收集器)。根据HMMA数据路径930的设计,其他实施例可能需要更多或更少的运算对象收集器920。
在一个实施例中,HMMA数据路径930还被配置为接收指令中指定的第三运算对象(即,收集器矩阵C 730)的至少两个向量。收集器矩阵C 730与指令中指定的第一运算对象和第二运算对象相乘的结果相加。来自第三运算对象的向量中的组合元素的数量必须与第一运算对象的向量数和第二运算对象的向量数的乘积相匹配。例如,如果多个运算对象收集器920存储输入矩阵A 710的两个向量(例如,行)和输入矩阵B 720的四个向量(例如,列),则在收集器矩阵C 730的至少两个向量中的元素的数量必须等于八。另外,第三运算对象的元素的索引必须与第一运算对象和第二运算对象的向量的索引相匹配。例如,如果第一运算对象的两个向量对应于输入矩阵A710的第一行和第二行,并且第二运算对象的四个向量对应于输入矩阵B720的第一行至第四行,则第三运算对象的元素的索引必须与输入矩阵A710的任一向量和输入矩阵B 720的任意向量的点积相关联的<行,列>索引向量相匹配,其中,第三运算对象的元素的索引都是二维的。
同样,HMMA数据路径930在HMMA数据路径930的输出处生成结果矩阵的多个元素。通过计算从矩阵运算对象中选择的相应向量对的至少一个点积来生成结果矩阵的多个元素中的每个元素。点积运算可以包括将多个部分乘积累加到结果队列950中的步骤。通过将第一向量的每个元素与第二向量的对应元素相乘来生成多个部分乘积中的每个部分乘积。点积运算的示例在上面的等式2中给出。应当领会,在一个实施例中,在HMMA数据路径930中并行地计算多个部分乘积,并且在输出到结果队列950之前使用HMMA数据路径930内部的加法器树来累加该多个部分乘积。在又一个实施例中,在HMMA数据路径930内在多次通过上串行计算部分乘积,将每个部分乘积累加到HMMA数据路径930内部的累加寄存器中。当来自收集器矩阵C 730的全部部分乘积以及加数值(addend value)在多次通过中已经累加到内部累加寄存器中,则最终结果被输出到结果队列950。
在一个实施例中,处理器900被实现为PPU 200。在这样的实施例中,SM 340中的每个内核450包括HMMA数据路径930以及FP64数据路径940以及可选地包括整数ALU。寄存器文件420可以实现一个或更多个存储器库910。交叉开关915和运算对象收集器920可以在寄存器文件420和一个或更多个内核450之间实现。此外,结果队列950可以在一个或更多个内核450和互连网络480之间实现,其使得存储在结果队列950中的结果能够被写回寄存器文件420。因此,处理器900是包括多个SM 340的PPU 200,多个SM340中的每个SM 340包括寄存器文件420和多个内核450,多个内核450中的每个内核450包括HMMA数据路径930的实例。
PPU 200实现SIMT架构,其使得能够在多个SM 340中的多个内核450上并行执行多个线程。在一个实施例中,MMA运算被配置为在多个内核450上并行地执行多个线程。每个线程被配置为使用在指令中指定的用于MMA运算的运算对象的向量的不同组合来在特定内核450上生成结果矩阵(例如,收集器矩阵C 730)中的一部分元素。
例如,如图7所示,可以在8个线程上同时对8×4输入矩阵A 710和4×8输入矩阵B720执行MMA运算。第一个线程被分配给输入矩阵A 710的前两个向量(例如,<A0,0,A0,1,A0,2,A0,3>和<A1,0,A1,1,A1,2,A1,3>)和输入矩阵B 720的前四个向量(例如,<B0,0,B1,0,B2,0,B3,0>,<B0,1,B1,1,B2,1,B3,1>,<B0,2,B1,2,B2,2,B3,2>和<B0,3,B1,3,B2,3,B3,3>)。第一个线程生成包含在结果矩阵的两个向量中的八个元素(例如,<C0,0,C0,1,C0,2,C0,3>和<C1,0,C1,1,C1,2,C1,3>)。类似地,第二个线程被分配给输入矩阵A 710的前两个向量(例如,<A0,0,A0,1,A0,2,A0,3>和<A1,0,A1,1,A1,2,A1,3>)和输入矩阵B 720的接下来的四个向量(例如,<B0,4,B1,4,B2,4,B3,4>,<B0,5,B1,5,B2,5,B3,5>,<B0,6,B1,6,B2,6,B3,6>,和<B0,7,B1,7,B2,7,B3,7>)。第二个线程生成包含在结果矩阵的两个不同向量中的八个元素(例如,<C0,4,C0,5,C0,6,C0,7>和<C1,4,C1,5,C1,6,C1,7>)。第三个线程被分配给输入矩阵A710的接下来的两个向量(例如,<A2,0,A2,1,A2,2,A2,3>和<A3,0,A3,1,A3,2,A3,3>)和输入矩阵B 720的前四个向量(例如,<B0,0,B1,0,B2,0,B3,0>,<B0,1,B1,1,B2,1,B3,1>,<B0,2,B1,2,B2,2,B3,2>和<B0,3,B1,3,B2,3,B3,3>)。第三个线程生成包含在结果矩阵的两个向量中的八个元素(例如,<C2,0,C2,1,C2,2,C2,3>和<C3,0,C3,1,C3,2,C3,3>)。其他五个线程与来自输入矩阵A710和输入矩阵B 720的额外向量组合进行类似的运算。
应当领会,给每个线程分配内核450,分配给该线程的向量被加载到内核450的运算对象收集器920中,然后通过在内核450中对HMMA数据路径执行MMA运算来生成结果矩阵的元素。在一个实施例中,每个内核耦合到仅耦合到该内核450的运算对象收集器920的专用集。在另一个实施例中,多个内核450共享运算对象收集器920。例如,具有两个HMMA数据路径930的两个内核450可共享一组运算对象收集器920,其中分配给在两个内核450上调度的两个线程的公共向量由两个内核450共享。这样,分配给两个或更多个线程的公共向量没有被加载到运算对象收集器920两个独立的集中。例如,为上述前两个线程均分配输入矩阵A 710的前两个向量,而分配输入矩阵B 720的不同的向量集。因此,用于存储输入矩阵A710的向量的运算对象收集器920可以在两个内核450之间共享,通过将这些运算对象收集器920耦合到两个HMMA数据路径930的输入。
应当领会,可以组合任何数量的线程来增加MMA运算的大小。换句话说,通过增加更多线程来并行处理附加计算,可以增加MMA运算的维度M、N和K而不增加执行时间。可选地,通过在多个指令周期中在每个内核450上执行多个指令,在固定数量的内核450上也可以完成增加MMA运算的大小。例如,可以在第一指令周期期间在特定内核450上执行第一线程,并且可以在第二指令周期期间在特定内核450上执行第二线程。由于输入矩阵A 710的向量在第一线程和第二线程之间共享,并且因此输入矩阵A 710的向量不需要在两个指令周期上的两个指令执行之间从寄存器库910重新加载到运算对象收集器920中,所以在多个指令周期上执行MMA运算可能是有益的。
图10示出了根据一个实施例的传统的双精度浮点FMA数据路径1000。传统的双精度浮点FMA数据路径1000示出了处理器900的FP64数据路径940的一个可能的实现方式。数据路径1000实现FMA运算,其以三个运算对象(A、B和C)作为输入,将运算对象A与运算对象B相乘并将乘积与运算对象C相加。三个运算对象中的每一个都是双精度浮点值,用64位编码:1个符号位,11个指数位和52个尾数位。
如图10所示,数据路径1000包括乘法器1010,其将来自A运算对象1002的尾数位与来自B运算对象1004的尾数位相乘。在一个实施例中,乘法器1010可以是,例如华莱士树(Wallace tree),其将一个尾数的每个位乘以另一个尾数的每个位,并且将该部分乘积与多个简化层中的加法器树组合以生成两个n位整数,其相加得到乘法的二进制结果。如果乘法器被设计用于64位浮点数,从而将两个52位尾数相乘加上一个隐藏位(对于归一化值),那么乘法器1010可以是53×53华莱士树,其在输出处产生两个106位值,它们在3:2进位加法器(carry sum adder,CSA)1040中相加。
并行地,来自A运算对象1012的指数位在加法器1020中被添加到来自B运算对象1014的指数位。加法器1020可以是全加法器而不是CSA加法器,因为指数位仅为11位宽,并且可以在与通过华莱士树的简化层传播乘法器1010的结果以生成两个整数类似的时间内通过加法器1020传播全加。加法器1020产生的结果给出与尾数位的乘积的结果相关联的指数。然后,基于C运算对象1016的指数位,与结果相关联的指数被用于移动来自C运算对象1006的尾数位。应当领会,当执行尾数位的相加时指数必须相同,并且递增或递减浮点值的指数等同于将尾数左移或右移。然后,将C运算对象1006的经移位的尾数位与3:2CSA1040中由乘法器1010所生成的两个整数相加。3:2CSA 1040生成进位值和总和值,其代表加法结果,其中总和值的每一位表示将三个相应位(来自三个输入中的每一个的一个位)相加的结果,并且其中进位值的每一位表示进位位,其指示这三个对应位的相加是否导致进位(即,需要被添加到总和值中下一个最高有效位的位)。3:2CSA 1040使得能够立即计算所有进位位和总和位,而不必将进位位传播到每个后续的三位相加运算。
然后,来自3:2CSA 1040的进位值和总和值在完成加法器1050中相加。完成加法器1050产生的结果表示来自三个运算对象的三个尾数值的总和。然而,这个总和没有被归一化,而浮点值被归一化了。结果,由完成加法器1050产生的结果将由归一化逻辑1060移位若干位,使得结果中的最高有效位为1,并且由加法器1020产生的指数将基于结果被移位的位数相应地由归一化逻辑1060而递增或递减。最后,归一化结果由舍入逻辑1070舍入。完成加法器1050产生的结果远大于52位。由于结果不能在双精度浮点值的52个尾数位中进行无损编码,因此对结果进行舍入使得结果的尾数位仅为52位宽。
应当领会,从图10中省略了符号逻辑的图示,但是符号逻辑和常规浮点数据路径的运算对于本领域技术人员来说是很好理解的并且应该被认为是在数据路径1000的范围内。符号位、归一化指数位和舍入尾数位由数据路径1000输出,并将其作为双精度浮点结果存储在C运算对象1008中。
图11示出了根据一个实施例的HMMA数据路径1100。HMMA数据路径1100包括一对半精度浮点FMA单元1110。与数据路径1000类似,单元1110中的每一个实现FMA运算:以三个运算对象(A、B和C)作为输入,将运算对象A乘以运算对象B并且将乘积与运算对象C相加。然而,与数据路径1000不同,三个运算对象中的每一个是用16位编码的半精度浮点值:1个符号位、5个指数位和10个尾数位。除了单元1110的组件明显小于数据路径1000的类似组件之外,因为每个运算对象中的位数从64位减小到16位,单元1110在实现方式上类似于数据路径1000。因此,数据路径1100的乘法器可以被实现为11×11华莱士树而不是53×53的华莱士树。类似地,3:2CSA加法器、完成加法器、归一化逻辑和舍入逻辑的大小减小了大约1/4。否则,数据路径1000的功能描述同样很好地适用于半精度浮点FMA单元1100,仅在使用较少位精度表示的运算对象上。
应当领会,每个单元1110用于将来自两个输入运算对象的两个半精度浮点值相乘,并将该乘积与来自第三输入运算对象的加数相加。因此,每个单元1110可以并行使用以计算点积运算的部分乘积。在一个实施例中,第一单元1110(0)被提供来自两个输入向量
Figure BDA0003257464010000301
Figure BDA0003257464010000302
中的每一个的一个元素,并且第二单元1110(1)被提供两个输入向量
Figure BDA0003257464010000303
Figure BDA0003257464010000304
中的每一个的另一元素,其中每个输入向量包括两个元素。例如,第一单元1110(0)分别被提供输入向量
Figure BDA0003257464010000305
Figure BDA0003257464010000306
的元素A0和B0。点积运算的大小对应于并行实现的单元1110的数量。然而,对由单元1110的每一个产生的部分乘积求和需要额外的组合逻辑。
应当领会,如果HMMA数据路径1100被实现为向量机,则组合逻辑可以被忽略,并且每个单元1110可以对标量半精度浮点值执行FMA运算,以分别在每个单元1110的各自输出处生成两个FMA结果。实际上,在一些实施例中,HMMA数据路径1100可以被配置为恰好做到这一点。然而,需要额外的组合逻辑来实现点积运算并使用两个单元中的乘法器生成单个结果。因此,HMMA数据路径1100可以被配置成两种运算模式:第一模式和第二模式,其中在第一模式中每个单元1110对向量输入并行地执行FMA运算,以及其中在第二模式中每个单元1110生成被传递到组合逻辑的部分乘积。然后组合逻辑将部分乘积与来自第三输入运算对象的加数相加。
在一个实施例中,组合逻辑包括指数比较逻辑1120、乘积对齐逻辑1130、包括4:2CSA 1142和3:2CSA 1144的进位加法器树、完成加法器1150、归一化逻辑1160和舍入逻辑1170。乘积对齐逻辑1130从每个单元1110接收由乘法器输出的用于单元1110的两个整数。乘积对齐逻辑1130由指数比较逻辑1120控制,其接收与部分乘积相关联的指数。在一个实施例中,单元1110中的每一个包括逻辑,诸如加法器1020,其将与两个输入运算对象(例如,单元i的Ai、Bi)相关联的指数位相加。然后,将相当于加法器1020的逻辑的输出从单元1110路由到指数比较逻辑1120。然后,指数比较逻辑1120将与每个单元1110中的乘法器产生的部分乘积相关联的指数值进行比较,并且使用指数的差来产生控制信号,所述控制信号使得乘积对齐逻辑1130对由每个单元1110中的乘法器产生的部分乘积之一进行移位。同样,部分乘积代表浮点值的尾数,并且因此,部分乘积的位必须首先对齐,以便指数在执行加法运算之前匹配。
然后将经移位的部分乘积被传递给4:2CSA 1142,其将四个整数值相加并生成进位值和总和值。4:2CSA的输出被传递为3:2CSA 1144的两个输入,其将进位值和总和值与来自第三运算对象C的加数相加。应当领会,加数可以是半精度浮点格式或单精度浮点格式,其以32位编码:1个符号位、8个指数位和23个尾数位。请记住,将两个11位值(10个尾数位加上一个前导隐藏位)相乘的结果是一个22位值。因此,即使部分乘积是基于半精度浮点值生成的,部分乘积的宽度也几乎与来自第三运算对象的单精度浮点加数的尾数的宽度相同。当然,加数也可以是类似于输入向量
Figure BDA0003257464010000311
Figure BDA0003257464010000312
的元素的半精度浮点值。
由3:2CSA 1144输出的结果被传递到完成加法器1150,除了宽度较小之外,其类似于完成加法器1050。然后由完成加法器1150产生的结果被传递到归一化逻辑1160与舍入逻辑1170以移位和截断(truncate)结果。归一化逻辑1160在移位之后接收用于两个部分乘积的公共指数的值,并且通过递增或递减指数值以及将结果的位向左或向右移而对结果进行移位,直到结果的MSB是1。然后舍入逻辑1170截断结果以适应至少一个浮点格式的尾数位的宽度。符号位、归一化指数位和舍入尾数位由数据路径1100输出,并作为半精度浮点值或单精度浮点值被存储在C运算对象1108中。
返回到数据路径1100的顶部,很明显,选择逻辑1105被耦合到每个单元1110的三个运算对象的输入。如上所述,二元素向量
Figure BDA0003257464010000321
和二元素向量
Figure BDA0003257464010000322
加上标量运算对象C可以用于使用数据路径1100执行点积运算。尽管可以被配置为执行点积运算的数据路径,通常比只能被配置为执行FMA运算的数据路径更有用,通过包括选择逻辑1105来添加附加功能,该选择逻辑1105在数据路径1100耦合到附加运算对象收集器920时使得MMA运算更有效。
例如,耦合到数据路径1100的运算对象收集器920可以包括多个运算对象收集器920,其足以存储与输入矩阵A 710相关联的至少两个输入向量
Figure BDA0003257464010000323
和与输入矩阵B 720相关联的至少两个输入向量
Figure BDA0003257464010000324
加上与收集器运算对象C 730的多个元素相关联的一个或更多个向量。选择逻辑1105然后被用于从存储在运算对象收集器920中的不同向量中选择元素,以在数据路径1100的多次通过中执行多个点积运算,数据路径1100的所有多次通过都与数据路径1100的单个指令周期相关联。选择逻辑1105可以包括多个多路复用器和用于在每个多路复用器的两个或更多个输入之间切换多路复用器的控制逻辑。
例如,在第一次通过期间,选择第一输入向量
Figure BDA0003257464010000325
和第一输入向量
Figure BDA0003257464010000326
每个输入向量具有两个元素,以及选择来自收集器矩阵C的第一元素/加数以生成第一点乘积结果。在第二次通过期间,选择第一输入向量
Figure BDA0003257464010000327
和第二输入向量
Figure BDA0003257464010000328
以及来自收集器矩阵C的第二元素/加数以生成第二点积结果。在第三次通过期间,选择第二输入向量
Figure BDA0003257464010000329
和第一输入向量
Figure BDA00032574640100003210
以及来自收集器矩阵C的第三元素/加数以生成第三点积结果。最后,在第四次通过期间,选择第二输入向量
Figure BDA00032574640100003211
和第二输入向量
Figure BDA00032574640100003212
以及来自收集器矩阵C的第四元素/加数以生成第四点积结果。这些结果可以存储在具有64或128位宽度的结果队列950中,取决于存储在收集器矩阵C中的点积结果是被编码为半精度浮点值还是单精度浮点值。
在另一个实施例中,4:2CSA1142和3:2CSA1144可以组合为5:2CSA。尽管两个实施例之间的实际差异最小,但是由于4:2CSA通常被实现为3:2CSA的树,并且5:2CSA通常也被实现为3:2CSA的树,所以在控制五个参数如何相加的顺序中存在微小差异。
在又一个实施例中,乘积对齐逻辑1130可以被配置为在移位部分乘积时截断部分乘积,从而减小被配置为将对齐的部分乘积求和的CSA的大小。为了在不截断的情况下移位部分乘积,乘积对齐逻辑1130需要向4:2CSA 1142输出部分乘积的附加宽度。为了避免部分乘积的宽度增加,乘积对齐逻辑1130可以在将部分乘积传输到4:2CSA 1142之前,将部分乘积在更宽的位宽处移位,然后截断到MSB。这将导致用于对部分乘积和加数求和的所需CSA的大小减小。
在又一个实施例中,数据路径1100可以被缩放以生成针对多于两个元素的向量的点积。通常,对于一对p元素向量,数据路径1100可以包括用于计算p个部分乘积的p个单元1110以及组合所有部分乘积的附加组合逻辑。例如,图11中所示的逻辑可以加倍以生成点积的两个部分,然后可以包括组合逻辑的附加简化层以将两个部分乘积的总和与两个其他部分乘积的总和进行组合。
应当领会,具有两个输入向量的点积运算的加数可以作为输入被提供给数据路径1100中的单元1110中唯一一个。数据路径1100的所有其他单元1110应当接收零恒定值作为单元1110的加数运算对象,使得加数仅被加到点积结果一次。
应当领会,当数据路径1100被配置为使用附加组合逻辑来生成点积结果时,不利用每个单元1110的CSA、完成加法器、归一化逻辑和舍入逻辑。然而,当数据路径1100被配置为向量机以生成FMA结果的向量时,将使用该逻辑。应当领会,当数据路径1100被配置为生成点积结果时,4:2CSA加法器1142、3:2CSA加法器1144、完成加法器1150、归一化逻辑1160和舍入逻辑1170与每个单元中的未使用逻辑相比非常类似,尽管精度不同。如果可能的话,利用单元1110内的逻辑来执行与附加组合逻辑相同运算的一部分是有用的。
图12示出了根据另一个实施例的HMMA数据路径1200。HMMA数据路径1200包括“小”半精度浮点FMA单元1210和“大”半精度浮点FMA单元1220。小单元1210类似于单元1110中的每一个并且实现FMA运算:以三个运算对象(A、B和C)作为输入,将运算对象A乘以运算对象B并且将该乘积与运算对象C相加。大单元1220类似于小单元1210之处在于大单元1220实现FMA运算:以三个运算对象(A、B和C)作为输入,将运算对象A乘以运算对象B并且将该乘积与运算对象C相加。然而,大单元1220在内部包括稍有不同的逻辑,以便实现半精度浮点FMA运算以及组合逻辑两者,以便与小单元1210结合实现点积运算。
如图12所示,由小单元1210生成的部分乘积被输出到第一部分乘积解析器1232。在一个实施例中,部分乘积解析器1232是完成加法器,其将由乘法器生成的两个整数组合成表示第一部分乘积的两个尾数的乘积的最终值。类似地,由大单元1220生成的部分乘积被输出到与第一部分乘积解析器1232类似的第二部分乘积解析器1234。第一部分乘积解析器1232的输出和由大单元1220中的乘法器产生的第二部分乘积的两个整数中的第一个被耦合到第一交换器(switch),并且第二部分乘积解析器1234的输出和由大单元1220中的乘法器产生的第二部分乘积的两个整数中的第二个被耦合到第二交换器。第一交换器和第二交换器控制大单元1220是被配置为第一模式以生成标量FMA运算的结果还是大单元1220被配置为第二模式以生成向量点积运算的结果。
第一交换器和第二交换器的输出耦合到乘积对齐逻辑1240,其被配置为当大单元1220被配置为第二模式时,经由第一交换器和第二交换器将传递的部分乘积进行移位作为输入。乘积对齐逻辑1240由指数比较逻辑1245控制,其类似于指数比较逻辑1120进行运算。如果大单元1220被配置为第一模式,则乘积对齐逻辑1240并不经由第一交换器和第二交换器对传递到乘积对齐逻辑1240的两个整数中的任一个进行移位。当小单元1210和大单元1220正在作为向量机分别生成标量FMA结果时,由于与两个部分乘积相关联的指数不相关,则不执行移位。
然后将对齐的部分乘积传递给3:2CSA 1250,其将两个部分乘积与来自第三输入运算对象的加数相加。大单元1220中的3:2CSA 1250可以比小单元1210的相应CSA明显更宽(即,具有更大的精度)。这对于处理部分乘积解析器1232、1234以及乘积对齐逻辑1240的无损运算所需精度的附加位是必需的。
在一个实施例中,数据路径1200还包括选择逻辑1205,用于在来自输入矩阵A 710的至少两个向量和来自输入矩阵B 720的至少两个向量以及来自收集器矩阵C 730的不同元素/加数的多个组合之间进行选择,以便在结果队列950中生成多个点积结果。
图13示出了根据又一实施例的HMMA数据路径1300。HMMA数据路径1300包括:四个乘法器1310,用于生成两个四元素向量
Figure BDA0003257464010000351
Figure BDA0003257464010000352
的部分乘积;四个否定逻辑1320块,用于合并运算对象的符号位;五个移位逻辑1330块,用于移位部分乘积和加数,以基于部分乘积的指数对齐所有值;CSA树,包括3:2CSA 1342和4:2CSA1344的多个简化层;完成加法器1350;归一化逻辑1360;以及舍入逻辑1370。数据路径1300包括多个流水线阶段:第一流水线阶段1301,其包括转换/编码逻辑1315;第二流水线阶段1302,其包括乘法器1310;第三流水线阶段1303,其包括否定逻辑1320、移位逻辑1330和CSA树;第四流水线阶段1304,其包括完成加法器;第五流水线阶段1305,其包括归一化逻辑1360;以及第六流水线阶段1306,其包括舍入逻辑1370。
在第一流水线阶段1301中,转换/编码逻辑1315接收两个输入向量的元素和收集器矩阵C 730的元素/加数,并且对这些元素执行一个或更多个预处理运算。预处理可能涉及将元素从一种格式转换为半精度浮点值格式。例如,可以以16位浮点、8位有符号/无符号整数、16位有符号/无符号整数、32位定点格式等提供输入向量
Figure BDA0003257464010000353
Figure BDA0003257464010000354
转换/编码逻辑1315被配置为将所有输入值转换为半精度浮点值格式以与数据路径1300的其余部分兼容。
在一个实施例中,转换/编码逻辑1315还可以包括修改的Booth编码器。修改的Booth编码器为被乘数的每三位(例如,
Figure BDA0003257464010000355
向量的元素的位)生成选择器信号。选择器信号然后被传递到乘法器1310,其被设计为实现修改的Booth算法以生成部分乘积。修改的Booth算法可以通过减少乘法器1310中的简化层(加法器)的数量来加速乘法器1310。应当领会,在一些实施例中,数据路径1100和1200也可以被修改以将转换/编码逻辑1315和被设计用于实现修改的Booth算法的乘法器进行合并。
在第二流水线阶段1302中,乘法器1310中的每一个从两个输入向量
Figure BDA0003257464010000356
Figure BDA0003257464010000357
接收相应元素的相应对。例如,第一乘法器1310接收元素A0和B0;第二乘法器1310接收元素A1和B1;第三乘法器1310接收元素A2和B2;并且第四乘法器1310接收元素A3和B3。乘法器1310的每一个生成两个整数,其表示通过将输入到该乘法器1310的元素相乘而形成的部分乘积。
在第三流水线阶段1303中,否定逻辑块1320组合用于输入到对应乘法器1310的元素的符号位,并且如果组合符号位是负的,则经由应用于该对整数的二补码运算将部分乘积取反。例如,否定逻辑块1320可以对来自输入到对应乘法器1310的两个元素的符号位进行异或(XOR)。如果部分乘积为负,则异或运算的结果为1。如果部分乘积为正,则异或运算的结果为0。如果异或运算的结果是1,则来自乘法器1310的两个整数通过对每个值进行二补码运算(即,切换该值中的每个位的状态,然后将结果加1)而取反。应当领会,在一些实施例中,否定逻辑块1320可以以类似的方式在数据路径1100和1200中实现,以便处理各种运算对象的符号位。
移位逻辑1330块基于与所有四个部分乘积相关联的指数来移位部分乘积。尽管未明确示出,但是通过对与相应乘法器1310相关联的元素中包括的指数位进行求和,使用加法器(诸如加法器1020)来计算与每个部分乘积相关联的指数。与所有四个部分乘积以及加数相关联的最大指数被提供给移位逻辑1330块的每一个。然后,每个移位逻辑1330块确定将与该移位逻辑1330块相对应的部分乘积进行移位的位数是多少,以便将部分乘积与所有部分乘积的最大指数对齐。移位逻辑1330块之一也移位加数尾数。应当领会,以位为单位的最大可能移位距离将增加传递给CSA树的部分乘积整数的所需的位宽,以避免损失精度。在一个实施例中,移位逻辑1330块被配置为截断对齐的部分乘积以便降低CSA树中的加法器的精度。
CSA树包括多个简化级别,其中三个或四个输入相加以生成两个输出,进位值和总和值。如图13所示,4元素点积运算需要三个简化级别,包括第一简化级别上的三个3:2CSA1342;在第二简化级别上的两个3:2CSA1342;以及在第三简化级别上的一个4:2CSA 1344。在第三简化级别上的4:2CSA 1344的输出生成用于与加数相加的两个向量的点积的进位值和总和值。在第四流水线阶段1304中,进位值和总和值被传送到完成加法器1350,其对进位值和总和值求和以产生点积的尾数值。在第五流水线阶段1305中,结果被传递到归一化逻辑1360,其对点积的尾数值进行归一化,并基于该对齐调整点积的最大指数值。在第六流水线阶段1306中,归一化的尾数值和指数值被传递到舍入逻辑1370,其将结果舍入为收集器矩阵C730的元素的格式的宽度(例如,半精度或单精度)。
虽然没有明确示出,与选择逻辑1105和1205类似的选择逻辑可以耦合到转换/编码逻辑1315,使得存储在运算对象收集器920中的多个向量可以用于在单个指令周期期间,在数据路径1300的两次或更多次通过上,生成四元素向量的点积结果。
在另一个实施例中,图13所示的逻辑可被复制一次或更多次以使用来自运算对象收集器920的共享元素并行地产生多个点积结果。例如,数据路径1300可包括四个四元素点积逻辑单元,其与图13中所示的逻辑相匹配。所有四点积逻辑单元在特定通过期间共享相同的
Figure BDA0003257464010000371
向量,但是加载有不同的
Figure BDA0003257464010000372
向量,以针对收集器矩阵C 730的不同元素并行地产生四点积结果。另外,在给定指令周期期间,可以使用数据路径1300的多次通过来产生存储在运算对象收集器920中的不同
Figure BDA0003257464010000373
向量的点积值。
在又一个实施例中,与图13中所示的逻辑相匹配的八个四元素点积逻辑单元可以被包括在数据路径中,使得能够在单次通过中生成对应于两个
Figure BDA0003257464010000374
向量和四个
Figure BDA0003257464010000375
向量的八个点积值。应当领会,图13中所示的逻辑的任何数量的副本可以在单个数据路径1300中实现,以便并行地产生多个分离且不同的点积值。然后可以将逻辑的每个副本与存储在运算对象收集器920中的任何两个四元素向量配对,以便为这两个向量生成点积值。逻辑的每个副本还可以耦合到选择逻辑,其使得在单个指令周期期间存储在运算对象收集器中的不同向量对能够在数据路径的多次通过中被该逻辑的副本消耗。
图14示出了根据一个实施例的、被配置为与图10的双精度浮点FMA数据路径共享至少一个流水线阶段的图13的HMMA数据路径1300。应当领会,当分析数据路径1000、数据路径1100、数据路径1200和数据路径1300的架构时,第四流水线阶段1304、第五流水线阶段1305和第六流水线阶段1306看起来相对熟悉,如上所述。基本上,这些流水线阶段都包括完成加法器、归一化逻辑和舍入逻辑,以转换针对点积生成的进位值和总和值以便适合收集器矩阵C 730的元素的特定格式。数据路径1000、1100、1200和1300中的每一个中的逻辑之间的唯一差异是所述逻辑的精度。然而,双精度浮点FMA数据路径1000的完成加法器1050将大于HMMA数据路径1100、1200和1300的完成加法器。因此,可以在任何架构中简化数据路径1300,其中内核包括HMMA数据路径1300和双精度浮点FMA数据路径1000两者,双精度浮点FMA数据路径1000耦合到相同运算对象收集器920和结果队列950。
在一个实施例中,内核450包括HMMA数据路径1300和双精度浮点FMA数据路径1000两者。然而,修改HMMA数据路径1300以省略第四流水线阶段1304、第五流水线阶段1305和第六流水线阶段1306。相反,第三流水线阶段1303的输出(即,表示由CSA树输出的点积值的进位值和总和值)被路由到包括在FMA数据路径1000中的一对交换器。该对交换器使得FMA数据路径1000能够使用完成加法器对来自HMMA数据路径1300的点积值或来自FMA数据路径1000的FMA结果的任意一个求和。因此,HMMA数据路径1300共享包括完成加法器、归一化逻辑和舍入逻辑的FMA数据路径1000的流水线阶段。应当领会,尽管没有明确示出,但与点积相关联的最大指数值也可以被发送到FMA数据路径1000中的交换器,使得归一化逻辑可以在由加法器1020产生的指数值和与由HMMA数据路径1300生成的点积相关联的最大值指数值之间转换。
共享两个数据路径之间的逻辑,以及共享运算对象收集器920和结果队列950,可以显著减小集成电路上的内核450的晶粒(die)占用空间的尺寸。因此,可以在单个集成电路晶粒上设计更多的内核450。
如前所述,可以设计各种数据路径以比在当前数据路径设计更高效地实现MMA运算,例如标量FMA数据路径以及甚至被配置为并行计算部分乘积的向量机。该设计的一个主要方面是可以从寄存器文件中加载多于一对向量,并将其耦合到数据路径的输入,从而可以在单个指令周期内生成多个点积值。如本文所使用的,指令周期是指与从寄存器文件中加载具有多个运算对象的运算对象收集器有关的所有运算,然后在数据路径上执行MMA运算以生成对应于结果矩阵的不同元素的多个点积值,然后将多个点积值写入寄存器文件。每个指令周期可以包括数据路径的多次通过以生成针对多次通过的不同向量对的组合的结果。此外,每次通过可以是流水线式的,使得第二次通过在第一次通过完成之前开始。用于MMA运算的指令可以在多个指令周期上实现,在每个指令周期期间将输入矩阵运算对象的不同部分加载到数据路径的运算对象收集器中。因此,用于MMA运算的指令可以包括在多个指令周期和/或多个内核上处理的任意大小的矩阵运算对象,所述多个内核在每个指令周期期间将来自矩阵运算对象的不同的向量施加到每个数据路径,直到来自矩阵运算对象的所有向量已被处理。
MMA运算的已知应用程序包括图像处理(例如,对图像执行仿射变换)、机器学习(例如,在执行线性代数、优化函数或计算统计时使用矩阵运算)以及其他。矩阵代数是一个可以广泛应用于各种应用程序的基础领域。因此,通过设计能够更快地执行这些运算的处理器来提高MMA运算的处理效率对于计算处理的速度和效率是非常有益的。
更具体地,利用所公开的数据路径执行的MMA运算展示更好的数字行为和/或提供实现数据路径的处理器的更高的效率。例如,与使用每次作为累加运算的一部分都执行舍入的串行加法器相比,使用单个加法器的部分乘积的并行累加消除了多次舍入。对于任何长度的向量,最坏情况误差界限可以被推到机器精度的一个(或半个)单位,而在常规点积数据路径中实现的串行乘-加-加-加(mul-add-add-add)数据路径显示最坏情况误差界限与向量长度成正比。
此外,所公开的数据路径显示出比现有技术数据路径更低的延迟。较少的流水线阶段需要实现较少数量的触发器,这提高了数据路径的功耗。由于数据路径重用运算对象向量,因此需要较小的寄存器文件来实现相同的MMA运算,其可以通过传统数据路径串行运算来实现。此外,可以简化内部移位器和加法器长度以匹配期望的误差界限,从而进一步减少数据路径中的触发器的数量。此外,通过简单更新数据路径的输入处的运算对象收集器处的一些矩阵运算对象可以节省能量,链接点积运算以在结果队列中生成更大的点积结果,而不必强制将中间结果写回到寄存器文件然后将来自寄存器文件的中间结果重新加载回数据路径的输入处的运算对象收集器中。
图15示出了在其中可以实现各种先前实施例的各种架构和/或功能的示例性系统1500。如图所示,提供了系统1500,其包括连接到通信总线1502的至少一个中央处理器1501。通信总线1502可以使用任何合适的协议来实现,诸如PCI(Peripheral ComponentInterconnect,外围组件互连)、PCI-Express、AGP(Accelerated Graphics Port,加速图形端口),超传输或任何其他总线或点对点通信协议。系统1500还包括主存储器1504。控制逻辑(软件)和数据被存储在主存储器1504中,其可以采取随机存取存储器(RAM)的形式。
系统1400还包括输入设备1512、图形处理器1506和显示器1508,即常规CRT(阴极射线管)、LCD(液晶显示器)、LED(发光二极管)、等离子显示器等。可以从输入设备1512接收用户输入,例如键盘、鼠标、触摸板、麦克风等。在一个实施例中,图形处理器1506可以包括多个着色器模块,光栅化模块等。前述模块中的每一个甚至可以位于单个半导体平台上以形成图形处理单元(GPU)。
在本说明书中,单个半导体平台可以指唯一的单一基于半导体的集成电路或芯片。应当注意,术语单个半导体平台还可以指具有增加连通性的多芯片模块,其模拟片上运算,并且相对于利用常规的中央处理单元(CPU)和总线实现方式而言有显著的改进。当然,根据用户的需要,各种模块也可以单独地或以半导体平台的各种组合来定位。
系统1500还可以包括辅助存储器1510。辅助存储器1510包括,例如,硬盘驱动器和/或可移除存储驱动器、代表软盘驱动器、磁带驱动器、光盘驱动器、数字多功能盘(DVD)驱动器、记录设备、通用串行总线(USB)闪存。可移除存储驱动器以众所周知的方式从可移除存储单元读取和/或写入到可移动存储单元。
计算机程序或计算机控制逻辑算法可以被存储在主存储器1504和/或辅助存储器1510中。这些计算机程序在被执行时使得系统1500能够执行各种功能。存储器1504、存储器1510和/或任何其他存储器是计算机可读介质的可能示例。
在一个实施例中,各种先前的附图的架构和/或功能可以在中央处理器1501、图形处理器1506、具有中央处理器1501和图形处理器1506两者的能力的至少一部分的集成电路(未示出)、芯片组(即,设计成作为用于执行相关功能的单元工作和出售的一组集成电路等)和/或用于这一点的任何其他集成电路的情况下实现。
仍然,各种先前的附图的架构和/或功能可以在通用计算机系统、电路板系统、专用于娱乐目的的游戏控制台系统、专用系统以及/或任何其他期望的系统中实现。例如,系统1500可以采取台式计算机、膝上型计算机、服务器、工作站、游戏控制台、嵌入式系统和/或任何其他类型的逻辑的形式。此外,系统1500可以采用各种其他设备的形式,包括但不限于个人数字助理(PDA)设备、移动电话设备、电视机等。
此外,虽然未示出,但是系统1500用于通信目的可以被耦合到网络(例如,电信网络、局域网(LAN)、无线网络、广域网(WAN)(诸如因特网)、对等网络、有线电视网络等)。
虽然上文已经描述了各种实施例,但应当理解,它们仅作为示例的方式呈现,而不是限制。因此,优选实施例的宽度和范围不应被任何上述示例性实施例限制,而应仅根据权利要求及其等同物来限定。

Claims (20)

1.一种多线程处理器,包括:
解码器,用以解码浮点矩阵乘积和累加(MMA)指令;
缓冲器,用以存储由所述MMA指令的操作数所指定的16位浮点矩阵数据;
调度器,用以调度所述MMA指令;
熔合乘积累加(FMA)单元,用以执行所述16位浮点矩阵数据的相应对的点积;
逻辑,用以对所述点乘的多个部分乘积进行移位;
算数逻辑单元(ALU),用以将要累加的所述多个部分乘积添加至寄存器;以及
存储器,用以存储所述MMA指令的结果。
2.如权利要求1所述的多线程处理器,其中用于移位所述点积的所述多个部分乘积的所述逻辑基于与所述相应对中的每个元素相关联的指数对齐所述多个部分乘积。
3.如权利要求1所述的多线程处理器,还包括加法器树,其中所述加法器树包括至少3:2进位和加法器(CSA)。
4.如权利要求1所述的多线程处理器,还包括分派单元,以将所述MMA指令传送到所述FMA单元。
5.如权利要求1所述的多线程处理器,还包括寄存器文件以提供所述寄存器。
6.如权利要求1所述的多线程处理器,还包括特殊功能单元(SFU)。
7.如权利要求1所述的多线程处理器,还包括用于连接所述ALU和所述寄存器的互连。
8.一种系统,包括如权利要求1所述的多线程处理器,其中所述系统还包括:
系统总线,用以将所述多线程处理器连接到一个或多个外围设备;和
一个或多个动态随机存取存储器(DRAM)设备。
9.一种单指令多数据(SIMD)多线程处理器,包括:
多个核,用以执行浮点矩阵乘法累加(MMA)指令,其中所述多个核中的每一个核包括:
前端,用以获取MMA指令;
指令高速缓存,用以存储所述MMA指令;
L1高速缓存,用以存储数据;
L2高速缓存,用以存储数据;
多个端口,用以从存储器读取和写入到所述存储器;
一个或更多个加载/存储单元,用以从所述存储器读取和写入到所述存储器;
互连,用以耦合所述存储器和所述多个核;
解码器,用以解码所述MMA指令;
缓冲器,用以存储由所述MMA指令的操作数指定的16位浮点矩阵数据;
调度器,用以调度所述MMA指令;
熔合乘法累加(FMA)单元,用以执行对所述16位浮点矩阵数据的相应对的点积;
逻辑,用以对所述点积的多个部分积进行移位;
算术逻辑单元(ALU),用以将要累加的所述多个部分乘积添加到寄存器中;并且
其中所述存储器用于存储所述MMA指令的结果。
10.如权利要求9所述的SIMD多线程处理器,其中所述L1高速缓存包括至少24千字节(KB)的存储。
11.如权利要求9所述的SIMD多线程处理器,其中所述存储器包括至少64千字节(KB)的存储。
12.如权利要求9所述的SIMD多线程处理器,其中所述互连将所述一个或更多个加载/存储单元连接到所述寄存器。
13.如权利要求9所述的SIMD多线程处理器,其中所述调度器将所述MMA指令分派到所述多个核中的一个或更多个核。
14.如权利要求9所述的SIMD多线程处理器,其中用于移位所述点积的所述多个部分乘积的所述逻辑基于与所述相应对中的每个元素相关联的指数来对齐所述多个部分乘积。
15.一种计算机实现的方法,包括:
由解码器解码浮点矩阵乘法和累加(MMA)指令;
通过缓冲器存储由所述MMA指令的操作数指定的16位浮点矩阵数据;
由调度器调度所述MMA指令;
通过熔合乘法累加(FMA)单元对所述16位浮点矩阵数据的相应对进行点积;
通过逻辑将所述点积的多个部分乘积移位;
由算术逻辑单元(ALU)将要累加的所述多个部分乘积添加到寄存器中;和
由存储器存储所述MMA指令的结果。
16.如权利要求15所述的计算机实现的方法,其中所述ALU包括至少一个加法器。
17.如权利要求15所述的计算机实现的方法,其中移位所述多个部分乘积进一步包括基于与所述相应对中的每个元素相关联的指数对齐所述多个部分乘积。
18.如权利要求15所述的计算机实现的方法,其中所述调度器包括分派单元,以分派所述MMA指令。
19.如权利要求15所述的计算机实现的方法,还包括使用互连将所述多个部分乘积累加到所述寄存器中。
20.如权利要求15所述的计算机实现的方法,其中寄存器文件提供所述寄存器。
CN202111063446.5A 2017-05-08 2018-05-07 矩阵乘积累加运算的广义加速 Pending CN113961874A (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201762503159P 2017-05-08 2017-05-08
US62/503,159 2017-05-08
US15/826,435 US10338919B2 (en) 2017-05-08 2017-11-29 Generalized acceleration of matrix multiply accumulate operations
US15/826,435 2017-11-29
CN201810425869.9A CN108874744B (zh) 2017-05-08 2018-05-07 用于执行矩阵乘积和累加运算的处理器、方法及存储介质

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN201810425869.9A Division CN108874744B (zh) 2017-05-08 2018-05-07 用于执行矩阵乘积和累加运算的处理器、方法及存储介质

Publications (1)

Publication Number Publication Date
CN113961874A true CN113961874A (zh) 2022-01-21

Family

ID=63895696

Family Applications (4)

Application Number Title Priority Date Filing Date
CN202111061786.4A Pending CN113961872A (zh) 2017-05-08 2018-05-07 矩阵乘积累加运算的广义加速
CN202111063446.5A Pending CN113961874A (zh) 2017-05-08 2018-05-07 矩阵乘积累加运算的广义加速
CN202111083731.3A Pending CN113961875A (zh) 2017-05-08 2018-05-07 矩阵乘积累加运算的广义加速
CN202210570105.5A Pending CN114969644A (zh) 2017-05-08 2018-05-07 矩阵乘积累加运算的广义加速

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202111061786.4A Pending CN113961872A (zh) 2017-05-08 2018-05-07 矩阵乘积累加运算的广义加速

Family Applications After (2)

Application Number Title Priority Date Filing Date
CN202111083731.3A Pending CN113961875A (zh) 2017-05-08 2018-05-07 矩阵乘积累加运算的广义加速
CN202210570105.5A Pending CN114969644A (zh) 2017-05-08 2018-05-07 矩阵乘积累加运算的广义加速

Country Status (3)

Country Link
US (2) US11816481B2 (zh)
CN (4) CN113961872A (zh)
DE (1) DE102018110607A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115857873A (zh) * 2023-02-07 2023-03-28 湖南三安半导体有限责任公司 乘法器、乘法计算方法、处理系统及存储介质
CN115880132A (zh) * 2023-02-06 2023-03-31 南京砺算科技有限公司 图形处理器、矩阵乘法任务处理方法、装置及存储介质

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110378477B (zh) * 2019-08-30 2023-09-08 上海寒武纪信息科技有限公司 乘法器、数据处理方法、芯片及电子设备
CN110378478B (zh) * 2019-08-30 2023-09-08 上海寒武纪信息科技有限公司 乘法器、数据处理方法、芯片及电子设备
CN114945916A (zh) * 2020-10-27 2022-08-26 北京苹芯科技有限公司 使用存内处理进行矩阵乘法的装置和方法
WO2024065859A1 (en) * 2022-10-01 2024-04-04 Intel Corporation Block normalized adder with four-deep systolic parameter support
CN117132450B (zh) * 2023-10-24 2024-02-20 芯动微电子科技(武汉)有限公司 一种可实现数据共享的计算装置和图形处理器

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5226171A (en) 1984-12-03 1993-07-06 Cray Research, Inc. Parallel vector processing system for individual and broadcast distribution of operands and control information
US5014235A (en) 1987-12-15 1991-05-07 Steven G. Morton Convolution memory
US5491650A (en) 1993-04-19 1996-02-13 California Institute Of Technology High precision computing with charge domain devices and a pseudo-spectral method therefor
US7483935B2 (en) 1995-08-16 2009-01-27 Microunity Systems Engineering, Inc. System and method to implement a matrix multiply unit of a broadband processor
US6901422B1 (en) 2001-03-21 2005-05-31 Apple Computer, Inc. Matrix multiplication in a vector processing system
CN1707426A (zh) 2004-06-09 2005-12-14 上海华博科技(集团)有限公司 基于可配置的乘法器矩阵结构的操作数分配装置及其分配方法
US20070271325A1 (en) 2006-05-08 2007-11-22 Nvidia Corporation Matrix multiply with reduced bandwidth requirements
GB0618921D0 (en) 2006-09-26 2006-11-08 Trw Ltd Matrix multiplication
JP4942095B2 (ja) 2007-01-25 2012-05-30 インターナショナル・ビジネス・マシーンズ・コーポレーション マルチコア・プロセッサにより演算を行う技術
US7565513B2 (en) 2007-02-28 2009-07-21 Advanced Micro Devices, Inc. Processor with power saving reconfigurable floating point unit decoding an instruction to single full bit operation or multiple reduced bit operations
US8165214B2 (en) 2007-05-08 2012-04-24 Freescale Semiconductor, Inc. Circuit and method for generating fixed point vector dot product and matrix vector values
KR100919236B1 (ko) 2007-05-22 2009-09-30 한국전자통신연구원 병렬 프로세서를 이용한 3차원 그래픽 기하 변환 방법
US8051124B2 (en) 2007-07-19 2011-11-01 Itt Manufacturing Enterprises, Inc. High speed and efficient matrix multiplication hardware module
US8626815B1 (en) 2008-07-14 2014-01-07 Altera Corporation Configuring a programmable integrated circuit device to perform matrix multiplication
US8326904B2 (en) 2009-01-27 2012-12-04 International Business Machines Corporation Trigonometric summation vector execution unit
US8577950B2 (en) 2009-08-17 2013-11-05 International Business Machines Corporation Matrix multiplication operations with data pre-conditioning in a high performance computing architecture
US8984043B2 (en) 2009-12-23 2015-03-17 Intel Corporation Multiplying and adding matrices
US20120113133A1 (en) 2010-11-04 2012-05-10 Shpigelblat Shai System, device, and method for multiplying multi-dimensional data arrays
US8924455B1 (en) 2011-02-25 2014-12-30 Xilinx, Inc. Multiplication of matrices using systolic arrays
CN102411558B (zh) 2011-10-31 2015-05-13 中国人民解放军国防科学技术大学 面向向量处理器的大矩阵相乘的向量化实现方法
CN102750150B (zh) 2012-06-14 2015-05-13 中国科学院软件研究所 基于x86架构的稠密矩阵乘法汇编代码自动生成方法
US9201828B2 (en) 2012-10-23 2015-12-01 Analog Devices, Inc. Memory interconnect network architecture for vector processor
CN103294648B (zh) 2013-05-08 2016-06-01 中国人民解放军国防科学技术大学 支持多mac运算部件向量处理器的分块矩阵乘法向量化方法
US9384168B2 (en) 2013-06-11 2016-07-05 Analog Devices Global Vector matrix product accelerator for microprocessor integration
CN103927290A (zh) 2014-04-18 2014-07-16 南京大学 一种任意阶下三角复矩阵求逆运算方法
US9891886B2 (en) 2014-07-02 2018-02-13 Via Alliance Semiconductor Co., Ltd Split-path heuristic for performing a fused FMA operation
US9928034B2 (en) 2014-12-17 2018-03-27 Nvidia Corporation Work-efficient, load-balanced, merge-based parallelized consumption of sequences of sequences
CN104617959B (zh) 2015-01-20 2017-09-05 北京邮电大学 一种基于通用处理器的ldpc编译码方法
EP3268969B1 (en) 2015-04-16 2019-06-05 Hewlett-Packard Enterprise Development LP Resistive memory arrays for performing multiply-accumulate operations
US10192162B2 (en) 2015-05-21 2019-01-29 Google Llc Vector computation unit in a neural network processor
US10372416B2 (en) 2017-04-28 2019-08-06 Intel Corporation Multiply-accumulate “0” data gating
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
US10338919B2 (en) 2017-05-08 2019-07-02 Nvidia Corporation Generalized acceleration of matrix multiply accumulate operations
US10324689B2 (en) 2017-11-21 2019-06-18 Intel IP Corporation Scalable memory-optimized hardware for matrix-solve

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115880132A (zh) * 2023-02-06 2023-03-31 南京砺算科技有限公司 图形处理器、矩阵乘法任务处理方法、装置及存储介质
CN115857873A (zh) * 2023-02-07 2023-03-28 湖南三安半导体有限责任公司 乘法器、乘法计算方法、处理系统及存储介质
CN115857873B (zh) * 2023-02-07 2023-05-09 兰州大学 乘法器、乘法计算方法、处理系统及存储介质

Also Published As

Publication number Publication date
CN113961872A (zh) 2022-01-21
US11816482B2 (en) 2023-11-14
CN113961875A (zh) 2022-01-21
US20220405098A1 (en) 2022-12-22
CN114969644A (zh) 2022-08-30
US11816481B2 (en) 2023-11-14
DE102018110607A1 (de) 2018-11-08
US20220391206A1 (en) 2022-12-08

Similar Documents

Publication Publication Date Title
CN108874744B (zh) 用于执行矩阵乘积和累加运算的处理器、方法及存储介质
US11816482B2 (en) Generalized acceleration of matrix multiply accumulate operations
US11977888B2 (en) Inline data inspection for workload simplification
US8106914B2 (en) Fused multiply-add functional unit
US9477477B2 (en) System, method, and computer program product for executing casting-arithmetic instructions
US11593069B2 (en) Use of a single instruction set architecture (ISA) instruction for vector normalization
US20210158155A1 (en) Average power estimation using graph neural networks
US9880851B2 (en) System, method, and computer program product for implementing large integer operations on a graphics processing unit
US9471307B2 (en) System and processor that include an implementation of decoupled pipelines
US20220318013A1 (en) Supporting 8-bit floating point format operands in a computing architecture
CN111796795A (zh) 用于执行单精度浮点扩展数学运算的机制
US20240160406A1 (en) Low-precision floating-point datapath in a computer processor
US20240160405A1 (en) Computation of correctly rounded floating point summation
US20240160407A1 (en) Integer square 1ulp hardware multiplier
CN110807827A (zh) 系统生成稳定的重心坐标和直接平面方程访问

Legal Events

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