CN110447010B - 在硬件中执行矩阵乘法 - Google Patents
在硬件中执行矩阵乘法 Download PDFInfo
- Publication number
- CN110447010B CN110447010B CN201880019014.4A CN201880019014A CN110447010B CN 110447010 B CN110447010 B CN 110447010B CN 201880019014 A CN201880019014 A CN 201880019014A CN 110447010 B CN110447010 B CN 110447010B
- Authority
- CN
- China
- Prior art keywords
- value
- floating point
- point format
- weight
- activation
- 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.)
- Active
Links
- 239000011159 matrix material Substances 0.000 title claims abstract description 149
- 230000004913 activation Effects 0.000 claims abstract description 163
- 238000000034 method Methods 0.000 claims abstract description 63
- 238000004364 calculation method Methods 0.000 claims description 63
- 238000013528 artificial neural network Methods 0.000 claims description 40
- 230000008569 process Effects 0.000 claims description 34
- 239000013598 vector Substances 0.000 description 123
- 239000000178 monomer Substances 0.000 description 47
- 238000012545 processing Methods 0.000 description 33
- 238000004590 computer program Methods 0.000 description 14
- 230000009471 action Effects 0.000 description 11
- 230000009467 reduction Effects 0.000 description 11
- 238000004891 communication Methods 0.000 description 7
- 238000011176 pooling Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 4
- 238000012549 training Methods 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000009825 accumulation Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000013515 script Methods 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 230000003213 activating effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000001953 sensory effect Effects 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 238000010977 unit operation Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- 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/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
-
- 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/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
- G06F7/487—Multiplying; Dividing
- G06F7/4876—Multiplying
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
-
- 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/04—Architecture, e.g. interconnection topology
- G06N3/048—Activation functions
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Molecular Biology (AREA)
- Nonlinear Science (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Neurology (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
- Signal Processing For Digital Recording And Reproducing (AREA)
Abstract
描述了使用硬件电路执行矩阵乘法的方法、系统和装置。示例方法由获取第一浮点格式的输入激活值和权重输入值开始。将输入激活值与权重输入值相乘以生成具有比第一浮点格式更高的精度的第二浮点格式的乘积值。获取具有比第一浮点格式更高的精度的第三浮点格式的部分和值。对部分和值和乘积值进行组合以生成具有第三浮点格式的更新的部分和值。
Description
背景技术
本说明书涉及在硬件中执行神经网络计算。
神经网络是机器学习模型,所述机器学习模型采用一个或多个层以针对所接收的输入生成输出,例如分类。除了输出层之外,一些神经网络还包括一个或多个隐藏层。每一个隐藏层的输出被用作对该网络中的另一层(例如该网络的下一隐藏层或输出层)的输入。网络的每一层根据相应的参数集合的当前值从所接收的输入生成输出。
发明内容
总体上,本说明书描述了一种计算神经网络推断的专用硬件电路。
总体上,本说明书中描述的主题的一个创新方面可以体现在使用硬件电路执行矩阵乘法的方法中,所述方法包括以下动作:由硬件电路的矩阵计算单元获取输入激活值和权重输入值,输入激活值和权重输入值均具有第一浮点格式;由矩阵计算单元的乘法电路将输入激活值与权重输入值相乘以生成乘积值,乘积值具有第二浮点格式,所述第二浮点格式具有比第一浮点格式更高的精度并且具有与第一浮点格式的动态范围至少一样大的动态范围;由矩阵计算单元获取第三浮点格式的部分和值,所述第三浮点格式具有比第一浮点格式更高的精度并且具有与第一浮点格式的动态范围至少一样大的动态范围;以及由硬件电路的求和电路,至少对部分和值和乘积值进行组合以生成具有第三浮点格式的更新的部分和值。
此方面的实施例可以包括以下可选特征中的一个或多个。浮点格式的精度可以基于浮点格式中的有效数的可用位的计数来确定,并且浮点格式的动态范围可以基于浮点格式中的指数的可用位的计数来确定。第二浮点格式具有与第一浮点格式相同的动态范围,并且第三浮点格式具有与第一浮点格式相同的动态范围。第三浮点格式具有比第二浮点格式更高的精度。
硬件电路可以被配置为执行具有多个层的神经网络的计算,并且输入激活值和权重输入值可以与多个层中的一个层相关联。
方法可以包括以下动作:获取具有第三浮点格式的第一矩阵计算单体的原始激活值和原始权重值;将原始激活值转换为第一浮点格式以生成输入激活值;并将原始权重值转换为第一浮点格式以生成权重输入值。方法可以进一步包括以下动作:接收以增强的精度处理原始激活值的请求;生成输入值的激活增强精度值,激活增强精度值是激活输入值与原始激活值之间的差的度量;并且生成权重输入值的权重增强精度值,权重增强精度值是权重输入值与原始权重值之间的差的度量。将激活输入值与权重输入值相乘以生成乘积值可以包括以下动作:由矩阵计算单元的乘法电路将输入值与权重输入值相乘、将输入值与权重增强精度值相乘、将权重输入值与激活增强精度值相乘以及将激活增强精度值与权重增强精度值相乘,并且对乘法的乘积进行组合以生成乘积值。
此方面的其他实施例包括记录在一个或多个计算机存储设备上的均被配置为执行方法的动作的对应的计算机系统、装置和计算机程序。一个或多个计算机的系统可以被配置为借助于安装在系统上的软件、固件、硬件或其任何组合来执行特定操作或动作,所述系统在操作中可以使系统执行动作。一个或多个计算机程序可以被配置为借助于包括指令执行特定操作或动作,所述指令在被数据处理装置执行时,使装置执行动作。
本说明书中描述的主题的另一个创新方面可以体现在包括被配置为执行第一组操作的矩阵计算单元的硬件电路中,所述第一组操作包括:获取激活输入值和权重输入值,激活输入值和权重输入值均具有第一浮点格式;将权重输入值存储在权重寄存器中,权重寄存器被配置为存储具有第一浮点格式的值;使用硬件电路的乘法电路,将激活输入值与权重输入值相乘以生成乘积值,乘积值具有第二浮点格式,第二浮点格式具有比第一浮点格式更高的精度并且具有与第一浮点格式的动态范围至少一样大的动态范围;获取第三浮点格式的部分和值,第三浮点格式具有比第一浮点格式更高的精度并且具有与第一浮点格式的动态范围至少一样大的动态范围;将部分和值存储在寄存器中的和中,寄存器中的和被配置为存储具有第三浮点格式的值;以及使用矩阵计算单元的求和电路,将部分和值与乘积值进行组合以生成具有第三浮点格式的更新的部分和值。
此方面的实施例可以包括以下可选特征中的一个或多个。第一组操作可以包括将激活输入值存储在激活寄存器中,激活寄存器被配置为存储具有第一浮点格式的值。第一组操作可以包括将权重输入值存储在权重寄存器中,权重寄存器被配置为存储具有第一浮点格式的值。第一组操作可以包括将部分和值存储在寄存器中的和中,寄存器中的和被配置为存储具有第三浮点格式的值。硬件电路可以包括矩阵计算单元外部的外部求和电路。第一组操作可以包括接收以增强的精度处理原始激活值的请求;生成输入值的激活增强精度值,激活增强精度值是激活输入值与原始激活值之间的差的度量;并且生成权重输入值的权重增强精度值,权重增强精度值是权重输入值与原始权重值之间的差的度量。将激活输入值与权重输入值相乘以生成乘积值可以包括以下动作:由矩阵计算单元的乘法电路将输入值与权重输入值相乘、将输入值与权重增强精度值相乘、将权重输入值与激活增强精度值相乘以及将激活增强精度值与权重增强精度值相乘。外部求和电路可以被配置为执行包括对乘法的乘积进行组合以生成乘积值的第二组操作。
此方面的其他实施例包括记录在一个或多个计算机存储设备上的均被配置为执行第一组操作和第二组操作的动作的对应的计算机系统、装置和计算机程序。一个或多个计算机的系统可以被配置为借助于安装在系统上的软件、固件、硬件或其任何组合来执行特定操作或动作,所述系统在操作中可以使系统执行动作。一个或多个计算机程序可以被配置为借助于包括指令执行特定操作或动作,所述指令在被数据处理装置执行时,使装置执行动作。
可以实现本说明书中描述的主题的特定实施例,以实现以下优点中的一个或多个。硬件电路可以执行具有减少的溢出和/或精度丢失的矩阵乘法。硬件电路可以执行具有超过由硬件电路中输入寄存器的浮点格式所提供的精度的增强的精度的矩阵乘法。硬件电路可以对值使用IEEE单精度浮点格式存储的输入矩阵执行具有减少的溢出的矩阵乘法,即使硬件电路以具有16位的浮点格式存储输入矩阵值。
在附图和以下描述中阐述了本说明书的主题的一个或多个实施例的细节。根据说明书、附图和权利要求,主题的其他特征、方面和优点将变得显而易见。
附图说明
图1A示出了用于训练神经网络的示例专用硬件芯片的高级别图。
图1B示出了计算核心的高级别示例。
图1C示出了示例神经网络处理系统。
图2图示出包括矩阵乘法单元的示例架构。矩阵乘法单元是二维脉动阵列。
图3图示出脉动阵列内的多单体的示例架构。
图4示出了向量计算单元中的单体的示例架构。
图5示出了向量计算单元的示例架构。
图6示出了浮点值的示例格式。
图7示出了矩阵计算单体的乘法电路的示例架构。
图8是使用矩阵计算单元执行矩阵乘法的示例过程的流程图。
图9是用于执行激活输入值乘以权重输入值的示例过程的流程图。
各附图中的附图标记和标号指示相同的元素。
具体实施方式
具有多个层的神经网络可被用于执行计算。例如,给定输入,则神经网络可以计算用于该输入的推断。神经网络通过经由神经网络中的每一层处理输入来计算此推断。每一层接收输入并根据该层的权重的集合处理该输入以生成输出。
因此,为了根据所接收的输入计算推断,神经网络接收输入并通过神经网络层中的每一层处理该输入以生成推断,其中来自一个神经网络层的输出被提供作为对下一个神经网络层的输入。对神经网络层的数据输入(例如,对神经网络的输入或到神经网络层的按顺序在层下面的层的输出)可以被称为对层的激活输入。
在一些实现中,神经网络中的层按顺序布置。在一些其他实现中,层被布置为有向图。也就是说,任何特定层可以接收多个输入、多个输出或两者。神经网络中的层还可以被布置,使得层的输出可以被发送回到先前层作为输入。
还可以对神经网络进行训练以确定神经网络中的层的权重的经训练的值。通常,在训练期间,使用神经网络对输入进行处理并且基于由神经网络针对这些输入生成的输出来调整权重。
此说明书描述了执行神经网络计算的专用硬件电路,所述神经网络计算即推理或训练操作,包括由神经网络层执行的矩阵乘法运算。
图1A示出了用于训练神经网络的示例专用硬件芯片的高级别图。如图所示,单个专用硬件芯片包括两个独立处理器(102a、102b)。每一个处理器(102a、102b)包含两个不同的核心:(1)计算核心,即超长指令字(VLIW)机器(103a、103b)和(2)稀疏计算核心,即嵌入层加速器(105a、105b)。
每一个计算核心(103a、103b)针对密集线性代数问题进行了优化。每一个计算核心执行它自己的超长指令字指令的流。
示例稀疏计算核心(105a、105b)将超稀疏的、高维数据映射到密集的、低维数据中,使得其余层处理被密集打包的输入数据。例如,稀疏计算核心可以执行正在被训练的神经网络中的任何嵌入层的计算。
为了执行这种稀疏到密集的映射,稀疏计算核心使用预先构建的查找表,即嵌入表。例如,在存在作为用户输入的一系列查询词时,每一个查询词被转换为哈希标识符或被独热编码的向量。使用标识符作为表索引,嵌入表返回对应的密集向量,所述密集向量可以是对下一层的输入激活向量。稀疏计算核心还可以跨搜索查询词执行约简操作以创建一个密集激活向量。由于嵌入表可能很大并且不适合于专用硬件芯片中的一个的有限容量高带宽存储器,稀疏计算核心执行有效的稀疏的、分布式查找。关于稀疏计算核心功能的更多细节可以在于2016年2月5日提交的名称为MATRIX PROCESSING APPARATUS的美国专利申请No.15/016,486中找到。
图1B示出了计算核心(101)的高级别示例。计算核心可以是并行地控制若干计算单元的机器,即VLIW机器。每一个计算核心(101)包含:标量存储器(104)、向量存储器(108)、标量处理器(107)、向量寄存器(106)和扩展向量单元(即矩阵乘法单元(MXU)(113)、转置单元(XU)(114)以及约简和置换单元(reduction and permutation unit,RPU)(116))。
示例标量处理器执行VLIW指令获取/执行循环并控制计算核心。在获取和解码指令束之后,标量处理器本身仅使用多个、多位寄存器(即标量处理器(107)和标量存储器(104)的32个32位寄存器)执行存在于束的标量槽中的指令。标量指令集合包括正常的算术运算,例如如在地址计算、加载/存储指令和分支指令中所使用的。剩余的指令槽编码用于向量处理器或其他扩展向量单元(113、114、116)的指令。经解码的向量指令被转发到向量处理器。
标量处理器(107)可以将多达三个标量寄存器的值连同向量指令一起转发到其他处理器和单元以执行操作。标量处理器还可以直接从向量处理器检索计算结果。然而,在一些实现中,示例芯片具有从向量处理器到标量处理器的低带宽通信路径。
向量指令调度器位于标量处理器和向量处理器之间。此调度器从非标量VLIW槽接收经解码的指令并将这些指令广播到向量处理器。参考图1C对向量处理器进行详细描述。
示例标量处理器(107)访问小的、快速的私有标量存储器(104),所述标量存储器(104)由更大但更慢的高带宽存储器(HBM)(110)备份。类似地,示例标量处理器访问小的、快速的私有向量存储器(108),所述向量存储器(108)也由HBM(110)备份。字-粒度访问发生在标量处理器(107)与标量存储器(104)或向量处理器与向量存储器(108)之间。向量处理器和向量存储器之间的加载和存储的粒度是128个32位字的向量。直接存储器访问在标量存储器(104)与HBM(110)以及向量存储器(108)与HBM(110)之间发生。在一些实现中,从HBM(110)向处理器(107)的存储器传送仅可以通过标量或向量存储器来完成。另外,标量存储器和向量存储器之间可能不存在直接的存储器传送。
指令可以指定扩展向量单元操作。存在二维,即128乘8个向量单元,每一个向量单元可以将一个寄存器值连同每一个被执行的向量单元指令一起作为输入操作数发送到扩展向量单元。每一个扩展向量单元取得输入操作数、执行对应的操作并将结果返回到向量处理器(306)。下面将参考图4对扩展向量单元进行描述。
图1C示出了用于执行神经网络计算的示例专用集成电路100。如图所示,芯片包含两个计算核心(103a、103b)和两个稀疏计算核心(152a、152b)。
芯片具有共享区域,所述共享区域包括到主机计算机的主机接口(150)、沿底部的高带宽存储器(156a-156d)的四个堆栈以及将接口和存储器以及来自其他芯片的数据连接在一起的芯片间互连(148)。高带宽存储器(156a-b、156c-d)的两个堆栈与每一个计算核心(103a、103b)相关联。
芯片将数据存储在高带宽存储器(156c-d)中,将数据读入和读出向量存储器(108)并处理数据。计算核心(103b)本身包括作为被分成两个维度的片上S-RAM的向量存储器(108)。向量存储器具有地址空间,在所述地址空间中地址保持浮点数,即每一个都是32位的128个数。计算核心(103b)还包括计算值的计算单元和控制计算单元的标量单元。
向量处理器由二维阵列,即128×8,的向量处理单元组成,所述向量处理单元全部以单指令、多数据(SIMD)方式执行相同的指令。向量处理器具有通道和子通道,即128个通道和8个子通道。在通道内,向量单元通过加载和存储指令彼此通信。每一个向量单元一次可以访问一个4字节值。不属于相同通道的向量单元不能直接通信。这些向量单元必须使用下面描述的约简/置换单元。
计算单元在可被用于浮点运算和整数运算的向量处理单元(106)中包括向量寄存器,即32个向量寄存器。计算单元包括两个算术逻辑单元(ALU)(126c-d)以执行计算。一个ALU(126c)执行浮点加法并且另一个ALU(126d)执行浮点乘法。两个ALU(126c-d)都可以执行各种其他操作,诸如移位、掩码和比较。例如,计算核心(103b)可能想要将向量寄存器V1和第二向量寄存器V2相加并且将结果放入第三向量寄存器V3中。为了计算加法,计算核心(103b)在一个时钟周期中执行多次,即1024次,操作。使用这些寄存器作为操作数,向量单元中的每一个可以在每个时钟周期同时执行两个ALU指令以及一个加载和一个存储指令。用于加载或存储指令的基地址可以在标量处理器中被计算并被转发到向量处理器。每一个子通道中的向量单元中的每一个可以使用诸如跨步和被特定索引的地址寄存器的各种方法来计算所述向量单元中的每一个的自己的偏移地址。
计算单元还包含执行诸如平方根和倒数的操作的扩展一元流水线(EUP)(116)。由于这些操作一次接收一个操作数,所以计算核心(103b)花费三个时钟周期来执行这些操作。由于EUP处理花费多于一个时钟周期,所以存在先进先出数据存储以存储结果。在操作完成后,结果被存储在FIFO中。计算核心可以在稍后使用单独的指令以将数据从FIFO中拉出并将所述数据放入向量寄存器中。随机数发生器(120)允许计算核心(103b)每个周期生成随机数,即每个周期128个随机数。
如上所述,每一个处理器具有三个扩展向量单元:执行矩阵乘法运算的矩阵乘法单元(113);包括执行矩阵(即128乘128矩阵)的转置操作的转置单元(XU)(114)的交叉通道单元(XLU)以及约简和置换单元(在图1C中被图示出为单独的单元,约简单元115和置换单元116)。
矩阵乘法单元在两个矩阵之间执行矩阵乘法。由于计算核心需要加载作为将要被相乘的矩阵的数字的集合,所以矩阵乘法单元(113)接收数据。如图所示,数据来自向量寄存器(106)。每一个向量寄存器包含128×8个数字,即32位数字。然而,在数据被发送到矩阵乘法单元(113)时,可能发生浮点转换以将数字改变为较小的比特大小,即从32比特改变为16比特。串行器(130)确保数字何时被从向量寄存器中读出,二维阵列,即128乘8矩阵,被读取为在接下来的八个时钟周期的每一个中被发送到矩阵乘法单元(113)的128个数字的集合。在矩阵乘法完成其计算之后,结果被并行化(132a、132b),这意指结果矩阵被保持几个时钟周期。例如,对于128×8阵列,128个数字在8个时钟周期中的每一个中被保持然后被推送到FIFO(转置结果FIFO(TRF)134或乘法结果FIFO(MRF)136)使得128×8个数字的二维阵列可以在一个时钟周期中被抓取并且被存储在向量寄存器(106)中。
在周期(即128个周期)的时间段中,权重被移位到矩阵乘法单元(113)中作为用于与矩阵相乘的数。一旦矩阵和权重被加载,计算核心(103b)就可以向矩阵乘法单元(113)发送数字的集合,即128×8个数。集合的每一行可以被乘以矩阵以产生多个结果,即每个时钟周期128个结果。在计算核心执行矩阵乘法运算时,计算核心也会将后台中的新的数字的集合移位为计算核心将相乘的下一个矩阵,使得在前一个矩阵的计算过程完成时下一个矩阵可用。矩阵乘法单元(113)可以处理权重输入和激活输入并且向向量寄存器106提供输出的向量。向量处理单元可以处理输出的向量并且将经处理的输出的向量存储到向量存储器。例如,向量处理单元可以将非线性函数应用于矩阵乘法单元的输出以生成激活值。在一些实现中,向量计算单元114生成归一化值、合并值或两者。经处理的输出的向量可以被用作到矩阵乘法单元112的激活输入,例如,在神经网络中的后续层中使用。
转置单元转置矩阵。转置单元(114)接收数字并且对数字进行转置,使得使用另一维度中的数字对通道上的数字进行转置。在一些实现中,向量处理器包括128×8个向量单元。因此,为了转置128×128矩阵,全矩阵转置需要16个单独的转置指令。一旦转置完成,经转置的矩阵将是可用的。然而,需要用于将经转置的矩阵移动到向量寄存器文件中的显式指令。
约简/置换单元(或单元115、116)通过支持诸如置换、通道旋转、旋转置换、通道约简、经置换的通道约简和分段的经置换的通道约简的各种操作来解决跨通道通信的问题。如图所示,这些计算是分开的,然而计算核心可以使用一个计算或另一个计算或被链接到另一个计算的一个计算。约简单元(115)约简每行数字并将数字馈送到置换单元(116)中。置换单元改变不同通道之间的数据。转置单元、约简单元、置换单元和矩阵乘法单元均花费一个以上的时钟周期来完成。因此,每一个单元都具有一个与其相关联的FIFO,使得计算的结果可以被推送到FIFO并且稍后可以执行单独的指令将数据从FIFO中拉出并推入向量寄存器。通过使用FIFO,计算核心不需要在长时间的操作持续时间中保留多个向量寄存器。如图所示,单元中的每一个从向量寄存器(106)取得数据。
计算核心使用标量单元控制计算单元。标量单元具有两个主要功能:(1)执行循环计数和寻址;(2)生成直接存储器地址(DMA)请求,使得DMA控制器将后台中的数据移动到高带宽存储器(156c-d)与向量存储器(108)之间并且然后移动到芯片间连接(148)到示例系统中的其他芯片。标量单元包含指令存储器(104)、指令解码和发布(102)、包含标量寄存器(即32位)的标量处理单元(107)、标量存储器(104)和用于每个时钟周期执行两次操作的两个ALU(126a、b)。标量单元可以将操作数和立即值馈送到向量运算。每一个指令可以从指令解码和发布(102)作为包含在向量寄存器(106)上执行的指令的指令束被发送。每一个指令束是超长指令字(VLIW),其中每一个指令是被分为多个指令字段的多个位宽。
图2图示出包括矩阵乘法单元(MXU)201a和201b的示例架构200。每一个MXU都是一个二维脉动阵列。阵列被有线连接以执行矩阵乘法运算。MXU将128个元素的向量与预加载的128x128矩阵相乘,其中每个时钟周期的一个乘法具有恒定的吞吐量。
每一个MXU可以具有128行和128列。MXU可以被分为被称为瓦片(tile)的相同块。例如,MXU可以被分为32个瓦片,所述瓦片中的每一个包含32行乘16列。每一个瓦片可以进一步被划分为乘加子单元单体(cell)。每一个单体取得一个向量数据输入操作数,将操作数与存储的权重相乘以获取结果并且将结果与部分和相加以产生新的部分和。在一些实现中,子单元单体可以被分组为更大的多单体,即2×2阵列的乘加子单元单体或被称为sedecim单体的4×4阵列的乘加子单元单体。数据可以每个时钟周期在一个多单体处跨脉动阵列移动,而不是将输入数据从一个乘加子单元单体以每个时钟周期一个的速率移动到下一个乘加子单元单体。
在开始一系列向量矩阵乘法之前,需要将矩阵预加载到MXU中。此矩阵的数据称为“权重”数据。权重矩阵由被连接到MXU的总线通过源总线传送到MXU并且被移位到权重移位寄存器中。然后权重移位寄存器中的内容被加载到权重矩阵寄存器中,使得矩阵乘法可以开始。
如图2所示,每一个MXU(例如113a和113b)被连接到三条总线,用于非转置权重的第一源总线(230a、240b)、用于转置权重的第二源总线(220a、220b)和用于要与存储在MXU中的矩阵相乘的向量数据的左手侧总线(210a、210b)。MXU通过附接到MXU边缘的导线连接到总线。每一个转置单元(XU)(例如114a和114b)也被连接到第一源总线和第二源总线。
第一源总线和第二源总线是包含从向量处理单元发送的、要被XU或MXU消耗的数据的多用总线。数据处理发生在向量处理数据路径中,所述向量处理数据路径包括向量寄存器206、串行化处理单元202和选择单元204。存在向量处理单元可以在总线上发送权重的若干种方法。权重可以被正常、“hi”或“low”地发送。每个通道的八个32位浮点数(每个子通道的一个32位浮点数)被四舍五入到bfloats,16位浮点数。这些值被打包为四对并且在8个周期的过程内每隔一个周期被发送到MXU。正常、“hi”和“low”之间的差异是向量处理单元如何进行浮点32到bfloat转换。权重可以被打包,意指每个通道的八个32位值中的每一个包含被打包的一对bfloats。在八个连续周期中每个周期使用源总线,将十六个值而不是八个值发送到MXU。在奇数周期期间,每一个子通道的低16位被发送到MXU,并且在偶数周期期间,每一个子通道的高16位被发送到MXU。附加地或替代地,权重可以按字节发送。每个32位操作数包含被打包的四个8位有符号2补码整数的集合。每个字节均被转换为修改的有符号量值。这些值在连续八个周期中通过源总线被发送到MXU。
权重可以使用第一源总线或第二源总线作为非转置指令或转置指令被发送并且被移位到权重移位寄存器中。如下所述,在被使用加载操作触发时,权重移位寄存器的内容被加载到权重矩阵中。从权重移位寄存器到权重矩阵寄存器的加载路径也是使用字节模式数据完成从修改的有符号量到bfloat的转换的过程。加载控制总线指示是否要进行此转换。
根据正在执行的指令,来自源总线的32位值可能包含被打包的一对16位浮点值,其中位[15:0]中的值表示(在时间上)较早的值或者是被打包的以修改的由符号值格式的四个8位整数的集合,其中位[7:0]中的值表示(在时间上)最早的值和依次跟随的其他值。在MXU从总线接收数据时,数据值在MXU上均匀分布,其中值0在左侧并且值127在右侧。
LHS数据总线以例如是bfloat的特定格式传送要与存储在被连接的MXU中的矩阵相乘的128个16位浮点数。LHS数据总线的数据来自向量处理单元并通过例如是114a和114b的转置单元传递。在LHS输入到达MXU时,这些值在MXU上均匀分布,其中值0在左侧并且值127在右侧。
矩阵乘法的结果均匀地分布在MXU上并且从MXU被发送到矩阵结果FIFO(MRF),例如136a和136b。来自XU的结果被发送到对应的转置结果FIFO(TRF),例如134a和134b。
图3图示出矩阵乘法单元内的多单体的示例架构。如上所述,矩阵乘法单元是二维脉动阵列。该阵列包括可以被分组为多单体的多个乘加子单元。在一些实现中,该脉动阵列的第一维与单体的列相对应并且该脉动阵列的第二维与单体的行相对应。该脉动阵列可以具有比列多的行、比行多的列或者相等数量的列和行。此说明书描述了针对列的或垂直地某些处理。然而针对行或水平地,不同的设计可以执行。
在所图示出的示例中,左手侧的数据寄存器315a、315b将向量数据输入发送到阵列的行。权重移位链301A和301B将权重输入值发送到阵列的列并且权重移位链302a和302b将权重输入值发送到阵列的行。移位链是被有线连接的路径,沿着该路径的值可以例如从源总线被传递并且被传递到矩阵乘法单元内的多个寄存器中的每一个。
每一个权重移位寄存器305被设计为沿着权重移位寄存器305的链移位来自源总线的权重内容值。在全部数据被移位进入之后,并行复制操作确保全部数据从权重移位寄存器305被复制到对应的权重矩阵寄存器325。在数据在权重矩阵寄存器325中时,数据被用于任意数量周期的乘法。在此时间期间,更多权重可以(并且通常)在后台中被移位到权重寄存器305中以准备下一个乘法集合。
左手侧数据寄存器315a、315b可以接收向量数据输入。每一个左手侧数据寄存器在一个时钟周期中每一个时钟周期保持一个LHS数据项。由多个单体接收的每一个向量数据输入可以在多单体的诸如左手侧数据寄存器315a、315b的对应的左手侧寄存器中自由流动。左手侧数据寄存器存储向量数据输入,取决于阵列内的多单体的位置,所述向量数据输入可以由向量寄存器或位于给定的多单体的左侧的相邻多单体提供。例如,如果多单体300位于矩阵乘法单元的脉动阵列内的最左侧位置,则向量数据输入由向量寄存器提供。向量寄存器可以向多单体300提供多个不同的向量数据输入,其中每一个被接收的向量数据输入然后可以由左手侧数据寄存器315中的不同的一个存储。每一个行在每一个时钟周期接收一个值,不管被分组为多单体的行的数量。
每一个左手侧寄存器可以被耦合到沿着多单体阵列的第一维的单体。左手侧寄存器到该单体的连接由图3中的虚线指示。例如,多单体中的左手侧数据寄存器315a(左侧数据寄存器)被耦合到第一行的单体350a和350c。类似地,多单体中的左手侧数据寄存器315b(第二左手侧寄存器)被耦合到第二行的单体350b和350d。每一个左手侧寄存器315将存储的向量数据传送到左手侧寄存器所耦合的单体350。因此,对于沿第一维度(例如,沿着给定的行或沿给定的列)延伸的给定数量的单体,向量数据输入可以被传递到多单体中的全部单体而不仅单个单体,从而使激活输入在单体阵列中快速扩散,提高多单体的操作效率。
多个向量数据输入也可以被发送到相邻的左手侧寄存器,使得多个向量数据输入可以在阵列的另一个多单体处使用。此过程允许移位向量输入以在阵列的另一特定多单体中使用。
多单体300中的每一个单体350包含存储的权重值。在开始矩阵乘法过程之前,通过将权重移位到脉动阵列的单体中来加载权重。提供专用链和权重移位寄存器用于权重移位,使得新权重可以与先前矩阵乘法处理的执行同时被移位。权重输入可以以降低整个矩阵乘法运算处理的延迟的方式被加载到多单体中。
如上所述,权重移位链301、302可以从源总线接收权重输入。移位链可以将多个对应的权重输入发送到与多单体300相关联的权重寄存器325。
在一些实现中,权重移位寄存器在整个阵列中沿着一个维度(例如,向右)移位向量数据输入,同时在整个阵列中沿着一个或两个维度(例如,向右或向下)移位权重输入。例如,在一个时钟周期内,多单体300处的多个激活输入的每一个向量数据输入可以移位到同一行中的下一个多单体中的对应的左手侧数据寄存器。每个时钟周期,水平数据(左手侧数据)和垂直数据(部分和)均每个时钟周期移动一个多单体。权重仅在被系统指示时移位并且取决于实现和所执行的指令可以移位1、2或4行(或列)。
多路复用器330从第一移位链301或第二移位链302的权重移位寄存器305中选择权重并且将所选择的输入转发到单个行中、进入权重矩阵寄存器325。尽管多路复用器330被示出为在单体350边界线的外部,在一些实现中,多路复用器330存在于单体350内。
在时钟周期中,每一个多单体可以处理多个给定的权重输入和多个给定的激活输入以生成多个累加的输出。通常,处理包括用于将激活输入与存储的权重相乘的乘法运算。累加输出也可以沿着与给定的权重输入相同的维度向下被传递到相邻的多单体。在一些实现中,在给定时钟周期期间,权重被移位多于一个多单体以从一个卷积计算转换到另一个。
累加的输出可以沿着与权重输入相同的列,例如朝向阵列中列的底部,被传递。在一些实现中,部分和寄存器310a、311A将部分和值从先前多单体传递到多单体中。阵列可以包括存储来自多单体的每一个列的累加输出的部分和寄存器310b、311b。对于多单体的每一个列,由列中的子单元单体生成的乘积与来自上述多单体的传入部分和组合,然后作为下一个部分和被继续发送。对于某些多单体,例如脉动阵列的底部列中的多单体,累加输出可以包括可以被传送到向量计算单元的最终累加值。在一些实现中,最终累加值直接从阵列的底部多单体传送到向量计算单元,而在其他实现中,最终累加值在被发送到向量计算单元之前,首先被存储在存储器中或者由不同的组件处理。
在一些实现中,在每一个时钟周期上,每一个单体将给定的权重输入与左手侧数据输入相乘以生成乘积值。然后,单体可以将乘积值与从另一个单体接收的部分和值组合以生成更新的部分和值。然后,单体可以将部分和值传输到矩阵计算单元中的另一个单体。
图4示出了脉动阵列内的单体的示例架构400。
单体可以包括存储激活输入的激活寄存器406。取决于单体在脉动阵列内的位置,激活寄存器可以从左相邻单体(即位于给定单体左侧的相邻单体)或者从统一的缓冲器接收激活输入。单体可以包括存储权重输入的权重寄存器402。取决于单体在脉动阵列内的位置,权重输入可以从顶部相邻单体或从权重获取器接口被传送。单体还可以包括寄存器404中的和。寄存器404中的和可以存储来自顶部相邻单体的累加值。激活寄存器406和权重寄存器402可以是被配置为存储诸如具有特定格式的浮点值的特定大小的值的寄存器。
乘法电路408可以被用于将来自权重寄存器402的权重输入与来自激活寄存器406的激活输入相乘。乘法电路408可将乘积输出到求和电路410。在一些实现中,乘法电路408的输入和输出值可以具有不同的大小和/或格式。
求和电路410可以将来自寄存器404中的和的乘积和累加值求和以生成新的累加值。然后,求和电路410可以将新的累加值发送到位于底部相邻单体中的寄存器中的另一个和。新的累加值可以被用作底部相邻单体中的求和的操作数。求和电路410还可以接受来自寄存器404中的和的值并且将来自寄存器404中的和的值发送到底部相邻单体,而不将来自寄存器404中的和的值与来自乘法电路408的乘积相加。在一些实现中,求和电路410的输入值可以具有不同的大小和/或格式。在一些实施方案中,求和电路410的一些输入和输出值可以具有不同的大小和/或格式。
单体还可以将权重输入和激活输入移位到相邻单体以便处理。例如,权重路径寄存器412可以将权重输入发送到底部相邻小区中的另一个权重寄存器。激活寄存器406可以将激活输入发送到右相邻单体中的另一个激活寄存器。因此,权重输入和激活输入两者均可以在随后的时钟周期时被阵列中的其他单体重用。
在一些实现中,单体还包括控制寄存器。控制寄存器可以存储确定单体应该将权重输入还是激活输入移位到相邻单体的控制信号。在一些实现中,移位权重输入或激活输入花费一个或多个时钟周期。控制信号还可以确定激活输入还是权重输入被传送到乘法电路408,或者可以确定乘法电路408是否对激活输入和权重输入进行操作。控制信号也可以例如使用导线被传递到一个或多个相邻单体。
在一些实现中,权重被预移位到权重路径寄存器412中。权重路径寄存器412可以例如从顶部相邻单体接收权重输入并且基于控制信号将权重输入传送到权重寄存器402。权重寄存器402可以静态地存储权重输入,使得在激活输入在多个时钟周期内例如通过激活寄存器406被传送到单体时,权重输入保持在单体内并且不被传送到相邻单体。因此,权重输入可以例如使用乘法电路408被应用于多个激活输入并且相应的累加值可以被传送到相邻单体。
图5示出了向量计算单元502的示例架构500。向量计算单元502可以从矩阵计算单元(例如参考图3所描述的矩阵计算单元312)接收累加值的向量。
控制信号510可以被传送并且可以调节向量计算单元502如何处理累加值的向量。也就是说,控制信号510可以调节左手数据值是否被池化、左手数据值是否被存储在例如ve中或者可以以其他方式调节激活值的处理。控制信号510还可以指定激活或池化功能以及用于处理激活值或池化值的其他参数,例如步长值。
向量计算单元502可以发送值,例如左手数据值或池化值。在一些实现中,池化电路508接收激活值或池化值并将激活值或池化值存储在统一的缓冲器中。
图6示出了浮点值的示例格式600。由矩阵计算单元处理的值中的每一个(例如由矩阵计算单元的单体的寄存器存储的值)可以被存储为具有特定格式的浮点值。
格式600的特征在于符号位601、被称为有效数(significand)602的一组位以及被称为指数603的另一组位。
符号位601指示使用格式600存储的值是正还是负。有效数602包括使用格式600存储的值的一个或多个有效数字。因此,格式600的有效数602的大小,即位数,表示使用格式600存储的任何值的最大可能精度。指数603表示用于将存储的值转换为标准化形式的范围基数的幂。因此,格式600的指数603的大小表示使用格式600存储的任何值的最大可能动态范围。
在一些情况下,系统用于解释浮点数的标准化形式包含一个或多个恒定值。例如,标准化形式可以始终是形式1.XXXX*2^XXXX,其中第一个值的整数部分始终是恒定的,例如等于1。在一些这样的情况下,有效数602可以仅包括标准化值的非恒定位并且不包括恒定位。在这些情况下,标准化形式的恒定且因此不出现在有效数602中的位被称为“隐藏位”。解释具有隐藏位的二进制浮点值的计算机系统将根据作为该值的格式600的基础的标准化形式把隐藏位添加到有效数602。
计算机系统将二进制数存储为浮点值的方式取决于系统用于解释浮点数的标准化形式以及有效数602的大小和所使用的特定浮点格式600的指数603。例如,浮点格式600可以包括符号位601、4位有效数602和3位指数603,并且计算机系统可以通过假定该数字具有标准化形式X.XXX*2^XXX来解释具有此格式600的二进制数,其中X是单个二进制数,即“0”或“1”。此外,计算机系统可以假定标准化形式的第一个值中的小数点之前的二进制值是始终是一个的并且不出现在有效数602中的隐藏位。因此,这样的计算机系统可以使用具有为“0”的符号位601(因为二进制数为正)、为“001”的指数603和为“1111”的有效数602来解释二进制数+11.111。
如果计算机系统不能正确存储使用格式的数字,则尝试存储该数字可能会造成溢出并且导致不可预测的或不期望的行为。上述说明计算机系统的示例可以通过对数字进行四舍五入来存储其数字的数量超过系统采用的格式600的有效数602中所允许的最大精度的二进制数而没有溢出。即使这样的四舍五入导致降低的精度,但是它不会导致溢出。
另一方面,如果二进制数的动态范围超过格式600的指数603中允许的最大范围,则计算机系统不能对动态范围进行四舍五入。继续上面给出的示例,计算机系统不能存储和解释数字111111111.012,因为该数字的标准化形式具有10002的动态范围并且此动态范围不能使用3位的示例指数宽度在格式600的指数603中所允许的值的范围内被表示。
作为另一个示例,系统可以使用具有8位指数和7位有效数的bfloat格式。为了减少溢出的可能性,如果计算机系统中的操作以任何方式将具有第一格式的第一浮点值变换为具有第二格式的第二浮点值,则重要的是,第二格式的动态范围大于或等于第一格式的动态范围。这包括系统将第一浮点值转换为第二浮点值的情况以及系统对第一浮点值应用操作以生成第二浮点值的情况。例如,如果计算机系统将具有第一格式的两个值相乘以生成具有第二格式的结果值,则重要的是,第二格式的动态范围大于或等于第一格式的动态范围以减少溢出的可能性。如果被相乘的两个值具有不同的格式,则重要的是,第二格式的动态范围大于或等于具有较大动态范围的格式的动态范围以减少溢出的可能性。
浮点格式600的示例包括IEEE单精度格式、bfloat格式和扩展的bfloat格式。
IEEE单精度格式是32位格式,所述32位格式包括1位符号位601、8位指数603和23位有效数602。bfloat格式是16位格式,所述16位格式具有1位符号位601、8位指数603和7位有效数602。扩展的bfloat格式是包括20位格式的20位格式,所述20位格式包括1位符号位601、8位指数603和11位有效数602。
重要的是,上面提到的全部三个格式具有相同的指数603大小,因此具有相同的动态范围。然而,单精度格式比扩展的bfloat格式允许更多精度并且扩展的bfloat格式比bfloat格式允许更多精度。为了减少溢出的可能性但提高精度,矩阵计算单元可以将激活输入和权重输入值存储在保存bfloat格式的值的寄存器中、将输入值的乘积保存在保存扩展的bfloat格式的值的寄存器中并且将乘积值与部分和值的和保存在保存IEEE单精度格式的值的寄存器中。
图7示出了用于矩阵计算单体的乘法电路的示例架构700。图7中描绘的矩阵计算单体将两个输入值(例如激活输入值701和权重输入值702)相乘以生成结果值,例如乘积值705。
架构700包括乘法器703和加法器704,所述乘法器703将两个输入值的有效数和符号位相乘以生成结果值的有效数和符号位,所述加法器704将两个输入值的指数相加以生成结果值的指数。结果值的有效数和符号位以及指数的组合生成结果值。
图8是用于使用矩阵计算单元执行矩阵乘法的示例过程800的流程图。过程800可以由矩阵计算单元(例如图2的矩阵计算单元113)执行以根据矩阵计算单元的架构执行矩阵乘法。
矩阵计算单元可以并行地多次执行过程800以计算作为向量和矩阵(例如包括多个激活输入值的输入向量和包括多个激活权重值的权重矩阵)的乘积的向量输出。
矩阵计算单元获取均具有第一浮点格式的激活输入值和权重输入值(802)。下面参考图9对获取激活输入和权重输入值进行更详细地描述。
矩阵计算单元使用矩阵计算单元的乘法电路将激活输入值与权重输入值相乘以生成具有第二浮点格式的乘积值(804)。第二浮点格式具有比第一浮点格式更高的精度并且具有至少与第一浮点格式的动态范围一样大的动态范围。通过以具有比那些输入值的格式更高精度的格式存储将激活输入值与权重输入值相乘的结果,矩阵计算单元降低了存储乘法结果中丢失精度的可能性。通过以具有与那些输入值的格式的动态范围至少一样大的动态范围的格式存储将激活输入值与权重输入值相乘的结果,矩阵计算单元也降低了在存储乘法结果中溢出的可能性。
下面参考图8至图9对将激活输入值与权重输入值相乘进行更详细地描述。
在一些实现中,第一浮点格式是具有1位符号位、8位指数和7位有效数的16位格式,所述7位有效数可选地不包括相应的二进制数的标准化形式中的隐藏位,并且第二浮点格式是具有1位符号位、8位指数和11位有效数的20位格式,所述11位有效数可选地不包括相应的二进制数的标准化形式中的隐藏位。
矩阵计算单元以第三浮点格式获取部分和值(806)。矩阵计算单元可以从矩阵计算单元中的单体获取部分和值。
第三浮点格式具有比第一浮点格式更高的精度并且具有至少与第一浮点格式的动态范围一样大的动态范围。因此,部分和值具有允许比输入值的格式更高精度的格式以及至少与输入值的格式的动态范围一样大的动态范围。
在一些实现中,第三浮点格式具有比第二浮点格式更高的精度。换句话说,三个浮点格式可以按照它们的精度从具有最高精度的格式开始按以下顺序排序:第三浮点格式,第二浮点格式和第一浮点格式。在一些实现中,第三浮点格式具有至少与第二浮点格式的动态范围一样大的动态范围。
在一些实现中,第三浮点格式是IEEE标准754单精度格式或具有1位符号位、8位指数和23位有效数的其他32位格式,所述23位有效数不包括相应的二进制数的标准化形式中的隐藏位。
矩阵计算单元使用矩阵计算单元的求和电路组合部分和值与乘积值以生成具有第三格式的更新的部分和值(808)。通过以与部分和值的格式相同的格式存储乘积值与部分和值的组合结果,矩阵计算单元降低了溢出或丢失精度的可能性。在乘积值的格式(即第二格式)比更新的部分和值的格式(即第三格式)具有更低的精度的实现中尤其如此。在这样的实现中,矩阵计算单元通过以具有比乘积值的格式更高精度的格式存储组合的结果来减少丢失精度的可能性。类似地,在第三格式具有至少与第二格式的动态范围一样大的动态范围的实现中,矩阵计算单元通过以具有比乘积值的格式更大的动态范围的格式存储组合的结果来降低溢出的可能性。
在一些实现中,矩阵计算单元将更新的部分和传输到矩阵计算单元的另一个组件,例如矩阵计算单元中的单体或矩阵计算单元中的多单体结构。
图9是用于执行将激活输入值与权重输入值相乘的示例过程900的流程图。为方便起见,过程900将被描述为由位于一个或多个位置处的一个或多个计算机的系统执行。例如,根据本说明书适当编程的神经网络处理系统(例如图1的神经网络处理系统100)可以执行过程900。
神经网络系统可以多次并行地执行过程900以计算包括向量和矩阵(例如包括多个激活输入值的输入向量和包括多个激活权重值的权重矩阵)的乘积的较高精度部分的向量输出以及包括该向量和该矩阵的乘积的较低精度部分的向量输出。
系统获取原始激活值和原始权重值(902)。系统可以从系统的神经网络实现引擎(例如,图1的神经网络实现引擎150)获取原始值。原始值可以是任何格式的,诸如IEEE单精度浮点格式。
系统将原始激活值转换为第一格式以生成激活输入值(904)并将原始权重值转换为第一格式以生成权重输入值(906)。系统可以将由原始激活值表示的数字存储为具有新格式的新值。
系统确定它是否已经接收到用于将原始激活值与具有增强的精度的激活输入值相乘的请求(908)。系统可以从系统的终端用户和/或由系统的神经网络实现引擎(例如图1的神经网络实现引擎150)接收此增强的精度请求。请求指示系统必须存储将原始激活值与具有减少的精度丢失的激活输入值相乘的结果。
在一些实现中,系统通过软件指令(即VLIW指令束)接收增强的精度请求。这些指令束可以包括矩阵乘法指令,其具有被用于表达各种选项的多个不同的可能操作码,诸如增强的精度矩阵乘法的组成部分。如果系统确定它没有收到增强的精度请求,则系统使用实现系统的硬件电路的矩阵计算单元将激活输入值与原始激活值相乘为单独的值以生成具有第二格式的乘积值(910)。
否则,如果系统确定它已经接收到增强的精度请求,则系统生成作为原始激活值与激活输入值之间的差的激活增强精度值(912)并且生成作为原始权重值与权重输入值之间的差的权重增强精度值(914)。系统通过从原始激活值中减去激活输入值来生成激活输入值与原始输入值之间的差并且通过从原始权重值中减去权重输入值来生成权重输入值与原始权重值之间的差。系统可以使用矩阵计算单元外部的适当电路来完成两个值的减法,诸如使用矩阵计算单元外部的求和电路通过将第一值加到第二值的负值上。激活增强精度值和权重增强精度值均是第一浮点格式的值。
系统使用矩阵计算单元执行激活输入值、权重输入值、激活增强精度值与权重增强精度值之间的乘法的集合(916)。为了使用矩阵计算单元执行两个值之间的乘法,系统将两个值提供到矩阵计算单元以使矩阵计算单元执行两个值的乘法。
在一些实现中,乘法的集合包括:将激活输入值与权重输入值相乘、将激活输入值与权重增强精度值相乘、将权重输入值与激活增强精度值相乘以及将激活增强精度值与权重增强精度值相乘。
软件指令确定要包括的可能乘法的子集。在一些实现中,乘法的集合仅包括将激活输入值与权重输入值相乘以及将激活增强精度值与权重增强精度值相乘。在系统确定单独的输入值和增强的精度值中的至少一些具有所需的精确级别时,此技术可以被用于减少所需的乘法的数量。
增强的精度值指示在将原始值以具有第一格式的输入值存储时在四舍五入中丢失的原始值的较低精度部分中的至少一些。通过在乘法中使用这些增强的精度值,系统可以执行涉及原始值的较高精度部分的乘法并且因此产生具有更高精度的乘法结果。
系统然后组合四次乘法的乘积以生成(918)包括将原始值相乘的结果的较低精度部分的第一格式的第一值和包括将原始数据相乘的结果的较高部分的第一格式的第二值。在一些实现中,系统使用矩阵计算单元外部的外部求和电路执行求和。
本说明书中描述的主题和功能操作的实施例可以在以下中实现:包括本说明书中公开的结构及其结构等同物或者其中的一个或多个的组合的数字电子电路中、有形体现的计算机软件或固件中、计算机硬件中。本说明书中描述的主题的实施例可以被实现为一个或多个计算机程序,即用于由数据处理装置执行或控制数据处理装置操作的、在有形非暂时性程序载体上编码的计算机程序指令的一个或多个模块。替代地或另外地,程序指令可以在被生成用于编码信息以向合适的接收器装置传输以用于由数据处理装置执行的人工生成的传播信号上编码,所述人工生成的传播信号例如是机器生成的电、光或电磁信号。计算机存储介质可以是机器可读存储设备、机器可读存储基板、随机或串行存取存储器设备或它们中的一个或多个的组合。
术语“数据处理装置”包括用于处理数据的全部类型的装置、设备和机器,包括例如可编程处理器、计算机或多个处理器或计算机。装置可以包括专用逻辑电路,例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)。除了硬件之外,装置还可以包括为所述的计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统或其中的一个或多个的组合的代码。
计算机程序(也可被称为或被描述为程序、软件、软件应用、模块、软件模块、脚本或代码)可以以任何形式的编程语言编写,所述编程语言包括编译或解译语言或者声明性或程序性语言,并且计算机程序可以以任何形式部署,所述形式包括作为独立程序或作为模块、组件、子例程或适合在计算环境中使用的其他单元。计算机程序可以但不必与文件系统中的文件相对应。程序可以被存储在保存其他程序或数据的文件的一部分中、专用于所述程序的单个文件中或者多个文件中或多个协调文件中,所述保存其他程序或数据的文件的一部分例如是存储在标记语言文档中的一个或多个脚本,所述多个协调文件例如是存储一个或多个模块、子程序或代码的各部分的文件。计算机程序可以被部署以在一个计算机上或在位于一个站点上或分布在多个站点上并通过通信网络互连的多个计算机上执行。
本说明书中描述的过程和逻辑流程可以由执行一个或多个计算机程序的一个或多个可编程计算机执行以通过对输入数据进行操作来执行功能并且生成输出。过程和逻辑流程也可以由专用逻辑电路执行,并且装置也可以被实现为专用逻辑电路,例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)。
适合于执行计算机程序的计算机包括,例如可以基于通用或专用微处理器或两者或任何其他种类的中央处理单元。通常,中央处理单元将从只读存储器或随机存取存储器或两者接收指令和数据。计算机的基本元件是用于实行或执行指令的中央处理单元和用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括或被可操作地耦合以从用于存储数据的一个或多个大容量存储设备接收数据或向用于存储数据的一个或多个大容量存储设备传送数据或者两者,所述用于存储数据的一个或多个大容量存储设备例如是磁盘、磁光盘或光盘。然而,计算机不需要这样的设备。此外,计算机可以被嵌入在另一个设备中,例如移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏控制台、全球定位系统(GPS)接收器或便携式存储设备,仅举几例,例如通用串行总线(USB)、闪存驱动器。
适合于存储计算机程序指令和数据的计算机可读介质包括全部形式的非易失性存储器、介质和存储器设备,包括例如半导体存储器设备,例如EPROM、EEPROM和闪存设备;磁盘,例如内部硬盘或可移动磁盘;磁光盘;和CD ROM和DVD-ROM磁盘。处理器和存储器可以由专用逻辑电路补充或并入专用逻辑电路中。
为了发送与用户的交互,本说明书中描述的主题的实施例可以在具有以下的计算机上实现:用于向用户显示信息的显示设备,例如CRT(阴极射线管)、LCD(液晶显示器)监视器;以及用户可以通过其向计算机提供输入的键盘和定点设备,例如鼠标或轨迹球。其他类型的设备也可用于发送与用户的交互;例如,提供给用户的反馈可以是任何形式的感觉反馈,例如视觉反馈、听觉反馈或触觉反馈;并且可以以任何形式接收来自用户的输入,包括听觉、语音或触觉输入。另外,计算机可以通过向由用户使用的设备发送文档和从由用户使用的设备接收文档来与用户交互;例如,通过响应于从web浏览器接收的请求将网页发送到用户的客户端设备上的web浏览器。
本说明书中描述的主题的实施例可以在包括后端组件或包括中间件组件或包括前端组件或者一个或多个这样的后端、中间件或前端组件的任何组合的计算系统中实现,所述后端组件例如作为数据服务器,所述中间件组件例如是应用服务器,所述前端组件例如是具有图形用户界面或用户可通过其与本说明书中描述的主题的实现进行交互的Web浏览器的客户端计算机。系统的组件可以通过任何形式或介质的数字数据通信互连,所述数字数据通信例如是通信网络。通信网络的示例包括局域网(“LAN”)和广域网(“WAN”),例如互联网。
计算系统可以包括客户端和服务器。客户端和服务器通常彼此远离并且通常通过通信网络进行交互。客户端和服务器的关系借助于在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序而产生。
实施例1是一种使用硬件电路执行矩阵乘法的方法,所述方法包括:由所述硬件电路的矩阵计算单元获取输入激活值和权重输入值,所述输入激活值和所述权重输入值均具有第一浮点格式;由所述矩阵计算单元的乘法电路将所述输入激活值与所述权重输入值相乘以生成乘积值,所述乘积值具有第二浮点格式,所述第二浮点格式具有比所述第一浮点格式更高的精度并且具有与所述第一浮点格式的动态范围至少一样大的动态范围;由所述矩阵计算单元获取第三浮点格式的部分和值,所述第三浮点格式具有比所述第一浮点格式更高的精度并且具有与所述第一浮点格式的所述动态范围至少一样大的动态范围;以及由所述硬件电路的求和电路,至少对所述部分和值和所述乘积值进行组合以生成具有所述第三浮点格式的更新的部分和值。
实施例2是实施例1所述的方法,其中,浮点格式的所述精度是基于所述浮点格式中的有效数的可用位的计数来确定的,并且浮点格式的所述动态范围是基于所述浮点格式中的指数的可用位的计数来确定的。
实施例3是实施例1-2中的任一个所述的方法,其中,所述第二浮点格式具有与所述第一浮点格式相同的动态范围,并且所述第三浮点格式具有与所述第一浮点格式相同的动态范围。
实施例4是实施例1-3中的任一个所述的方法,其中,所述第三浮点格式具有比所述第二浮点格式更高的精度。
实施例5是实施例1-4中的任一个所述的方法,其中,所述硬件电路被配置为执行具有多个层的神经网络的计算,并且所述输入激活值和所述权重输入值与所述多个层中的一个层相关联。
实施例6是实施例1-5中的任一个所述的方法,进一步包括:获取具有所述第三浮点格式的第一矩阵计算单体的原始激活值和原始权重值;将所述原始激活值转换为所述第一浮点格式以生成所述输入激活值;并将所述原始权重值转换为所述第一浮点格式以生成所述权重输入值。
实施例7是实施例1-6中的任一个所述的方法,进一步包括:接收以增强的精度处理所述原始激活值的请求;生成所述输入值的激活增强精度值,所述激活增强精度值是所述激活输入值与所述原始激活值之间的差的度量;并且生成所述权重输入值的权重增强精度值,所述权重增强精度值是所述权重输入值与所述原始权重值之间的差的度量;并且其中,将所述激活输入值与所述权重输入值相乘以生成所述乘积值包括:由所述矩阵计算单元的所述乘法电路将所述输入值与所述权重输入值相乘、将所述输入值与所述权重增强精度值相乘、将所述权重输入值与所述激活增强精度值相乘以及将所述激活增强精度值与所述权重增强精度值相乘,并且对所述乘法的乘积进行组合以生成所述乘积值。
实施例8是一种硬件电路,包括:矩阵计算单元,所述矩阵计算单元被配置为执行第一组操作,所述第一组操作包括:获取激活输入值和权重输入值,所述激活输入值和所述权重输入值均具有第一浮点格式;将所述权重输入值存储在权重寄存器中,所述权重寄存器被配置为存储具有所述第一浮点格式的值;使用所述硬件电路的乘法电路,将所述激活输入值与所述权重输入值相乘以生成乘积值,所述乘积值具有第二浮点格式,所述第二浮点格式具有比所述第一浮点格式更高的精度并且具有与所述第一浮点格式的动态范围至少一样大的所述动态范围;获取第三浮点格式的部分和值,所述第三浮点格式具有比所述第一浮点格式更高的精度并且具有与所述第一浮点格式的所述动态范围至少一样大的动态范围;将所述部分和值存储在寄存器中的和中,所述寄存器中的和被配置为存储具有所述第三浮点格式的值;以及使用所述矩阵计算单元的求和电路,将所述部分和值与所述乘积值进行组合以生成具有所述第三浮点格式的更新的部分和值。
实施例9是实施例8所述的硬件电路,所述第一组操作进一步包括:将所述激活输入值存储在激活寄存器中,所述激活寄存器被配置为存储具有所述第一浮点格式的值。
实施例10是实施例8-9中的任一个所述的硬件电路,所述第一组操作进一步包括:将所述权重输入值存储在权重寄存器中,所述权重寄存器被配置为存储具有所述第一浮点格式的值。
实施例11是实施例8-10中任一个所述的硬件电路,所述第一组操作进一步包括:将所述部分和值存储在寄存器中的和中,所述寄存器中的和被配置为存储具有所述第三浮点格式的值。
实施例12是实施例8-11中的任一个所述的硬件电路,进一步包括所述矩阵计算单元外部的外部求和电路,并且其中所述第一组操作进一步包括:接收以增强的精度处理所述原始激活值的请求;生成所述输入值的激活增强精度值,所述激活增强精度值是所述激活输入值与所述原始激活值之间的差的度量;并且生成所述权重输入值的权重增强精度值,所述权重增强精度值是所述权重输入值与所述原始权重值之间的差的度量;并且其中,将所述激活输入值与所述权重输入值相乘以生成所述乘积值包括:由所述矩阵计算单元的所述乘法电路将所述输入值与所述权重输入值相乘、将所述输入值与所述权重增强精度值相乘、将所述权重输入值与所述激活增强精度值相乘以及将所述激活增强精度值与所述权重增强精度值相乘,并且其中所述外部求和电路被配置为执行第二组操作,所述第二组操作包括:对所述乘法的乘积进行组合以生成所述乘积值。
实施例13是包括一个或多个计算机和存储指令的一个或多个存储设备的系统,所述指令在被所述一个或多个计算机执行时,所能够操作以使所述一个或多个计算机执行实施例1-7中的任一个的所述相应的方法的所述操作。
实施例14是编码有指令的计算机存储介质,所述指令在被一个或多个计算机执行时,使所述一个或多个计算机执行实施例1-7中的任一个的所述相应的方法的所述操作。
实施例15是包括一个或多个计算机和存储指令的一个或多个存储设备的系统,所述指令在被所述一个或多个计算机执行时,能够操作以使所述一个或多个计算机执行实施例8-12中的任一个的所述相应的硬件电路的所述操作。
实施例16是编码有指令的计算机存储介质,所述指令在被一个或多个计算机执行时,使得所述一个或多个计算机执行实施例8-12中的任一个的所述相应的硬件电路的所述操作。
虽然本说明书包含许多特定的实现细节,但这些不应被解释为对任何发明或可要求保护的范围的限制,而是作为特定于特定发明的特定实施例的特征的描述。在本说明书中,在不同的实施例的上下文中描述的某些特征也可以在单个实施例中组合实现。相反,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合在多个实施例中实现。此外,尽管在上文中特征可以被描述为以某些组合起作用并且甚至最初如此声明,但是在某些情况下,所要求保护的组合中的一个或多个特征可以从组合中去除并且所要求保护的组合可以针对子组合或子组合的变化。
类似地,虽然在附图中以特定顺序描绘了操作,但是这不应该被理解为要求这样的操作以所示的特定顺序或按顺序执行、或者执行全部示出的操作以实现预期的结果。在某些情况下,多任务处理和并行处理可能是有利的。此外,上述实施例中的各种系统模块和组件的分离不应被理解为在全部实施例中都需要这样的分离,并且应当理解的是,所描述的程序组件和系统通常可以集成在单个软件产品中或这被打包为多个软件产品。
已经描述了主题的特定实施例。其他实施例在以下权利要求的范围内。例如,权利要求中详述的动作可以以不同的顺序被执行并且仍然实现预期的结果。作为一个示例,附图中描绘的过程不一定需要所示的特定顺序或连续顺序来实现预期的结果。在某些实现中,多任务和并行处理可能是有利的。
Claims (15)
1.一种使用硬件电路来执行矩阵乘法的方法,所述方法包括:
由所述硬件电路的矩阵计算单元获取激活输入值和权重输入值,所述激活输入值和所述权重输入值均具有第一浮点格式,其中,所述硬件电路被配置为执行具有多个层的神经网络的计算,其中,所述激活输入值和所述权重输入值与所述多个层中的一个层相关联;
由所述矩阵计算单元的乘法电路将所述激活输入值与所述权重输入值相乘以生成乘积值,所述乘积值具有第二浮点格式,所述第二浮点格式具有比所述第一浮点格式更高的精度并且具有与所述第一浮点格式的动态范围至少一样大的动态范围;
由所述矩阵计算单元获取第三浮点格式的部分和值,所述第三浮点格式具有比所述第一浮点格式更高的精度并且具有与所述第一浮点格式的所述动态范围至少一样大的动态范围;以及
由所述硬件电路的求和电路,至少对所述部分和值和所述乘积值进行组合以生成具有所述第三浮点格式的更新的部分和值。
2.根据权利要求1所述的方法,其中,浮点格式的精度是基于所述浮点格式中的有效数的可用位的计数来确定的,并且浮点格式的动态范围是基于所述浮点格式中的指数的可用位的计数来确定的。
3.根据权利要求1所述的方法,其中,所述第二浮点格式具有与所述第一浮点格式相同的动态范围,并且所述第三浮点格式具有与所述第一浮点格式相同的动态范围。
4.根据权利要求1所述的方法,其中,所述第三浮点格式具有比所述第二浮点格式更高的精度。
5.根据权利要求1-4中的任一项所述的方法,进一步包括:
获取具有所述第三浮点格式的所述矩阵计算单元的原始激活值和原始权重值;
将所述原始激活值转换为所述第一浮点格式以生成所述激活输入值;并且
将所述原始权重值转换为所述第一浮点格式以生成所述权重输入值。
6.根据权利要求5所述的方法,进一步包括:
接收以增强的精度处理所述原始激活值的请求;
生成所述激活输入值的激活增强精度值,所述激活增强精度值是所述激活输入值与所述原始激活值之间的差的度量;以及
生成所述权重输入值的权重增强精度值,所述权重增强精度值是所述权重输入值与所述原始权重值之间的差的度量;以及
其中,将所述激活输入值与所述权重输入值相乘以生成所述乘积值包括:
由所述矩阵计算单元的所述乘法电路,
将所述激活输入值与所述权重输入值相乘,
将所述激活输入值与所述权重增强精度值相乘,
将所述权重输入值与所述激活增强精度值相乘,以及
将所述激活增强精度值与所述权重增强精度值相乘,以及
对所述乘法的乘积进行组合以生成所述乘积值。
7.一种硬件电路,包括:
矩阵计算单元,所述矩阵计算单元被配置为执行第一组操作,所述第一组操作包括:
获取激活输入值和权重输入值,所述激活输入值和所述权重输入值均具有第一浮点格式,其中,所述硬件电路被配置为执行具有多个层的神经网络的计算,其中,所述激活输入值和所述权重输入值与所述多个层中的一个层相关联;
将所述权重输入值存储在权重寄存器中,所述权重寄存器被配置为存储具有所述第一浮点格式的值;
使用所述硬件电路的乘法电路,将所述激活输入值与所述权重输入值相乘以生成乘积值,所述乘积值具有第二浮点格式,所述第二浮点格式具有比所述第一浮点格式更高的精度并且具有与所述第一浮点格式的动态范围至少一样大的动态范围;
获取第三浮点格式的部分和值,所述第三浮点格式具有比所述第一浮点格式更高的精度并且具有与所述第一浮点格式的所述动态范围至少一样大的动态范围;
将所述部分和值存储在寄存器中的和中,所述寄存器中的和被配置为存储具有所述第三浮点格式的值;以及
使用所述矩阵计算单元的求和电路,将所述部分和值与所述乘积值进行组合以生成具有所述第三浮点格式的更新的部分和值。
8.根据权利要求7所述的硬件电路,所述第一组操作进一步包括:
将所述激活输入值存储在激活寄存器中,所述激活寄存器被配置为存储具有所述第一浮点格式的值。
9.根据权利要求7所述的硬件电路,所述第一组操作进一步包括:
将所述权重输入值存储在权重寄存器中,所述权重寄存器被配置为存储具有所述第一浮点格式的值。
10.根据权利要求7所述的硬件电路,所述第一组操作进一步包括:
将所述部分和值存储在寄存器中的和中,所述寄存器中的和被配置为存储具有所述第三浮点格式的值。
11.根据权利要求7-10中的任一项所述的硬件电路,进一步包括所述矩阵计算单元外部的外部求和电路,并且其中所述第一组操作进一步包括:
接收以增强的精度处理所述原始激活值的请求;
生成所述激活输入值的激活增强精度值,所述激活增强精度值是所述激活输入值与所述原始激活值之间的差的度量;以及
生成所述权重输入值的权重增强精度值,所述权重增强精度值是所述权重输入值与所述原始权重值之间的差的度量;以及
其中,将所述激活输入值与所述权重输入值相乘以生成所述乘积值包括:
由所述矩阵计算单元的所述乘法电路,
将所述激活输入值与所述权重输入值相乘,
将所述激活输入值与所述权重增强精度值相乘,
将所述权重输入值与所述激活增强精度值相乘,以及
将所述激活增强精度值与所述权重增强精度值相乘,以及
其中所述外部求和电路被配置为执行第二组操作,所述第二组操作包括:
对所述乘法的乘积进行组合以生成所述乘积值。
12.一种系统,所述系统包括一个或多个计算机和存储指令的一个或多个存储设备,所述指令在被所述一个或多个计算机执行时能够操作以使所述一个或多个计算机执行权利要求1-6中的任一项所述的相应的方法的所述操作。
13.一种编码有指令的计算机存储介质,所述指令在被一个或多个计算机执行时,使所述一个或多个计算机执行权利要求1-6中的任一项所述的相应的方法的所述操作。
14.一种系统,所述系统包括一个或多个计算机和存储指令的一个或多个存储设备,所述指令在被所述一个或多个计算机执行时能够操作以使所述一个或多个计算机执行权利要求7-11中的任一项所述的相应的硬件电路的所述操作。
15.一种编码有指令的计算机存储介质,所述指令在被一个或多个计算机执行时,使所述一个或多个计算机执行权利要求7-11中的任一项所述的相应的硬件电路的所述操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311134221.3A CN117273096A (zh) | 2017-05-17 | 2018-05-17 | 在硬件中执行矩阵乘法 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201762507748P | 2017-05-17 | 2017-05-17 | |
US62/507,748 | 2017-05-17 | ||
PCT/US2018/033271 WO2018213636A1 (en) | 2017-05-17 | 2018-05-17 | Performing matrix multiplication in hardware |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311134221.3A Division CN117273096A (zh) | 2017-05-17 | 2018-05-17 | 在硬件中执行矩阵乘法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110447010A CN110447010A (zh) | 2019-11-12 |
CN110447010B true CN110447010B (zh) | 2023-09-26 |
Family
ID=62784216
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311134221.3A Pending CN117273096A (zh) | 2017-05-17 | 2018-05-17 | 在硬件中执行矩阵乘法 |
CN201880019014.4A Active CN110447010B (zh) | 2017-05-17 | 2018-05-17 | 在硬件中执行矩阵乘法 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311134221.3A Pending CN117273096A (zh) | 2017-05-17 | 2018-05-17 | 在硬件中执行矩阵乘法 |
Country Status (7)
Country | Link |
---|---|
US (3) | US10621269B2 (zh) |
EP (1) | EP3625670B1 (zh) |
JP (2) | JP7114622B2 (zh) |
KR (2) | KR102258120B1 (zh) |
CN (2) | CN117273096A (zh) |
TW (3) | TWI807539B (zh) |
WO (1) | WO2018213636A1 (zh) |
Families Citing this family (42)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10521488B1 (en) | 2016-12-30 | 2019-12-31 | X Development Llc | Dynamic partitioning |
US10474458B2 (en) | 2017-04-28 | 2019-11-12 | Intel Corporation | Instructions and logic to perform floating-point and integer operations for machine learning |
KR102258120B1 (ko) | 2017-05-17 | 2021-05-28 | 구글 엘엘씨 | 하드웨어에서 매트릭스 곱셈을 수행 |
US10790828B1 (en) * | 2017-07-21 | 2020-09-29 | X Development Llc | Application specific integrated circuit accelerators |
US10879904B1 (en) | 2017-07-21 | 2020-12-29 | X Development Llc | Application specific integrated circuit accelerators |
US11868804B1 (en) * | 2019-11-18 | 2024-01-09 | Groq, Inc. | Processor instruction dispatch configuration |
US11294626B2 (en) * | 2018-09-27 | 2022-04-05 | Intel Corporation | Floating-point dynamic range expansion |
TWI766193B (zh) * | 2018-12-06 | 2022-06-01 | 神盾股份有限公司 | 卷積神經網路處理器及其資料處理方法 |
US11494645B2 (en) | 2018-12-06 | 2022-11-08 | Egis Technology Inc. | Convolutional neural network processor and data processing method thereof |
CN111338974A (zh) | 2018-12-19 | 2020-06-26 | 超威半导体公司 | 用于矩阵数学指令集的图块化算法 |
US11562247B2 (en) * | 2019-01-24 | 2023-01-24 | Microsoft Technology Licensing, Llc | Neural network activation compression with non-uniform mantissas |
US10831496B2 (en) * | 2019-02-28 | 2020-11-10 | International Business Machines Corporation | Method to execute successive dependent instructions from an instruction stream in a processor |
US20220171829A1 (en) * | 2019-03-11 | 2022-06-02 | Untether Ai Corporation | Computational memory |
WO2020190808A1 (en) * | 2019-03-15 | 2020-09-24 | Intel Corporation | Sparse optimizations for a matrix accelerator architecture |
US12066975B2 (en) | 2019-03-15 | 2024-08-20 | Intel Corporation | Cache structure and utilization |
EP3938893A1 (en) | 2019-03-15 | 2022-01-19 | INTEL Corporation | Systems and methods for cache optimization |
US11934342B2 (en) | 2019-03-15 | 2024-03-19 | Intel Corporation | Assistance for hardware prefetch in cache access |
US11556615B2 (en) * | 2019-05-03 | 2023-01-17 | Tesla, Inc. | Data path for scalable matrix node engine with mixed data formats |
CN112149049A (zh) * | 2019-06-26 | 2020-12-29 | 北京百度网讯科技有限公司 | 用于变换矩阵的装置和方法、数据处理系统 |
US11379555B2 (en) * | 2019-06-28 | 2022-07-05 | Amazon Technologies, Inc. | Dilated convolution using systolic array |
US10977002B2 (en) * | 2019-07-15 | 2021-04-13 | Facebook Technologies, Llc | System and method for supporting alternate number format for efficient multiplication |
US11687341B2 (en) * | 2019-08-29 | 2023-06-27 | Intel Corporation | Multi-variate strided read operations for accessing matrix operands |
US11842169B1 (en) | 2019-09-25 | 2023-12-12 | Amazon Technologies, Inc. | Systolic multiply delayed accumulate processor architecture |
US11531729B2 (en) * | 2019-10-04 | 2022-12-20 | Stmicroelectronics S.R.L. | Bitwise digital circuit and method for performing approximate operations |
US11861761B2 (en) | 2019-11-15 | 2024-01-02 | Intel Corporation | Graphics processing unit processing and caching improvements |
CN110929861B (zh) * | 2019-11-15 | 2023-04-18 | 中国人民解放军国防科技大学 | 一种多层感知机深度神经网络层间流水的硬件加速器 |
US11816446B2 (en) * | 2019-11-27 | 2023-11-14 | Amazon Technologies, Inc. | Systolic array component combining multiple integer and floating-point data types |
US11467806B2 (en) | 2019-11-27 | 2022-10-11 | Amazon Technologies, Inc. | Systolic array including fused multiply accumulate with efficient prenormalization and extended dynamic range |
US11625453B1 (en) * | 2019-12-12 | 2023-04-11 | Amazon Technologies, Inc. | Using shared data bus to support systolic array tiling |
US11922292B2 (en) * | 2020-01-27 | 2024-03-05 | Google Llc | Shared scratchpad memory with parallel load-store |
KR102404388B1 (ko) * | 2020-03-09 | 2022-06-02 | (주)그린파워 | 트랜스포즈 매트릭스 곱셈이 가능한 매트릭스 곱셈기 및 곱셈방법 |
US12073310B2 (en) * | 2020-04-01 | 2024-08-27 | Microsoft Technology Licensing, Llc | Deep neural network accelerator with independent datapaths for simultaneous processing of different classes of operations |
JP7391774B2 (ja) * | 2020-06-11 | 2023-12-05 | 株式会社東芝 | 演算処理装置、情報処理装置及び演算処理方法 |
US11308027B1 (en) | 2020-06-29 | 2022-04-19 | Amazon Technologies, Inc. | Multiple accumulate busses in a systolic array |
TWI746126B (zh) * | 2020-08-25 | 2021-11-11 | 創鑫智慧股份有限公司 | 矩陣乘法裝置及其操作方法 |
CN112434256B (zh) * | 2020-12-03 | 2022-09-13 | 海光信息技术股份有限公司 | 矩阵乘法器和处理器 |
US12020028B2 (en) * | 2020-12-26 | 2024-06-25 | Intel Corporation | Apparatuses, methods, and systems for 8-bit floating-point matrix dot product instructions |
US11880682B2 (en) | 2021-06-30 | 2024-01-23 | Amazon Technologies, Inc. | Systolic array with efficient input reduction and extended array performance |
US20230010897A1 (en) | 2021-07-06 | 2023-01-12 | Google Llc | In situ sparse matrix expansion |
US20230083270A1 (en) * | 2021-09-14 | 2023-03-16 | International Business Machines Corporation | Mixed signal circuitry for bitwise multiplication with different accuracies |
US20230289139A1 (en) * | 2022-03-08 | 2023-09-14 | International Business Machines Corporation | Hardware device to execute instruction to convert input value from one data format to another data format |
KR20240033565A (ko) * | 2022-09-05 | 2024-03-12 | 리벨리온 주식회사 | 뉴럴 프로세싱 장치, 그에 포함되는 프로세싱 엘리먼트 및 뉴럴 프로세싱 장치의 다양한 포맷 연산 방법 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6088715A (en) * | 1997-10-23 | 2000-07-11 | Advanced Micro Devices, Inc. | Close path selection unit for performing effective subtraction within a floating point arithmetic unit |
CN103975302A (zh) * | 2011-12-22 | 2014-08-06 | 英特尔公司 | 矩阵乘法累加指令 |
US9104510B1 (en) * | 2009-07-21 | 2015-08-11 | Audience, Inc. | Multi-function floating point unit |
CN105264779A (zh) * | 2013-01-22 | 2016-01-20 | 阿尔特拉公司 | 使用simd指令的数据压缩和解压 |
Family Cites Families (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4583222A (en) | 1983-11-07 | 1986-04-15 | Digital Equipment Corporation | Method and apparatus for self-testing of floating point accelerator processors |
JPS6280764A (ja) * | 1985-10-04 | 1987-04-14 | Nec Corp | 浮動小数点積和演算器 |
US4933895A (en) | 1987-07-10 | 1990-06-12 | Hughes Aircraft Company | Cellular array having data dependent processing capabilities |
US5790834A (en) | 1992-08-31 | 1998-08-04 | Intel Corporation | Apparatus and method using an ID instruction to identify a computer microprocessor |
EP0632369A1 (en) | 1993-06-29 | 1995-01-04 | Stichting voor de Technische Wetenschappen | CORDIC algorithms and architectures |
US5623616A (en) | 1993-07-22 | 1997-04-22 | Hewlett-Packard Company | Floating point operaton throughput control |
US5375084A (en) | 1993-11-08 | 1994-12-20 | International Business Machines Corporation | Selectable interface between memory controller and memory simms |
US5442577A (en) | 1994-03-08 | 1995-08-15 | Exponential Technology, Inc. | Sign-extension of immediate constants in an alu |
US5548545A (en) | 1995-01-19 | 1996-08-20 | Exponential Technology, Inc. | Floating point exception prediction for compound operations and variable precision using an intermediate exponent bus |
US5689677A (en) | 1995-06-05 | 1997-11-18 | Macmillan; David C. | Circuit for enhancing performance of a computer for personal use |
US7301541B2 (en) * | 1995-08-16 | 2007-11-27 | Microunity Systems Engineering, Inc. | Programmable processor and method with wide operations |
US5666071A (en) | 1995-12-01 | 1997-09-09 | Advanced Micro Devices, Inc. | Device and method for programming high impedance states upon select input/output pads |
US6311282B1 (en) | 1996-02-27 | 2001-10-30 | Fujitsu Personal Systems, Inc. | Method and apparatus for computing device with status display |
US6065029A (en) | 1998-05-26 | 2000-05-16 | N*Able Technologies, Inc. | Method and system for providing a random number generator |
US6622135B1 (en) | 1998-12-29 | 2003-09-16 | International Business Machines Corporation | Method for detecting and classifying anomalies using artificial neural networks |
US6675292B2 (en) | 1999-08-13 | 2004-01-06 | Sun Microsystems, Inc. | Exception handling for SIMD floating point-instructions using a floating point status register to report exceptions |
EP1195231A4 (en) * | 2000-03-31 | 2006-01-25 | Sony Corp | ROBOTIC DEVICE, ROBOTIC DEVICE ACTION CONTROL METHOD, EXTERNAL FORCE DETECTION DEVICE, AND EXTERNAL FORCE DETECTION METHOD |
US6920574B2 (en) | 2002-04-29 | 2005-07-19 | Apple Computer, Inc. | Conserving power by reducing voltage supplied to an instruction-processing portion of a processor |
US7219085B2 (en) * | 2003-12-09 | 2007-05-15 | Microsoft Corporation | System and method for accelerating and optimizing the processing of machine learning techniques using a graphics processing unit |
US7669035B2 (en) | 2004-01-21 | 2010-02-23 | The Charles Stark Draper Laboratory, Inc. | Systems and methods for reconfigurable computing |
EP1724823A3 (fr) | 2005-05-11 | 2009-09-09 | Stmicroelectronics Sa | Procédé de connexion d'une microplaquette de semi-conducteur sur un support d'interconnexion |
CN101228692B (zh) | 2005-07-25 | 2012-10-03 | Arm有限公司 | 功率控制集成电路单元 |
US7856618B2 (en) | 2005-08-04 | 2010-12-21 | International Business Machines Corporation | Adaptively generating code for a computer program |
US7512282B2 (en) | 2005-08-31 | 2009-03-31 | International Business Machines Corporation | Methods and apparatus for incremental approximate nearest neighbor searching |
US7301436B1 (en) | 2005-11-14 | 2007-11-27 | National Semiconductor Corporation | Apparatus and method for precision trimming of integrated circuits using anti-fuse bond pads |
US8595279B2 (en) | 2006-02-27 | 2013-11-26 | Qualcomm Incorporated | Floating-point processor with reduced power requirements for selectable subprecision |
US7912887B2 (en) | 2006-05-10 | 2011-03-22 | Qualcomm Incorporated | Mode-based multiply-add recoding for denormal operands |
US8280941B2 (en) * | 2007-12-19 | 2012-10-02 | HGST Netherlands B.V. | Method and system for performing calculations using fixed point microprocessor hardware |
US8258410B2 (en) | 2008-01-26 | 2012-09-04 | International Business Machines Corporation | Construction of reliable stacked via in electronic substrates—vertical stiffness control method |
CN101782893B (zh) | 2009-01-21 | 2014-12-24 | 上海芯豪微电子有限公司 | 可重构数据处理平台 |
US8150902B2 (en) | 2009-06-19 | 2012-04-03 | Singular Computing Llc | Processing with compact arithmetic processing element |
US8984042B2 (en) * | 2012-02-09 | 2015-03-17 | International Business Machines Corporation | Mixed precision estimate instruction computing narrow precision result for wide precision inputs |
US9104474B2 (en) * | 2012-12-28 | 2015-08-11 | Intel Corporation | Variable precision floating point multiply-add circuit |
US9384168B2 (en) * | 2013-06-11 | 2016-07-05 | Analog Devices Global | Vector matrix product accelerator for microprocessor integration |
US9978014B2 (en) * | 2013-12-18 | 2018-05-22 | Intel Corporation | Reconfigurable processing unit |
US10192162B2 (en) * | 2015-05-21 | 2019-01-29 | Google Llc | Vector computation unit in a neural network processor |
US11244225B2 (en) * | 2015-07-10 | 2022-02-08 | Samsung Electronics Co., Ltd. | Neural network processor configurable using macro instructions |
US10726514B2 (en) | 2017-04-28 | 2020-07-28 | Intel Corporation | Compute optimizations for low precision machine learning operations |
KR102258120B1 (ko) | 2017-05-17 | 2021-05-28 | 구글 엘엘씨 | 하드웨어에서 매트릭스 곱셈을 수행 |
-
2018
- 2018-05-17 KR KR1020197027658A patent/KR102258120B1/ko active IP Right Grant
- 2018-05-17 TW TW110146923A patent/TWI807539B/zh active
- 2018-05-17 KR KR1020217015439A patent/KR102477516B1/ko active IP Right Grant
- 2018-05-17 WO PCT/US2018/033271 patent/WO2018213636A1/en unknown
- 2018-05-17 US US15/983,047 patent/US10621269B2/en active Active
- 2018-05-17 EP EP18735434.5A patent/EP3625670B1/en active Active
- 2018-05-17 TW TW109105926A patent/TWI751500B/zh active
- 2018-05-17 CN CN202311134221.3A patent/CN117273096A/zh active Pending
- 2018-05-17 JP JP2019551610A patent/JP7114622B2/ja active Active
- 2018-05-17 CN CN201880019014.4A patent/CN110447010B/zh active Active
- 2018-05-17 TW TW107116873A patent/TWI689873B/zh active
-
2020
- 2020-03-20 US US16/826,075 patent/US10831862B2/en active Active
- 2020-11-09 US US17/093,439 patent/US11989258B2/en active Active
-
2022
- 2022-04-06 JP JP2022063463A patent/JP7312879B2/ja active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6088715A (en) * | 1997-10-23 | 2000-07-11 | Advanced Micro Devices, Inc. | Close path selection unit for performing effective subtraction within a floating point arithmetic unit |
US9104510B1 (en) * | 2009-07-21 | 2015-08-11 | Audience, Inc. | Multi-function floating point unit |
CN103975302A (zh) * | 2011-12-22 | 2014-08-06 | 英特尔公司 | 矩阵乘法累加指令 |
CN105264779A (zh) * | 2013-01-22 | 2016-01-20 | 阿尔特拉公司 | 使用simd指令的数据压缩和解压 |
Also Published As
Publication number | Publication date |
---|---|
EP3625670A1 (en) | 2020-03-25 |
JP7114622B2 (ja) | 2022-08-08 |
KR20190117714A (ko) | 2019-10-16 |
US20200257754A1 (en) | 2020-08-13 |
CN117273096A (zh) | 2023-12-22 |
CN110447010A (zh) | 2019-11-12 |
TWI807539B (zh) | 2023-07-01 |
US10621269B2 (en) | 2020-04-14 |
TW202213189A (zh) | 2022-04-01 |
US10831862B2 (en) | 2020-11-10 |
EP3625670B1 (en) | 2022-02-23 |
US11989258B2 (en) | 2024-05-21 |
TW201905768A (zh) | 2019-02-01 |
TWI689873B (zh) | 2020-04-01 |
WO2018213636A1 (en) | 2018-11-22 |
US20180336165A1 (en) | 2018-11-22 |
JP2020521192A (ja) | 2020-07-16 |
JP2022106737A (ja) | 2022-07-20 |
US20210124795A1 (en) | 2021-04-29 |
JP7312879B2 (ja) | 2023-07-21 |
TWI751500B (zh) | 2022-01-01 |
KR102477516B1 (ko) | 2022-12-14 |
TW202046181A (zh) | 2020-12-16 |
KR102258120B1 (ko) | 2021-05-28 |
KR20210062739A (ko) | 2021-05-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110447010B (zh) | 在硬件中执行矩阵乘法 | |
CN109997132B (zh) | 低时延矩阵乘法部件 | |
US20220261622A1 (en) | Special purpose neural network training chip | |
US8078835B2 (en) | Reconfigurable array processor for floating-point operations | |
JP2018055677A (ja) | 外積累算演算のためのプロセッサおよび方法 | |
CN117280341A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |