CN113032009A - 使用处理器指令的硬件加速矩阵操纵运算 - Google Patents
使用处理器指令的硬件加速矩阵操纵运算 Download PDFInfo
- Publication number
- CN113032009A CN113032009A CN202011449371.XA CN202011449371A CN113032009A CN 113032009 A CN113032009 A CN 113032009A CN 202011449371 A CN202011449371 A CN 202011449371A CN 113032009 A CN113032009 A CN 113032009A
- Authority
- CN
- China
- Prior art keywords
- matrix
- steering
- vector
- unit
- processor
- 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 844
- 238000012545 processing Methods 0.000 claims abstract description 92
- 238000004891 communication Methods 0.000 claims abstract description 5
- 239000013598 vector Substances 0.000 claims description 279
- 238000000034 method Methods 0.000 claims description 38
- 238000004364 calculation method Methods 0.000 claims description 21
- 230000003252 repetitive effect Effects 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 22
- 241001442055 Vipera berus Species 0.000 description 18
- 238000013528 artificial neural network Methods 0.000 description 6
- 230000004044 response Effects 0.000 description 6
- 230000006870 function Effects 0.000 description 4
- 238000012935 Averaging Methods 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000004590 computer program Methods 0.000 description 2
- 238000004148 unit process Methods 0.000 description 2
- 238000013473 artificial intelligence Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000011176 pooling Methods 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 239000004557 technical material Substances 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 238000010977 unit operation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30047—Prefetch instructions; cache control instructions
-
- 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
- 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/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
- 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/30098—Register arrangements
-
- 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/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30196—Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
-
- 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]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Pure & Applied Mathematics (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
Abstract
公开了使用处理器指令的硬件加速矩阵操纵运算。一种处理器系统包括共享存储器和处理元件。处理元件包括矩阵处理器单元,并与共享存储器通信。处理元件被配置成接收指定数据矩阵和矩阵操纵运算的处理器指令。识别基于处理器指令的操纵矩阵。数据矩阵和操纵矩阵被加载到矩阵处理器单元中,并且执行矩阵运算以确定结果矩阵。结果矩阵被输出到目的地位置。
Description
发明背景
使用神经网络可以解决一整类复杂的人工智能问题。神经网络解决方案的实现通常取决于输入源或中间数据如何格式化以及神经网络运算的要求。神经网络运算可能会预期特定的格式的数据。通常将数据从一种矩阵格式转换成另一种矩阵格式,以改善实现神经网络运算的精度和计算成本。传统上,使转换适应硬件解决方案是具有挑战性的,并且转换是在软件中执行的。创建一个既灵活又能显著提高性能和效率的硬件解决方案是一项挑战。因此,需要一种灵活高效的硬件解决方案来执行矩阵操纵(matrix manipulation)运算,矩阵操纵运算包括用于上采样和下采样矩阵的转换运算。
附图简述
在以下详细描述和附图中公开了本发明的各种实施例。
图1是示出用于执行矩阵操纵运算的系统的实施例的框图。
图2是示出用于执行矩阵操纵运算的处理元件的实施例的框图。
图3是示出了使用到具有矩阵处理器单元的处理元件的处理器指令执行矩阵操纵运算的过程的实施例的流程图。
图4是示出使用到具有矩阵处理器单元的处理元件的处理器指令执行矩阵操纵运算的过程的实施例的流程图。
图5是示出使用到具有矩阵处理器单元的处理元件的处理器指令执行矩阵操纵运算的过程的实施例的流程图。
图6是示出使用到具有矩阵处理器单元的处理元件的处理器指令执行矩阵操纵运算的过程的实施例的流程图。
图7是示出用于执行矩阵操纵运算的示例操纵矩阵和对应的向量操作数的图。
图8是示出用于执行矩阵操纵运算的示例输入数据矩阵和对应的矩阵切片(slice)的图。
图9是示出来自执行矩阵操纵运算的示例结果矩阵的图。
图10是示出用于执行矩阵操纵运算的示例操纵矩阵和对应的向量操作数的图。
图11是示出用于执行矩阵操纵运算的示例操纵矩阵和对应的向量操作数的图。
详细描述
本发明可以以多种方式实现,包括作为过程;装置;系统;物质的组成;体现在计算机可读存储介质上的计算机程序产品;和/或处理器,例如被配置为执行存储在耦合到处理器的存储器上和/或由该存储器提供的指令的处理器。在本说明书中,这些实现或者本发明可以采取的任何其他形式可以被称为技术。通常,在本发明的范围内,可以改变所公开的过程的步骤顺序。除非另有说明,否则被描述为被配置为执行任务的诸如处理器或存储器的组件可以被实现为在给定时间被临时配置为执行任务的通用组件或者被制造为执行任务的特定组件。如本文所使用的,术语“处理器”指的是被配置成处理数据(例如计算机程序指令)的一个或更多个设备、电路和/或处理核心。
下面提供了本发明的一个或更多个实施例的详细描述连同说明本发明原理的附图。结合这些实施例描述了本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求限定,并且本发明包括许多替代、修改和等同物。为了提供对本发明的全面理解,在以下描述中阐述了许多具体细节。这些细节是出于示例的目的而提供的,并且本发明可以根据权利要求来被实施,而不需要这些具体细节中的一些或全部。为了清楚起见,没有详细描述与本发明相关的技术领域中已知的技术材料,以便不会不必要地模糊本发明。
公开了一种使用处理器指令执行硬件加速矩阵操纵运算的处理器系统。处理器系统支持的矩阵操纵运算至少包括不同的上采样和下采样运算。在所公开的处理器系统中,处理器系统包括硬件矩阵处理器单元,其执行矩阵运算,例如矩阵乘法。处理器系统支持一个或更多个矩阵操纵运算处理器指令。例如,处理器指令指示处理器系统通过沿行复制每个元素来对输入数据矩阵进行上采样。作为另一个示例,沿着输入数据矩阵的列的元素也可以被复制,这有效地使二维矩阵沿着两个维度加倍。在一些实施例中,处理器系统支持通过线性插值对矩阵进行上采样。每个上采样、下采样或另一个矩阵操纵运算可以由指定的操纵矩阵来执行和描述。在各种实施例中,对应于不同支持的矩阵操纵运算的指定操纵矩阵存储在存储器中。例如,支持的矩阵操纵运算的每个操纵矩阵可以作为预定义矩阵存储在存储器中。在一些实施例中,操纵矩阵可以被动态编程并存储在存储器中。响应于指定的矩阵操纵处理器指令,将适当的操纵矩阵从存储器加载到处理器系统的矩阵处理器单元中。使用矩阵处理器单元将相应的输入数据矩阵乘以操纵矩阵。输出结果可以写入存储器和/或由处理器系统用于后续运算,例如神经网络推理或训练所需的矩阵运算。在一些实施例中,使用跨步写入(strided write)和/或存储器布局单元将输出写入存储器,以在第二维向上采样矩阵处理器单元的结果矩阵。例如,上采样操纵矩阵在第一维上对输入数据矩阵进行上采样,例如将每行的长度加倍。然后,使用存储器布局单元将每个上采样的行写入存储器两次,以沿着高度维度对输入数据矩阵进行上采样,这有效地将每一列的长度加倍。通过加倍行数,重复写入有效地使最终矩阵的大小加倍。在一些实施例中,使用存储器布局或分散单元(scatter unit),矩阵处理器单元的结果矩阵在两遍运行(pass)中被写入到存储器的偶数存储器行地址,接着写入到奇数存储器行地址,反之亦然。存储器布局单元可用于快速有效地向存储器输出上采样的输入数据矩阵。
在一些实施例中,处理器系统包括共享存储器和与共享存储器通信的处理元件。例如,处理元件可以是单个处理元件或处理元件矩阵之一,每个处理元件都可以通过通信总线访问共享存储器。处理元件的矩阵可以是32×32、64×64或另一种大小的处理元件矩阵。处理器系统的处理元件包括矩阵处理器单元。例如,矩阵处理器单元被配置为对两个矩阵操作数至少执行矩阵乘法,以确定结果矩阵。在一些实施例中,矩阵处理器单元包括被配置为存储数据矩阵的单行的所有值的第一类型寄存器和一组第二类型寄存器,其中每个第二类型寄存器被配置为存储操纵矩阵的不同列的所有值。矩阵处理器单元还包括多个(aplurality of)向量计算单元,其中多个向量计算单元中的每一个对应于第二类型寄存器之一。每个向量计算单元被配置为将存储在第一类型寄存器中的每个值与存储在第二类型寄存器中的相应一个中的相应值相乘。将相应向量计算单元的相乘结果求和,以至少部分地确定将数据矩阵与操纵矩阵相乘的结果矩阵中的相应元素。
在一些实施例中,处理元件被配置成接收指定数据矩阵和矩阵操纵运算的处理器指令。例如,专用处理器指令包括数据矩阵操作数,并指定矩阵操纵运算,如上采样或下采样运算。处理元件还被配置成基于处理器指令识别操纵矩阵。例如,处理器指令被解码以识别对应于矩阵操纵运算的操纵矩阵。在一些实施例中,操纵矩阵是存储在存储器或另一存储器位置中的硬编码矩阵。处理元件被配置成将数据矩阵和操纵矩阵加载到矩阵处理器单元中,并执行矩阵运算以确定结果矩阵。例如,在一些实施例中,操纵矩阵的每一列被加载到矩阵处理器单元的向量计算单元中。对于数据矩阵的每一行,该行被加载或广播到具有操纵矩阵的相应列的每个向量计算单元。每个向量计算单元计算对应于结果矩阵中的元素的点积结果。处理元件被配置成将结果矩阵输出到目的地位置。例如,结果矩阵可以输出到存储器或诸如矩阵寄存器的另一个位置。在一些实施例中,输出沿着数据矩阵的一个维度执行结果矩阵的上采样。例如,每行被写出两次,以使行数加倍。在一些实施例中,操纵矩阵是上采样、下采样或用于执行矩阵操纵运算的另一种类型的操纵矩阵。
图1是示出用于执行矩阵操纵运算的系统的实施例的框图。在所示的示例中,系统100包括处理元件101和存储器161。处理元件101包括操纵矩阵输入单元103、数据矩阵输入单元105、矩阵处理器单元107和输出单元151。矩阵处理器单元107是点积引擎,并且可以对两个输入矩阵(数据矩阵和操纵矩阵)执行矩阵乘法。在一些实施例中,矩阵处理器单元107包括用于计算矩阵乘法的多个向量单元(未示出)。矩阵处理器单元107接收来自操纵矩阵输入单元103的操纵矩阵(未示出)和来自数据矩阵输入单元105的输入数据矩阵(未示出),以执行将输入数据矩阵乘以操纵矩阵的结果。结果被输出到输出单元151,输出单元151可用于将矩阵相乘结果写入存储器161。例如,在一些实施例中,二维操纵矩阵由操纵矩阵输入单元103准备,二维输入数据矩阵的连续输入数据向量由数据矩阵输入单元105准备。二维操纵矩阵和二维输入数据矩阵可以从存储器161中检索,并且可以通过存储器地址引用。在一些实施例中,输入数据矩阵由存储器地址引用,并且操纵矩阵由处理器指令指定的矩阵操纵运算来确定。两个矩阵相乘,并且在输出单元151接收输出。在一些实施例中,通过每个周期将输入数据矩阵的一行加载到矩阵处理器单元107中,每个周期计算一行结果矩阵。
在一些实施例中,指向处理元件101的处理器指令引用输入数据矩阵和特定操纵矩阵。例如,操纵矩阵可以是用于执行上采样或下采样运算的操纵矩阵。此外,操纵矩阵可以是几种不同类型的上采样或下采样矩阵中的一种,或者是对应于另一种矩阵操纵运算的矩阵。例如,对于上采样运算,上采样操纵矩阵可以通过将每一行元素加倍、通过在元素之间执行线性插值、通过将每一行元素增加四倍或者通过使用另一个上采样方案来进行上采样。在各种实施例中,操纵矩阵被硬编码在存储器161中和/或存储在另一个存储器位置中。在一些实施例中,每个矩阵操纵运算的操纵矩阵可以被动态配置并存储在存储器161和/或另一个存储器位置中。响应于矩阵操纵运算处理器指令,处理元件101经由操纵矩阵输入单元103将适当的操纵矩阵从存储器161加载到矩阵处理器单元107中,并且经由数据矩阵输入单元105将相应的输入数据矩阵从存储器161加载到矩阵处理器单元107中。在一些实施例中,输入数据矩阵的维度大于矩阵处理器单元107所支持的维度,并且输入数据矩阵被处理为输入数据矩阵的二维切片,其中矩阵处理器单元107支持二维切片的维度。例如,32×32矩阵处理器单元可以接收大得多的输入数据矩阵的32×32切片。在各种实施例中,由矩阵操纵运算产生的最终矩阵可以具有与输入数据矩阵不同的维度。例如,上采样矩阵操纵运算导致较大的最终矩阵,而下采样矩阵操纵运算导致较小的最终矩阵。
在各种实施例中,图1的箭头表示数据移动通过系统100的组件的方向。例如,箭头可以对应于多元素的宽的通信/数据总线和/或数据线。在一些实施例中,输出单元151包括存储器布局或分散单元(未示出),用于实现结果矩阵到存储器的跨步写入。例如,输出单元151存储来自矩阵处理器单元107的结果矩阵,并将该矩阵写出到存储器161。使用存储器布局单元将每行写入存储器两次,以沿高度维度对输入数据矩阵进行上采样,这有效地将每列的长度加倍。在一些实施例中,未示出系统100和处理元件101的附加组件。例如,未示出用于处理和解码处理器指令的控制逻辑单元。作为另一个示例,在一些实施例中,处理元件101包括本地储存存储器(未示出),其用于存储用于实现一个或更多个矩阵操纵运算的一个或更多个操纵矩阵。响应于处理器指令,操纵矩阵输入单元103从本地储存存储器加载相应的操纵矩阵,绕过从存储器161加载数据所需的时间。在一些实施例中,存储在本地储存存储器中的操纵矩阵可以被动态地和编程地配置。
在一些实施例中,处理元件101是连接到存储器161的多个处理元件(未示出)之一。存储器161是多个处理元件中的每一个都可以访问的共享存储器。例如,处理元件可以被布置为处理元件的矩阵,例如32×32处理元件的网格。处理元件可以被配置成彼此并行操作。例如,不同的处理元件可以并行执行不同的矩阵操纵运算。在一些实施例中,不同的处理元件可以并行地但是在输入数据矩阵的不同切片上执行相同矩阵操纵运算的部分。通过不同的处理元件将它们各自的部分结果矩阵写入存储器,最终结果矩阵可以作为完整的结果矩阵被写出到存储器161。通过将处理分散到不同的处理元件,其中每个处理元件对输入数据矩阵的分配的部分执行矩阵操纵运算的一部分,矩阵操纵运算的性能显著提高。
图2是示出用于执行矩阵操纵运算的处理元件的实施例的框图。在所示的示例中,处理元件200包括矩阵处理器单元201、操纵矩阵输入单元203、数据矩阵输入单元205和输出单元251。矩阵处理器单元201包括多个向量单元,该多个向量单元至少包括向量单元211和221。每个向量单元至少包括向量乘法单元和向量加法器单元。例如,向量单元211包括向量乘法单元213和向量加法器单元215。另外,向量单元221包括向量乘法单元223和向量加法器单元225。在各种实施例中,矩阵处理器单元201至少包括与由数据矩阵输入单元205生成的输入数据向量中的元素数量相匹配的数量的向量单元。在各种实施例中,矩阵处理器单元201被配置成分别经由操纵矩阵输入单元203和数据矩阵输入单元205接收两个输入矩阵,每个矩阵是二维矩阵,并且将矩阵结果输出到输出单元251。在一些实施例中,处理元件200是图1的处理元件101,矩阵处理器单元201、操纵矩阵输入单元203、数据矩阵输入单元205和输出单元251分别是图1的矩阵处理器单元107、操纵矩阵输入单元103、数据矩阵输入单元105和输出单元151。在一些实施例中,可以并行利用诸如处理元件200的处理元件和诸如矩阵处理器单元201的多个矩阵处理器单元来提高性能。例如,一个处理元件及其矩阵处理器单元可用于处理大输入数据矩阵的一个切片,而另一个处理元件及其矩阵处理器单元可用于处理同一输入数据矩阵的不同切片。
在一些实施例中,操纵矩阵输入单元203用于将操纵矩阵加载到矩阵处理器单元201中,作为对应于操纵矩阵的不同列的单独向量操作数。例如,对应于二维操纵矩阵的至少一部分的数据可以在被加载到矩阵处理器单元201之前从存储器中读取并由操纵矩阵输入单元203处理。在各种实施例中,由操纵矩阵输入单元203生成的每个向量操作数可以被导向矩阵处理器单元201的向量单元中的任何一个,例如向量乘法单元213或223。每个向量单元可以加载有操纵矩阵的不同对应列。例如,在一些实施例中,矩阵处理器单元201包括32个向量单元。在32个周期内,32个向量操作数可以通过操纵矩阵输入单元203加载到矩阵处理器单元201中。对于每个周期,操纵矩阵输入单元203生成一个向量操作数,然后将其加载到32个向量单元之一中。在32个周期之后,所有32个向量单元已经接收到向量操作数,每个对应于32列操纵矩阵的一列。在一些实施例中,每个周期可以生成和加载多个数据输入向量。例如,可以并行生成四个输入向量,以便在8个周期内加载32个向量单元。
在一些实施例中,数据矩阵输入单元205用于将输入数据矩阵加载到矩阵处理器单元201中,作为对应于输入数据矩阵的不同行的独立向量操作数。例如,对应于二维输入数据矩阵的至少一部分的数据可以在被加载到矩阵处理器单元201之前从存储器中读取并由数据矩阵输入单元205处理。由数据矩阵输入单元205生成的每个输入数据向量操作数对应于输入数据矩阵的一行,并且可以导向矩阵处理器单元201的向量单元中的任何一个、子集或全部,例如向量乘法单元213或223。例如,相同的输入数据向量操作数可以被广播到矩阵处理器单元201的多个向量单元,以计算修改的矩阵结果的整个输出行。通过向多个向量单元广播对应于输入数据矩阵的一行的相同向量操作数,多个向量单元并行计算相同数据矩阵行与不同操纵矩阵列的点积。一旦确定了修改矩阵的整行的结果,对应于输入数据矩阵的下一行的向量操作数可以被广播到适当的向量单元,以确定修改矩阵的下一输出行。在一些实施例中,操纵矩阵的每一行被替代地广播给对应于输入数据矩阵的不同列的向量单元。
在一些实施例中,向量操作数的一些元素可能未被使用或被清零(zeroed out)。例如,上采样操纵运算可以对应于对每列使用16元素向量的16×32操纵矩阵和/或对每行使用16元素向量的32×16输入数据矩阵。32×32矩阵处理器单元的32个向量单元中的每一个都加载有一对16元素向量,其对应于16×32操纵矩阵的一列和32×16输入数据矩阵的一行。16元素向量操作数可以是具有16个零值或填充元素的32元素向量。向量操作数由操纵矩阵输入单元203和/或数据矩阵输入单元205准备。类似地,在一些实施例中,仅利用矩阵处理器单元201的向量单元的子集。例如,下采样操纵运算可以对应于32×16操纵矩阵,该矩阵为每列利用32元素的向量,但是仅需要16个向量单元来将整个32×16操纵矩阵加载到32×32矩阵处理器单元中。向量操作数由操纵矩阵输入单元203和/或数据矩阵输入单元205准备,并被导向适当的向量单元。
在一些实施例中,由操纵矩阵输入单元203和数据矩阵输入单元205生成的输入向量操作数作为向量参数被传递到矩阵处理器单元201的向量单元,例如向量单元211和221之一。矩阵处理器单元201的每个向量单元可以使用对应于输入数据矩阵的一行和操纵矩阵的一列的输入向量来确定点积结果。在一些实施例中,矩阵处理器单元201包括32个向量单元。每个向量单元可以取两个32元素向量作为参数,每个可以产生单个元素结果。跨所有利用的向量单元获取,结果是输出向量结果,并且对应于修改的矩阵的输出行。在各种实施例中,矩阵处理器单元201的输出可以是输出向量,并且在输出单元251处被接收。在多个周期中,在输出单元251接收的输出是矩阵结果。在一些实施例中,在输出单元251接收的输出向量是32元素向量。在适当的情况下,可以使用其他向量长度。例如,一个16元素的向量可以通过只取32个向量单元中的16个的输出来输出。类似地,由处理元件200处理的元素的大小可以被适当地配置。例如,元素可以是4位、8位、2字节、4字节或其他合适的大小。
在一些实施例中,经由操纵矩阵输入单元203和/或数据矩阵输入单元205将向量操作数从存储器加载到矩阵处理器单元201所需的周期数基于矩阵处理器单元的利用。例如,为了保持矩阵处理器单元201接近完全利用,从存储器中检索向量单元的数据参数,并在与向量单元的计算利用率紧密匹配的时间段(例如,一定数量的周期)内准备该数据参数。通过匹配负载和计算时间,矩阵处理器单元201可以保持接近完全利用。在一些实施例中,例如,通过增加总线速度来减少数据读取时间,从而更好地匹配负载和计算时间。例如,在各种实施例中,矩阵处理器单元201可能花费大约八个时钟周期来完成某一组计算。(一组计算的示例可以包括将输入数据矩阵的八个不同行应用于对应于操纵矩阵的一组输入向量。)每个周期一个向量操作数的读取速率将需要至少32个周期来加载所有向量单元。将读取速率提高4倍,允许在大约8个周期内加载所有32个向量操作数,这与矩阵处理器单元的处理计算时间相匹配。在各种实施例中,通过将数据读取速度(例如,用于加载向量操作数的数据总线速度)与矩阵处理器单元计算性能和工作负载相匹配,矩阵处理器单元201的整体效率和吞吐量显著增加。在一些实施例中,使用本文公开的技术,读取速度至少部分提高。例如,对应于操纵矩阵的不同列的多个向量操作数可以由操纵矩阵输入单元203并行生成,以倍增总的有效读取速度。在一些实施例中,操纵矩阵输入单元203可以并行处理多个输入向量,以减少将相应的操纵矩阵加载到矩阵处理器单元201中所需的周期数。
在一些实施例中,矩阵处理器单元201包括多个向量单元,每个向量单元包括向量乘法单元和向量加法器单元。每个向量乘法单元,例如向量乘法单元213或223,被配置为将经由操纵矩阵输入单元203和数据矩阵输入单元205接收的相应元素相乘。在一些实施例中,结果是相乘结果的向量。例如,对于两个32字节的输入向量,向量乘法单元的结果是32个相乘结果的向量。来自数据矩阵输入单元205的输入数据矩阵行的第一元素与来自操纵矩阵输入单元203的操纵矩阵列的第一元素相乘。类似地,输入数据矩阵行的第二个元素与操纵矩阵列的第二个元素相乘。在各种实施例中,相乘结果的向量被传递到向量单元的向量加法器单元。例如,向量乘法单元213将其相乘结果传递给向量加法器单元215,并且向量乘法单元223将其相乘结果传递给向量加法器单元225。
在一些实施例中,每个向量加法器单元(例如向量加法器单元215或225)被配置为计算来自输入向量的元素的和。例如,向量加法器单元215计算来自由向量乘法单元213计算的相乘结果的向量的每个元素的和。类似地,向量加法器单元225计算来自由向量乘法单元223计算的相乘结果的向量的每个元素的和。在一些实施例中,向量加法器单元的结果是用作相应向量乘法单元的输入的向量的点积。在各种实施例中,每个向量加法器单元(例如向量加法器单元215或225)被实现为加法器树。例如,加法器树的顶层可以添加成对的元素以确定一组部分和,例如添加元素0和1以确定第一部分和,以及添加元素2和3以确定第二部分和,等等。每个后续层可以对来自前一层的成对的部分和进行求和,直到最后一层计算出最终结果和。在各种实施例中,每个加法器树并行计算部分和,以得到结果和。并行运算显著提高了对数字向量进行求和的效率。在各种实施例中,多个向量单元可以并行操作以并行计算多个点积,这显著提高了矩阵操纵运算的吞吐量。
图3是示出了使用到具有矩阵处理器单元的处理元件的处理器指令执行矩阵操纵运算的过程的实施例的流程图。例如,响应于在处理元件处接收到处理器指令,使用硬件矩阵处理器单元来执行矩阵操纵运算。该指令指定了矩阵操纵运算的类型,如上采样、下采样或其他要执行的适当的运算的类型,以及要对其执行运算的源输入数据矩阵。在一些实施例中,所得矩阵具有与输入矩阵不同的维度。例如,上采样矩阵操纵运算导致沿上采样维度的更长长度,而下采样矩阵操纵运算导致沿下采样维度的更短长度。在一些实施例中,使用图1的矩阵处理器单元107和/或图2的矩阵处理器单元201来执行矩阵操纵运算。
在301,接收矩阵操纵运算处理器指令。例如,在处理元件处接收处理器指令,该处理器指令指定矩阵操纵运算,诸如上采样、下采样或另一种适当的矩阵操纵运算的类型。上采样运算可以对应于通过重复每个元素来使输入矩阵的宽度加倍。另一个上采样运算可以对应于通过每隔一个元素进行线性插值来使输入矩阵的宽度几乎加倍。其他矩阵运算也是合适的。处理器指令还指定输入数据矩阵,例如存储在存储器中的二维数据矩阵。输入数据矩阵可由存储器位置引用,例如存储器中的存储器地址、寄存器位置或另一存储器引用。在一些实施例中,存储器位置是处理元件的本地存储器。
在303,准备操纵矩阵操作数。例如,对应于在301接收的处理器指令的矩阵操纵运算的操纵矩阵被识别并为矩阵处理器单元准备。操纵矩阵可以从存储器、处理元件的本地存储器或诸如矩阵寄存器的另一存储器位置中检索。在一些实施例中,通过准备对应于操纵矩阵的每一列的操作数向量来准备操纵矩阵操作数。操纵矩阵的每个向量操作数可以被加载到矩阵处理器单元的相应向量单元中。在一些实施例中,矩阵处理器单元对大小大于操纵矩阵的列长度的向量进行操作,并且仅使用向量元素的子集。例如,向量操作数中未使用的向量元素被替换为零值或填充元素。一个16元素的列向量使用来自适当的操纵矩阵列的16个元素和另外16个零值元素来存储在32元素的向量操作数中。在一些实施例中,操纵矩阵操作数由操纵矩阵输入单元准备,例如图1的操纵矩阵输入单元103和/或图2的操纵矩阵输入单元203。
在305,准备输入数据矩阵操作数。例如,为矩阵处理器单元准备输入数据矩阵,以执行在301接收的处理器指令的矩阵操纵运算。输入数据矩阵可以从存储器、处理元件的本地存储器或另一个存储器位置(例如矩阵寄存器)中检索。在一些实施例中,通过准备对应于输入数据矩阵的每行的操作数向量来准备输入数据矩阵操作数。每个向量操作数可以被广播到矩阵处理器单元的在303接收操纵矩阵的相应列的向量单元。在一些实施例中,矩阵处理器单元对大于输入数据矩阵的行长度的向量大小进行操作,并且仅使用向量元素的子集。例如,向量操作数中未使用的向量元素被替换为零值或填充元素。在一些实施例中,输入数据矩阵操作数由数据矩阵输入单元例如图1的数据矩阵输入单元105和/或图2的数据矩阵输入单元205准备。
在一些实施例中,输入数据矩阵的维度大于矩阵处理器单元和/或操纵矩阵所支持的维度。例如,矩阵处理器单元可以对多达32×32个元素的矩阵进行操作。在输入数据矩阵具有大于32×32的维度和/或大小与操纵矩阵不兼容的情况下,输入数据矩阵被分割成与矩阵处理器单元和操纵矩阵兼容的适当的二维矩阵切片。例如,上采样操纵矩阵可以利用16×32操纵矩阵。输入数据矩阵被分割成与32×32矩阵处理器单元和16×32操纵矩阵兼容的32×16输入数据切片,以输出上采样结果矩阵。在有多个输入数据切片的情况下,可以对每个切片执行矩阵操纵运算。在一些实施例中,例如插值运算,切片可以重叠。
在307,应用矩阵操纵运算。例如,使用分别在303和305准备的操纵矩阵操作数和输入数据矩阵操作数,由矩阵处理器单元执行二维矩阵操纵运算。在一些实施例中,矩阵操纵运算在多个周期内执行,一次对输入数据矩阵(或输入数据矩阵切片)的一行进行操作,以一次确定输出矩阵的一行。例如,矩阵处理器单元可以每个周期输出对应于结果矩阵的一行的单个向量结果。行向量的每个元素是通过计算输入数据矩阵的一行与矩阵操纵的不同列的点积来确定的。在各种实施例中,矩阵操纵运算的输出是通过将输入数据矩阵乘以操纵矩阵而确定的结果矩阵。在一些实施例中,输出结果由输出单元接收,例如图1的输出单元151和/或图2的输出单元251。
在309,输出操纵运算结果。例如,所得矩阵被输出到存储器或另一个位置。在一些实施例中,所得矩阵被写入存储器,例如图1的存储器161。在一些实施例中,所得矩阵被写入矩阵寄存器,该矩阵寄存器可以是用于存储矩阵以供处理元件将来访问的一个或更多个寄存器。输出功能可以执行附加的矩阵操纵。例如,可以使用多遍运行和跨步写入来执行输出,以沿着高度维度对矩阵进行上采样。在一些实施例中,使用存储器布局或分散单元来执行跨步写入。使用矩阵处理器单元的相同输出矩阵,通过在两遍运行中将输出矩阵的每一行写入最终矩阵的每隔一行来输出最终矩阵。为了使用16×32输出矩阵输出32×32矩阵,第一遍运行填充奇数行(例如,行1、3、5、…和31),并且第二遍运行填充偶数行(例如,行2、4、6、…和32)。
在一些实施例中,输出单元可以强制实现结果矩阵的输出维度。例如,下采样的输入数据矩阵在至少一维上小于输入数据矩阵,例如当将32列输入矩阵下采样为16列时。在一些实施例中,32×32矩阵处理器单元的32个向量单元中的每一个能够在每个周期输出单个点积结果。矩阵处理器单元的输出被修整为对应于下采样行的16列的16个元素,而不是利用所有32个向量单元的输出。在一些实施例中,输出维度部分地由输出单元确定,例如图1的输出单元151和/或图2的输出单元251。例如,输出单元仅从对结果矩阵具有适用结果的向量单元中选择输出。
图4是示出了使用到具有矩阵处理器单元的处理元件的处理器指令执行矩阵操纵运算的过程的实施例的流程图。例如,处理器指令在处理元件处被接收并被解码,以准备用于执行矩阵操纵运算的操纵矩阵。矩阵处理器单元将操纵矩阵应用于由处理器指令指定的输入数据,以执行矩阵操纵运算。在一些实施例中,在图3的301和/或303处执行图4的过程。在一些实施例中,图4的过程由图1的系统100使用诸如图1的处理元件101和/或图2的处理元件200的处理元件来执行。
在401,矩阵操纵运算处理器指令被解码。例如,指定特定矩阵操纵运算(例如上采样、下采样或另一种适当的矩阵操纵运算中的一种类型)的处理器指令在处理元件处被解码。在一些实施例中,解码由处理元件的控制逻辑单元执行。处理器指令指示处理元件对输入数据矩阵执行矩阵操纵运算。在一些实施例中,解码包括确定特定的矩阵操纵运算和相关联的操纵矩阵,确定输入数据矩阵及其维度,以及确定输出结果、其维度和输出结果的目的地。在一些实施例中,解码还确定与输出结果相关联的输出功能。例如,输出功能可以包括用于跨步写入的参数,以进一步对输出进行上采样。
在403,识别操纵矩阵。例如,每个矩阵操纵运算与操纵矩阵相关联,并且在403,识别解码的处理器指令的操纵矩阵。在一些实施例中,识别包括确定操纵矩阵的存储器位置,例如存储器地址位置或矩阵寄存器。在一些实施例中,识别包括确定操纵矩阵的维度。
在405,从存储器中检索操纵矩阵。例如,操纵矩阵通过操纵矩阵输入单元从存储器中检索。在一些实施例中,操纵矩阵输入单元是图1的操纵矩阵输入单元103和/或图2的操纵矩阵输入单元203。在一些实施例中,从处理元件的本地存储器、矩阵寄存器或另一个适当的存储器位置检索在403识别的操纵矩阵。在一些实施例中,操纵矩阵在多个周期内一次被检索一列。
在407,操纵矩阵被加载到矩阵处理器单元中。例如,操纵矩阵通过操纵矩阵输入单元被加载到矩阵处理器单元中。在一些实施例中,操纵矩阵输入单元一次一个列向量地将操纵矩阵加载到矩阵处理器单元中。例如,操纵矩阵的每一列被处理成向量操作数,并被加载到矩阵处理器单元的相应向量单元中。在一些实施例中,需要多个周期来将整个操纵矩阵加载到矩阵处理器单元中。一旦被加载到矩阵处理器单元中,操纵矩阵就可以被重用并应用于输入数据矩阵的不同行。在一些实施例中,操纵矩阵的维度小于矩阵处理器单元支持的最大矩阵,并且仅利用矩阵处理器单元的向量单元的子集。例如,一个32x16下采样操纵矩阵只需要16个向量单元,操纵矩阵的16列各一个向量单元。16个向量单元中的每一个接收对应于16列之一的32元素向量。
图5是示出了使用到具有矩阵处理器单元的处理元件的处理器指令来执行矩阵操纵运算的过程的实施例的流程图。例如,对由处理器指令指定的输入数据矩阵执行矩阵操纵运算。输入数据矩阵可能太大,无法加载到矩阵处理器单元中,或者维度与相应的操纵矩阵不兼容。替代地,输入数据矩阵被分割成与矩阵处理器单元的操作数大小和操纵矩阵兼容的较小矩阵。矩阵处理器单元通过将加载到矩阵处理器单元中的相应操纵矩阵应用于每个输入数据矩阵切片来处理每个切片。在一些实施例中,大小兼容的切片可以作为操作数被传递给一个或更多个不同的矩阵处理器单元,并将结果合并。在一些实施例中,在不同的矩阵处理器单元(例如,对应于不同处理元件的矩阵处理器单元)上操作切片。在各种实施例中,图5的过程可以响应于在图3的301处接收的矩阵操纵运算指令来执行。在一些实施例中,在图3的305、307和/或309处执行图5的过程。在一些实施例中,图5的过程由图1的系统100使用诸如图1的处理元件101和/或图2的处理元件200的处理元件和诸如图1的矩阵处理器单元107和/或图2的矩阵处理器单元201的矩阵处理器单元来执行。
在501,识别输入数据矩阵的下一个输入数据矩阵切片。例如,输入数据矩阵被分割成一个或更多个输入数据矩阵切片,其大小与矩阵处理器单元的操作数大小和操纵矩阵兼容。在一些实施例中,切片重叠。可以在存储器中识别切片,并且可以发出读取请求以加载所识别的数据。在一些实施例中,与矩阵处理器单元的操作数大小相比,输入数据矩阵的大小通常可能非常大。输入数据矩阵被分割成更小的兼容大小进行处理。在501,识别下一个切片以进行处理。
在503,操纵矩阵被应用于输入数据矩阵切片。例如,使用矩阵处理器单元将输入数据矩阵切片乘以操纵矩阵。可以在处理元件的输出单元接收所得矩阵。在一些实施例中,矩阵操纵运算在多个周期内在输入数据矩阵切片上执行,一次在输入数据矩阵切片的一行上操作,以一次确定输出矩阵的一行。例如,矩阵处理器单元可以在每个周期输出对应于结果矩阵的一行的单个向量结果。行向量的每个元素通过计算输入数据矩阵切片的一行与矩阵操纵的不同列的点积来确定。
在505,输出操纵矩阵结果。例如,矩阵处理器单元的每个向量单元确定输出向量的元素。输出向量可以对应于结果矩阵的一整行,并且在诸如图1的输出单元151和/或图2的输出单元251的输出单元处被接收。在各种实施例中,输出单元在多次迭代中收集对应于结果矩阵的多行的向量单元结果。输出单元将结果矩阵写入存储器,例如图1的存储器161,或者另一个适当的存储器位置。在一些实施例中,结果矩阵是较大结果矩阵的切片,其中较大结果矩阵是对原始输入数据矩阵应用矩阵操纵运算的结果。
在一些实施例中,输出功能可以执行如参考图3的步骤309所述的附加矩阵操纵。例如,可以使用多遍运行和跨步写入来执行输出,以沿着高度维度对矩阵进行上采样。输出单元还可以强制实现结果矩阵的输出维度。输出维度可以部分地由输出单元确定,例如图1的输出单元151和/或图2的输出单元251。例如,输出单元仅从对结果矩阵具有适用结果的向量单元中选择输出。
在507,确定附加数据矩阵切片是否需要处理。如果还有额外的数据矩阵切片需要处理,处理循环回到501以处理下一个切片。如果没有额外的数据矩阵切片需要处理,处理结束。
图6是示出了使用到具有矩阵处理器单元的处理元件的处理器指令执行矩阵操纵运算的过程的实施例的流程图。例如,由处理器指令指定的矩阵操纵运算在与矩阵处理器单元的操作数大小和操纵矩阵兼容的输入数据矩阵上执行。在一些实施例中,输入数据矩阵是输入数据矩阵切片。矩阵处理器单元通过将加载到矩阵处理器单元中的相应操纵矩阵应用于每个输入数据矩阵来处理每个输入数据矩阵。在一些实施例中,输入数据矩阵的每行被处理为输入数据向量操作数,并被广播到矩阵处理器单元的多个向量单元。矩阵处理器单元的多个向量单元中的每一个还接收操纵矩阵的相应列作为第二向量操作数。由向量单元计算的点积结果一起形成结果矩阵的一行。在各种实施例中,图6的过程可以响应于在图3的301处接收的矩阵操纵运算指令来执行,和/或可以在图5的501处识别的输入数据矩阵切片上执行。在一些实施例中,图6的过程在图3的305和/或307和/或图5的503处执行。在一些实施例中,图6的过程由图1的系统100使用诸如图1的处理元件101和/或图2的处理元件200的处理元件和诸如图1的矩阵处理器单元107和/或图2的矩阵处理器单元201的矩阵处理器单元来执行。
在601,识别来自输入数据矩阵切片的下一个输入数据向量。例如,对应于输入数据矩阵切片的一行的输入数据向量被识别并针对矩阵处理器单元准备。在一些实施例中,从存储器读取数据。在各种实施例中,输入数据向量是由诸如图1的数据矩阵输入单元105和/或图2的数据矩阵输入单元205的数据矩阵输入单元准备的用于矩阵处理器单元的向量操作数。在每次运行通过步骤601期间,识别对应于输入数据矩阵切片的一行的下一个输入数据向量。后续运行识别并处理不同的行,直到所有行和整个输入数据矩阵切片都已被处理。在一些实施例中,输入数据向量仅利用矩阵处理器单元支持的向量长度的子集。例如,输入数据向量可以有16个元素,即使矩阵处理器单元可以接收32元素向量操作数。在一些实施例中,未使用的向量元素被填充有填充元素和/或零值元素。
在603,输入数据向量被广播到适用的向量单元。例如,在601识别的输入数据向量被准备作为向量操作数,并被广播到矩阵处理器单元的选定向量单元。所选择的向量单元各自接收两个向量操作数,对应于输入数据向量的向量操作数和对应于操纵矩阵的一列的向量操作数。在603,适用的向量单元各自接收对应于输入数据向量的向量操作数。根据矩阵操纵运算,利用矩阵处理器单元的子集或所有向量单元。例如,在操纵矩阵具有32列的情况下,32×32矩阵处理器单元可以利用所有32个向量单元。在操纵矩阵具有16列的情况下,仅使用16个向量单元,并且输入数据向量只能广播给适用的16个向量单元。在各种实施例中,对应于操纵矩阵的每一列的向量操作数可以在多个输入数据向量之间重用。在603,适用的向量单元仅接收新的输入数据向量。
在605,执行向量单元运算,并输出结果。例如,从输入数据矩阵切片的相应行和操纵矩阵的相应列加载了向量操作数的每个向量单元执行点积运算,并且将所得的元素输出到输出向量作为结果。向量单元的结果对应于结果矩阵的一行。所得的输出行的长度基于所使用的向量单元的数量。例如,在使用16个向量单元的情况下,每个输出行有16个元素。类似地,在使用32个向量单元的情况下,每个输出行有32个元素,以此类推。在各种实施例中,通过利用每个向量单元的向量乘法单元和向量加法器单元来执行由每个向量单元执行的点积运算。在一些实施例中,在诸如图1的输出单元151和/或图2的输出单元251的输出单元处接收输出向量。输出单元可以将所得的行(或随时间累积的行的集合)输出到存储器或另一个适当的位置。
在607,确定附加输入数据向量是否需要处理。如果还有额外的输入数据向量需要处理,则处理循环回到601以处理下一个输入数据向量。如果没有额外的输入数据向量需要处理,处理结束。
图7是示出用于执行矩阵操纵运算的示例操纵矩阵和对应的向量操作数的图。在图7中,上采样操纵矩阵700表示用于执行32×16输入数据矩阵(未示出)的上采样的示例性16×32操纵矩阵。将输入数据矩阵乘以上采样操纵矩阵700的结果是,通过重复每个元素两次,将输入数据矩阵的行上采样2倍。沿着32×16输入数据矩阵的一行的每个元素被复制。用于上采样的操纵矩阵的其他维度也可能是合适的。上采样操纵矩阵700被配置用于具有至少32个向量单元的矩阵处理器单元,其中每个向量单元采用具有至少16个元素的向量操作数。32×32矩阵处理器单元可以利用上采样操纵矩阵700,其中32元素向量操作数用16个填充或零值元素填充。在一些实施例中,矩阵处理器单元是图1的矩阵处理器单元107和/或图2的矩阵处理器单元201。在一些实施例中,图3-图6的过程用于将操纵矩阵应用于输入数据矩阵。
在所示的示例中,上采样操纵矩阵700是具有16行32列的16×32操纵矩阵。上采样操纵矩阵700的每一列包含值为1.0的单个元素。该列的所有剩余元素的值都为0.0。每对列在同一行位置都有值为1.0的元素。当列沿着行维度前进时,值为1.0的元素的行位置会发生变化。列701和703在行1具有1.0值元素,列705和707在行2具有1.0值元素,以此类推,列709在行16具有1.0值元素。上采样操纵矩阵700中所示的省略号指示未示出的附加元素,以使用所描述的模式填满16×32操纵矩阵。
上采样操纵矩阵700的列,例如列701、703、705、707和709等,每个都作为向量操作数被加载到矩阵处理器单元的相应向量单元中。例如,列701是准备作为第一向量单元的向量操作数的16元素向量。使用输入数据矩阵的行和列701的向量操作数来确定点积,以确定行结果的第一元素。类似地,使用输入数据矩阵的同一行和列703的向量操作数来确定点积,以确定行结果的第二元素。使用输入数据矩阵的同一行,确定与列705和707的向量操作数的点积,以分别确定行结果的第三和第四元素。使用上采样操纵矩阵700的剩余列类似地确定剩余行元素。行结果的最后一个元素是通过使用输入数据矩阵的同一行和列709的向量操作数确定点积来计算的。使用上采样操纵矩阵700,每个行结果具有32个元素。
图8是示出用于执行矩阵操纵运算的示例输入数据矩阵和对应的矩阵切片的图。输入数据矩阵800是二维矩阵。输入数据矩阵800的大小可能大于矩阵处理器单元所支持的维度,和/或其原始格式可能与适用的操纵矩阵不兼容。输入数据矩阵800被分割成与矩阵处理器单元和操纵矩阵兼容的较小矩阵。例如,输入矩阵切片801是与32×32矩阵处理器单元和上采样操纵矩阵700兼容的输入数据矩阵800的二维矩阵切片。输入矩阵切片801是32×16矩阵,上采样操纵矩阵700是16×32矩阵。将输入矩阵切片801乘以上采样操纵矩阵700的结果矩阵是32×32的结果矩阵,其将输入数据矩阵800的前16列转换成32×32的输出矩阵。在各种实施例中,输入数据矩阵800的不同切片各自被处理,并且结果被组合以对整个输入数据矩阵进行上采样。根据矩阵处理器单元和相应的操纵矩阵,输入数据矩阵可以被分割成不同的维度。对于某些操纵矩阵,不同的切片可能会重叠。例如,涉及插值的操纵矩阵可能需要不同的切片重叠一个或更多个列和/或行。在一些实施例中,图5的过程用于将输入数据矩阵分割成兼容的输入矩阵切片。在一些实施例中,图3-图6的过程用于将操纵矩阵应用于输入数据矩阵。在一些实施例中,矩阵处理器单元是图1的矩阵处理器单元107和/或图2的矩阵处理器单元201。
在一些实施例中,输入数据矩阵切片801的每行被准备作为向量操作数。在所示的示例中,行803是输入数据矩阵切片801的第一行。在一些实施例中,每一行,例如行803,被准备为向量操作数,并被广播到具有操纵矩阵的相应列的矩阵处理器单元的向量单元。在各种实施例中,矩阵处理器单元的向量操作数支持比输入矩阵切片的行更大的维度。填充或零值元素可用于填满向量操作数的剩余元素。例如,对32元素向量操作数进行操作的矩阵处理器单元接收具有行803的16个元素以及16个填充元素的向量操作数。根据矩阵处理器单元和操纵矩阵,矩阵数据切片行的大小和填充单元的数量可以适当地改变。
图9是示出来自执行矩阵操纵运算的示例结果矩阵的图。结果矩阵900是32×32的二维矩阵结果,其通过将32×16的输入数据矩阵(例如图8的输入数据矩阵切片801)乘以16×32的操纵矩阵(例如图7的上采样操纵矩阵700)来确定。结果矩阵900的元素通过计算输入数据矩阵的每行与操纵矩阵的每列的点积结果来确定。元素901、903、905、907和909是结果矩阵900的第一行的元素。元素901、903、905和907分别是结果矩阵900的第一、第二、第三和第四列的元素。元素909是结果矩阵900的第三十二列也是最后一列的元素。
在一些实施例中,元素901对应于输入数据矩阵的第一行与操纵矩阵的第一列的点积结果。例如,在一些实施例中,元素901对应于与图8的输入矩阵切片801的16元素行803相对应的向量操作数与对应于图7的上采样操纵矩阵700的16元素列701的向量操作数的点积结果。类似地,元素903对应于来自输入数据矩阵的同一行与操纵矩阵的第二列(例如图7的上采样操纵矩阵700的16元素列703)的点积结果。元素901和903具有与输入矩阵切片的第一行和第一列的元素相同的值(X1,1)。元素905和907具有与输入矩阵切片的第一行和第二列的元素相同的值(X1,2)。它们的值对应于输入数据矩阵的同一行分别与操纵矩阵的第三和第四列(例如分别是图7的上采样操纵矩阵700的16元素列705和707)的点积结果。对于结果矩阵900的每一行,来自输入数据矩阵的相应行的元素被重复两次,以将输入数据矩阵的行上采样两倍。作为另外的示例,结果矩阵900的第一行的最后一个元素(元素909)具有与输入矩阵切片的第一行和第十六列的元素相同的值(X1,16)。该值对应于来自输入数据矩阵的同一行与操纵矩阵的第十六列(例如图7的上采样操纵矩阵700的16元素列709)的点积结果。在一些实施例中,图3-图6的过程用于将操纵矩阵应用于输入数据矩阵,以确定结果矩阵900。在一些实施例中,用于执行矩阵操纵运算的矩阵处理器单元是图1的矩阵处理器单元107和/或图2的矩阵处理器单元201。
图10是示出用于执行矩阵操纵运算的示例操纵矩阵和对应的向量操作数的图。在图10中,上采样操纵矩阵1000表示用于执行32×16输入数据矩阵(未示出)的上采样的示例性16×31操纵矩阵。将输入数据矩阵乘以上采样操纵矩阵1000的结果是通过线性插值将输入数据矩阵的行上采样接近2倍。32×16输入数据矩阵被上采样为32×31结果矩阵。在输入数据矩阵的原始16列的每一列之间,通过平均相邻列插入一个附加列。用于上采样的操纵矩阵的其他维度也可能是合适的。上采样操纵矩阵1000被配置用于具有至少31个向量单元的矩阵处理器单元,其中每个向量单元采用具有至少16个元素的向量操作数。32×32矩阵处理器单元可以利用上采样操纵矩阵1000,其中32个元素向量操作数用16个填充或零值元素填充。在一些实施例中,矩阵处理器单元是图1的矩阵处理器单元107和/或图2的矩阵处理器单元201。在一些实施例中,图3-图6的过程用于将操纵矩阵应用于输入数据矩阵。
在所示的示例中,上采样操纵矩阵1000是具有16行31列的16×31操纵矩阵。上采样操纵矩阵1000的每一列包含值为1.0的单个元素或值为0.5的一对元素。该列的所有剩余元素的值都为0.0。列1001,上采样操纵矩阵1000的第一列,是(1,0,0,……0),并且导致结果矩阵的第一列等于输入数据矩阵的第一列。列1003,上采样操纵矩阵1000的第二列,是(0.5,0.5,0,……0),并且导致结果矩阵的第二列等于输入数据矩阵的第一列和第二列的平均值。列1005,上采样操纵矩阵1000的第三列,是(0,1,0,……0),并且导致结果矩阵的第三列等于输入数据矩阵的第二列。列1007,上采样操纵矩阵1000的第四列,是(0,0.5,0.5,……0),并且导致结果矩阵的第四列等于输入数据矩阵的第二列和第三列的平均值。这种模式持续到最后一列1009。列1009,即上采样操纵矩阵1000的最后一列和第三十一列,是(0,0,0,……1),并且导致结果矩阵的最后一列和第三十一列等于输入数据矩阵的第十六列。上采样操纵矩阵1000中所示的省略号指示未示出的附加元素,以使用所描述的模式填满16×31操纵矩阵。
上采样操纵矩阵1000的列,例如列1001、1003、1005、1007和1009等,每个都作为向量操作数被加载到矩阵处理器单元的相应向量单元中。例如,列1001是16元素向量,其被准备作为第一向量单元的向量操作数。使用输入数据矩阵的行和列1001的向量操作数来确定点积,以确定行结果的第一个元素。类似地,使用输入数据矩阵的同一行和列1003的向量操作数来确定点积,以确定行结果的第二元素。使用输入数据矩阵的同一行,确定与列1005和1007的向量操作数的点积,以分别确定行结果的第三和第四元素。使用上采样操纵矩阵1000的剩余列类似地确定剩余行元素。行结果的最后一个元素是通过使用输入数据矩阵的同一行和列1009的向量操作数确定点积来计算的。使用上采样操纵矩阵1000,每个行结果有31个元素。
图11是示出用于执行矩阵操纵运算的示例操纵矩阵和对应的向量操作数的图。在图11中,下采样操纵矩阵1100表示用于执行32×32输入数据矩阵(未示出)的下采样的示例性32×16操纵矩阵。将输入数据矩阵乘以下采样操纵矩阵1100的结果是通过池化(或平均)每行中的成对两个元素来下采样。32×32输入数据矩阵被下采样为32×16结果矩阵。结果矩阵中的16列中的每一列都是通过对输入数据矩阵的两列求平均值来确定的。用于下采样的操纵矩阵的其他维度也可能是合适的。下采样操纵矩阵1100被配置用于具有至少16个向量单元的矩阵处理器单元,其中每个向量单元采用具有至少32个元素的向量操作数。32×32矩阵处理器单元可以利用下采样操纵矩阵1100,其中总共32个向量单元中仅16个被使用。在一些实施例中,矩阵处理器单元是图1的矩阵处理器单元107和/或图2的矩阵处理器单元201。在一些实施例中,图3-图6的过程用于将操纵矩阵应用于输入数据矩阵。
在所示的示例中,下采样操纵矩阵1100是具有32行和16列的32×16操纵矩阵。下采样操纵矩阵1100的每一列包含一对元素,每个元素的值为0.5。该列的所有剩余元素的值都为0.0。列1101,下采样操纵矩阵1100的第一列,是(0.5,0.5,0,0,……0),并且导致结果矩阵的第一列等于输入数据矩阵的第一列和第二列的平均值。列1103,下采样操纵矩阵1100的第二列,是(0,0,0.5,0.5,0,……0),并且导致结果矩阵的第二列等于输入数据矩阵的第三列和第四列的平均值。该矩阵元素模式持续到最后一列1105。列1105,下采样操纵矩阵1100的最后和第十六列,是(0,0,……0,0,0.5,0.5),并且导致结果矩阵的最后一列和第十六列等于输入数据矩阵的第十五列和第十六列的平均值。下采样操纵矩阵1100中所示的省略号指示未示出的附加元素,以使用所描述的模式填满32×16操纵矩阵。
下采样操纵矩阵1100的列,例如列1101、1103和1105等,每个都作为向量操作数被加载到矩阵处理器单元的相应向量单元中。例如,列1101是32元素向量,其被准备作为第一向量单元的向量操作数。使用输入数据矩阵的行和列1101的向量操作数来确定点积,以确定行结果的第一个元素。类似地,使用输入数据矩阵的同一行和列1103的向量操作数来确定点积,以确定行结果的第二元素。使用下采样操纵矩阵1100的剩余列类似地确定剩余行元素。通过使用输入数据矩阵的同一行与列1105的向量操作数确定点积,来计算行结果的最后一个元素。使用下采样操纵矩阵1100,每个行结果具有16个元素。
尽管为了清楚理解的目的已经详细描述了前述实施例,但是本发明不限于所提供的细节。有许多实现本发明的替代方式。所公开的实施例是说明性的,而不是限制性的。
Claims (20)
1.一种处理器系统,包括:
共享存储器;和
与所述共享存储器通信的处理元件,其中所述处理元件包括矩阵处理器单元,并且所述处理元件被配置为:
接收指定数据矩阵和矩阵操纵运算的处理器指令;
基于所述处理器指令识别操纵矩阵;
将所述数据矩阵和所述操纵矩阵加载到所述矩阵处理器单元中;
执行矩阵运算以确定结果矩阵;和
将所述结果矩阵输出到目的地位置。
2.根据权利要求1所述的系统,其中所述数据矩阵是从所述共享存储器中检索的。
3.根据权利要求1所述的系统,其中所述操纵矩阵是从所述共享存储器中检索的。
4.根据权利要求1所述的系统,其中所述操纵矩阵是从所述处理元件的本地存储器中检索的。
5.根据权利要求1所述的系统,其中所执行的矩阵运算是矩阵乘法运算。
6.根据权利要求1所述的系统,其中所述目的地位置是所述共享存储器。
7.根据权利要求1所述的系统,其中所述目的地位置是矩阵寄存器。
8.根据权利要求1所述的系统,其中所述处理元件是被配置为并行操作的多个处理元件之一。
9.根据权利要求1所述的系统,其中使用输出单元将所述结果矩阵输出到所述目的地位置。
10.根据权利要求9所述的系统,其中所述输出单元被配置为执行多次重复写入,以输出上采样结果矩阵。
11.根据权利要求1所述的系统,其中所述操纵矩阵是上采样矩阵。
12.根据权利要求11所述的系统,其中所述上采样矩阵被配置为在行元素之间执行线性插值。
13.根据权利要求1所述的系统,其中所述操纵矩阵是下采样矩阵。
14.根据权利要求1所述的系统,其中所述矩阵处理器单元包括:
第一类型寄存器,其被配置为存储所述数据矩阵的单行的值;
一组第二类型寄存器,其中每个所述第二类型寄存器被配置成存储所述操纵矩阵的不同列的值;和
多个向量计算单元,其中所述多个向量计算单元中的每一个对应于所述第二类型寄存器中的一个,并且所述向量计算单元中的每一个被配置为将存储在所述第一类型寄存器中的每个值与存储在所述第二类型寄存器中的相应一个第二类型寄存器中的相应值相乘,并且将相应向量计算单元的相乘结果相加在一起,以至少部分地确定将所述数据矩阵与所述操纵矩阵相乘的结果矩阵中的相应元素。
15.根据权利要求14所述的系统,其中所述第一类型寄存器被配置为向所述多个向量计算单元中的每一个广播内容。
16.根据权利要求14所述的系统,其中所述多个向量计算单元中的每一个包括向量乘法单元和向量加法器单元。
17.一种方法,包括:
在处理元件处接收指定数据矩阵和矩阵操纵运算的处理器指令;
基于所述处理器指令识别操纵矩阵;
将所述数据矩阵和所述操纵矩阵加载到所述处理元件的矩阵处理器单元中;
执行矩阵运算以确定结果矩阵;和
将所述结果矩阵输出到目的地位置。
18.根据权利要求17所述的方法,其中将所述数据矩阵和所述操纵矩阵加载到所述矩阵处理器单元中还包括:
将所述操纵矩阵的每一列加载到多个向量计算单元之一中;和
向所述多个向量计算单元的每一个广播所述数据矩阵的行;
其中执行矩阵运算以确定所述结果矩阵还包括:
对于所述多个向量计算单元中的每一个:
将所述数据矩阵的广播的行的元素与所述操纵矩阵的相应加载列的相应元素相乘,以确定相乘结果;和
将相应向量计算单元的相乘结果相加在一起,以确定将所述数据矩阵与所述操纵矩阵相乘的所述结果矩阵的相应行的相应元素。
19.一种处理器系统,包括:
共享存储器;和
被配置为并行操作的多个处理元件,其中每个处理元件被配置为接收指定矩阵操纵运算的处理器指令,并且包括:
控制单元,其被配置为解码所述处理器指令以识别数据矩阵和操纵矩阵;和
矩阵处理器单元,其包括:
第一类型寄存器,其被配置为存储所述数据矩阵的单行的值;
一组第二类型寄存器,其中每个所述第二类型寄存器被配置成存储所述操纵矩阵的不同列的值;和
多个向量计算单元,其中所述多个向量计算单元中的每一个对应于所述第二类型寄存器中的一个,并且所述向量计算单元中的每一个被配置为将存储在所述第一类型寄存器中的每一个值与存储在所述第二类型寄存器中的相应的一个第二类型寄存器中的相应的值相乘,并且将相应的向量计算单元的相乘结果相加在一起,以至少部分地确定将所述数据矩阵与所述操纵矩阵相乘的结果矩阵中的相应行的相应元素。
20.根据权利要求19所述的系统,其中基于所述处理器指令的解码结果从所述共享存储器中检索所述操纵矩阵。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/708,224 US11372644B2 (en) | 2019-12-09 | 2019-12-09 | Matrix processing instruction with optional up/down sampling of matrix |
US16/708,224 | 2019-12-09 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113032009A true CN113032009A (zh) | 2021-06-25 |
Family
ID=73343978
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011449371.XA Pending CN113032009A (zh) | 2019-12-09 | 2020-12-09 | 使用处理器指令的硬件加速矩阵操纵运算 |
Country Status (3)
Country | Link |
---|---|
US (2) | US11372644B2 (zh) |
EP (1) | EP3835949A1 (zh) |
CN (1) | CN113032009A (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20220100508A1 (en) * | 2020-09-26 | 2022-03-31 | Intel Corporation | Large-scale matrix restructuring and matrix-scalar operations |
US20220334634A1 (en) * | 2021-04-16 | 2022-10-20 | Maxim Integrated Products, Inc. | Systems and methods for reducing power consumption in embedded machine learning accelerators |
US20240354367A1 (en) * | 2021-12-07 | 2024-10-24 | Intel Corporation | Interleaved data loading system to overlap computation and data storing for operations |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020198911A1 (en) * | 2001-06-06 | 2002-12-26 | Blomgren James S. | Rearranging data between vector and matrix forms in a SIMD matrix processor |
US20180189057A1 (en) * | 2016-12-30 | 2018-07-05 | Intel Corporation | Programmable matrix processing engine |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7397964B2 (en) | 2004-06-24 | 2008-07-08 | Apple Inc. | Gaussian blur approximation suitable for GPU |
US7956930B2 (en) | 2006-01-06 | 2011-06-07 | Microsoft Corporation | Resampling and picture resizing operations for multi-resolution video coding and decoding |
US11249759B2 (en) * | 2013-07-15 | 2022-02-15 | Texas Instruments Incorporated | Two-dimensional zero padding in a stream of matrix elements |
JP2016057831A (ja) * | 2014-09-09 | 2016-04-21 | 株式会社東芝 | 浮動小数点演算装置、及び情報処理システム |
US10275243B2 (en) * | 2016-07-02 | 2019-04-30 | Intel Corporation | Interruptible and restartable matrix multiplication instructions, processors, methods, and systems |
CN108304922B (zh) * | 2017-01-13 | 2020-12-15 | 华为技术有限公司 | 用于神经网络计算的计算设备和计算方法 |
CN108229645B (zh) * | 2017-04-28 | 2021-08-06 | 北京市商汤科技开发有限公司 | 卷积加速和计算处理方法、装置、电子设备及存储介质 |
US10318306B1 (en) * | 2017-05-03 | 2019-06-11 | Ambarella, Inc. | Multidimensional vectors in a coprocessor |
US10338919B2 (en) * | 2017-05-08 | 2019-07-02 | Nvidia Corporation | Generalized acceleration of matrix multiply accumulate operations |
US11789729B2 (en) * | 2017-12-29 | 2023-10-17 | Intel Corporation | Systems and methods for computing dot products of nibbles in two tile operands |
US10572568B2 (en) * | 2018-03-28 | 2020-02-25 | Intel Corporation | Accelerator for sparse-dense matrix multiplication |
US10387122B1 (en) * | 2018-05-04 | 2019-08-20 | Olsen Ip Reserve, Llc | Residue number matrix multiplier |
TWI762889B (zh) * | 2019-03-21 | 2022-05-01 | 聯發科技股份有限公司 | 用於視頻編解碼的量化矩陣計算和表示的方法和裝置 |
US11277637B2 (en) * | 2019-05-09 | 2022-03-15 | Qualcomm Incorporated | Reference sampling for matrix intra prediction mode |
US11714875B2 (en) * | 2019-12-28 | 2023-08-01 | Intel Corporation | Apparatuses, methods, and systems for instructions of a matrix operations accelerator |
-
2019
- 2019-12-09 US US16/708,224 patent/US11372644B2/en active Active
-
2020
- 2020-11-11 EP EP20207032.2A patent/EP3835949A1/en not_active Withdrawn
- 2020-12-09 CN CN202011449371.XA patent/CN113032009A/zh active Pending
-
2022
- 2022-05-25 US US17/824,775 patent/US20220365784A1/en not_active Abandoned
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020198911A1 (en) * | 2001-06-06 | 2002-12-26 | Blomgren James S. | Rearranging data between vector and matrix forms in a SIMD matrix processor |
US20180189057A1 (en) * | 2016-12-30 | 2018-07-05 | Intel Corporation | Programmable matrix processing engine |
Also Published As
Publication number | Publication date |
---|---|
US20220365784A1 (en) | 2022-11-17 |
EP3835949A1 (en) | 2021-06-16 |
US11372644B2 (en) | 2022-06-28 |
US20210173646A1 (en) | 2021-06-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7374236B2 (ja) | 加速数学エンジン | |
US20220365784A1 (en) | Matrix processing instruction with optional up/down sampling of matrix | |
CN111758107B (zh) | 用于基于硬件的池化的系统和方法 | |
US11520853B2 (en) | Mapping convolution to a partition channel convolution engine | |
EP3816824A1 (en) | High throughput matrix processor with support for concurrently processing multiple matrices | |
CN111465924A (zh) | 用于将矩阵输入转换为矩阵处理器的向量化输入的系统和方法 | |
US11537865B2 (en) | Mapping convolution to a channel convolution engine | |
EP3783478B1 (en) | Mapping convolution to a matrix processor unit | |
KR101202445B1 (ko) | 프로세서 | |
EP3798927A1 (en) | Memory organization for matrix processing | |
CN113496279A (zh) | 使用点对点连接的通道卷积引擎的分组卷积 | |
EP3655851B1 (en) | Register-based complex number processing | |
EP3940605A1 (en) | Mapping convolution to connected processing elements using distributed pipelined separable convolution operations | |
CN111522776B (zh) | 一种计算架构 | |
CN113626759A (zh) | 使用低位宽点积引擎对高位宽数求和 | |
CN113435569A (zh) | 使用每通道卷积运算的流水线逐点卷积 | |
US11829441B2 (en) | Device and method for flexibly summing matrix values | |
US20240028869A1 (en) | Reconfigurable processing elements for artificial intelligence accelerators and methods for operating the same | |
JP2024524588A (ja) | ベクトル合成命令のための処理装置、方法及びコンピュータプログラム | |
JPH02304676A (ja) | ディジタル信号処理装置 |
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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: California, USA Applicant after: Yuan platform Co. Address before: California, USA Applicant before: Facebook, Inc. |