CN114902179A - 在流式处理器中执行矩阵乘法的方法和装置 - Google Patents
在流式处理器中执行矩阵乘法的方法和装置 Download PDFInfo
- Publication number
- CN114902179A CN114902179A CN202080090838.8A CN202080090838A CN114902179A CN 114902179 A CN114902179 A CN 114902179A CN 202080090838 A CN202080090838 A CN 202080090838A CN 114902179 A CN114902179 A CN 114902179A
- Authority
- CN
- China
- Prior art keywords
- memory
- matrix
- data set
- alu
- component
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 239000011159 matrix material Substances 0.000 title claims abstract description 259
- 238000000034 method Methods 0.000 title claims abstract description 85
- 230000015654 memory Effects 0.000 claims abstract description 230
- 238000012545 processing Methods 0.000 claims abstract description 117
- 239000000835 fiber Substances 0.000 claims description 57
- 238000004891 communication Methods 0.000 claims description 20
- 239000000872 buffer Substances 0.000 description 41
- 230000006870 function Effects 0.000 description 29
- 239000000047 product Substances 0.000 description 22
- 238000004364 calculation method Methods 0.000 description 9
- 239000000284 extract Substances 0.000 description 9
- 230000008901 benefit Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 8
- 230000005291 magnetic effect Effects 0.000 description 5
- 238000009825 accumulation Methods 0.000 description 4
- 238000004590 computer program Methods 0.000 description 4
- 238000010801 machine learning Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 238000003491 array Methods 0.000 description 3
- 238000009877 rendering Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000013473 artificial intelligence Methods 0.000 description 2
- 230000003190 augmentative effect Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 239000004744 fabric Substances 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000012549 training Methods 0.000 description 2
- 230000004913 activation Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 239000007795 chemical reaction product Substances 0.000 description 1
- 238000013075 data extraction Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000011176 pooling Methods 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000009897 systematic effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/57—Arithmetic 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3826—Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
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)
- Computational Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Multimedia (AREA)
- Image Generation (AREA)
- Advance Control (AREA)
Abstract
本公开涉及用于计算处理的方法和装置。例如,所公开的技术促进提高流式处理器中的矩阵乘法的性能。本公开的各方面可以利用加载控制单元执行第一加载指令以将输入矩阵的输入数据集从第一存储器加载到第二存储器。本公开的各方面还可以利用加载控制单元执行第二加载指令以将权重矩阵的权重数据集从第一存储器加载到第二存储器。此外,本公开的各方面可以利用ALU组件使用输入数据集和权重数据集来执行矩阵乘法运算以生成输出矩阵。此外,本公开的各方面可以将输出矩阵存储在ALU组件可存取的通用寄存器中。
Description
交叉引用相关申请
本申请要求2019年12月30日提交的标题为“Methods and Apparatus to PerformMatrix Multiplication in a Streaming Processor”的美国临时专利申请第62/955,311号和2020年12月29日提交的、标题为“Methods and Apparatus to Perform MatricMultiplication in a Streaming Processor”的美国专利申请第17/137,226号的权益,其通过引用全部明确并入本文。
技术领域
本公开总体上涉及处理系统,并且更具体地涉及用于计算处理的一种或多种技术。
背景技术
计算设备经常利用图形处理单元(GPU)来加速图形数据的绘制以供显示。这样的计算设备可以包括例如计算机工作站、诸如所谓的智能手机之类的移动电话、嵌入式系统、个人计算机、平板计算机和视频游戏控制台。GPU执行包括一个或多个处理阶段的图形处理管线,这些处理阶段一起操作以执行图形处理命令并输出帧。中央处理单元(CPU)可以通过向GPU发出一个或多个图形处理命令来控制GPU的操作。现代CPU通常能够同时执行多个应用,每个应用在执行期间可能都需要使用GPU。
发明内容
以下呈现一个或多个方面的简化总结,以便提供对这些方面的基本理解。该发明内容不是对所有预期方面的广泛概述,并且既不旨在标识所有方面的关键元素,也不旨在勾勒任何或所有方面的范围。其唯一目的是以简化的形式呈现一个或多个方面的一些概念,作为稍后呈现的更详细描述的前奏。
在本公开的一个方面,提供了一种方法、计算机可读介质和装置。该装置可以是显示处理器、显示处理单元(DPU)、图形处理单元(GPU)或视频处理器。该装置可以利用流式处理器的加载控制单元执行第一加载指令,以将输入矩阵的输入数据集从流式处理器的第一存储器加载到该流式处理器的第二存储器,输入矩阵包括第一行数和第一列数。该装置还可以利用加载控制单元执行第二加载指令,以将权重矩阵的权重数据集从第一存储器加载到第二存储器,该权重矩阵包括第二列数和第二列数。另外,该装置可以利用流式处理器的算术逻辑单元(ALU)组件使用输入数据集和权重数据集来执行矩阵乘法运算,以生成具有第一行数和第二列数的输出矩阵,其中输出矩阵的每个元素表示输入数据集的行和权重数据集的列的多个元素的点积,并且其中点积包括产生相应的中间结果的多个乘法运算和累加运算,这些中间结果被重新输入到ALU组件以用于该点积的后续运算。此外,该装置可以将输出矩阵存储在流式处理器的通用寄存器中,其中通用寄存器被配置为可由ALU组件存取。
本公开的一个或多个示例的细节在附图和以下描述中进行阐述。本公开的其他特征、目的和优点将从描述和附图以及权利要求中显而易见。
附图说明
图1是图示了根据本发明的一种或多种技术的示例内容生成系统的框图。
图2是图示了根据本公开的一种或多种技术的图1的示例设备的示例图形处理器的框图。
图3图示了根据本发明的一种或多种技术执行矩阵乘法。
图4是根据本文公开的教导在流式处理器处的示例通信流。
图5是根据本文公开的教导在流式处理器处的示例通信流。
图6图示了根据本发明的一种或多种技术的示例方法的示例流程图。
具体实施方式
一般来说,矩阵乘法是具有包括在应用数学、物理学、工程学和计算机科学中的许多应用的数学操作。在计算机科学的上下文中,矩阵乘法可以被使用在诸如绘制三维(3D)图形、训练机器学习算法和/或训练人工智能网络之类的应用中。然而,执行矩阵乘法运算的计算复杂性可能会降低此类应用的性能。
虽然一些示例试图通过基于硬件的解决方案(例如,专用协处理器、矩阵计算组件等)来提高执行矩阵乘法的效率,但是这种基于硬件的解决方案在资源方面(诸如设备内的物理空间)可能是昂贵的,并且通常受限于硬件能够执行的操作范围。
本文公开的示例技术使得能够使用基于处理器的设备中可用的组件来执行矩阵乘法。特别地,所公开的技术可以由利用并行处理单元(诸如GPU)的基于处理器的设备来实现,这些并行处理单元被配置为并行(例如,同时或几乎同时)执行许多操作。例如,图形处理器可以包括一个或多个处理器核心(例如,流式处理器),其执行针对一个或多个程序(例如,“着色器程序”)的指令。尽管以下描述提供了用于利用图形处理器或通用GPU(GPGPU)实现一种或多种公开技术的示例,但是本文所描述的概念可适用于采用并行处理单元和/或非并行处理单元(例如,未被配置为执行并行处理的处理单元)的其他基于处理器的设备。
在一些示例中,图形处理器可以利用单指令多数据(SIMD)结构来实现。在SIMD结构中,流式处理器包括多个处理元件,这些处理元件执行相同程序但具有不同数据的指令。在一些示例中,在特定处理元件上执行的特定指令可以被称为“纤程”或“线程”。因此,虽然流式处理器的不同处理元件可以被视为执行不同的纤程,但是不同的处理元件仍可以执行着色器程序的相同特定指令。以这种方式,SIMD结构使得图形处理器能够并行(例如,同时或几乎同时)执行许多任务。
矩阵乘法计算内核(或基元)可以将一个或多个数据输出映射到纤程,纤程表示波(wave)(有时称为“纱线”(warp))的基本单元。数据输出的“块”可以映射到一组纤程,这些纤程可以表示一个波(或纱线)。一个或多个波可以表示工作组,它表示基本计算工作负载单元。然而,在一些示例中,一个输入矩阵、两个输入矩阵和/或通过执行矩阵乘法所生成的输出矩阵可能很大并且比流式处理器处可用的资源大小更大。在一些这样的示例中,输入矩阵和/或输出矩阵中的一个或多个可以被拆分成切片(或“块”)以适配到计算内核工作组中。在一些示例中,计算内核工作组的大小可以基于流式处理器的物理资源。例如,计算内核工作组的大小可以取决于流式处理器的通用寄存器的大小、流式处理器的本地缓冲器的大小和/或与纤程相关联的资源。
在下文中参照附图更全面地描述系统、装置、计算机程序产品和方法的各个方面。然而,本公开可以以许多不同的形式来体现,并且不应被解释为限于贯穿本公开而呈现的任何特定结构或功能。相反,提供这些方面以使得本公开将彻底和完整,并将本公开的范围充分传达给本领域技术人员。基于本文中的教导,本领域技术人员应当领会,本公开的范围旨在涵盖本文公开的系统、装置、计算机程序产品和方法的任何方面,无论是独立于本公开的其他方面来实现还是与之结合实现。例如,可以使用本文阐述的任意数量的方面来实现装置或实践方法。此外,本公开的范围旨在覆盖使用除了本文阐述的本公开的各个方面之外或另外的其他结构、功能性或者结构和功能性来实践的这种装置或方法。本文公开的任何方面都可以通过权利要求的一个或多个元素来体现。
尽管本文描述了各个方面,但是这些方面的许多变型和排列落入本公开的范围内。尽管提及了本公开的各方面的一些潜在益处和优点,但是本公开的范围并不旨在限于特定的益处、用途或目标。相反,本公开的各方面旨在广泛适用于不同的无线技术、系统配置、网络和传输协议,其中一些在附图和以下描述中以示例的方式示出。详细描述和附图仅是对本公开的说明而非限制,本公开的范围由所附权利要求及其等同物限定。
参考各种装置和方法呈现了若干方面。这些装置和方法在以下详细描述中进行描述并且在附图中通过各种块、组件、电路、过程、算法等(统称为“元件”)来图示。这些元素可以使用电子硬件、计算机软件或它们的任何组合来实现。这些元素是作为硬件还是软件来实现取决于特定应用和施加在整个系统上的设计约束。
举例来说,元件、元件的任何部分、或元件的任何组合可以被实现为包括一个或多个处理器(其也可以被称为处理单元)的“处理系统”。处理器的示例包括微处理器、微控制器、图形处理单元(GPU)、通用GPU(GPGPU)、中央处理单元(CPU)、应用处理器、数字信号处理器(DSP)、精简指令集计算(RISC)处理器、片上系统(SOC)、基带处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、可编程逻辑器件(PLD)、状态机、门控逻辑、分立硬件电路和其他被配置为执行在整个本公开中描述的各种功能性的适当硬件。处理系统中的一个或多个处理器可以执行软件。软件可以被广义地解释为意指指令、指令集、代码、代码段、程序代码、程序、子程序、软件组件、应用、软件应用、软件包、例程、子例程、对象、可执行文件、执行线程、程序、功能等,无论被称为软件、固件、中间件、微码、硬件描述语言还是其他名称。术语应用可以指代软件。如本文所述,一种或多种技术可以指的是被配置为执行一个或多个功能的应用,即软件。在这样的示例中,应用可以被存储在存储器上,例如处理器的片上存储器、系统存储器或任何其他存储器。本文描述的诸如处理器之类的硬件可以被配置为执行应用。例如,应用可被描述为包括代码,该代码当由硬件执行时使硬件执行本文描述的一种或多种技术。作为示例,硬件可以存取来自存储器的代码并且执行从存储器存取的代码以执行本文描述的一种或多种技术。在一些示例中,组件在本公开中被标识。在这样的示例中,组件可以是硬件、软件或其组合。组件可以是单独的组件或单个组件的子组件。
因此,在本文描述的一个或多个示例中,所描述的功能可以以硬件、软件或其任何组合来实现。如果以软件实现,则功能可以被存储或编码为计算机可读介质上的一个或多个指令或代码。计算机可读介质包括计算机存储介质。存储介质可以是计算机可以存取的任何可用介质。作为示例而非限制,这样的计算机可读介质可以包括随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程ROM(EEPROM)、光盘存储设备、磁盘存储设备、其他磁存储设备、上述类型的计算机可读介质的组合、或可以被用来以可由计算机存取的指令或数据结构的形式存储计算机可执行代码的任何其他介质。
一般而言,本文公开的示例提供用于提高图形处理器中的操作性能的技术。示例技术可以通过在执行矩阵乘法期间减少功耗和/或通过减少(例如,被配置为执行本文公开的一个或多个技术,诸如GPU、DPU等)处理单元的负载来提高图形处理器的流式处理器中执行矩阵乘法的性能。例如,本发明描述了用于在执行矩阵乘法的任何设备中进行系统处理的技术。贯穿本公开内容描述了其他示例益处。
图1是图示了被配置为实现本发明的一种或多种技术的示例内容生成系统100的框图。内容生成系统100包括设备104。设备104可以包括用于执行本文描述的各种功能的一个或多个组件或电路。在一些示例中,设备104的一个或多个组件可以是SOC的组件。设备104可以包括被配置为执行本发明的一种或多种技术的一个或多个组件。在所示示例中,设备104可以包括处理单元120和存储器124。在一些示例中,设备104可以包括许多附加或替代组件,诸如通信接口126、收发器132、接收器128、发射器130和/或显示客户端131。
处理单元120可以包括内部存储器121。处理单元120可以被配置为执行图形处理,诸如在图形处理管线107中。在一些示例中,处理单元120可以包括显示处理器,用以在显示客户端131呈现所生成的(多个)帧之前对由处理单元120生成的一个或多个帧执行一种或多种显示处理技术。显示处理器可以被配置为执行显示处理。例如,显示处理器可以被配置为对由处理单元120生成的一个或多个帧执行一种或多种显示处理技术。显示处理器可以根据接口协议将图像数据输出到显示客户端131,例如,移动行业处理器接口显示串行接口(MIPI DSI)。
显示客户端131可以被配置为显示或以其他方式呈现由处理单元120(和/或显示处理器)处理的帧。在一些示例中,显示客户端131可以包括以下中的一个或多个:液晶显示器(LCD)、等离子显示器、有机发光二极管(OLED)显示器、投影显示设备、增强现实显示设备、虚拟现实显示设备、头戴式显示器或任何其他类型的显示设备。
对显示客户端131的引用可以指的是一个或多个显示器。例如,显示客户端131可以包括单个显示器或多个显示器。显示客户端131可以包括第一显示器和第二显示器。在另外的示例中,图形处理的结果可能不被显示在设备上。例如,(多个)显示器可以不接收用于在其上呈现的任何帧。相反,可以将帧或图形处理结果传送到另一个设备。在一些方面,这可以被称为拆分绘制。
如上面所公开的,可以根据MIPI DSI标准来配置显示客户端131。MIPI DSI标准支持视频模式和命令模式。在显示客户端131操作在视频模式下的示例中,处理单元120(和/或显示处理器)可以连续刷新显示客户端131的图形内容。例如,可以在每个刷新周期(例如,逐行)刷新整个图形内容。
在其中显示客户端131操作在命令模式下的示例中,处理单元120(和/或显示处理器)可以将帧的图形内容写入到缓冲器。在一些示例中,显示客户端131可以包括缓冲器,并且因此,缓冲器可以表示显示客户端131本地的存储器。在一些这样的示例中,处理单元120(和/或显示处理器)可以不连续地刷新显示客户端131的图形内容。相反,处理单元120(和/或显示处理器)可以使用垂直同步(Vsync)脉冲来协调缓冲器处的图形内容的绘制和消费。例如,当生成Vsync脉冲时,处理单元120(和/或显示处理器)可以将新的图形内容输出到缓冲器。因此,Vsync脉冲的生成可以指示缓冲器处的当前图形内容何时已经被绘制。
处理单元120和/或显示客户端131可以存取处理单元120外部的存储器,诸如存储器124。例如,处理单元120可以被配置为从外部存储器读取和/或写入到外部存储器,诸如存储器124。处理单元120和显示客户端131可以通过总线可通信地耦合到存储器124。在一些示例中,处理单元120、存储器124和显示客户端131可以通过总线或不同的连接而彼此可通信地耦合。
在一些示例中,设备104可以包括内容编码器/解码器,其被配置为从任何源(诸如存储器124和/或通信接口126)接收图形和/或显示内容。存储器124可以被配置为存储接收到的编码内容或解码内容。在一些示例中,内容编码器/解码器可以被配置为以编码或解码像素数据的形式接收编码内容或解码内容(例如,来自存储器124和/或通信接口126)。在一些示例中,内容编码器/解码器可以被配置为对任何内容编码或解码。
内部存储器121和/或存储器124可以包括一个或多个易失性或非易失性存储器或存储设备。在一些示例中,内部存储器121和/或存储器124可以包括RAM、SRAM、DRAM、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、闪存、磁数据介质或光存储介质、或任何其他类型的存储器。
根据一些示例,内部存储器121和/或存储器124可以是非瞬态存储介质。术语“非瞬态”可以指示存储介质不被包含在载波或传播信号中。然而,术语“非瞬态”不应被解释为意指内部存储器121和/或存储器124是不可移动的或其内容是静态的。作为一个示例,存储器124可以从设备104中被移除并且被移动到另一设备。作为另一个示例,存储器124可能不可从设备104中移除。
处理单元120可以是CPU、应用处理器、GPU、图形处理器、GPGPU、DPU、显示处理器或者可以被配置为执行计算处理的任何其他处理单元。在一些示例中,处理单元120可以被集成到设备104的主板中。在一些示例中,处理单元120可以存在于被安装在设备104的主板中的端口中的图形卡上,或者可以以其他方式被合并到被配置为与设备104互操作的外围设备内。处理单元120可以包括一个或多个处理器,诸如一个或多个微处理器、CPU、应用处理器、GPU、图形处理器、DSP、显示处理器、图像信号处理器(ISP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、算术逻辑单元(ALU)、数字信号处理器(DSP)、离散逻辑、软件、硬件、固件、其他等效集成或离散逻辑电路或其任何组合。如果这些技术部分地以软件来实现,则处理单元120可以将用于软件的指令存储在合适的非瞬态计算机可读存储介质(例如,内部存储器121)中,并且可以使用一个或多个处理器来执行硬件中的指令从而执行本公开的技术。上述任何一种,包括硬件、软件、硬件和软件的组合等,都可以被认为是一个或多个处理器。
在一些示例中,内容生成系统100可以包括通信接口126。通信接口126可以包括接收器128和发射器130。接收器128可以被配置为执行本文中关于设备104描述的任何接收功能。另外,接收器128可以被配置为从另一个设备接收信息(例如,眼睛或头部位置信息、绘制命令或位置信息)。发射器130可以被配置为执行本文中关于设备104描述的任何发射功能。例如,发射器130可以被配置为向另一个设备发射信息,该信息可以包括对内容的请求。接收器128和发射器130可以被组合到收发器132中。在这样的示例中,收发器132可以被配置为执行本文关于设备104描述的任何接收功能和/或发射功能。
在一些示例中,来自处理单元120的用于经由显示客户端131显示的图形内容可能不是静态的并且可能是变化的。因此,处理单元120(和/或显示处理器)可以周期性地刷新由显示客户端131显示的图形内容。例如,处理单元120(和/或显示处理器)可以周期性地从存储器124中检索图形内容,其中图形内容可能已经通过执行将图形内容输出到存储器124的应用(和/或处理单元120)而被更新。
再次参考图1,在一些方面,处理单元120可以被配置为操作本文公开的一种或多种技术。例如,处理单元120可以包括矩阵乘法处理组件198,其被配置为例如利用流式处理器的加载控制单元执行第一加载指令,以将输入矩阵的输入数据集从流式处理器的第一存储器加载到该流式处理器的第二存储器,并且其中输入矩阵包括第一行数和第一列数。
示例矩阵乘法处理组件198还可以被配置为例如利用加载控制单元执行第二加载指令,以将权重矩阵的权重数据集从第一存储器加载到第二存储器,并且其中权重矩阵包括第二行数和第二列数。
示例矩阵乘法处理组件198还可以被配置为例如利用流式处理器的算术逻辑单元(ALU)组件使用输入数据集和权重数据集来执行矩阵乘法运算,以生成具有第一行数和第二列数的输出矩阵,其中输出矩阵的每个元素表示输入数据集的行和权重数据集的列的多个元素的点积。点积可以包括多个乘法运算和累加运算,该多个乘法运算和累加运算产生相应的中间结果,这些中间结果被重新输入到ALU组件以用于该点积的后续运算。
示例矩阵乘法处理组件198还可以被配置为将输出矩阵存储在流式处理器的通用寄存器处,并且其中通用寄存器被配置为由ALU组件可存取。
在一些示例中,中间结果从ALU组件被输出到ALU控制器,并且其中相应的中间结果从ALU控制器被重新输入到ALU组件以用于执行后续运算并且包括为了后续运算的执行而对通用寄存器的前述存取。
示例矩阵乘法处理组件198还可以被配置为通过利用加载控制单元使用第一模式在第一存储器的存储器地址处加载第一元素块来执行第一加载指令,并且其中第一元素块与输入矩阵的输入数据集相对应。另外,示例矩阵乘法处理组件198可以被配置为通过利用加载控制单元使用第二模式在第一存储器的存储器地址处加载第二元素块来执行第二加载指令,并且其中第二元素块与权重矩阵的权重数据集相对应。
示例矩阵乘法处理组件198还可以被配置为通过存取在第二存储器处的连续存储器地址处的元素来使用第一模式或第二模式中的至少一个。
在一些示例中,输入矩阵的输入数据集的大小基于波大小,并且权重矩阵的权重数据集的大小基于波大小。在一些示例中,波大小与多个纤程相对应,并且输出矩阵的每个输出与相应纤程的执行相对应。在一些示例中,波大小是预定义的配置。
在一些示例中,第二存储器包括通用寄存器,并且示例矩阵乘法处理组件198可以被配置为通过将输入数据集从第一存储器加载到通用寄存器来执行第一加载指令。
在一些示例中,第一行数和第一列数中的至少一个大于一,并且第二行数和第二列数中的至少一个大于一。
示例矩阵乘法处理组件198还可以被配置为利用加载控制单元从对流式处理器可存取的共享存储器或本地存储器中提取第一加载指令。
如本文所述,诸如设备104的设备可以涉及被配置为执行本文所描述的一种或多种技术的任何设备、装置或系统。例如,设备可以是服务器、基站、用户设备、客户端设备、站、接入点、计算机(例如个人计算机)、台式计算机、膝上型计算机、平板计算机、计算机工作站或大型计算机、终端产品、装置、无线通信设备、电话、智能电话、服务器、视频游戏平台或控制台、手持设备(例如便携式视频游戏设备或个人数字助理(PDA))、可穿戴计算设备例如智能手表、增强现实设备或虚拟现实设备、非可穿戴设备、显示器或显示设备、电视机、电视机顶盒、中间网络设备、数字媒体播放器、视频流设备、内容流设备、车载计算机、任何移动设备、被配置为生成图形内容的任何设备、或被配置为执行本文所描述的一种或多种技术的任何设备。本文中的过程可以被描述为由特定组件(例如,GPU)执行,但是在另外的实施例中,可以使用与所公开的实施例相一致的其他组件(例如,CPU)来执行。
图2是图示了根据本公开的各方面的图1的设备104的组件的框图200。特别地,框图200与图形处理器202相对应。图形处理器202的一个或多个方面可以由图1的处理单元120来实现。
在图2的图示示例中,图形处理器202可以被配置为执行由例如应用处理器(例如,CPU)发布到图形处理器202的命令。由图形处理器202执行的命令可以包括通用计算命令、图形命令、状态编程命令、存储器传送命令等。在一些示例中,图形处理器202可以被配置为执行图形操作以绘制用于呈现的一个或多个图形基元(例如,经由图1的显示客户端131)。在一些此类示例中,当在应用处理器上执行的应用请求图形处理时,应用处理器可以向图形处理器202提供图形数据以进行绘制并向图形处理器202发出一个或多个图形命令。图形数据可以包括顶点缓冲器、纹理数据、表面数据等。在一些示例中,应用处理器可以将图形命令和图形数据提供给可由图形处理器202存取的存储器124。例如,应用处理器可指示图形处理器202存取来自存储器124的图形命令和/或图形数据。
在一些示例中,图形处理器202可以被配置为执行通用“着色器程序”以促进为除图形之外的应用执行计算。例如,图形处理器202可以被配置为执行计算基元,诸如通用矩阵乘法(GEMM)操作、卷积操作、池化操作、批标准化(batch normalization)操作、图像处理操作等。然后,图形处理器202可以执行计算基元并将结果提供给应用(和/或应用处理器)以供进一步处理。
图2的示例图形处理器202包括命令引擎204、一个或多个流式处理器206和图形存储器208。在一些示例中,命令引擎204和一个或多个流式处理器206可以被配置为实现图1的示例图形处理管线107的各方面。在一些示例中,图形处理器202可以被配置为执行指令,这些指令使图形处理器202(和/或一个或多个流式处理器206)执行本文公开的示例技术中的一个或多个。
在所图示的示例中,命令引擎204可以接收命令并且配置流式处理器206以执行用于执行命令的各种操作。在所图示的示例中,图形处理器202包括三个示例流式处理器206(有时被称为“着色器处理器”或“着色器核心”),每个流式处理器可以是可编程流式处理器或固定功能流式处理器。可编程流式处理器可以包括例如可编程着色器单元,其被配置为执行(例如,从应用处理器和/或存储器124)被下载到图形处理器202上的一个或多个着色器程序。在一些示例中,着色器程序可以是用着色语言编写的程序的编译版本。在一些示例中,可编程着色器单元可以包括计算着色器单元。
固定功能流式处理器可以包括硬连线以执行某些功能的硬件。在一些示例中,固定功能流式处理器可以附加地或替代地包括自由可编程着色器控制的管线,其可以使得固定功能流式处理器能够执行一些可配置功能。尽管固定功能流式处理器可以被配置为执行不同的功能(例如,经由一个或多个控制信号),但是固定功能硬件可能不包括能够接收用户编译的程序(例如,从图形驱动程序)的程序存储器。
尽管以下描述针对执行计算(或机器学习)任务(例如,矩阵乘法)的图形处理器,但是可以领会,基于被加载以在图形处理器上运行的软件以及被用来控制图形处理器的操作的驱动程序,可以选择性地驱动图形处理器202以执行图形处理任务,例如GPGPU任务,或任何其他类型的适合图形处理器的任务。因此,虽然由命令引擎204接收的命令可以包括一个或多个计算命令、一个或多个机器学习命令、一个或多个图形命令、一个或多个状态命令、一个或多个存储器传送命令,但是所公开的命令涉及可以被图形处理器202用来执行由例如处理单元120发出的一个或多个计算基元的计算命令。
在图2的图示示例中,图形处理器202包括直接耦合到图形处理器202的图形存储器208,以使得图形处理器202可以在没有使用总线存取存储器124的情况下从图形存储器208读取数据和/或向图形存储器208写入数据。因此,图形处理器202可以使用本地存储设备(例如,图形存储器208)在本地处理数据,而不使用片外存储器(例如,存储器124)。例如,图形存储器208可以是与图形处理器202在芯片上并且与图形处理器202的组件相对接近的片上存储器,并且可以与图形处理器202内的专用存储器总线相关联。对照而言,为了存取存储在存储器124中的数据,图形处理器202可以与处理单元120的其他组件(例如,应用处理器、显示处理器等)共享存储器总线,这可能导致更有限的可用带宽。图形存储器208的各方面可以由图1的内部存储器121来实现。
一般而言,图形存储器208可以包括一个或多个高速缓存,这些高速缓存是可以存储流式处理器206可存取的数据和/或指令的快速存储器。在一些示例中,图形存储器208可以是全局或系统存储器(例如,存储器124)和流式处理器206之间的中间存储器。在一些示例中,图形存储器208可以填充有来自与工作组(或内核)相关联的存储器124的指令和/或数据。
在图2所图示的示例中,流式处理器206包括ALU控制器210、指令高速缓存212、ALU组件214、本地缓冲器216、加载控制单元218、通用寄存器(GPR)220和纹理管线222。示例ALU控制器210、示例指令高速缓存212、示例ALU组件214、示例本地缓冲器216、示例加载控制单元218、示例GPR 220和/或示例纹理管线222可以经由诸如总线之类的通信接口进行通信。在一些示例中,可以使用总线结构和/或总线协议的任何组合来实现总线。
在所图示的示例中,ALU控制器210被配置为通过例如指示ALU组件214执行哪个功能(例如,算术功能)来控制ALU组件214的执行。例如,ALU控制器210可以有助于ALU组件214对纤程的指令执行的调度和管理。例如,ALU控制器210可以被配置为从指令高速缓存212提取指令,解码每个指令(如果需要),提取(多个)操作数(如果需要)以执行指令,并为ALU组件214执行流控制。
在图2所图示的示例中,指令高速缓存212存储纤程的指令。这些指令指示要针对每个纤程执行的特定操作。每个操作可以是算术操作、存储器存取操作等。指令高速缓存212可以根据需要经由加载控制单元218而被加载来自图形存储器208和/或存储器124的指令。
在图2所图示的示例中,ALU组件214可以执行算术运算(例如,加法、减法、乘法、除法等)、逻辑运算(例如,逻辑AND运算、逻辑OR运算、逻辑XOR运算等)、比较运算(例如,逻辑异或运算等)。ALU组件214可以基于从ALU控制器210接收到的指令来执行(或执行)操作。指令可以包括标识要执行的操作的操作标识符、用于执行操作的(多个)操作数、以及用于存储执行操作的输出的目的地。例如,ALU控制器210可以指示ALU组件214执行乘法函数,从而向ALU组件214提供包括“MUL”标识符、第一操作数(op1)、第二操作数(op2)和用于存储执行乘法运算的输出(例如,op1*op2的结果)的目的地(例如,GPR 220)在内的指令。
尽管在所图示的示例中被示为单个组件,但是可以理解,ALU组件214可以包括标量ALU和/或向量ALU的组合。标量ALU可以被配置为一次对一个分量(或属性)进行操作。向量ALU可以被配置为一次对多个分量进行操作。例如,标量ALU可以一次在像素的一个分量上行操作,而向量ALU可以一次在像素的多个分量(例如,所有分量)上操作。可以理解,标量ALU在操作期间可能会消耗比向量ALU更少的资源。
在图2所图示的示例中,本地缓冲器216是可由ALU控制210和ALU组件214存取的存储器。在所图示的示例中,本地缓冲器216被配置为存储可由执行波中的纤程的ALU组件214的不同ALU存取的数据。例如,本地缓冲器216可以存储由ALU组件214在波中的不同纤程的执行期间使用的常数数据。
在图2所图示的示例中,加载控制单元218(有时被称为“加载存储单元”)被配置为控制指令和/或数据到流式处理器206和从流式处理器206加载。例如,加载控制单元218可以与图形存储器208接口并且将指令加载到流式处理器206的指令高速缓存212。加载控制单元218还可以与图形存储器208进行接口并将数据从图形存储器208加载到流式处理器206的存储器(例如,本地缓冲器216和GPR220)。加载控制单元218还可以将数据写入到图形存储器208。例如,加载控制单元218可以从GPR 220提取由ALU组件214生成的输出数据并且将所提取的输出数据存储在图形存储器208处。
在图2的图示示例中,GPR 220是ALU组件214可存取的存储器。GPR 220可以存储由ALU组件214(例如,ALU组件214的ALU)生成的输出数据,并且可以附加地或替代地存储被提供给ALU组件214以用于处理的输入数据(例如,用于执行算术函数的操作数)。
在所图示的示例中,GPR 220被配置为存储执行纤程的ALU组件214可存取的数据。例如,GPR 220可以存储由ALU组件214用来执行纤程的数据输入数据,可以存储在纤程的执行期间由ALU组件214生成的中间结果,和/或可以存储由纤程的执行所生成的输出数据。
在一些示例中,GPR 220可以包括用于一次存储一个元素的标量寄存器。GPR 220可以附加地或替代地包括用于一次存储多个元素的向量寄存器。可以理解,标量寄存器在操作期间可以消耗比向量寄存器更少的资源。此外,在一些示例中,ALU控制器210可以被配置为在指示ALU组件214的标量ALU执行操作时从标量寄存器提取(多个)操作数。类似地,ALU控制器210可以被配置为在指示ALU组件214的向量ALU执行操作时从向量寄存器提取(多个)操作数。
在所图示的示例中,纹理管线222被配置为执行图形操作,诸如纹理映射。纹理映射可以包括利用纹理的颜色修改像素的颜色。纹理管线222可以存取来自图形存储器208的数据。在一些示例中,纹理管线222可以包括被配置为(例如,基于参考位置和一个或多个偏移)计算像素的位置的地址生成器、被配置为基于由地址生成器所提供的像素的位置来存储像素的像素信息(例如,来自图形存储器208)的纹理高速缓存、以及被配置为对像素信息执行一个或多个操作的纹理操作组件。来自纹理管线的输出可以被存储在GPR 220处。
如上所述,流式处理器206可以被配置为执行计算基元,诸如矩阵乘法。图3是图示了执行矩阵乘法的框图300。为了执行矩阵乘法,输出矩阵的每个元素都被计算为“点积”(例如,第一矩阵的对应行的元素与第二矩阵的对应列的元素的乘积之和)。在图3的图示示例中,提供了第一矩阵302和第二矩阵304。如图4中所示,第一矩阵302(有时被称为“输入矩阵”或“输入激活矩阵”)是4x4矩阵并且包括第一行数Rows_a(例如,4行)和第一列数Columns_a(例如,4列)。第二矩阵304(有时被称为“权重矩阵”或“常数矩阵”)是4x4矩阵并且包括第二行数Rows_b(例如,4行)和第二列数Columns_b(例如,4列)。
在图3的图示示例中,输入矩阵302的每个元素由两个字母来指定,第一个字母指示包含该元素的行,并且第二个字母指示包含该元素的列。因此,例如,输入矩阵302的元素“AB”位于输入矩阵302的A行和B列。类似地,权重矩阵304的元素用两个数字来指定,第一个数字指示包含该元素的行,并且第二个数字指示包含该元素的列。因此,例如,权重矩阵304的元素“23”位于权重矩阵304的第2行和第3列。
输出矩阵306表示对矩阵302、304执行矩阵乘法运算的结果。如图3中所示,输出矩阵306的元素指示用于生成输出矩阵306的相应元素的计算。例如,输出矩阵306的左上元素306a是通过对输入矩阵302的第A行的元素与权重矩阵304的第1列的元素的乘积求和来计算的。因此,左上元素306a的值是输入矩阵302的元素“AA”和权重矩阵304的元素“00”、输入矩阵302的元素“AB”和权重矩阵304的元素“10”、输入矩阵302的元素“AC”和权重矩阵304的元素“20”、以及权重矩阵304的元素“AD”输入矩阵302和权重矩阵304的元素“30”的乘积之和。针对输出矩阵306的每个其他元素进行对应的计算。所得到的输出矩阵306具有维度Rows_a(例如,输入矩阵302的行数)乘以Columns_b(例如,权重矩阵的列数304)。如图3中所示,输出矩阵306是4x4矩阵,与输入矩阵302的四行和权重矩阵304的四列相对应。
在图3的图示示例中,输出矩阵306的每个元素,诸如左上元素306a,表示执行纤程(或线程)的输出,输出矩阵306的每一行,诸如行306b,表示波(或纱线),并且整个输出矩阵306表示工作负载(或内核)。因此,可以理解,执行纤程可以包括执行许多运算,诸如乘法运算、加法运算和/或乘法加法运算(有时被称为“乘法累加”运算)。
虽然图3的示例矩阵乘法包括在两个4x4矩阵302、304上操作,但是在其他示例中,每个矩阵可以具有任意数量的行和/或列,诸如数百、数千等。此外,当执行矩阵乘法时,可以理解,流式处理器206处可用的资源可能是有限的。例如,与图1的图形存储器208和存储器124的大小相比,GPR 220和/或本地缓冲器216可能相对较小。因此,当执行矩阵乘法时,输入矩阵302的元素和权重矩阵304的元素可以被拆分成适配到计算工作组中的切片(或块)。计算工作组的大小可以基于GPR 220的大小和本地缓冲器216的大小。
图4是如本文所述的处理单元的组件之间的示例通信流400。在所图示的示例中,通信流400有助于执行图3的矩阵乘法。通信流400的各方面可以由图2的图形处理器202来实现。
在410,加载控制单元218可以加载纤程的指令并将它们本地地存储。例如,加载控制单元218可以被配置为从图形存储器208提取纤程的指令并且将指令存储在指令高速缓存212中。
在420,加载控制单元218可以为纤程加载权重矩阵的元素。例如,加载控制单元218可以将与纤程相关联的权重矩阵304的元素从图形存储器208加载到本地缓冲器216。
在430,纹理管线222可以加载纤程的输入矩阵的元素。例如,纹理管线222可以被配置为将与纤程相关联的输入矩阵302的元素从图形存储器208加载到GPR 220。如上所述,纹理管线222可以在将元素从图形存储器208加载到GPR 220时执行不同的功能。例如,纹理管线222可以确定元素的地址,可以提取与该元素相关联的(多个)分量,并且可以在将元素存储在GPR 220处之前对元素执行一个或多个操作。因此,与经由加载控制单元218加载元素相比,经由纹理管线222加载元素可能是相对较长的过程。
在440,ALU控制器210可以准备用于由ALU组件214执行的操作。例如,ALU控制器210可以从指令高速缓存212提取指令,对指令进行解码以确定要执行哪个操作和要检索哪个(哪些)操作数以执行与指令相关联的操作,并将所解码的指令提供给ALU组件214以供执行。
在450,ALU组件214可以执行与解码的指令相关联的操作并且将输出存储在GPR220处。
在460,当与纤程相关联的指令完成时(例如,当计算出最终结果时),加载控制单元218可以加载纤程的最终结果。例如,加载控制单元218可以被配置为从GPR 220提取最终结果并将最终结果存储在图形存储器208处。
如上所述,执行矩阵乘法运算包括执行点积,其包括执行乘法运算和执行加法运算。在一些示例中,点积的执行可以包括执行乘法运算以及乘法加法运算。ALU控制器210从指令高速缓存212中提取指令,对指令进行解码,并基于包括在指令中的操作标识符来指示ALU组件214要执行哪个操作(例如,乘法运算、加法运算、乘法加法运算等)。ALU控制器210还可以从GPR 220和本地缓冲器216提取操作数以执行相应的操作。
例如,ALU控制器210可以通过向ALU组件214提供与乘法运算相对应的MUL标识符、第一操作数(opl)(或用于存取第一操作数的位置)和第二操作数(op2)(或用于存取第二操作数的位置),来指示ALU组件214执行乘法指令。ALU组件214可以从GPR 220提取第一操作数(op1)(例如,输入矩阵302的元素)并且可以从本地缓冲器216提取第二操作数(op2)(例如,权重矩阵304的元素)。ALU组件214可以执行乘法运算并将输出(例如op1*op2的结果)存储在GPR 220处。可以理解,乘法运算的输出是中间结果,因为该输出在执行点积时的加法运算或乘法加法运算中使用。例如,乘法运算的输出可以包括左上元素306a的第一部分(例如,输入矩阵302的元素“AA”和权重矩阵304的元素“00”的乘积)。
类似地,ALU控制器210可以通过向ALU组件214提供与乘法加法运算相对应的MAD标识符、第一操作数(opl)(或用于存取第一操作数)、第二操作数(op2)(或用于存取第二操作数的位置)和第三操作数(op3)(或用于存取第三操作数的位置),来指示ALU组件214执行乘法加法指令。ALU控制器210可以从GPR 220提取第一操作数(op1)(例如,输入矩阵302的元素),可以从本地缓冲器216提取第二操作数(op2)(例如,权重矩阵304的元素),并且可以从GPR 220提取第三操作数(op3)(例如,中间结果,诸如左上元素306a的第一部分)。ALU组件214可以执行乘法加法运算并将输出(例如,op1*op2+op3的结果)存储在GPR 220处。可以理解,在一些示例中,基于输入矩阵302和权重矩阵304的大小,ALU控制器210和ALU组件214可以执行任何数量的乘法加法运算,诸如几百个乘法加法运算、几千个乘法加法运算等。
因此,可以理解,执行矩阵乘法在计算上是昂贵的。由于矩阵乘法运算在机器学习应用和人工智能应用中的普遍存在,因此提高执行矩阵乘法运算的效率可以是有益的。
例如,在上述示例中,为了加速存储器存取,一些示例经由纹理管线222提取输入矩阵的元素并且经由加载控制单元218提取权重矩阵的元素。虽然经由纹理管线222存取元素,但是加载控制218可以利用并行存储器存取,经由纹理管线222存取元素,这可能与相对较长的数据提取延迟相关联,因为元素在存储在GPR 220处之前由纹理管线222的组件处理。此外,经由纹理管线222存取元素可能招致执行相应纹理管线相关功能的处理成本。此外,由于元素是经由两个不同的路径(例如,经由纹理管道222和加载控制单元218)加载的,所以处理成本可能与同步所提取的数据相关联(例如,针对同一指令同步经由纹理管道222提取的元素与经由加载控制单元218提取的元素相对应)。因此,流式处理器206可能会因经由纹理管线222和加载控制单元218存取元素而招致长存储器延迟和低带宽利用率惩罚。
此外,在一些示例中,由于指令的粒度执行,为指令提取的元素可以以分散的方式被存储在相应的存储器中。例如,第一元素可以被存储在存储器地址0处,第二元素可以被存储在存储器地址400处,第三元素可以被存储在存储器地址16处,等等。因此,ALU控制器210和ALU组件214可以执行地址计算以计算相应元素的存储器地址。然而,执行地址计算可以包括在GPR 220处存储相应存储器地址的偏移量。因此,减少了可以被存储在GPR 220处的元素的数量,例如因为对于每个元素,还存储了用于存取相应元素的偏移量。
在一些示例中,由于纤程的执行可能导致ALU控制器210从GPR 220提取多个中间结果以及ALU组件214将中间结果存储在GPR 220处,因此可能会对存储器存取招致惩罚。例如,如上所述,在一些示例中,每次ALU组件214执行操作时,ALU组件214可以将输出存储在GPR 220处,并且如果输出是中间结果,则ALU控制器210可以被配置为从GPR 220提取中间结果以提供给ALU组件214作为用于后续运算的操作数。
此外,在一些示例中,可以在多个纤程和/或指令的执行期间使用加载到GPR 220的输入矩阵302的元素。然而,如上所述,输入矩阵的元素是为每条指令提取的,并且因此在一些示例中可能会招致输入数据提取惩罚。
鉴于上述低效率,本文公开的用于执行矩阵乘法的示例技术可能导致低水平的ALU组件利用率和高程度的处理功率浪费。
本文公开的示例技术有助于提高执行矩阵乘法的效率。此外,所公开的技术利用流式处理器206的组件而不需要附加的硬件。示例技术有助于改善与从图形处理器208加载元素相关联的存储器存取延迟、改善与从GPR 220加载中间结果相关联的存储器存取成本、增加在GPR 220处的可用存储空间并且减少通过提取冗余元素而招致的输入数据提取惩罚。
再次参考图2,流式处理器206包括示例直接存储器存取(DMA)组件230和示例矩阵乘法(MM)组件232。尽管示例DMA组件230被图示为加载控制单元218的组件,但是应当领会,DMA组件230的各方面可以由加载控制单元218实现。类似地,MM组件232的各方面可以由ALU控制器210实现。
在图2所图示的示例中,DMA组件230被配置为有助于改善流式处理器206和图形存储器208之间的存储器存取延迟。例如,DMA组件230可以被配置为使得能够经由加载控制单元218提取输入矩阵302的元素和权重矩阵的元素304。当被指示时,DMA组件230可以将权重矩阵304的元素从图形存储器208加载到本地缓冲器216。类似地,DMA组件230可以被配置为从图形存储器208加载输入矩阵302的元素。以这种方式,DMA组件230使得能够绕过经由纹理管线222加载输入矩阵302的元素。通过避免经由纹理管线222加载元素,示例DMA组件230使得能够减少与使用纹理管线222加载元素相关联的功率资源惩罚和处理资源惩罚。如上所述,与经由加载控制单元218从图形存储器208加载元素相比,经由纹理管线222加载元素招致与存取图形存储器208处的元素和将元素存储在GPR 220处之间的相对较长处理管线相关联的惩罚。也就是说,与加载控制单元218相关联的存储器存取管线比与纹理管线222相关联的存储器存取管线短,并且因此,经由DMA组件230加载输入矩阵302的元素和加载权重矩阵304的元素有助于改善存储器存取延迟并且有助于降低通过使用纹理管线222所招致的处理和功耗成本。
在一些示例中,当DMA组件230从图形存储器208提取输入矩阵302的元素时,DMA组件230可以确定该元素是否由多个纤程共享。例如,一些操作,诸如卷积操作,可以包括跨纤程使用一个或多个元素。如果DMA组件230确定所提取的元素是共享元素,那么DMA组件230可以将所提取的元素存储在本地缓冲器216处。本地缓冲器216然后可以在对应的纤程被执行时将相应的元素广播到GPR 220。通过将元素存储在本地缓冲器216处,DMA组件230有助于减少与跨纤程执行针对相同元素的冗余提取相关联的数据输入提取延迟。在一些示例中,存储在本地缓冲器216处的元素可以保留在本地缓冲器216中,直到与纤程相关联的工作组完成。因此,在一些示例中,跨纤程共享的元素可以保留在本地缓冲器216中,直到对应的工作组被执行(例如,输出矩阵306被填充)。
在一些示例中,如果DMA组件230确定所提取的元素不是共享元素,那么DMA组件230可以将所提取的元素存储在GPR 220处。通过将所提取的元素存储在GPR 220处,DMA组件230有助于绕过在本地缓冲器216处所提取的元素的存储和从本地缓冲器216中对元素的冗余读取和写入。
示例DMA组件230还有助于执行“块”加载指令(例如,“load.blk”)以从图形存储器208加载元素的“块”。在一些示例中,块加载指令是单个纤程指令,用于从图形存储器208加载数据“块”,而不是每个纤程执行多个加载指令。例如,如果执行纤程与许多加载指令(例如,40个加载指令)相关联,那么,不是一次一个地执行40个加载指令(例如,执行第一加载指令,执行对应操作,执行第二加载指令,等),而是DMA组件230有助于经由一个指令(例如,块加载指令)的执行来加载与40个加载指令相关联的元素。
在一些示例中,当调用块加载指令时,DMA组件230可以被配置为包括元素“块”的维度和用于存取相应元素的偏移量。因此,DMA组件230可以执行地址计算以存取元素,并且从而使得能够避免ALU控制器210和/或ALU组件214执行地址计算。此外,通过使得DMA组件230能够执行地址计算,可以理解,偏移量可能不再被存储在GPR 220处,这可以使得能够增加可以被用于存储输入矩阵302的GPR 220的量。
在一些示例中,DMA组件230可以基于矩阵乘法的执行来以一种模式存储所提取的元素。例如,输出矩阵306的每个元素的计算遵循这样的模式,其中输入矩阵302的行的元素被逐列遍历并且权重矩阵304的列的元素被逐行遍历。因此,DMA组件230被配置为以一种模式存储所提取的元素,使得不执行针对元素的分散式存储器存取。在一些示例中,该模式可以包括将所提取的元素存储在连续块中,使得DMA组件230例如在存储器地址0处存储第一元素,在存储器地址1处存储第二元素,在存储器地址2处存储第三元素等。
在一些示例中,由块加载指令定义的块的维度可以与波的大小相对应。例如,如果波包括64个纤程,那么执行块加载指令可以有助于在一个指令中提取与64个纤程相关联的数据,而不是例如一次一个地执行针对64个纤程的加载指令。此外,与64个纤程相对应的数据被连续加载,而不是分散加载。因为数据被模式化(例如,连续的),所以可以避免由ALU控制器210和/或ALU组件214执行地址计算。
在一些示例中,DMA组件230可以被配置为执行一个块加载指令以加载输入矩阵302的元素块(或集合)。示例DMA组件230也可以被配置为执行用于加载权重矩阵304的元素块(或集合)的一个块加载指令。因此,通过执行第一块加载指令(例如,加载输入矩阵302的元素块)和第二块加载指令(例如,加载权重矩阵304的元素块),DMA组件230可以减少到图形存储器208的加载指令的数量。例如,DMA组件230可以通过执行两个块加载指令来加载针对纤程波的元素,而不是针对波的每个纤程执行加载指令。
为了有助于在纤程的执行期间改进矩阵乘法的性能,示例ALU控制器210包括MM组件232。示例MM组件232被配置为管理在纤程的执行期间计算出的中间结果的存取。例如,如上所述,每次ALU组件214执行操作时,ALU组件214可以将输出存储在GPR 220处。因此,在一些此类示例中,ALU控制器210可能会因存取来自GPR 220的中间结果以用于后续运算而招致存储器存取惩罚。例如通过修改用于存储执行操作的输出的目的地,示例MM组件232可以被配置为使ALU组件214在MM组件232处存储输出(例如,中间结果)。因此,在指令的执行期间,ALU控制器210可以从MM组件232提取相应的操作数(例如,乘法加法运算中的中间结果或第三操作数(op3))并避免从GPR 220存取操作数(例如,中间结果)。例如,MM组件232可以被配置为使得在ALU控制器210没有存取GPR 220的情况下能够将中间结果重新用于后续运算(例如,累加运算、乘法加法运算等)。MM组件232还可以被配置为使最终结果被存储在GPR220中,该最终结果然后可以由加载控制单元218提取以存储在图形存储器208处。
在一些示例中,通过将中间结果存储在MM组件232处(例如,不在GPR 220处),示例MM组件232使得能够减少与在GPR 220处存取操作数相关联的存储器存取惩罚。因此,ALU控制器210能够更有效地向ALU组件214提供指令以供执行。在一些示例中,ALU控制器210可以被配置为向ALU组件214的标量ALU提供指令,从而降低由ALU组件214在操作期间的功耗并且降低ALU组件214的处理负载。因此,应当理解,在MM组件232处存储纤程的中间结果可以通过减少与从GPR 220存取中间结果相关联的等待时间来使得能够提高ALU组件214的利用率。
图5是如本文所述的处理单元的组件之间的示例通信流500。在所图示的示例中,通信流500有助于执行图3的矩阵乘法。通信流500的各方面可以由图2的图形处理器202来实现。
在510,加载控制单元218可以加载纤程的指令并将它们本地地存储。例如,加载控制单元218可以被配置为从图形存储器208提取纤程的指令(例如,在510a)并且将指令存储在指令高速缓存212中(例如,在510b)。
在520,DMA组件230可以加载用于纤程的权重矩阵的元素。例如,DMA组件230可以从图形存储器208提取与纤程相关联的权重矩阵304的元素(例如,在520a)并且将所提取的权重矩阵304的元素存储在本地缓冲器216处(例如,在520b)。DMA组件230可以执行“块”加载指令(例如,“load.blk”)以在本地缓冲器216处加载用于纤程的权重矩阵304的元素“块”。
在530,DMA组件230可以加载用于纤程的输入矩阵的元素。例如,DMA组件230可以从图形存储器208提取与纤程相关联的输入矩阵302的元素(例如,在530a)并且在GPR 220处存储所提取的输入矩阵402的元素(例如,在530b)。以这种方式,DMA组件230使得能够经由纹理管线222而绕过输入矩阵302的元素的加载(如图4的430所示)。DMA组件230可以执行“块”加载指令(例如,“load.blk”)以在GPR 220处加载用于纤程的输入矩阵302的元素“块”。
在一些示例中,当DMA组件230从图形存储器208提取输入矩阵302的元素时(例如,在530a),DMA组件230可以确定该元素是否由多个纤程共享。如果DMA组件230确定所提取的元素不是共享元素,那么DMA组件230可以将所提取的元素存储在GPR 220处(例如,在530b)。通过将所提取的元素存储在GPR 220处,DMA组件230有助于绕过将所提取的元素存储在本地缓冲器216处以及从本地缓冲器216中对元素的冗余读取和写入。
如果DMA组件230确定所提取的元素是共享元素,那么DMA组件230可以将所提取的元素存储在本地缓冲器216处(例如,在530c)。然后,当对应的纤程正被执行时本地缓冲器216可以将相应的元素广播到GPR 220(例如,在550d)。通过将元素存储在本地缓冲器216处,DMA组件230有助于减少与跨纤程执行针对相同元素的冗余提取相关联的数据输入提取延迟。在一些示例中,存储在本地缓冲器216处的元素可以保留在本地缓冲器216中,直到与纤程相关联的工作组完成。因此,在一些示例中,跨纤程共享的元素可以保留在本地缓冲器216中,直到对应的工作组被执行(例如,输出矩阵306被填充)。
在一些示例中,当调用块加载指令时(例如,在520和/或530),DMA组件230可以被配置为包括元素“块”的维度和用于存取相应元素的偏移量。因此,DMA组件230可以执行用于存取元素的地址计算存取。
DMA组件230可以基于矩阵乘法的执行来以一种模式存储所提取的元素(例如,在520b、530b和/或530c)。例如,DMA组件230可以被配置为以一种模式存储所提取的元素,使得不执行针对元素的分散式存储器存取。在一些示例中,该模式可以包括将所提取的元素存储在连续块中,以使得DMA组件230例如在存储器地址0处存储第一元素,在存储器地址1处存储第二元素,在存储器地址2处存储第三元素等。
在540,ALU控制器210可以准备用于由ALU组件214执行的操作。例如,ALU控制器210可以被配置为从指令高速缓存212提取指令(例如,在540a),对指令进行解码以确定要执行哪个操作以及要检索哪个(哪些)操作数以执行与该指令相关联的操作,并且将解码的指令提供给ALU组件214以供执行(例如,在540b)。
在一些示例中,ALU控制器210确定纤程的执行是否包括要执行的另一操作。当ALU控制器210确定纤程的另一个执行包括执行另一个操作时,ALU控制器210可以准备用于由ALU组件214执行的另一个操作。否则,当ALU控制器210确定纤程的执行完成时,ALU控制器210可以向ALU组件214指示:不存在要执行的另一个操作。
在550,ALU组件214可以执行与解码的指令相关联的操作并且将输出存储在GPR220处。例如,ALU组件214可以被配置为从本地缓冲器提取权重矩阵304的元素216(例如,在550a),并且可以被配置为从GPR 220提取输入矩阵302的元素(例如,在550b)。
为了有助于在纤程的执行期间改进矩阵乘法的性能,ALU控制器210的示例MM组件232被配置为管理在纤程的执行期间计算出的中间结果的存取。例如通过修改用于存储执行操作的输出的目的地,示例MM组件232可以被配置为使ALU组件214将输出(例如,中间结果)存储在MM组件232处(例如,在550c)。因此,在指令的执行期间,ALU控制器210可以从MM组件232提取相应的操作数(例如,乘法加法运算中的中间结果或第三操作数(op3))并避免从GPR 220存取操作数(例如,中间结果)。例如,MM组件232可以被配置为使得在ALU控制器210没有存取GPR 220的情况下能够将中间结果重新用于后续运算(例如,累加运算、乘法加法运算等)。MM组件232还可以被配置为使最终结果被存储在GPR 220中,该中间结果然后可以由加载控制单元218提取以存储在图形存储器208处。
在一些示例中,基于不存在要执行的更多操作的指示(例如,来自ALU控制器210,ALU组件214可以将纤程的最终结果存储在GPR220处(例如,在550e)。以这种方式,ALU组件214可以避免将中间结果存储在GPR 220处并且存储最终结果。
在560,当与纤程相关联的指令完成时(例如,当最终结果被计算出时),加载控制单元218可以加载纤程的最终结果。例如,加载控制单元218可以被配置为从GPR 220提取最终结果(例如,在560a)并且将最终结果存储在图形存储器208处(例如,在560b)。
图6图示了根据本公开的一种或多种技术的示例方法的示例流程图600。该方法可以由装置来执行,诸如图1的设备104,GPU、图形处理器、CPU、应用处理器、DPU、显示处理器、视频处理器,和/或设备104的组件,诸如图2的图形处理器202和/或图2的流式处理器206。
在602,装置可以执行第一加载指令以将输入矩阵的输入数据集从流式处理器的第一存储器加载到该流式处理器的第二存储器,如结合图1、图2、图3、图4和/或图5的示例所描述的。例如,加载控制单元216的DMA组件230可以被配置为执行第一块加载指令,以将输入矩阵302的输入元素块从图形处理器208加载到流式处理器206的存储器(例如,GPR220),如结合图5的530所描述的。此外,矩阵乘法处理组件198可以执行602。在一些示例中,输入矩阵302包括第一行数(例如,Rows_a)和第一列数(例如,Columns_a)。在一些示例中,执行第一加载指令可以包括使用第一模式提取输入矩阵302的输入元素集合。在一些示例中,使用第一模式包括存取在连续存储器地址处的输入元素。在一些示例中,第一行数(例如,Rows_a)和第一列数(例如,Columns_a)中的至少一个大于一。在一些示例中,第一加载指令可以由加载控制单元从流式处理器的本地存储器(例如,指令高速缓存212)或流式处理器可存取的共享存储器(例如,图形存储器208和/或存储器124)提取。
在604,装置可以执行第二加载指令以将权重矩阵的权重数据集从流式处理器的第一存储器加载到该流式处理器的第二存储器,如结合图1、图2、图3、图4和/或图5的示例所描述的。例如,加载控制单元216的DMA组件230可以被配置为执行第二块加载指令,以将权重矩阵304的权重元素块从将图形处理器208加载到流式处理器206的存储器(例如,本地缓冲器216),如结合图5的520所描述的。此外,矩阵乘法处理组件198可以执行604。在一些示例中,权重矩阵304包括第二行数(例如,Rows_b)和第二列数(例如,Columns_b)。在一些示例中,执行第二加载指令可以包括使用第二模式提取权重矩阵304的权重元素集合。在一些示例中,使用第二模式包括存取在连续存储器地址处的权重元素。在一些示例中,第二行数(例如,Rows_b)和第二列数(例如,Columns_b)中的至少一个大于一。在一些示例中,第二加载指令可以由加载控制单元从流式处理器的本地存储器(例如,指令高速缓存212)或流式处理器可存取的共享存储器(例如,图形存储器208和/或存储器124)提取。
在一些示例中,输入数据集的大小基于波大小,并且权重数据集的大小基于波大小。在一些示例中,波大小与多个纤程相对应,并且其中输出矩阵的每个输出与相应纤程的执行相对应。在一些示例中,波大小可以是预定义的配置。
在606,该装置可以使用输入数据集和权重数据集来执行矩阵乘法运算以生成输出矩阵,如结合图1、图2、图3、图4和/或图5所描述的。例如,ALU控制器210可以指示ALU组件214执行与纤程的指令相对应的操作,如结合图5的540所描述的。此外,矩阵乘法处理组件198可以执行606。在一些示例中,矩阵乘法运算的执行可以包括与点积操作相对应的多个操作。在一些此类示例中,点积操作可以包括多个乘法运算和多个累加运算,诸如乘法加法运算。
在608,该装置可以将矩阵乘法运算的中间结果存储在流式处理器的ALU控制器处,如结合图1、图2、图3、图4和/或图5所描述的。例如,ALU组件214可以执行矩阵乘法运算(例如,乘法运算、加法运算、乘法加法运算等)并将矩阵乘法运算的输出存储在ALU控制器210的MM组件232处,如结合图5的550c所描述的。此外,矩阵乘法处理组件198可以执行608。
在610,该装置可以确定是否存在矩阵乘法运算的另一操作要执行,如结合图1、图2、图3、图4和/或图5所描述的。例如,ALU控制器210可以确定纤程的执行是否包括要执行的另一操作。此外,矩阵乘法处理组件198可以执行610。
如果在610,该装置确定存在矩阵乘法运算的另一操作要执行,那么,在612,该装置可以使用输入数据集、权重数据集和中间结果来执行矩阵乘法运算,如结合图1、图2、图3、图4和/或图5所描述的。例如,ALU控制器210可以将中间结果从MM组件232重新输入到ALU组件214以执行乘法加法运算,如结合图5的550所描述的。此外,矩阵乘法处理组件198可以执行612。在一些此类示例中,乘法加法运算的第一操作数(op1)可以是输入数据的元素,乘法加法运算的第二操作数(op2)可以是权重数据的元素,并且乘法加法运算的第三操作数(op3)可以是中间结果。
在614,该装置可以将矩阵乘法运算的结果存储在ALU控制器处,如结合图1、图2、图3、图4和/或图5所描述的。例如,ALU组件214可以被配置为将矩阵乘法运算的中间结果存储在ALU控制器210的MM组件232处,如结合图5的550c所描述的。然后控制可以返回到610以确定是否存在矩阵乘法的要执行的另一操作。矩阵乘法处理组件198还可以执行614。
如果在610,该装置确定没有矩阵乘法运算的要执行的另一个操作,那么,在616,该装置可以将矩阵乘法运算的最终结果存储在流式处理器的通用寄存器处,如结合图1、图2、图3、图4和/或图5所描述的。例如,ALU组件214可以将最终结果存储在GPR 220处,如结合图5的550e所描述的。此外,矩阵乘法处理组件198可以执行616。在一些示例中,最终结果可以由加载控制单元218从GPR 220加载到图形存储器208,如结合图5的560所描述的。
在一种配置中,提供了一种用于计算处理的方法或装置。该装置可以是处理单元、GPU、图形处理器、应用处理器、CPU、显示处理器、显示处理单元(DPU)、视频处理器或可以执行计算处理的一些其他处理器。在一些示例中,该装置可以是设备104内的处理单元120,或者可以是设备104内的一些其他硬件,或其他设备。例如,该装置的一个或多个方面可以由图2的示例流式处理器206实现。该装置可以包括用于利用流式处理器的加载控制单元执行第一加载指令以将输入矩阵的输入数据集从流式处理器的第一存储器加载到该流式处理器的第二存储器的部件,并且其中输入矩阵包括第一行数和第一列数。该装置还可以包括用于利用加载控制单元执行第二加载指令以将权重矩阵的权重数据集从第一存储器加载到第二存储器的部件,并且其中权重矩阵包括第二行数和第二列数。该装置还可以包括用于利用流式处理器的算术逻辑单元(ALU)组件使用输入数据集和权重数据集来执行矩阵乘法运算以生成具有第一行数和第二列数的输出矩阵的部件,其中输出矩阵的每个元素表示输入数据集的行和权重数据集的列的多个元素的点积,并且其中点积包括产生相应的中间结果的多个乘法运算和累加运算,这些中间结果被重新输入到ALU组件以用于该点积的后续运算。该装置还可以包括用于将输出矩阵存储在流式处理器的通用寄存器中的部件,并且其中通用寄存器被配置为可由ALU组件存取。
在一些示例中,该装置可以包括用于将中间结果从ALU组件输出到ALU控制器的部件,并且其中相应的中间结果从ALU控制器被重新输入到ALU组件用于执行后续运算并且包括为了后续运算的执行而对通用寄存器的前述存取。
在一些示例中,该装置可以包括用于执行第一加载指令的部件,包括:利用加载控制单元使用第一模式在第一存储器的存储器地址处加载第一元素块,并且其中第一元素块对应于输入矩阵的输入数据集。该示例装置还可以包括用于执行第二加载指令的部件,包括:利用加载控制单元使用第二模式在第一存储器的存储器地址处加载第二元素块,并且其中第二元素块对应于权重矩阵的权重数据集。
在一些示例中,该装置包括用于通过存取在第二存储器处的连续存储器地址处的元素来使用第一模式或第二模式中的至少一个的部件。
在一些示例中,该装置包括用于通过将输入数据集从第一存储器加载到通用寄存器来执行第一加载指令的部件。
在一些示例中,该装置包括用于利用加载控制单元从本地存储器或共享存储器提取第一加载指令的部件。
可以实现本文描述的主题以实现一个或多个益处或优势。例如,所描述的计算处理技术可以由图形处理器、GPU、应用处理器、CPU、显示处理器、DPU、视频处理器或者一些其他可以执行计算处理的处理器来使用,以实现在流式处理器中执行矩阵乘法运算的改进,减少处理单元(例如,被配置为执行本文公开的一种或多种技术的任何处理单元,例如图形处理器、GPU、应用处理器、CPU、显示处理器、DPU等)的加载,和/或降低处理单元的功耗。一般而言,本文公开的示例提供了用于通过采用用于减少存储器存取延迟的技术、通过采用用于改善从图形存储器到流式处理器的本地存储器的数据加载的技术、和/或通过采用用于提高流式处理器的ALU组件的利用率的技术来改善流式处理器中的矩阵乘法运算的执行的技术。
根据本公开,术语“或”可以在上下文没有另外规定的情况下被解释为“和/或”。此外,虽然诸如“一个或多个”或“至少一个”等短语可能已被用于本文公开的一些特征但未被用于其他特征,但是未使用此类语言的特征可以被解释为在上下文没有另外规定的情况下具有暗示的此类含义。
在一个或多个示例中,本文描述的功能可以以硬件、软件、固件或其任何组合来实现。例如,尽管整个本公开中使用了术语“处理单元”,但是这样的处理单元可以以硬件、软件、固件或其任何组合来实现。如果本文描述的任何功能、处理单元、技术或其他模块以软件来实现,则本文描述的功能、处理单元、技术或其他模块可以作为一个或多个指令或代码而在计算机可读介质上进行存储或传输。计算机可读介质可以包括计算机数据存储介质或通信介质,包括促进将计算机程序从一个地方传送到另一个地方的任何介质。以这种方式,计算机可读介质通常可以对应于(1)有形计算机可读存储介质,其是非瞬态的或(2)诸如信号或载波之类的通信介质。数据存储介质可以是可由一个或多个计算机或一个或多个处理器存取以检索指令、代码和/或数据结构以实现本公开中所描述的技术的任何可用介质。作为示例而非限制,这样的计算机可读介质可以包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储设备、磁盘存储设备或其他磁存储设备。如本文中所使用的,磁盘和光盘包括压缩盘(CD)、激光盘、光学光盘、数字多功能盘(DVD)、软盘和蓝光光盘,其中磁盘通常以磁性方式再现数据,而光盘用激光以光学方式再现数据。上述的组合也应被包括在计算机可读介质的范围内。计算机程序产品可以包括计算机可读介质。
代码可以由一个或多个处理器执行,诸如一个或多个数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、算术逻辑单元(ALU)、现场可编程逻辑阵列(FPGA)或其他等效的集成或分立逻辑电路。因此,如本文中所使用的术语“处理器”可以指的是任何前述结构或适用于实现本文描述的技术的任何其他结构。此外,这些技术可以被完全实现在一个或多个电路或逻辑元件中。
本公开的技术可以被实现在多种设备或装置中,包括无线手持机、集成电路(IC)或IC组,例如芯片组。在本公开中描述了各种组件、模块或单元以强调被配置为执行所公开技术的设备的功能方面,但是不一定需要由不同的硬件单元来实现。相反,如上所述,各种单元可以被组合在任何硬件单元中或由包括如上所述的一个或多个处理器的互操作硬件单元的集合连同合适的软件和/或固件来提供。
已经描述了各种示例。这些和其他示例在以下权利要求的范围内。
以下方面仅是说明性的,并且可以与本文描述的其他方面或教导相结合,但不限于此。
方面1是一种执行数据处理的方法,包括:利用流式处理器的加载控制单元执行第一加载指令,以将输入矩阵的输入数据集从流式处理器的第一存储器加载到该流式处理器的第二存储器,该输入矩阵包括第一行数和第一列数;利用加载控制单元执行第二加载指令,以将权重矩阵的权重数据集从第一存储器加载到第二存储器,该权重矩阵包括第二行数和第二列数;利用流式处理器的ALU组件使用输入数据集和权重数据集来执行矩阵乘法运算,以生成具有第一行数和第二列数的输出矩阵,该输出矩阵的每个元素表示输入数据集的行和权重数据集的列的多个元素的点积,该点积包括产生相应的中间结果的多个乘法运算和累加运算,该相应的中间结果被重新输入到ALU组件以用于该点积的后续运算;以及将输出矩阵存储在流式处理器的通用寄存器中,该通用寄存器被配置为可由ALU组件存取。
方面2是方面1的方法,还包括:相应的中间结果从ALU组件被输出到ALU控制器,并且其中相应的中间结果从ALU控制器被重新输入到ALU组件以用于执行后续运算并且包括对通用寄存器的前述存取以用于后续运算的执行。
方面3是方面1或方面2中任一项的方法,还包括:执行第一加载指令包括利用加载控制单元使用第一模式在第一存储器的存储器地址处加载第一元素块,该第一元素块与输入矩阵的输入数据集相对应,并且其中执行第二加载指令包括利用加载控制单元使用第二模式在第一存储器的存储器地址处加载第二元素块,该第二块元素与权重矩阵的权重数据集相对应。
方面4是方面1至3中任一项的方法,还包括:使用第一模式或第二模式中的至少一项包括存取在第二存储器处的连续存储器地址处的元素。
方面5是方面1至4中任一项的方法,还包括:输入矩阵的输入数据集的大小是基于波大小的,并且其中权重矩阵的权重数据集的大小是基于波大小的。
方面6是方面1至5中任一项的方法,还包括:波大小与多个纤程相对应,并且其中输出矩阵的每个输出与相应纤程的执行相对应。
方面7是方面1至6中任一项的方法,还包括:第二存储器包括通用寄存器,并且其中执行第一加载指令包括将输入数据集从第一存储器加载到通用寄存器。
方面8是方面1至7中任一项的方法,还包括:第一行数和第一列数中的至少一项大于一,并且其中第二行数和第二列数中的至少一项大于一。
方面9是方面1至8中任一项的方法,还包括:利用加载控制单元从本地存储器或共享存储器提取第一加载指令。
方面10是一种用于无线通信的装置,包括:耦合到存储器并被配置为实现如方面1至9中任一项中的方法的至少一个处理器。
方面11是一种用于无线通信的装置,包括用于实现如方面1至9中任一项中的方法的部件。
方面12是一种存储计算机可执行代码的计算机可读介质,其中该代码在被执行时使处理器实现如方面1至9中的任何一项中的方法。
Claims (20)
1.一种数据处理的方法,包括:
利用流式处理器的加载控制单元执行第一加载指令,以将输入矩阵的输入数据集从所述流式处理器的第一存储器加载到所述流式处理器的第二存储器,所述输入矩阵包括第一行数和第一列数;
利用所述加载控制单元执行第二加载指令,以将权重矩阵的权重数据集从所述第一存储器加载到所述第二存储器,所述权重矩阵包括第二行数和第二列数;
利用所述流式处理器的算术逻辑单元(ALU)组件使用所述输入数据集和所述权重数据集来执行矩阵乘法运算,以生成具有所述第一行数和所述第二列数的输出矩阵,所述输出矩阵的每个元素表示所述输入数据集的行和所述权重数据集的列的多个元素的点积,所述点积包括产生相应的中间结果的多个乘法运算和累加运算,所述相应的中间结果被重新输入到所述ALU组件以用于所述点积的后续运算;以及
将所述输出矩阵存储在所述流式处理器的通用寄存器中,所述通用寄存器被配置为可由所述ALU组件存取。
2.根据权利要求1所述的方法,其中所述相应的中间结果从所述ALU组件被输出到ALU控制器,并且其中所述相应的中间结果从所述ALU控制器被重新输入到所述ALU组件以用于执行所述后续运算,并且包括对所述通用寄存器的前述存取以用于所述后续运算的所述执行。
3.根据权利要求1所述的方法,其中执行所述第一加载指令包括利用所述加载控制单元使用第一模式在所述第一存储器的存储器地址处加载第一元素块,所述第一元素块与所述输入矩阵的所述输入数据集相对应,以及
其中执行所述第二加载指令包括利用所述加载控制单元使用第二模式在所述第一存储器的存储器地址处加载第二元素块,所述第二元素块与所述权重矩阵的所述权重数据集相对应。
4.根据权利要求3所述的方法,其中使用所述第一模式或所述第二模式中的至少一项包括存取在所述第二存储器处的连续存储器地址处的元素。
5.根据权利要求1所述的方法,其中所述输入矩阵的所述输入数据集的大小是基于波大小的,并且其中所述权重矩阵的所述权重数据集的大小是基于所述波大小的。
6.根据权利要求5所述的方法,其中所述波大小与多个纤程相对应,并且其中所述输出矩阵的每个输出与相应纤程的执行相对应。
7.根据权利要求1所述的方法,其中所述第二存储器包括所述通用寄存器,并且其中执行所述第一加载指令包括将所述输入数据集从所述第一存储器加载到所述通用寄存器。
8.根据权利要求1所述的方法,其中所述第一行数和所述第一列数中的至少一项大于一,并且其中所述第二行数和所述第二列数中的至少一项大于一。
9.根据权利要求1所述的方法,还包括:利用所述加载控制单元从本地存储器或共享存储器提取所述第一加载指令。
10.一种用于数据处理的装置,包括:
存储器;以及
至少一个处理器,所述至少一个处理器耦合到所述存储器并且被配置为:
利用流式处理器的加载控制单元执行第一加载指令,以将输入矩阵的输入数据集从所述流式处理器的第一存储器加载到所述流式处理器的第二存储器,所述输入矩阵包括第一行数和第一列数;
利用所述加载控制单元执行第二加载指令,以将权重矩阵的权重数据集从所述第一存储器加载到所述第二存储器,所述权重矩阵包括第二行数和第二列数;
利用所述流式处理器的算术逻辑单元(ALU)组件使用所述输入数据集和所述权重数据集来执行矩阵乘法运算,以生成具有所述第一行数和所述第二列数的输出矩阵,所述输出矩阵的每个元素表示所述输入数据集的行和所述权重数据集的列的多个元素的点积,所述点积包括产生相应的中间结果的多个乘法运算和累加运算,所述相应的中间结果被重新输入到所述ALU组件以用于所述点积的后续运算;以及
将所述输出矩阵存储在所述流式处理器的通用寄存器中,所述通用寄存器被配置为可由所述ALU组件存取。
11.根据权利要求10所述的装置,其中所述中间结果从所述ALU组件被输出到ALU控制器,并且其中所述相应的中间结果从所述ALU控制器被重新输入到所述ALU组件以用于执行所述后续运算,并且包括对所述通用寄存器的前述存取以用于所述后续运算的所述执行。
12.根据权利要求10所述的装置,其中所述至少一个处理器被配置为:
执行所述第一加载指令,包括:利用所述加载控制单元使用第一模式在所述第一存储器的存储器地址处加载第一元素块,所述第一元素块与所述输入矩阵的所述输入数据集相对应,以及
执行所述第二加载指令,包括:利用所述加载控制单元使用第二模式在所述第一存储器的存储器地址处加载第二元素块,所述第二元素块与所述权重矩阵的所述权重数据集相对应。
13.根据权利要求12所述的装置,其中所述至少一个处理器被配置为使用所述第一模式或所述第二模式中的至少一项,包括存取在所述第二存储器处的连续存储器地址处的元素。
14.根据权利要求10所述的装置,其中所述输入矩阵的所述输入数据集的大小是基于波大小的,并且其中所述权重矩阵的所述权重数据集的大小是基于所述波大小的。
15.根据权利要求14所述的装置,其中所述波大小与多个纤程相对应,并且其中所述输出矩阵的每个输出与相应纤程的执行相对应。
16.根据权利要求10所述的装置,其中所述第二存储器包括所述通用寄存器,并且其中所述至少一个处理器被配置为执行所述第一加载指令,所述第一加载指令包括将所述输入数据集从所述第一存储器加载到所述通用寄存器。
17.根据权利要求10所述的装置,其中所述第一行数和所述第一列数中的至少一项大于一,并且其中所述第二行数和所述第二列数中的至少一项大于一。
18.根据权利要求10所述的装置,其中所述至少一个处理器还被配置为利用所述加载控制单元从本地存储器或共享存储器中提取所述第一加载指令。
19.根据权利要求10所述的装置,其中所述装置包括无线通信设备。
20.一种存储用于数据处理的计算机可执行代码的非瞬态计算机可读介质,包括用于执行以下各项的代码:
利用流式处理器的加载控制单元执行第一加载指令,以将输入矩阵的输入数据集从所述流式处理器的第一存储器加载到所述流式处理器的第二存储器,所述输入矩阵包括第一行数和第一列数;
利用所述加载控制单元执行第二加载指令,以将权重矩阵的权重数据集从所述第一存储器加载到所述第二存储器,所述权重矩阵包括第二行数和第二列数;
利用所述流式处理器的算术逻辑单元(ALU)组件使用所述输入数据集和所述权重数据集来执行矩阵乘法运算,以生成具有所述第一行数和所述第二列数的输出矩阵,所述输出矩阵的每个元素表示所述输入数据集的行和所述权重数据集的列的多个元素的点积,所述点积包括产生相应的中间结果的多个乘法运算和累加运算,所述相应的中间结果被重新输入到所述ALU组件以用于所述点积的后续运算;以及
将所述输出矩阵存储在所述流式处理器的通用寄存器中,所述通用寄存器被配置为可由所述ALU组件存取。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962955311P | 2019-12-30 | 2019-12-30 | |
US62/955,311 | 2019-12-30 | ||
US17/137,226 US11829439B2 (en) | 2019-12-30 | 2020-12-29 | Methods and apparatus to perform matrix multiplication in a streaming processor |
US17/137,226 | 2020-12-29 | ||
PCT/US2020/067581 WO2021138503A1 (en) | 2019-12-30 | 2020-12-30 | Methods and apparatus to perform matrix multiplication in a streaming processor |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114902179A true CN114902179A (zh) | 2022-08-12 |
Family
ID=76547364
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080090838.8A Pending CN114902179A (zh) | 2019-12-30 | 2020-12-30 | 在流式处理器中执行矩阵乘法的方法和装置 |
Country Status (6)
Country | Link |
---|---|
US (2) | US11829439B2 (zh) |
EP (1) | EP4085328A1 (zh) |
CN (1) | CN114902179A (zh) |
BR (1) | BR112022012435A2 (zh) |
TW (1) | TW202131181A (zh) |
WO (1) | WO2021138503A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115880132A (zh) * | 2023-02-06 | 2023-03-31 | 南京砺算科技有限公司 | 图形处理器、矩阵乘法任务处理方法、装置及存储介质 |
CN117574036A (zh) * | 2024-01-16 | 2024-02-20 | 北京壁仞科技开发有限公司 | 运算装置、操作方法和机器可读存储介质 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP4160423B1 (en) * | 2021-09-29 | 2024-01-31 | Samsung Electronics Co., Ltd. | Memory device, memory device operating method, and electronic device including memory device |
KR20230046356A (ko) | 2021-09-29 | 2023-04-06 | 삼성전자주식회사 | 메모리 장치, 메모리 장치의 동작 방법, 그리고 메모리 장치를 포함하는 전자 장치 |
CN117908994A (zh) * | 2024-03-20 | 2024-04-19 | 腾讯科技(深圳)有限公司 | 媒体信息的处理方法、装置、设备及可读存储介质 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10528321B2 (en) * | 2016-12-07 | 2020-01-07 | Microsoft Technology Licensing, Llc | Block floating point for neural network implementations |
US10824938B2 (en) | 2017-04-24 | 2020-11-03 | Intel Corporation | Specialized fixed function hardware for efficient convolution |
US11409692B2 (en) | 2017-07-24 | 2022-08-09 | Tesla, Inc. | Vector computational unit |
US10664287B2 (en) * | 2018-03-30 | 2020-05-26 | Intel Corporation | Systems and methods for implementing chained tile operations |
US11042370B2 (en) * | 2018-04-19 | 2021-06-22 | Intel Corporation | Instruction and logic for systolic dot product with accumulate |
US10810785B2 (en) * | 2018-08-10 | 2020-10-20 | Nvidia Corporation | Method for forward progress tree traversal mechanisms in hardware |
US11687433B2 (en) * | 2019-04-30 | 2023-06-27 | EMC IP Holding Company LLC | Using machine learning to detect system changes |
-
2020
- 2020-12-29 US US17/137,226 patent/US11829439B2/en active Active
- 2020-12-30 BR BR112022012435A patent/BR112022012435A2/pt unknown
- 2020-12-30 CN CN202080090838.8A patent/CN114902179A/zh active Pending
- 2020-12-30 TW TW109146852A patent/TW202131181A/zh unknown
- 2020-12-30 WO PCT/US2020/067581 patent/WO2021138503A1/en unknown
- 2020-12-30 EP EP20845758.0A patent/EP4085328A1/en active Pending
-
2023
- 2023-10-16 US US18/487,918 patent/US20240037183A1/en active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115880132A (zh) * | 2023-02-06 | 2023-03-31 | 南京砺算科技有限公司 | 图形处理器、矩阵乘法任务处理方法、装置及存储介质 |
CN117574036A (zh) * | 2024-01-16 | 2024-02-20 | 北京壁仞科技开发有限公司 | 运算装置、操作方法和机器可读存储介质 |
CN117574036B (zh) * | 2024-01-16 | 2024-04-12 | 北京壁仞科技开发有限公司 | 运算装置、操作方法和机器可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
BR112022012435A2 (pt) | 2022-09-06 |
TW202131181A (zh) | 2021-08-16 |
US11829439B2 (en) | 2023-11-28 |
WO2021138503A1 (en) | 2021-07-08 |
US20210200836A1 (en) | 2021-07-01 |
EP4085328A1 (en) | 2022-11-09 |
US20240037183A1 (en) | 2024-02-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11829439B2 (en) | Methods and apparatus to perform matrix multiplication in a streaming processor | |
US10692170B2 (en) | Software scoreboard information and synchronization | |
WO2018009277A1 (en) | Graphics command parsing mechanism | |
US20210240524A1 (en) | Methods and apparatus to facilitate tile-based gpu machine learning acceleration | |
EP3161817B1 (en) | Load scheme for shared register in gpu | |
WO2017204910A1 (en) | Per-instance preamble for graphics processing | |
US11762662B2 (en) | Instruction prefetch based on thread dispatch commands | |
CN114787785A (zh) | 促进图形处理单元中的推测性页面故障处理的方法和装置 | |
US20230290034A1 (en) | Fast incremental shared constants | |
WO2017099882A1 (en) | Accelerated touch processing at computing devices | |
CN109074625B (zh) | 用于图形处理的每个着色器的前置码 | |
US11475533B2 (en) | GPR optimization in a GPU based on a GPR release mechanism | |
CN111754382A (zh) | 使用平面存储器映射来控制表面访问 | |
US11954758B2 (en) | Dynamic wave pairing | |
US20230019763A1 (en) | Methods and apparatus to facilitate a dedicated bindless state processor | |
US11087431B2 (en) | Methods and apparatus for reducing draw command information | |
US11790478B2 (en) | Methods and apparatus for mapping source location for input data to a graphics processing unit | |
WO2024030277A1 (en) | A runtime mechanism to optimize shader execution flow | |
WO2023129435A1 (en) | Cache blocking for dispatches |
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 |