CN115023685A - 用于密集和稀疏矩阵计算的加速器 - Google Patents
用于密集和稀疏矩阵计算的加速器 Download PDFInfo
- Publication number
- CN115023685A CN115023685A CN202180011738.6A CN202180011738A CN115023685A CN 115023685 A CN115023685 A CN 115023685A CN 202180011738 A CN202180011738 A CN 202180011738A CN 115023685 A CN115023685 A CN 115023685A
- Authority
- CN
- China
- Prior art keywords
- sparse
- dense
- computing device
- matrix
- operands
- 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 164
- 238000000034 method Methods 0.000 claims abstract description 95
- 238000004364 calculation method Methods 0.000 claims abstract description 63
- 238000012545 processing Methods 0.000 claims abstract description 41
- 238000007689 inspection Methods 0.000 claims abstract description 29
- 230000004044 response Effects 0.000 claims abstract description 7
- 230000008569 process Effects 0.000 claims description 36
- 238000013528 artificial neural network Methods 0.000 claims description 21
- 230000015654 memory Effects 0.000 description 42
- 239000000047 product Substances 0.000 description 17
- 230000006870 function Effects 0.000 description 11
- 238000013473 artificial intelligence Methods 0.000 description 10
- 238000013527 convolutional neural network Methods 0.000 description 8
- 238000012549 training Methods 0.000 description 8
- 239000013598 vector Substances 0.000 description 8
- 238000010801 machine learning Methods 0.000 description 6
- 238000007792 addition Methods 0.000 description 5
- 238000003058 natural language processing Methods 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 238000005265 energy consumption Methods 0.000 description 4
- 239000000203 mixture Substances 0.000 description 3
- 230000002123 temporal effect Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 229940050561 matrix product Drugs 0.000 description 2
- 230000001537 neural effect Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000011176 pooling Methods 0.000 description 2
- 238000000513 principal component analysis Methods 0.000 description 2
- 230000002787 reinforcement Effects 0.000 description 2
- 101000822695 Clostridium perfringens (strain 13 / Type A) Small, acid-soluble spore protein C1 Proteins 0.000 description 1
- 101000655262 Clostridium perfringens (strain 13 / Type A) Small, acid-soluble spore protein C2 Proteins 0.000 description 1
- 238000007476 Maximum Likelihood Methods 0.000 description 1
- 241000282376 Panthera tigris Species 0.000 description 1
- 101000655256 Paraclostridium bifermentans Small, acid-soluble spore protein alpha Proteins 0.000 description 1
- 101000655264 Paraclostridium bifermentans Small, acid-soluble spore protein beta Proteins 0.000 description 1
- 241000288906 Primates Species 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 230000004913 activation Effects 0.000 description 1
- 230000003042 antagnostic effect Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 239000012467 final product Substances 0.000 description 1
- 238000003064 k means clustering Methods 0.000 description 1
- 230000000116 mitigating effect Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000003062 neural network model Methods 0.000 description 1
- 238000013139 quantization Methods 0.000 description 1
- 230000000306 recurrent effect Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 230000006403 short-term memory Effects 0.000 description 1
- 230000005236 sound signal Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012706 support-vector machine Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000010937 topological data analysis Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
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
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
-
- 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, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- 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
Abstract
一种增加矩阵计算的计算机硬件效率的方法。方法包括在计算机处理机器处接收对矩阵计算的一个或多个运算进行编码的数字信号,每个运算包括一个或多个操作数。方法还包括:响应于由计算机处理机器的稀疏数据检查设备确定矩阵计算的运算包括所有密集操作数,将该运算转发给计算机处理机器的密集计算设备,密集计算设备被配置为基于密集操作数来执行矩阵计算的运算。方法还包括:响应于由稀疏数据检查设备确定矩阵计算的运算包括一个或多个稀疏操作数,将该运算转发给稀疏计算设备,稀疏计算设备被配置为执行矩阵计算的运算。
Description
背景技术
矩阵计算可以利用专门的计算硬件来加速。然而,这样的专门的计算硬件在执行具有相当大比例的零值元素的矩阵计算时通常效率低下。
发明内容
提供本发明内容是为了以简化形式介绍概念的选择,这些概念将在下面的具体实施方式中进一步被描述。本发明内容不旨在标识所要求保护的主题的关键特征或基本特征,也不旨在用于限制所要求保护的主题的范围。此外,要求保护的主题不限于解决在本公开的任何部分中指出的任何或所有缺点的实施方式。
一种增加矩阵计算的计算机硬件效率的方法包括:在计算机处理设备处接收对矩阵计算的一个或多个运算进行编码的数字信号,每个运算包括一个或多个操作数。响应于由计算机处理机器的稀疏数据检查设备确定矩阵计算的运算包括所有密集操作数,将该运算转发给计算机处理机器的密集计算设备,密集计算设备被配置为基于密集操作数来执行矩阵计算的运算。响应于由稀疏数据检查设备确定矩阵计算的运算包括一个或多个稀疏操作数,将该运算转发给稀疏计算设备,稀疏计算设备被配置为执行矩阵计算的运算。
附图说明
图1A-图1B示出了用于矩阵计算的示例性加速器流水线。
图2示出了增加矩阵计算的计算机硬件效率的方法。
图3示出了用于对稀疏和/或密集矩阵数据执行矩阵计算的加速器的示例性微架构。
图4示出了示例性计算系统。
具体实施方式
计算机计算通常包括矩阵计算,例如矩阵乘法。例如,神经网络(例如,卷积神经网络和/或深度神经网络)可以利用一个或多个矩阵乘法来进行实现。因此,加速器可以执行一个或多个矩阵乘法,从而为神经网络实现提供无数好处(例如,更低的延时、更高的带宽和/或更低的功率利用率)。可以基本上使用矩阵计算实现的计算机程序和/或算法的非限制性示例包括图形处理程序(例如,呈现软件)和人工智能模型,诸如:深度神经网络(DNN)、卷积神经网络(CNN;例如深度卷积神经网络(DCNN))、递归神经网络(RNN;例如长短期记忆(LSTM)),以及许多其他人工智能模型。这些人工智能模型可以使用矩阵计算的多个层来进行实现,矩阵计算以输入矢量开始,并且在矩阵计算的每个层处处理输入矢量以计算任意函数,例如使用机器学习训练算法学习的函数。利用这样的矩阵计算的神经网络能够在许多应用中实现最先进的结果,应用诸如是计算机视觉、机器翻译、语音辅助等。作为可以基本上使用矩阵计算实现的神经网络模型的一个示例,CNN可以包括多个层,这些层可以在数学上被分解为大规模矩阵乘法(卷积),然后是逐元素非线性变换,诸如sigmoid或整流线性设备函数。作为另一个示例,DNN可以执行大量的矩阵计算。
然而,矩阵计算可能涉及大的计算运行时间成本、存储器和功耗。例如,用于处理图像数据(例如,照片数据、视频数据等)的神经网络可以执行数百或数千次算术运算来仅仅处理单个图像。作为另一个示例,现有的神经网络可以有100多个层,其中处理每个层包括执行数百甚至数千次算术运算。
可以使用专门的计算硬件来潜在地减小矩阵计算的运行时间成本、存储器利用率、处理时间和功耗。相对于依序计算,例如使用常规的通用计算硬件的矩阵计算,专用计算硬件可以显著减小这些成本。例如,与通用处理器相比,加速器可以实现诸如更低的延时、更高的带宽和/或更低的功率利用率的好处。
在一些示例中,这样的专用计算硬件可以执行以流水线组织的计算。例如,如图1A中所示,加速器流水线100是用于矩阵计算中的数据流和逻辑的流水线的一个非限制性示例。例如,加速器流水线100包括指令发布阶段(stage)102,在指令发布阶段102接收指令(例如,从不同的逻辑设备发布,和/或从存储设备流传输)。乘法指令被发送到乘法器引擎104。类似地,存储器指令(例如,加载/存储指令)被发送到存储器引擎106。指令在流水线中以定义的顺序被完成(例如,按照程序顺序、根据控制和/或数据相关性、和/或按照为矩阵运算引入适当语义的任何其他适当顺序),并且指令的结果在提交阶段108中被最终确定(例如,通过将计算结果写入寄存器和/或使一个或多个存储设备被更新以便执行由存储器引擎处理的加载/存储操作)。在每个周期,发布若干指令(例如,从指令存储器读取并且被分配给与其类型匹配的流水线)。每个周期的指令的数目被称为发布带宽。在接下来的周期中,通过如下方式在流水线中处理每个指令:从寄存器文件读取指令的操作数的值、使用其指定的引擎执行指令,以及将结果写入寄存器和/或经由存储器引擎106存储数据。在到达提交阶段108之后,指令被标记为已执行并且不再存在于流水线中。
作为加速器的一般设计的一个非限制性示例,加速器可以异步地、并发地和/或基本上并行地计算矩阵计算以减小运行时间成本。例如,逻辑硬件可以按计划的方式执行矩阵计算的步骤,以贯穿计算实现高效的数据流。例如,高效的并行实现可以确保在需要时以最佳顺序从存储器访问输入数据。高效的并行实现可以解决矩阵计算的子问题,以利用空间和/或时间局部性,减少存储器访问和计算延时。用于矩阵计算的专用计算硬件的另一个非限制性示例是用于矩阵乘法的脉动(systolic)阵列(SA)。用于矩阵乘法的脉动阵列可以被实现为多个紧密耦合的2D乘法-累加(MAC)计算节点,该些计算节点被高度同步以在数据到达脉动阵列时与计划(例如,时钟)同步地处理数据。矩阵乘法可以被分解为局部运算,用于计算矩阵乘积的多个部分。可以以任何适当的方式分解矩阵乘法,例如,通过计算矩阵的块部分、矩阵的连续对角线等。因此,在用于矩阵乘法的SA中,2D MAC计算节点可以被配置为:仅使用MAC计算节点之间的最近邻通信,执行被分解为局部运算的矩阵乘法。可以仅使用局部运算所需的输入数据和/或中间计算值来计算局部运算。因此,用于矩阵乘法的SA可以减小(例如,最小化)存储器访问延时和/或功耗。例如,非局部计算节点之间的连接可以表示大的潜在功率成本。通过专门使用局部连接,用于矩阵乘法的SA相对于依序矩阵计算可以显著减小功耗。作为非限制性示例,用于矩阵乘法的SA可以执行表示矩阵乘法中的特定逐元素乘积的一系列乘法运算,并且可以执行一系列累加(例如,加法)运算以将逐元素乘积相加,并且将所得总和保存在对应于矩阵乘法产生的输出矩阵的适当存储器目的地。乘法和加法可以被异步执行(例如,当输入数据可用时,可以同时和/或并行执行乘法,并且当正在进行的一系列乘法运算产生乘积时,可以并发和/或并行执行加法)。
除了矩阵乘法之外,加速器(例如,基于脉动阵列的加速器)可以被配置为执行各种其他矩阵计算。可以至少部分地经由加速器实现的矩阵计算的非限制性示例包括主成分分析(PCA)、傅里叶变换和/或矩阵加法和减法。此外,如本文描述的矩阵计算还可以指代广义张量计算(例如,矢量计算和更高张量计算),其可以类似地使用用于执行计划的计算的专用计算硬件来被实现。例如,可以使用本公开的技术有效地实现的矢量/矩阵/张量计算的非限制性示例包括池化运算(例如,最大池化)、Hadamard乘积运算等。
回到矩阵乘法的示例,通常的脉动阵列被设计成用于密集矩阵运算,例如密集乘法。“密集矩阵”在本文中被用来指代其中所有元素被显式定义的矩阵,包括具有零值的元素。密集矩阵可以具有用于存储的存储器消耗,该存储器消耗取决于矩阵维度的大小(例如,2x2、3x3等),因为矩阵的每一个元素都被显式定义和存储。当矩阵包括相对较少的零元素时,利用密集矩阵进行存储和计算可以特别有效。
然而,针对矩阵计算的输入通常包括许多零值元素。例如,具有50%以上零值元素的数据可以被称为稀疏数据。当计算中(例如,在AI和/或DNN计算中)的数据为稀疏时,通过向加速器提供对稀疏数据进行运算并且生成对整体结果没有贡献的另外稀疏数据(例如,不影响AI系统的整体学习或预测的稀疏数据)的指令,可能会不必要地浪费加速器功率。
例如,由于非线性(例如,整流线性设备)激活和量化,针对神经网络的每个层的输入可以包括许多零值元素。在一些示例中,矩阵可以被存储为“稀疏矩阵”,“稀疏矩阵”在本文中被用来指代其中仅非零元素被显式定义的矩阵。作为非限制性示例,稀疏矩阵可以以两个矢量的形式被存储,即指示稀疏矩阵的哪些元素被填充的顺序矢量(例如,位矢量,其按照行、列字典顺序,对非零条目指示“1”值,并且对零条目指示“0”值)以及包括所有非零元素的数据矢量(例如,以行、列字典顺序被列出)。当非零条目相对较少时,利用稀疏矩阵存储和计算可以特别高效,因为仅非零条目被显式定义。因此,仅非零元素需要被存储,并且在一些情况下,可以基于零值元素的隐式编码来简化或优化计算(例如,跳过计算的一部分,该部分对应于计算一个或多个值(包括隐式编码的零值中的一个零值)的乘积)。在一些示例中,稀疏矩阵数据可以被“解包”以填充密集矩阵,例如,通过显式存储由稀疏矩阵指示的所有非零元素和零元素。
相信在许多矩阵计算中从存储器加载的数据中的大部分(尽管不一定是全部)数据是稀疏的。以与处理密集数据相同的方式处理稀疏数据的加速器在对稀疏数据(该稀疏数据对计算的总体最终结果没有贡献)执行计算时,可以引起较高的功率成本(例如,不必要地乘以零值条目,产生零值乘积,该零值乘积不对神经网络计算的结果贡献任何数值权重)。然而,加速器可以被配置为分开处理密集矩阵和稀疏矩阵,并且可以不能处理密集数据和稀疏数据的混合。在一些示例中,加速器可以被配置为解包稀疏矩阵,并且将来自稀疏矩阵的数据作为密集矩阵数据进行处理。然而,由于对稀疏矩阵中的所有零值进行解包、存储和执行计算,这样的解包和处理可能引起过大的能量消耗。因此,先前的加速器在处理密集和稀疏矩阵数据的混合时可能不是最优的。类似地,与加速的密集矩阵数据计算相比,稀疏数据的专门处理在处理密集矩阵数据方面可能效率低下。
图1B示出了加速器流水线100’,其被配置为高效地处理密集和稀疏矩阵数据的混合,例如以执行矩阵乘法运算(或任何其他适当的矩阵运算)。与流水线100一样,加速器流水线100’被配置为处理在指令发布阶段102’中接收的指令,并且最终在提交阶段108’中写出结果。然而,加速器流水线100’被配置为将处理一个或多个稀疏数据操作数的指令与仅处理密集数据的指令区分开。加速器流水线100’使用稀疏数据检查设备103’进行该区分,设备103’被配置为:在所发布的指令(例如,算术和/或存储器加载/存储操作)及其操作数在发布阶段102’被接收时,处理所发布的指令及其操作数。稀疏数据检查设备103’被配置为评估指令的一个或多个操作数是否是稀疏的。作为非限制性示例,如果操作数为零值,则稀疏数据检查设备103’可以将操作数评估为稀疏。然后,基于由稀疏数据检查设备103’进行的这样的评估,乘法器引擎104’处理对专用密集数据子流水线中的密集数据进行运算的指令。乘法器引擎104可以被配置为处理对单独的专用稀疏数据子流水线中的稀疏数据进行运算的指令。
在一些示例中,单独的专用稀疏数据子流水线可以被配置为执行为稀疏数据配置的特殊运算(例如,被配置为以减少的能量消耗、延时和/或存储器使用来处理稀疏数据的运算)。作为一个非限制性示例,在用于基于MAC节点的矩阵乘法的SA中,稀疏数据子流水线可以策略性地忽略关于稀疏数据的指令。应当理解,在矩阵乘法中,最终结果矩阵是来自两个输入矩阵的逐元素乘积之和。如此,如果输入矩阵的任何元素是稀疏的(例如,0值元素或极小的元素),则涉及该元素的所有逐元素乘积都将是稀疏的(例如,0或接近0的值),并且不会对结果矩阵中的最终总和做出实质贡献。如此,对于矩阵乘法运算,稀疏数据子流水线可以简单地忽略对稀疏数据进行运算的指令。然而,乘法器引擎104’可以计算准确的最终结果矩阵,因为对密集数据(实际上对最终结果有贡献)进行运算的所有指令都在密集数据子流水线中被处理。其他加速的计算(例如,其他矩阵计算)可以具有类似的稀疏性质,使得稀疏数据子流水线能够基本忽略传入指令(例如,通过利用无运算指令代替传入指令的至少一部分)。例如,神经网络计算可以被实现为类似于矩阵乘法(例如,张量乘法)的乘积之和的计算,这可以使得对稀疏数据进行运算的指令可以被忽略,因为它们对计算的最终结果可以没有贡献。
相对于密集和/或稀疏矩阵的依序处理以及相对于针对密集或稀疏矩阵的专用加速器(例如,相对于针对密集矩阵的更简单加速器流水线100),加速器流水线100’可以实现减少的能量消耗。如由针对从指令发布阶段102’到稀疏数据检查设备103’和存储器引擎106’的乘法指令和存储器指令的双箭头所指示的,加速器流水线100’的指令发布带宽增加(例如,相对于先前的加速器),使得加速器流水线能够处理大量数目的发布指令。例如,加速器可以分别在专用密集子流水线和专用稀疏子流水线中同时处理密集指令和稀疏指令。在一些示例中,加速器流水线可以被配置为向加速器馈送比加速器可以处理的指令更多的指令(例如,加速器流水线可以对加速器进行“过度供应”),从而允许加速器继续处理没有稀疏指令的指令,并且将剩余指令缓冲到有效的片上存储器中以供将来处理(例如,利用稀疏性)。
图2示出了用于增加加速器流水线(例如,加速器流水线100或100’)中矩阵计算的硬件效率的示例性方法。
图3示出了用于加速器流水线(例如,用于加速器流水线100或100’)的微架构300的非限制性示例。微架构300被配置为增加包括多个矩阵运算的矩阵计算的硬件效率。作为非限制性示例,微架构300可以被配置为实施方法200。
在202处,方法200包括在计算机处理设备处接收对矩阵计算的一个或多个运算进行编码的数字信号,每个运算包括一个或多个操作数。例如,数字信号可以对矩阵乘法和/或神经网络计算进行编码,如上所述。用于编码矩阵运算的数字信号的非限制性示例包括计算机可读指令、机器代码、汇编代码、字节码、源代码等。
在204处,方法200包括由计算机处理机器的稀疏数据检查设备确定矩阵计算的运算是否包括所有密集操作数。矩阵计算的操作数为稀疏或密集中的任一种。例如,稀疏操作数可以包括零值操作数和/或具有小于阈值的值的操作数。因此,稀疏数据检查设备可以被配置为执行任何适当的运算(例如,算术运算)以确定运算的每个操作数是稀疏还是密集。
在206处,响应于确定矩阵计算的运算包括所有密集操作数,方法200包括将运算转发给计算机处理机器的密集计算设备,密集计算设备被配置为基于密集操作数来执行矩阵计算的运算。在208处,响应于确定矩阵计算的运算包括一个或多个稀疏操作数,方法200包括将运算转发给稀疏计算设备,稀疏计算设备被配置为执行矩阵计算的运算。因此,涉及任何稀疏操作数的运算可以由稀疏计算设备有效地处理。此外,向密集计算设备发布的所有运算涉及所有密集运算,因此密集计算设备不会不必要地使用任何计算资源来执行与稀疏结果相关联的算术运算。例如,密集计算设备可以专门对非零数据执行算术运算,从而消除与显式执行诸如乘以零(无论其他操作数如何,总是产生零的乘积)和/或加零(相当于无运算)的运算相关联的不必要的延时和/或能量消耗。
微架构300被配置为:处理在指令发布阶段302中接收的指令(例如,对矩阵运算进行编码的数字信号),并且最终在提交阶段308中写出结果。微架构300被配置为在指令发布阶段302处接收传入指令。如由双箭头所指示并且与加速器流水线200一样,带宽可以适应同时处理传入的乘法指令和/或存储器指令。微架构300可以使能高效的加速矩阵计算,而与究竟什么程序使用微架构300进行加速无关(例如,微架构300提供与特定矩阵处理、AI、ML和/或神经网络程序和/或数据无关的节能、延时和/或产出优势)。
方法200和/或微架构300可以用于各种矩阵计算。例如,方法200和/或微架构300可以用于改进矩阵乘法的硬件效率(例如,使用被配置为执行乘法和累加运算的密集计算设备)。作为另一个非限制性示例,方法200和/或微架构300可以用于改进神经网络计算的硬件效率。
稀疏数据检查设备303被配置为将关于稀疏数据的指令与关于密集数据的指令区分开。例如,稀疏数据检查设备303可以基于涉及一个或多个零值操作数的指令、基于与数据和/或指令相关联的预定义标签或以任何其他适当的方式,来识别稀疏数据。作为示例,涉及一个或多个零值操作数(以及可选的接近零值的操作数)的乘法指令可以被认为是稀疏的,因为0乘以任何值都产生乘积0(或接近零,在乘以接近零值的操作数的情况下)。
在一些示例中,稀疏数据检查设备303被配置为:基于确定零值操作数为稀疏并且非零值操作数为密集,来确定操作数是稀疏还是密集。在其他示例中,稀疏数据检查设备303被配置为:基于如果操作数的值超过预定义阈值则确定操作数为密集,并且如果操作数的值不超过预定义阈值则为稀疏,来确定操作数是稀疏还是密集。例如,稀疏数据检查设备303可以被配置为:基于涉及具有小于稀疏阈值的值的一个或多个操作数的指令,来识别稀疏数据。
作为示例,可以基于指令在整体计算中如何被使用来选择稀疏阈值。例如,矩阵乘法的稀疏阈值可以是最小因子大小,其中预期较小的因子将产生不太可能显著影响计算的最终结果的乘积值。例如,稀疏值可以是诸如0.001、0.00001、0.0000001等的小浮点数。在一些示例中,稀疏值可以是可调值(例如,稀疏数据检查设备303的硬件超参数)。例如,稀疏值可以在计算之前和/或期间被重新定义,以便减少与计算相关联的能量、延时和/或存储器成本。作为示例,阈值稀疏值可以被优化,以便通过将指令操作数中的大部分指令操作数视为稀疏来减少能量成本,同时基于计算的准确性标准进行约束。作为非限制性示例,对于矩阵乘法计算,可以基于输入数据矩阵的预期分布来选择阈值稀疏值以便减少成本,同时对于从预期分布提取的矩阵,确保矩阵乘积的准确性上最多存在阈值偏差。作为另一个非限制性示例,对于神经网络计算,可以基于将尽可能多的计算视为稀疏来选择阈值稀疏值以减少成本,同时维持至少阈值平均预测准确性。通过调整适当的阈值稀疏值,稀疏数据检查设备303可以为实施涉及稀疏操作数的各种计算使能减少的成本(例如,功率、存储器和/或延时)。以上示例是非限制性的,并且可以基于任何适当的标准来选择阈值稀疏值。作为示例,在累加最大值的矩阵计算中,大的负值可以被认为是稀疏的,因为这样的大的负值可以不可能或不太可能是最大值。作为另一示例,在累加多个因子的乘积的矩阵计算中,接近1的值可以被认为是稀疏的,因为乘以接近1的值不会显著改变最终乘积结果。对稀疏数据进行运算的指令由稀疏计算设备304B连同先行稀疏指令队列(LASIQ)305B和稀疏寄存器标识符队列(SRIQ)309B一起处理。对密集数据进行运算的指令由密集计算设备304A连同先行密集指令队列(LADIQ)305A一起处理。
虽然在本文中关于操作数在操作数是零值或接近零值时为稀疏来描述检查数据稀疏性,但是在其他实施方式中,稀疏数据检查设备303可以被配置为:基于关于这样的运算的操作数的其他适当标准对计算机操作(例如,诸如矩阵计算的步骤)进行排序。因此,经排序的计算可以被适当地转发给被配置为执行计算机运算的密集计算设备,并且可以被适当地转发给被配置为以较低计算成本执行相同计算机运算的稀疏计算设备。例如,稀疏计算设备可以利用被传递到稀疏计算设备的经排序数据的性质(类似于利用稀疏性来更高效地执行本文描述的矩阵计算)。
在一些示例中,通过将具有所有密集操作数的任何指令入队到LADIQ 305A中,来将指令转发给密集计算设备304A。因此,密集计算设备304A可以被配置为按顺序执行来自LADIQ 305A的指令。在一些示例中,可以向LADIQ 305A馈送超过密集计算设备304A被配置为要在后续周期中处理的指令的数目的指令。例如,基于与密集计算设备304A相关联的计算资源的指令带宽、产出和/或延时,密集计算设备304A可以仅能够在一个周期内执行有限数目的算术运算。因此,当LADIQ 305A保持满并且从LADIQ 305A转发指令时,密集计算设备304A可以在多个后续周期中处理最大数目的指令。例如,使用LADIQ 305A向执行引擎提供指令可以使密集计算设备304A能够完成矩阵计算的多个部分,而与任何等待无关,该等待可能由于在稀疏数据检查设备303中检查操作数数据的稀疏性时,和/或在由稀疏计算设备304A处理稀疏数据时,接收到指定操作数数据的数字信号而引起。
类似地,在一些示例中,通过将具有一个或多个稀疏操作数的任何指令入队到LASIQ 305B中,来将指令转发给稀疏计算设备304B。在一些示例中,稀疏计算设备304B被配置为按照程序顺序将稀疏结果值自动存储在SRIQ 309B中。例如,稀疏计算设备304B可以针对每个稀疏指令识别与该指令的结果值相关联的位置,以便针对每个稀疏指令将零值自动写入到寄存器文件中。在一些示例中,可以向LASIQ 305B馈送超过稀疏计算设备被配置为要在后续周期中处理的指令的数目的指令。例如,可以向LASIQ 305B提供大量具有稀疏结果的指令,该些指令可以利用无运算代替和/或用于自动得出用于存储稀疏结果值的位置。因此,与稀疏结果相关联的计算可以被跳过(例如,利用无运算代替)和/或被延迟(例如,入队以便稍后写入稀疏结果值)。由于大量指令由稀疏计算设备303处理,因此LADIQ 305A和/或LASIQ 305B可以保持在和/或接近满容量,从而允许在矩阵计算的稀疏和/或密集部分的高效、并发进行。
稀疏数据检查设备303通常被配置为处理所有可用的发布指令,以将这样的指令分类成稀疏指令集和/或密集指令集以供处理。因此,指令可以由稀疏计算设备304B或密集计算设备304A立即处理。备选地或附加地,在指令被处理时,这样的指令可以被入队到LASIQ305B和/或LADIQ 305A中,以分别由稀疏计算设备304B和/或密集计算设备304A进行后续处理。如将在下面描述的,LASIQ 305B、LADIQ 305A和SRIQ 309B允许稀疏数据检查设备303、稀疏计算设备304B和密集计算设备304A并发处理多个传入指令,同时确保处理指令的结果以正确的顺序出现(例如,按照程序顺序)。在一些示例中,相对于密集计算设备304A流水线,稀疏计算设备304B可以是更短延时的流水线(例如,稀疏计算设备304B可以使用适用于稀疏矩阵的专门处理技术来进行实现,以避免零元素上的冗余/不必要的计算)。
与密集计算设备304A相比,稀疏计算设备304B是更小/更短的流水线(例如,具有更少的计算步骤、更小的功耗和/或更低的延时)。在一些示例中,稀疏计算设备304B可以基本上忽略已经被检测为稀疏的传入指令(例如,因为稀疏数据上的这样的指令可以实际上不会影响整体计算的最终结果)。
例如,稀疏计算设备304B可以实际上不将多个值相乘,例如,稀疏计算设备304B可以利用无运算指令代替稀疏数据的乘法。即使当没有乘法被执行时,稀疏计算设备304B也可以确定在哪里存储非零元素以供稍后处理,而无需执行任何实际乘法并且同时忽略零元素,从而可以在稍后处理非零元素。在其他示例中,稀疏计算设备304B可以执行稀疏优化乘法,以在忽略零元素时有效地将多个值相乘。作为示例,稀疏计算设备304B可以被配置为忽略所有传入指令的特定操作数,但是对于每个传入指令,计算存储器地址,在该存储器地址处自动写入稀疏值(例如,恒定0值,其表示来自关于一个或多个稀疏操作数的指令的预期结果)。因此,稀疏计算设备304B可以能够有效地确定在其处写入稀疏值(例如,恒定0值)的所有这样的存储器地址,而无需对传入操作数实际执行任何算术。因此,稀疏计算设备304B计算由关于稀疏数据的指令产生的所有稀疏值,同时减少能量、时间和/或存储器成本,因为不需要处理特定结果。在一些示例中,甚至可以不需要显式跟踪稀疏指令的结果(例如,对于乘积之和,可以从最终总和中完全省略等于0的乘积)。在任何情况下,稀疏计算设备304B被配置为:当需要跟踪任何这样的结果以进行整体计算时,确定写入关于稀疏数据的指令的结果的顺序和/或位置。在一些示例中,稀疏计算设备304B被配置为:通过自动假设稀疏结果值,来计算具有一个或多个稀疏操作数的矩阵计算的中间结果。例如,在矩阵乘法中,当输入矩阵中出现零值元素时,基于具有零值元素作为因子,矩阵计算的一个或多个中间结果必然为零值。因此,稀疏计算设备304B可以被配置为:通过将零值结果写入到表示计算结果的乘积矩阵中的相关联位置中,来自动计算与稀疏操作数相关联的中间结果。例如,当零值操作数出现时,可以自动假设整行和/或整列具有稀疏结果。因此,稀疏计算设备304B可以高效且自动地写入所有这样的稀疏结果,而无需对操作数执行特定计算。在一些示例中,稀疏计算设备304B可以被配置为利用无运算指令代替运算的可执行指令。例如,在矩阵乘法运算中执行特定乘法和/或加法步骤的操作可以利用无运算指令代替,因为结果值的加法在数学上等同于无运算。
例如,如图3中所示,稀疏计算设备304B被配置为:在稀疏寄存器标识符队列(SRIQ309B)内,跟踪针对关于稀疏数据的每个指令的稀疏指令标识符以及针对该指令的输出寄存器。SRIQ 309B又被配置为:在给定指令之前发布的所有指令已经被提交之后,将给定指令转发给提交阶段。此外,SRIQ 309B被配置为将对应寄存器的值转发给寄存器文件。在一些实施方式中,SRIQ 309B保证指令按程序顺序退出(retire)(即,完成),从而确保矩阵计算的正确结果。换句话说,稀疏计算设备可以被配置为将指令标识符转发给SRIQ 309B,并且因此SRIQ可以被配置为根据与指令标识符相关联的程序顺序写入对应的结果。因此,存储从对稀疏数据的运算产生的稀疏值的计算工作可以被SRIQ 309B跳过、延迟和/或高效地实现。
稀疏数据检查设备303被配置为:在稀疏计算设备304B和/或密集计算设备304A可用于处理指令时,将指令转发给这些计算设备。例如,如果在一个周期期间发布的一系列指令(例如,周期中的所有指令或周期中的指令中的部分指令)是关于密集数据的指令,则第一个指令(例如,“最年轻的”或最近发布的指令)可以被馈送到密集计算设备304A中以进行处理。此外,关于密集数据的任何其他指令可以被缓冲到LADIQ 305A中。例如,LADIQ 305A可以是任何适当大小的片上队列。类似地,如果在一个周期期间发布的一系列指令具有稀疏数据值,则第一个指令可以被馈送到稀疏计算设备304B中,并且关于稀疏数据的其他指令可以被缓冲到LASIQ 305B中。与LADIQ 305A一样,LASIQ 305B可以是任何适当大小的片上队列。在后续的周期中,LADIQ 305A中的下一个指令可以被馈送到密集计算设备304A中,和/或LASIQ 305B中的下一个指令可以被馈送到稀疏计算设备304A中。只要在LASIQ 305B和LADIQ 305A两者中存在空间,就从指令发布阶段302处理指令。在指令发布阶段302处,加速器微架构300尚未确定所发布的指令是对密集数据还是稀疏数据进行运算。如此,加速器微架构使用LASIQ 305B和LADIQ 305A将传入运算入队,以确保任何传入运算都可以被处理和/或入队(例如,即使流水线的一部分(诸如稀疏计算设备304B或密集计算设备304A)太忙而无法立即处理另外的指示)。因此,如果LASIQ 305B或LADIQ305A中的任一个完全满,则指令发布阶段302被配置为停止发布新指令,直到两个队列中都有空间。
如上所述,可以增加用于乘法指令的发布带宽,例如,以使得能够同时并发地对关于稀疏数据和密集数据的指令进行入队和/或处理。此外,可以类似地增加存储器指令发布带宽,以促进从存储器加载数据以用于乘法指令。作为非限制性示例,可以通过增加存储器引擎306的加载存储设备306A的带宽,来增加存储器指令带宽。备选地或附加地,作为另一个非限制性示例,可以通过添加一个或多个附加加载存储设备306B,来增加存储器指令带宽。在一些示例中,当使用两个以上加载存储设备时,加载队列307可以用于将存储器加载结果入队,以确保加载指令按程序顺序退出(例如,完成)。例如,尽管通常不被用在加速器硬件中,但加载队列可以被用在超标量计算流水线中,以确保数据从存储器的程序顺序加载。
本文描述的方法和过程可以被绑定到一个或多个计算设备的计算系统。特别地,这样的方法和过程可以被实现为可执行的计算机应用程序、网络可访问的计算服务、应用编程接口(API)、库或以上和/或其他计算资源的组合。作为另一个非限制性示例,加速器流水线100’和/或微架构300可以作为(多个)逻辑子系统(例如,处理器和/或协处理器设备)存在于计算系统中,以用于执行任何适当的计算(例如,用于矩阵乘法)。
图4示意性地示出了计算系统400的简化表示,计算系统400被配置为提供本文描述的计算功能中的任何至所有计算功能。计算系统400可以采取以下形式:一个或多个个人计算机、网络可访问服务器计算机、平板计算机、家庭娱乐计算机、游戏设备、移动计算设备、移动通信设备(例如,智能电话)、虚拟/增强/混合现实计算设备、可穿戴计算设备、物联网(IoT)设备、嵌入式计算设备和/或其他计算设备。作为非限制性示例,计算系统400可以实现加速器流水线100或加速器流水线100’。作为另一个非限制性示例,计算系统400可以包括微架构300。作为另一个非限制性示例,计算系统400可以实施方法200。
计算系统400包括逻辑子系统402和存储子系统404。计算系统400可以可选地包括输入/输出子系统406、通信子系统408和/或图4中未示出的其他子系统。例如,逻辑子系统402可以包括加速器流水线100’和/或微架构300。
逻辑子系统402包括一个或多个被配置为执行指令的物理设备。例如,逻辑子系统可以被配置为执行作为一个或多个应用、服务或其他逻辑结构的一部分的指令。逻辑子系统可以包括一个或多个被配置为执行软件指令的硬件处理器。附加地或备选地,逻辑子系统可以包括一个或多个被配置为执行硬件或固件指令的硬件或固件设备。逻辑子系统的处理器可以是单核或多核的,并且其上执行的指令可以被配置为用于依序、并行和/或分布式处理。逻辑子系统的各个组件可选地可以被分布在两个以上分离的设备中间,该些设备可以被远程定位和/或被配置为用于协调处理。逻辑子系统的方面可以由以云计算配置来配置的远程可访问的、联网计算设备虚拟化和执行。
存储子系统404包括一个或多个物理设备,该物理设备被配置为临时和/或永久地保持计算机信息,诸如可由逻辑子系统执行的数据和指令。当存储子系统包括两个以上设备时,该些设备可以被并置和/或远程定位。存储子系统404可以包括易失性、非易失性、动态、静态、读/写、只读、随机访问、依序访问、位置可寻址、文件可寻址和/或内容可寻址设备。存储子系统404可以包括可移动和/或内置设备。当逻辑子系统执行指令时,存储子系统404的状态可以被转换,例如,以保持不同的数据。
逻辑子系统402和存储子系统404的方面可以一起被集成到一个或多个硬件逻辑组件中。例如,这样的硬件逻辑组件可以包括程序和应用专用集成电路(PASIC/ASIC)、程序和应用专用标准产品(PSSP/ASSP)、片上系统(SOC)和复杂可编程逻辑设备(CPLD)。作为非限制性示例,加速器微架构300、指令发布阶段302、稀疏数据检查设备303、LASIQ 305B、LADIQ 305A、稀疏计算设备304B、密集计算设备304A、SRIQ 309B、存储器引擎306、加载存储设备306A、加载存储设备306B、加载队列307和/或提交阶段308均可以经由硬件逻辑组件的任何适当组合来进行实现。在一些示例中,硬件加速器可能具有有限的片上存储器容量和低访问延时(例如“快速存储器”)。如果加速器的工作负载超过片上存储器的大小,则可以使用远程较慢的存储器来缓冲无关数据。但是,这可能显著减小处理工作负载的速度。然而,本文公开的技术可以使能矩阵计算的高效片上处理(例如,通过减少延时、功耗和/或用于保持稀疏数据的零值的片上存储要求),从而减轻有限片上存储器的可能后果。但是,应当理解,即使当大量的片上存储器可用时,本文描述的技术也是有益的。
逻辑子系统和存储子系统可以协作以实例化一个或多个逻辑机器和/或引擎。如本文所使用的,术语“机器”和“引擎”用于共同指代硬件、固件、软件、指令和/或协作以提供计算机功能的任何其他组件的组合。换句话说,“机器”和/或“引擎”从来不是抽象概念,并且总是具有有形的形式。机器和/或引擎可以由单个计算设备实例化,或者可以包括由两个以上不同计算设备实例化的两个以上子组件。在一些实施方式中,机器和/或引擎包括与远程组件(例如,由服务器计算机的网络提供的云计算服务)协作的本地组件(例如,由计算机处理器执行的软件应用)。给予特定机器和/或引擎其功能的软件和/或其他指令可以可选地被保存为一个或多个适当的存储设备上的一个或多个未执行模块。作为非限制性示例,根据本公开,加速器微架构300、指令发布阶段302、稀疏数据检查设备303、LASIQ 305B、LADIQ305A、稀疏计算设备304B、密集计算设备304A、SRIQ 309B、存储器引擎306、加载存储设备306A、加载存储设备306B、加载队列307和/或提交阶段308可以被实现为机器/引擎。
机器/引擎可以使用现有技术和/或未来机器学习(ML)、人工智能(AI)和/或自然语言处理(NLP)技术的任何适当组合来进行实现。备选地或附加地,本公开中描述的机器/引擎可以被用作ML、AI和/或NLP技术的实现中的组件。作为非限制性示例,矩阵计算(例如,矩阵乘法)可以被用在神经网络的实现中。因此,加速器微架构300可以用于高效地执行这样的矩阵计算。ML、AI和/或NLP技术的非限制性示例包括支持矢量机、多层神经网络、卷积神经网络(例如,包括用于处理图像和/或视频的空间卷积网络、用于处理音频信号和/或自然语言句子的时间卷积神经网络,和/或被配置为跨一个或多个时间和/或空间维度卷积和池化特征的任何其他适当的卷积神经网络)、递归神经网络(例如,长短期记忆网络)、联想记忆(例如,查找表、哈希表、布隆过滤器、神经图灵机和/或神经随机存取存储器)、词嵌入模型(例如,GloVe或Word2Vec)、无监督空间和/或聚类方法(例如,最近邻算法、拓扑数据分析,和/或k均值聚类),图形模型(例如,(隐藏)马尔可夫模型、马尔可夫随机场、(隐藏)条件随机场,和/或AI知识库)和/或自然语言处理技术(例如,令牌化、词干提取、选区和/或依赖解析,和/或意图识别、分段模型和/或超分段模型(例如,隐藏动态模型))。
在一些示例中,本文描述的方法和过程可以使用一个或多个可微分函数来进行实现,其中可微分函数的梯度可以关于可微分函数的输入和/或输出(例如,关于训练数据,和/或关于目标函数)来进行计算和/或估计。这样的方法和过程可以至少部分地由可训练参数集来确定。因此,可以通过任何适当的训练程序来调整特定方法或过程的可训练参数,以便持续改进方法或过程的功能。
用于调整可训练参数的训练程序的非限制性示例包括监督训练(例如,使用梯度下降或任何其他适当的优化方法)、零样本、少样本、无监督学习方法(例如,基于从无监督聚类方法得出的类的分类)、强化学习(例如,基于反馈的深度Q学习)和/或生成对抗神经网络训练方法、信念传播、RANSAC(随机样本共识)、上下文老虎机方法、最大似然方法和/或期望最大化。在一些示例中,本文描述的系统的多个方法、过程和/或组件可以关于测量多个组件的集体功能的性能的目标函数(例如,关于强化反馈和/或关于标记的训练数据)来进行同时训练。同时训练多个方法、过程和/或组件可以改进这样的集体功能。在一些示例中,一种或多种方法、过程和/或组件可以独立于其他组件进行训练(例如,在历史数据上进行离线训练)。
本公开以示例的方式并且参考相关联的图来进行呈现。在图中的一个或多个图中可以基本相同的组件、过程步骤和其他元素被协调地标识并且以最少的重复进行描述。然而,应当注意,协调标识的元素也可能在某种程度上有所不同。还应当注意,一些图可能是示意性的并且不是按比例绘制的。图中所示的各种绘图比例、纵横比和组件数目可以被故意扭曲以使某些特征或关系更容易看到。
在一个示例中,一种增加矩阵计算的计算机硬件效率的方法包括:在计算机处理设备处接收对矩阵计算的一个或多个运算进行编码的数字信号,每个运算包括一个或多个操作数;响应于由计算机处理机器的稀疏数据检查设备确定矩阵计算的运算包括所有密集操作数,将运算转发给计算机处理机器的密集计算设备,密集计算设备被配置为基于密集操作数,执行矩阵计算的运算;以及响应于由稀疏数据检查设备确定矩阵计算的运算包括一个或多个稀疏操作数,将运算转发给稀疏计算设备,稀疏计算设备被配置为执行矩阵计算的运算。在该示例或任何其他示例中,稀疏数据检查设备被配置为:基于将零值操作数确定为稀疏并且将非零值操作数确定为密集,来确定操作数是稀疏还是密集。在该示例或任何其他示例中,稀疏数据检查设备被配置为:基于如果操作数的值超过预定义阈值则确定操作数为密集并且如果操作数的值不超过预定义阈值则确定操作数为稀疏,来确定操作数是稀疏还是密集。在该示例或任何其他示例中,预定义阈值是稀疏数据检查设备的硬件超参数。在该示例或任何其他示例中,矩阵计算是矩阵乘法。在该示例或任何其他示例中,密集计算设备被配置为执行乘法和累加运算。在该示例或任何其他示例中,矩阵计算是神经网络计算。在该示例或任何其他示例中,稀疏计算设备被配置为将稀疏结果值自动保存到从矩阵计算的运算得出的位置。在该示例或任何其他示例中,稀疏计算设备被配置为利用无运算指令替换运算的可执行指令。在该示例或任何其他示例中,将具有所有密集操作数的运算转发给密集计算设备包括:将具有所有密集操作数的运算入队到先行密集指令队列中,其中密集计算设备被配置为按顺序执行来自先行密集指令队列的运算。在该示例或任何其他示例中,方法还包括向先行密集指令队列馈送超过密集计算设备被配置为要在后续周期中处理的运算的数目。在该示例或任何其他示例中,将具有一个或多个稀疏操作数的运算转发给稀疏计算设备包括:将具有一个或多个稀疏操作数的运算入队到先行稀疏指令队列中。在该示例或任何其他示例中,稀疏计算设备被配置为:按照运算在先行稀疏指令队列中的程序顺序,在先行稀疏指令队列中自动存储来自运算的稀疏结果值。在该示例或任何其他示例中,方法还包括向先行稀疏指令队列馈送超过稀疏计算设备被配置为要在后续周期中处理的运算的数目。
在一个示例中,用于执行矩阵计算的计算机系统包括:稀疏计算设备,被配置为计算具有一个或多个稀疏操作数的运算的结果;密集计算设备,被配置为计算具有所有密集操作数的运算的结果;指令发布阶段,被配置为接收对矩阵计算的一个或多个运算进行编码的数字信号;以及稀疏数据检查设备,被配置为:将具有一个或多个稀疏操作数的运算转发给稀疏计算设备,并且将具有所有密集操作数的运算转发给密集计算设备。在该示例或任何其他示例中,稀疏数据检查设备被配置为:如果操作数的值大于预定义阈值,则确定操作数为密集,并且被配置为:如果操作数的值小于预定义阈值,则确定操作数为稀疏。在一个示例中,一种用于进行矩阵计算的计算机系统包括:稀疏计算单元,被配置为对稀疏数据执行矩阵计算;密集计算单元,被配置为对密集数据执行矩阵计算;指令发布阶段,被配置为接收多个指令,包括对稀疏数据进行运算的指令和对密集数据进行运算的指令;以及稀疏数据检查设备,被配置为在对稀疏数据进行运算的指令和对密集数据进行运算的指令之间进行区分,其中稀疏数据检查设备还被配置为:将被确定为对稀疏数据进行运算的指令转发给稀疏计算设备,并且将被确定为对密集数据进行运算的指令转发给密集计算设备。在该示例或任何其他示例中,稀疏数据检查设备被配置为:检测对稀疏数据进行运算的多个指令,并且将对稀疏数据进行运算的多个指令入队到先行稀疏指令队列。在该示例或任何其他示例中,稀疏数据检查设备被配置为:检测对密集数据进行运算的多个指令,并且将对密集数据进行运算的多个指令入队到先行密集指令队列中。在该示例或任何其他示例中,稀疏计算设备被配置为将指令标识符转发给稀疏寄存器标识符队列,并且稀疏寄存器标识符队列被配置为根据与指令标识符相关联的程序顺序来写入对应的结果。
应当理解,本文描述的配置和/或方法本质上是示例性的,并且这些特定实施例或示例不应当以限制意义进行考虑,因为许多变化是可能的。本文描述的特定例程或方法可以表示任意数目的处理策略中的一个或多个。如此,所示和/或描述的各种动作可以在所示和/或描述的序列中被执行、在其他序列中被执行、并行被执行或被省略。同样,可以改变上述过程的顺序。
本公开的主题包括各种过程、系统和配置以及本文公开的其他特征、功能、动作和/或性质的所有新颖和非明显的组合和子组合,以及其任何和所有等价物。
Claims (15)
1.一种增加矩阵计算的计算机硬件效率的方法,包括:
在计算机处理机器处,接收对所述矩阵计算的一个或多个运算进行编码的数字信号,每个运算包括一个或多个操作数;
响应于由所述计算机处理机器的稀疏数据检查设备确定所述矩阵计算的运算包括所有密集操作数,将所述运算转发给所述计算机处理机器的密集计算设备,所述密集计算设备被配置为基于所述密集操作数来执行所述矩阵计算的所述运算;以及
响应于由所述稀疏数据检查设备确定所述矩阵计算的所述运算包括一个或多个稀疏操作数,将所述运算转发给稀疏计算设备,所述稀疏计算设备被配置为执行所述矩阵计算的所述运算。
2.根据权利要求1所述的方法,其中所述稀疏数据检查设备被配置为:基于将零值操作数确定为稀疏、并且将非零值操作数确定为密集,来确定操作数是稀疏还是密集。
3.根据权利要求1所述的方法,其中所述稀疏数据检查设备被配置为:基于如果操作数的值超过预定义阈值则确定所述操作数为密集、并且如果所述操作数的所述值不超过所述预定义阈值则确定所述操作数为稀疏,来确定操作数是稀疏还是密集。
4.根据权利要求3所述的方法,其中所述预定义阈值是所述稀疏数据检查设备的硬件超参数。
5.根据权利要求1所述的方法,其中所述矩阵计算是矩阵乘法。
6.根据权利要求1所述的方法,其中所述密集计算设备被配置为执行乘法和累加运算。
7.根据权利要求1所述的方法,其中所述矩阵计算是神经网络计算。
8.根据权利要求1所述的方法,其中所述稀疏计算设备被配置为将稀疏结果值自动保存到从所述矩阵计算的所述运算得出的位置。
9.根据权利要求1所述的方法,其中所述稀疏计算设备被配置为利用无运算指令替换所述运算的可执行指令。
10.根据权利要求1所述的方法,其中将具有所有密集操作数的所述运算转发给所述密集计算设备包括:将具有所有密集操作数的所述运算入队到先行密集指令队列中,其中所述密集计算设备被配置为按顺序执行来自所述先行密集指令队列的运算。
11.根据权利要求10所述的方法,还包括:向所述先行密集指令队列馈送超过所述密集计算设备被配置为要在后续周期中处理的运算的数目。
12.根据权利要求1所述的方法,其中将具有一个或多个稀疏操作数的所述运算转发给所述稀疏计算设备包括:将具有一个或多个稀疏操作数的所述运算入队到先行稀疏指令队列中。
13.根据权利要求12所述的方法,其中所述稀疏计算设备被配置为:按照所述运算在所述先行稀疏指令队列中的程序顺序,在所述先行稀疏指令队列中自动存储来自运算的稀疏结果值。
14.根据权利要求12所述的方法,还包括:向所述先行稀疏指令队列馈送超过所述稀疏计算设备被配置为要在后续周期中处理的运算的数目。
15.一种用于执行矩阵计算的计算机系统,包括:
稀疏计算设备,被配置为计算具有一个或多个稀疏操作数的运算的结果;
密集计算设备,被配置为计算具有所有密集操作数的运算的结果;
指令发布阶段,被配置为接收对矩阵计算的一个或多个运算进行编码的数字信号;以及
稀疏数据检查设备,被配置为将具有一个或多个稀疏操作数的运算转发给所述稀疏计算设备,并且将具有所有密集操作数的运算转发给所述密集计算设备。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202062968867P | 2020-01-31 | 2020-01-31 | |
US62/968,867 | 2020-01-31 | ||
US16/862,370 US11562047B2 (en) | 2020-01-31 | 2020-04-29 | Accelerator for dense and sparse matrix computations |
US16/862,370 | 2020-04-29 | ||
PCT/US2021/014055 WO2021154549A1 (en) | 2020-01-31 | 2021-01-20 | Accelerator for dense and sparse matrix computations |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115023685A true CN115023685A (zh) | 2022-09-06 |
Family
ID=77062135
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180011738.6A Pending CN115023685A (zh) | 2020-01-31 | 2021-01-20 | 用于密集和稀疏矩阵计算的加速器 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11562047B2 (zh) |
EP (1) | EP4097586A1 (zh) |
CN (1) | CN115023685A (zh) |
WO (1) | WO2021154549A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20230153938A1 (en) * | 2021-11-17 | 2023-05-18 | Meta Platforms, Inc. | Systems and methods for disaggregated acceleration of artificial intelligence operations |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9715481B2 (en) * | 2014-06-27 | 2017-07-25 | Oracle International Corporation | Approach for more efficient use of computing resources while calculating cross product or its approximation for logistic regression on big data sets |
US10891538B2 (en) * | 2016-08-11 | 2021-01-12 | Nvidia Corporation | Sparse convolutional neural network accelerator |
US20180164866A1 (en) * | 2016-12-13 | 2018-06-14 | Qualcomm Incorporated | Low-power architecture for sparse neural network |
US10871964B2 (en) * | 2016-12-29 | 2020-12-22 | Qualcomm Incorporated | Architecture for sparse neural network acceleration |
US10180928B2 (en) | 2016-12-31 | 2019-01-15 | Intel Corporation | Heterogeneous hardware accelerator architecture for processing sparse matrix data with skewed non-zero distributions |
US10409887B1 (en) * | 2017-02-28 | 2019-09-10 | Ambarella, Inc. | Generalized dot product for computer vision applications |
US10186011B2 (en) | 2017-04-28 | 2019-01-22 | Intel Corporation | Programmable coarse grained and sparse matrix compute hardware with advanced scheduling |
US10409732B2 (en) * | 2017-05-31 | 2019-09-10 | Nxp Usa, Inc. | Sparse matrix accelerator |
US10482156B2 (en) | 2017-12-29 | 2019-11-19 | Facebook, Inc. | Sparsity-aware hardware accelerators |
US11392596B2 (en) * | 2018-05-14 | 2022-07-19 | Google Llc | Efficient inner product operations |
-
2020
- 2020-04-29 US US16/862,370 patent/US11562047B2/en active Active
-
2021
- 2021-01-20 CN CN202180011738.6A patent/CN115023685A/zh active Pending
- 2021-01-20 WO PCT/US2021/014055 patent/WO2021154549A1/en unknown
- 2021-01-20 EP EP21704673.9A patent/EP4097586A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
WO2021154549A1 (en) | 2021-08-05 |
US20210240797A1 (en) | 2021-08-05 |
EP4097586A1 (en) | 2022-12-07 |
US11562047B2 (en) | 2023-01-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11308398B2 (en) | Computation method | |
US20180260710A1 (en) | Calculating device and method for a sparsely connected artificial neural network | |
Liu et al. | Pudiannao: A polyvalent machine learning accelerator | |
Chen et al. | Diannao: A small-footprint high-throughput accelerator for ubiquitous machine-learning | |
Mittal et al. | A survey on hardware accelerators and optimization techniques for RNNs | |
US11526581B2 (en) | Compression-encoding scheduled inputs for matrix computations | |
US11493985B2 (en) | Selectively controlling memory power for scheduled computations | |
US20180314945A1 (en) | Graph matching for optimized deep network processing | |
US11775832B2 (en) | Device and method for artificial neural network operation | |
US11934941B2 (en) | Asynchronous task execution for neural processor circuit | |
CN114286985A (zh) | 用于预测内核调谐参数的方法和设备 | |
Vemparala et al. | An efficient fpga accelerator design for optimized cnns using opencl | |
CN115023685A (zh) | 用于密集和稀疏矩阵计算的加速器 | |
US11435941B1 (en) | Matrix transpose hardware acceleration | |
Li et al. | A system-level solution for low-power object detection | |
KR20230136154A (ko) | 뉴럴 프로세서 회로에 대한 분기 동작 | |
Miao et al. | Cuwide: Towards efficient flow-based training for sparse wide models on gpus | |
Zhou et al. | Paraml: A polyvalent multicore accelerator for machine learning | |
George et al. | A Unified Programmable Edge Matrix Processor for Deep Neural Networks and Matrix Algebra | |
US20230359697A1 (en) | Tensor processing | |
CN114020476B (zh) | 一种作业的处理方法、设备及介质 | |
EP4206999A1 (en) | Artificial intelligence core, artificial intelligence core system, and loading/storing method of artificial intelligence core system | |
US20240020239A1 (en) | Artificial intelligence (ai)/machine learning (ml) tensor processor | |
Sohrabizadeh et al. | SPA-GCN: Efficient and Flexible GCN Accelerator with an Application for Graph Similarity Computation | |
Wang et al. | MT-DLA: An efficient multi-task deep learning accelerator design |
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 |