CN116997909A - 稀疏机器学习加速 - Google Patents

稀疏机器学习加速 Download PDF

Info

Publication number
CN116997909A
CN116997909A CN202280022306.XA CN202280022306A CN116997909A CN 116997909 A CN116997909 A CN 116997909A CN 202280022306 A CN202280022306 A CN 202280022306A CN 116997909 A CN116997909 A CN 116997909A
Authority
CN
China
Prior art keywords
weight
weight tensor
tensor
zero
compressed
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202280022306.XA
Other languages
English (en)
Inventor
K·徐
R·戴尔蒙特
P·开普兰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Amazon Technologies Inc
Original Assignee
Amazon Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Amazon Technologies Inc filed Critical Amazon Technologies Inc
Publication of CN116997909A publication Critical patent/CN116997909A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3059Digital compression and data reduction techniques where the original information is represented by a subset or similar information, e.g. lossy compression
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6005Decoder aspects

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • General Health & Medical Sciences (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Artificial Intelligence (AREA)
  • Neurology (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

为了减小权重张量的存储大小并加速权重张量从系统存储器的加载,可采用压缩技术从权重张量中移除零值,之后再将权重张量存储在系统存储器中。可强制实施稀疏性阈值以通过在训练期间将小权重值强制变为零来实现压缩比目标。当从系统存储器加载权重张量时,具有在线解压缩单元的直接存储器访问(DMA)引擎可以即时地解压缩权重张量。通过在DMA引擎中执行解压缩,可以在处理单元正在执行其他神经网络计算时并行地将权重值扩展回原始权重张量大小。

Description

稀疏机器学习加速
以引用方式并入
与本说明书同时提交了请求表作为本申请的一部分。在同时提交的请求表中确定的本申请要求其权益或优先权的每个申请通过引用方式以其整体并为了所有目的而并入本文。
背景技术
可以使用机器学习技术来训练神经网络以执行应用程序的特定计算任务。经过训练的神经网络可随后执行计算任务,例如根据输入数据生成推理。神经网络可以执行的计算任务可以包括类人功能,诸如视觉和听觉感知、自然语言处理等。
附图说明
将参照附图描述根据本公开的各个实施方案,在附图中:
图1示出了计算系统的示例;
图2示出了压缩技术的示例的概念图;
图3A示出了直接存储器访问引擎的示例的框图;
图3B示出了直接存储器访问引擎的示例的另一个方面的框图;
图4示出了二维权重张量的示例;
图5示出了压缩二维权重张量的示例;
图6示出了生成经压缩权重张量的过程的示例的流程图;
图7示出了解压缩权重张量的过程的示例的流程图;
图8示出了加速器的示例的框图;以及
图9示出了加速引擎的示例的框图;以及
图10示出了主机系统的示例的框图。
具体实施方式
用于机器学习并且特别是用于深度学习的权重模型可能很大。例如,一些权重张量可占据32GB的存储空间。当神经网络模型大小大于计算装置的外部存储器容量时,该模型不适合单个装置。绕过存储限制的一种方式是将权重模型划分成多个部分并在多个装置中执行神经网络计算。然而,此类解决方案需要附加的软件复杂性水平来管理分布式计算。由于装置之间的通信,此类解决方案还导致较长的延迟和较低的吞吐量。即使模型可适合单个计算装置的外部存储器,将大模型从外部存储器加载到处理单元中也可能占用大量存储器带宽,这也导致较低的吞吐量。
虽然在机器学习中使用的权重张量可能很大,但大多数权重张量也是稀疏的,因为许多权重值是零。为了减小权重张量的存储大小并加速权重张量从系统存储器的加载,可采用压缩技术从权重张量中移除零值,之后再将权重张量存储在系统存储器中。可强制实施稀疏性阈值以通过在训练期间将小权重值强制变为零来实现压缩比目标。为了进一步减小权重张量的大小,还可以对权重值进行量化,以将权重值从高精度数据类型变为较低精度数据类型,从而减小权重值的位长度。当从系统存储器加载权重张量时,具有在线解压缩单元的直接存储器访问(DMA)引擎可以即时地解压缩权重张量。通过在DMA引擎中执行解压缩,可以在处理单元正在执行其他神经网络计算时并行地将权重值扩展回原始权重张量大小。
在以下描述中,将描述各种示例。出于解释的目的,将阐述具体的配置和细节,以便提供对示例的透彻理解。然而,对本领域的技术人员将显而易见的是,没有具体细节的情况下也可以实践示例。此外,为了不使所描述的实施方案变得模糊,可能会省略或简化众所周知的特征。
图1示出了计算系统100的示例。计算系统100包括DMA引擎150、系统存储器120和加速器130。计算系统100可以包括未具体示出的其他部件,诸如主机处理器。加速器130可以是神经网络加速器(例如,神经网络处理器、张量处理单元等),并且可以包括处理引擎阵列132(例如,脉动阵列)、状态缓冲器134和结果缓冲器136。处理引擎阵列132可以包括以行和列布置的处理引擎阵列。每个处理引擎能够执行乘加运算。状态缓冲器134用于存储输入数据,诸如用于处理引擎阵列132的特征图值和权重值。在运算期间,输入数据沿阵列的行从状态缓冲器134移位到处理引擎阵列132中。处理引擎的计算结果沿列方向累加,并且列输出数据存储在结果缓冲器136中。
在大多数情况下,由处理引擎阵列132处理的张量可以具有数千乃至数百万个元素。因为张量的并非所有元素都可以同时适合加速器130,所以系统存储器120可以用于存储当前未在加速器130中处理的数据。随着计算在执行,加速器130需要的数据可以从系统存储器120传输到加速器130,并且加速器130不再需要的数据可以从加速器130传输到系统存储器120。系统存储器120可以使用一个或多个动态随机存取存储器(DRAM)装置122-1至122-n和/或其他类型的存储器来实现。在其他实现方式中,系统存储器可以例如用静态随机存取存储器(SRAM)、闪存、3D交叉点存储器或它们的任何组合来实现。
系统存储器120与计算系统100的其他部件之间的数据传输可涉及主机处理器(未示出)向系统存储器120发出读取和写入命令。此类通过主机处理器的存储器访问可能导致不必要的延迟,尤其是当主机处理器不是正被访问的数据的消耗方或生成器时。为了绕过主机处理器,可以使用DMA引擎150在系统存储器120与加速器130之间直接交换数据。
DMA引擎150可以包括DMA控制器162、描述符队列164、输入数据缓冲器152和输出数据缓冲器154。此外,DMA引擎150可以包括可以用于执行加速器130的权重张量的即时解压缩的解压缩电路块170。描述符队列164可以被实现为循环缓冲器或环形队列,并被配置为存储由DMA引擎150用来在系统存储器120与计算系统100的其他部件之间交换数据的一组存储器描述符。例如,当加速器130有数据要存储在系统存储器120中或正在请求来自系统存储器120的数据时,可以将提供源地址和目的地地址的存储器描述符置于描述符队列164中以发起传输。在一些实现方式中,DMA引擎可以包括多个描述符队列。例如,DMA引擎110可以包括用于将数据写入系统存储器120的描述符队列,以及用于从系统存储器120读取数据的描述符队列。在一些实现方式中,DMA引擎110可以实现多个数据传输通道(例如,用于计算系统100的不同部件的不同通道),并且每个传输通道可以具有其自己的描述符队列或用于每个传输方向的描述符队列对。
DMA控制器162可以用于管理DMA引擎150的操作。例如,DMA控制器162可以维持DMA引擎150的描述符队列164的头指针和尾指针。DMA控制器162可以监测描述符队列164中可用条目的数目以防止队列溢出。在一些实现方式中,DMA控制器162还可以维持完成状态并为计算系统100的部件生成中断。DMA控制器162可以通过从存储器描述符中的指定源获得数据并将该数据置于输入缓冲器152中以准备传输到目标目的地,来处理描述符队列164中的存储器描述符。输入缓冲器152可以用于临时保存与准备好进行处理的存储器描述符相关联的数据,同时等待前一存储器描述符的处理完成。输出缓冲器154可以用于临时保存准备写出到目标位置的数据。在一些实现式方中,经由输入缓冲器152读取的数据可以在被置于目标位置之前由DMA引擎150修改,并且输出缓冲器154可以用于在数据被写出之前存储经修改的数据。
解压缩电路块170可以将经压缩权重张量在线扩展回其原始权重张量大小。例如,当描述符队列164中的存储器描述符指示要从系统存储器120读取权重张量并将其置于加速器130的状态缓冲器134中时,存储器描述符中的压缩指示符(或与权重张量一起存储的信息)可以指示权重张量已被压缩。输入缓冲器152可以从系统存储器读取经压缩权重张量并将经压缩权重张量提供给解压缩电路块170。解压缩电路块170可以通过在将权重张量复制到输出缓冲器154中以置于加速器130的状态缓冲器134中之前在权重张量中插入附加字节,来扩展经压缩权重张量。通过在DMA引擎150而不是加速器130中执行解压缩,加速器130可以在等待新的权重张量时继续并行地执行计算。这可以增加计算系统100的总吞吐量并缩短切换权重张量时的延迟。
图2示出了用于权重张量压缩的技术的示例的概念图。为了便于解释,图2中所示的初始权重张量202包括八个权重值并且被示为一行权重值。然而,应当理解,权重张量可以包括任何数量的权重值(例如,数千个权重值),并且权重张量可以表示为具有行和列的矩阵形式。
初始权重张量202可以是从训练操作生成的权重张量。在一些实现方式中,初始权重张量202可以是在神经网络模式的训练过程完成之后得到的权重张量,并且初始权重张量202可以用于推理操作。在一些实现方式中,初始权重张量202可以是在训练过程中间的一个或多个训练迭代之后得到的权重张量,并且初始权重张量202可用作下一训练迭代的输入。在所示的示例中,初始权重张量202包括六个非零值W0、W1、W3、W4、W5和W7,以及两个零值。如上所述,具有稀疏权重张量并不少见。这样,训练操作可产生一个或多个具有零值的权重,如图所示。
在一些实现方式中,可以对初始权重张量202执行稀疏性分析262。稀疏性分析262可评估初始权重张量202的稀疏性并确定初始权重张量202是否满足某些稀疏性标准。例如,初始权重张量202的稀疏性可被计算为具有零值的权重与权重总数的比率,并且可确定初始权重张量202是否满足目标稀疏性阈值。在图2所示的示例中,初始权重张量202具有25%的稀疏性。如果目标稀疏性阈值被设置为50%,则初始权重张量202不满足稀疏性标准,并且可以执行对初始权重张量202中的权重值的裁剪以达到稀疏性标准。又如,稀疏性标准可以按照非零权重值的最大数量来表达,而与权重的总数无关(例如,以确保权重矩阵在存储限制内),并且可以对初始权重张量202中的非零权重值的数量进行计数以确定是否满足稀疏性标准。稀疏性标准也可用其他统计度量来表达,诸如使权重值的一定数量的标准偏差为零。在设置稀疏性标准时可能考虑的因素可以包括计算系统的存储容量、权重张量的大小、神经网络模型的精度要求等。在一些实现方式中,还可以基于训练过程的阶段来调整稀疏性标准。例如,稀疏性标准在训练开始时可以不那么稀疏(较少数量的零权重值),并且随着训练的进行,稀疏性标准可增加(较多数量的零权重值)。
如果稀疏性分析262确定初始权重张量202不满足稀疏性标准,则可以执行权重裁剪操作264以将初始权重张量202中的一些非零权重值强制变为零,从而生成经修改权重张量204。权重剪裁操作264可以将量值低于阈值的非零权重值强制变为零。阈值可以是预定值,或可以调整阈值,使得经修改权重张量204可满足稀疏性标准。在一些实现方式中,权重裁剪操作264可以将多个最低非零权重值强制变为零。类似地,要强制的权重值的数量可以是预定数量,或可以调整要强制的权重值的数量,使得经修改权重张量204可满足稀疏性标准。在图2所示的示例中,权重剪裁操作264强制两个最低权重值W1和W4的量值而言变为零,以满足具有50%稀疏性的稀疏性标准。
在一些实现方式中,可省略稀疏性分析262和/或权重裁剪操作264。例如,不论张量的初始稀疏性如何,都可以对初始权重张量进行权重剪裁操作264,使得可省略稀疏性分析262。在一些情况下,可以在没有任何权重剪裁的情况下执行稀疏性分析262,诸如当初始权重张量满足稀疏性标准时的情况。此外,在一些实现方式中,可省略稀疏性分析262和权重裁剪操作264两者,并且可按原样压缩初始权重张量202。
可以执行权重压缩266,以通过从经修改权重张量204(或初始权重张量202)中移除任何零值来减小初始权重张量202的存储大小。在图2所示的示例中,经压缩权重张量226仅包括经修改权重张量204的非零权重值(例如,W0、W3、W5和W7)。为了允许经压缩权重张量226在用于计算时能够扩展,生成压缩标头220以提供关于零值(或非零值)的位置和经解压缩权重张量的大小的信息。例如,压缩标头220可以包括位图222,以提供指示经解压缩权重张量中的零权重值(或非零权重值)的位置的索引信息。位图222可以是包含等于权重张量中的元素或权重值的数量的位数的二进制位图。在图2所示的示例中,权重张量具有八个元素,因此位图222包含八个位,其中每个位表示一个元素或一个权重值。位图222中的值“1”指示权重张量中的对应元素是非零值,而位图222中的值“0”指示权重张量中的对应元素具有零值。在一些实现方式中,指示权重值是零还是非零的位图值可反转。在一些实现方式中,可以使用其他值来表示非零值与零值的存在。
压缩标头220还可以包括指示权重张量中的权重值的大小或数量的长度值228。在图2所示的示例中,权重张量具有8个元素,因此长度值224是8。压缩标头220可与经压缩权重张量226一起存储(例如,存储在系统存储器中),使得读取经压缩权重张量226的部件(例如,DMA引擎)可访问压缩标头220以获得关于如何扩展或解压缩经压缩权重张量226的信息。
为了重新生成权重张量(例如,用于加载到脉动阵列中,和/或用于后续训练或推理操作),可以对经压缩权重张量266执行权重扩展操作268,以在权重张量中的适当位置重新插入零值。例如,可以读取包含指示零权重值的位置的索引信息的位图222,并且可以按照权重值出现在经压缩权重张量226中的顺序将非零权重值放置在位图222中的“1”值的对应索引处的经解压缩权重张量250中。因此,W0被置于经解压缩权重张量250的索引0处,W3被置于索引3处,W5被置于索引5处,并且W7被置于索引7处。经解压缩权重张量250的剩余权重值被设置为零。
通过比较,假设权重值是32位浮点数,则存储初始权重张量202将占用256个位。相反,将经压缩权重张量226与压缩标头220一起存储将占用128个位用于非零权重值,8个位用于位图220,以及4个位用于长度值,总共140个位。更一般地,压缩比可以确定为:
CR=(NNZ*DS*8+m*n+log2(m*n))/(m*n*DS*8)
其中NNZ是非零元素的数量,m是原始未压缩权重张量中的列数,n是原始未压缩权重张量中的行数,m×n是数据中的元素总数,并且DS是元素数据大小。
在一些实现方式中,为了进一步减小权重张量大小,可以将权重值量化以减少每个权重值所需的位数。例如,可以将32位浮点权重值量化成8位整数或8位浮点数,以将每个权重值的大小减小到四分之一。权重值的量化可以在压缩之前对初始权重张量202或经修改权重张量204执行,或者可以在压缩之后对经压缩权重张量226执行。在一些情况下,量化权重值可以将权重值向下舍入到零,因此在压缩之前执行量化可增大权重张量的稀疏性。
图3A示出了DMA引擎350的一部分的示例的更详细框图。DMA引擎350可以是例如DMA引擎150。DMA引擎350包括被配置为存储从加速器330读取的权重张量的输入缓冲器352、被配置为将经压缩权重张量写入系统存储器320的输出缓冲器354、以及被配置为将权重张量压缩成经压缩权重张量的DMA控制器362。在操作期间,DMA控制器362可以被配置为例如在数据传输的存储器描述符中的操作类型指示在存储于系统存储器330中之前应压缩权重张量340时对权重张量340执行压缩操作。压缩可以由DMA引擎350在加速器330正在执行其他计算时并行执行。为了有利于权重张量的压缩,DMA控制器362可以包括剪裁模块372、压缩模块374和标头生成模块376。
如果需要,可以使用剪裁模块372将权重张量340的一些非零权重值强制变为零。剪裁模块372可以对权重张量340执行稀疏性分析(类似于参考图2所述的稀疏性分析262)以确定权重张量340是否具有足够的零值。如果加成值应被强制变为零,则剪裁模块372可以将量值低于阈值的权重值强制变为零,或者将具有最小量值的一定数量的权重值强制变为零以生成经剪裁权重张量。另选地或另外地,剪裁模块372可量化权重张量340以降低权重值的精度并将一些权重值向下舍入到零。
压缩模块374可以用于从由剪裁模块372生成的经剪裁权重张量中移除零值。例如,压缩模块374可以将每个权重值与零进行比较并丢弃被设置为零的任何权重值。可以将非零权重值作为经压缩权重张量346以与它们出现在由剪裁模块372生成的经剪裁权重张量中相同的顺序写入输出缓冲器364。为了有利于经压缩权重张量346的解压缩,标头生成模块376可生成包括权重张量的长度以及关于经裁剪权重张量的哪个权重值具有非零值(或哪个权重值具有零值)的指示符的压缩标头342。压缩标头342可被写入输出缓冲器354并与经压缩权重张量346一起存储在系统存储器330中。
图3B示出了上面参考图3A描述的DMA引擎350的另一方面。DMA引擎350可以是例如DMA引擎150。DMA引擎350包括被配置为存储从系统存储器320读取的数据集的输入缓冲器352、被配置为将数据输出到加速器330的输出缓冲器354、以及沿DMA引擎350的数据传输路径耦接在输入缓冲器352与输出缓冲器354之间的解压缩电路块370。解压缩电路块370被配置为:确定存储在输入缓冲器352中的数据集包括对应于用于神经网络模型的权重张量的经压缩权重张量的数据;确定权重张量的大小;以及在将权重值集传输到输出缓冲器354时,通过插入零权重值来解压缩经压缩权重张量。
在操作期间,输入缓冲器352可以基于存储器描述符中的信息(例如,源地址)从系统存储器320读取并存储数据集。数据集可以包括压缩标头342和经压缩权重张量346。在一些实现方式中,存储器描述符可以包括与正被读取的数据集相关联的操作类型,以指示正被传输的数据包括经压缩权重张量346。解压缩电路块370可以使用存储器描述符中的此操作类型来确定存储在输入缓冲器352中的数据集包括来自经压缩权重张量的数据,并且对该数据执行解压缩操作。在一些实现方式中,输入缓冲器352可能缺乏足够的存储容量来读取和存储整个经压缩权重张量346。这样,经压缩权重张量346可作为数据流被处理,并且压缩标头342可首先被读取以提供由解压缩电路370使用的信息,由此随着从系统存储器320读取权重值而执行对经压缩权重张量346的即时解压缩。
压缩标头342可以包括指示权重张量大小的长度值,以及指示权重张量中要插入零权重值的位置的索引信息。在一些实现方式中,长度字段可以包括行和列的大小信息。索引信息可以实现为二进制位图,并且二进制位图可以包括与权重张量中的元素或权重值的数量相同的位数。
为了有利于经压缩权重张量346的扩展,解压缩电路块370可实现多路复用器372,所述多路复用器用于针对全长的权重张量的每个权重值在将非零权重值或零值写入输出缓冲器354之间进行选择。来自压缩标头的索引信息(例如,位图)可用作多路复用器372的选择信号。多路复用器372可一次对权重张量的多个字节进行操作,并且一次被操作的字节数可仅由输入缓冲器352的大小来限制。当解压缩电路块370将经解压缩权重张量340的权重值提供给输出缓冲器354时,输出缓冲器354可开始将经解压缩权重张量340写入加速器330。在一些实现方式中,经解压缩权重张量340可以包括替换了量值低于特定阈值的原始权重值的经量化的权重值和/或零值。
DMA引擎350可以在加速器330正在使用先前的权重张量执行一组计算时执行经压缩权重值集的解压缩或扩展。通过将解压缩功能卸载到DMA引擎350,可缩短切换权重张量之间的延迟,并且可增加系统的总吞吐量。压缩权重张量还减少了从系统存储器传输的数据量,因此减少了对系统存储器320的读访问次数,这加速了将权重张量加载到加速器330中。
为了进一步说明压缩技术,图4示出了表示为二维矩阵的权重张量的示例,并且图5示出了压缩二维权重张量的示例。参考图4,初始权重张量402可以是包括64个权重值的8×8权重矩阵。初始权重张量402是包括37个零值和27个非零值的稀疏矩阵。因此,初始权重张量402的稀疏性为57.8%。非零权重值表示为Wrc,其中r是权重值的行索引,并且c是权重值的列索引。
虽然初始权重张量402已经是稀疏的并且可被压缩,但可通过执行权重剪裁操作来实现进一步的大小减小。在图4所示的示例中,初始权重张量402被剪裁以实现65%的稀疏性。参考经修改权重张量404,非零权重值W16、W51、W52、W63和W74已被零值替换。用经修改权重张量404中的下划线示出了替换这些权重值的零值。被替换的非零权重值可以是量值低于某一阈值的值,或可以是在量值上被替换以实现目标65%稀疏性的五个最小权重值。例如,可以基于权重张量的最大存储大小限制来设置65%的目标稀疏性。
接下来参考图5,通过从经修改权重张量404中移除所有零值,压缩经修改权重张量404以生成经压缩权重张量526。为了有利于经压缩权重张量526的解压缩,还生成压缩标头520。压缩标头520可以包括指示非零权重值(或零权重值)的位置的索引信息522,以及指示权重张量中的权重值的长度或数量的长度值524。长度值524是0x40,以指示权重张量中的64个元素或权重值。索引信息522可以是表示非零权重值的位置的压平位图。例如,索引信息522的第一个字节是0xC0,其表示权重张量404的第一行中的非零权重值的位置。下一个字节0xAO表示权重张量404的第二行中的非零权重值的位置,依此类推。压缩标头520可以与经压缩权重张量526一起存储在例如系统存储器中。当权重张量404用于计算时,读取具有经压缩权重张量526的压缩标头520的诸如DMA引擎的部件可以使用压缩标头520来将经压缩权重张量526解压缩或扩展回权重张量404。
图6示出了可以用于生成经压缩权重张量的过程600的流程图。过程600可以例如由用于训练神经网络模型的计算系统来执行。在一些实现方式中,计算系统可以使用一个或多个神经网络加速器来执行训练过程。过程600可以实现为存储在计算机可读存储介质中的代码,或实现为其他类型的软件实现方式。此外,过程600可以使用类似于参考图2所述的压缩技术。
在执行过程600之前,可以对神经网络模型执行训练操作以生成初始权重张量。训练操作可以是训练过程中间的训练的一次或多次迭代,或可以是完成用以生成用于推理操作的权重张量的训练过程的训练操作。训练操作可以包括生成权重梯度的前向传递,以及使用权重梯度来更新起始权重值以生成初始权重张量的后向传播传递。
过程600可以在框604处开始,在该处,可以基于初始权重张量的稀疏性来做出修改初始权重张量的确定。例如,如果初始权重张量不满足某些稀疏性标准(例如,稀疏性比、零值的数量)等,则可做出修改初始权重张量的确定。在一些实现方式中,可做出始终修改初始权重张量的确定。
在框606处,通过将初始权重张量中的非零权重值的子集替换为零值来修改初始权重张量,以生成用于神经网络模型的权重张量。可通过强制非零权重值的子集变为零来修改初始权重张量。例如,通过将非零权重值的量值与阈值进行比较,确定非零权重值的量值低于阈值,并且将非零权重值替换为零值,可以将量值小于特定阈值的权重值强制变为零。在一些实现方式中,量值中的多个最小权重值可被强制变为或替换为零值。初始权重张量的权重值可另外或另选地被量化,并且由于量化,一个或多个非零权重值可向下舍入到零。
在框608处,通过从在框606中修改的权重张量中移除零值来生成经压缩权重张量。经压缩权重张量可以具有比初始权重张量少得多的权重值,具体取决于被压缩的权重张量的稀疏性。还可以在移除零值之前生成包括关于零值在权重张量中的位置的信息的压缩标头。压缩标头还可以包括与权重张量的大小有关的大小信息。
在框610处,使用比初始权重张量更少的存储量将经压缩权重张量存储在例如系统存储器中。在一些实现方式中,诸如压缩标头的压缩信息可与经压缩权重张量一起存储。
图7示出了可以用于解压缩或扩展经压缩权重张量的过程700的流程图。过程700可以例如由DMA引擎在从系统存储器检索权重张量以便置于加速器中的过程中执行。这允许加速器在DMA引擎解压缩经压缩权重张量时使用另一权重张量来执行神经网络计算。过程700可以使用类似于参考图2和图3所述的解压缩技术。
过程700可通过接收将数据从系统存储器传输到加速器(例如,神经网络加速器)的请求而在框702处开始。请求可以是存储器描述符的形式,其包括源地址、目的地地址、要传输的数据的长度以及指示正在传输的数据应被解压缩的操作类型。例如,源地址可指向系统存储器中的位置,而目的地地址可指向加速器中的位置。存储器描述符可以例如由数据调度程序置于描述符队列中,以供DMA引擎处理。
在框704处,从系统存储器中读取在存储器描述符的源地址中指定的数据集。数据集可以包括压缩标头和经压缩权重张量。压缩标头可以包括指示零权重值(或非零值)在神经网络模型的权重张量中的位置的索引信息。压缩标头还可以包括指示权重张量大小的长度字段。在一些实现方式中,如果用于加载到加速器中的权重张量维度可变化,则长度字段可以包括行尺寸和列尺寸。
在框706处,可以做出从系统存储器读取的数据集包括对应于用于神经网络模型的权重张量的非零权重值的经压缩权重张量的确定。例如,可以通过数据传输请求的存储器描述符中的操作类型来做出确定。在一些实现方式中,指示经压缩权重张量的操作类型或数据类型也可以包括在与经压缩权重张量一起存储的压缩标头中。
在框708处,确定权重张量的大小。可以例如从压缩标头中的长度字段来确定权重张量的大小。在一些实现方式中,DMA引擎可以使用权重张量的大小为经解压缩权重张量分配输出缓冲器中的适当空间量。
在框710处,将零权重值插入该非零权重值集中,以解压缩经压缩权重张量。可根据压缩标头中的索引信息插入零权重值。在一些实现方式中,索引信息可用作多路复用器的选择信号,从而在以权重张量的适当索引向DMA引擎的输出缓冲器写入零值或非零权重值之间进行选择。
在框712处,将经解压缩权重张量写入加速器中的目标存储器(例如,状态缓冲器)。在接收到经解压缩权重张量时,加速器可以将权重张量加载到处理引擎阵列中并开始使用经解压缩权重张量来执行计算。计算可以是连续训练过程的一部分,或可以用于推理操作。
图8是生成可以包括加速器802的集成电路装置的示例的框图。在各种示例中,对于一组输入数据(例如,输入数据850),加速器802可以使用处理引擎阵列810、激活引擎816和/或池化引擎818来执行计算。在一些示例中,示例性加速器802可以是诸如神经网络处理器的处理器的集成电路部件。处理器可以具有其他集成电路部件,包括另外的加速器引擎。
在各种实现方式中,存储器子系统804可以包括多个存储体814。在这些实现方式中,每个存储体814可以是可独立访问的,这意味着一个存储体的读取独立于另一个存储体的读取。类似地,对一个存储体的写入不影响或限制对不同存储体的写入。在一些情况下,可以同时读取和写入每个存储体。可以使用各种技术来获得可独立访问的存储体814。例如,每个存储体可以是物理上分离的存储器部件,其地址空间与每个其他存储体的地址空间分离并独立于每个其他存储体的地址空间。在该示例中,每个存储体可以具有至少一个读取通道并且可以具有至少一个可以同时使用的单独写入通道。在这些示例中,存储器子系统804可以允许同时访问多个存储体的读取或写入通道。又如,存储器子系统804可以包含仲裁逻辑,使得例如多个存储体814的输出之间的仲裁可导致多于一存储体的输出被使用。在这些和其他示例中,虽然由存储器子系统804全局管理,但每个存储体可以独立于任何其他存储体来进行操作。
使存储体814可独立访问可提高加速器802的效率。例如,可以同时读取值并将其提供到处理引擎阵列810的每一行,使得整个处理引擎阵列810可以在一个时钟循环中使用。又如,可在由处理引擎阵列810计算的结果被写入存储器子系统804的同时读取存储体814。相比之下,单个存储器可能一次只能服务一个读取或写入。例如,对于单个存储器,可能需要多个时钟周期来读取处理引擎阵列810的每一行的输入数据,之后才能启动处理引擎阵列810。
在各种实现方式中,存储器子系统804可以被配置为同时服务多个客户端,包括处理引擎阵列810、激活引擎816、池化引擎818和通过通信结构820访问存储器子系统804的任何外部客户端。在一些实现方式中,能够服务多个客户端可能意味着存储器子系统804具有至少与客户端一样多的存储体。在一些情况下,处理引擎阵列810的每一行可作为单独的客户端计数。在一些情况下,处理引擎阵列810的每一列可输出结果,使得每一列可作为单独的写入客户端计数。在某些情况下,来自处理引擎阵列810的输出可被写入可随后为处理引擎阵列810提供输入数据的存储体814。又如,激活引擎816和池化引擎818可以包括多个执行通道,每个执行通道可以是单独的存储器客户端。例如,可以使用静态随机存取存储器(SRAM)来实现存储体814。
在各种实现方式中,存储器子系统804可以包括控制逻辑。控制逻辑可以例如跟踪每个存储体814的地址空间、识别要读取或写入的存储体814和/或在存储体814之间移动数据。在一些实现方式中,可以将存储体814硬连线到特定客户端。例如,可以将一组存储体814硬连线以向处理引擎阵列810的行提供值,其中一个存储体服务一行。又如,可以将一组存储体硬连线以从处理引擎阵列810的列接收值,其中一个存储体接收针对一列的数据。
处理引擎阵列810是示例性加速器802的计算矩阵。处理引擎阵列810可以例如执行并行积分、卷积、相关和/或矩阵乘法等。处理引擎阵列810包括以行和列布置的多个处理引擎811,使得由一个处理引擎811输出的结果可直接输入到另一个处理引擎811中。因此,不在处理引擎阵列810的外侧边缘上的处理引擎811可从其他处理引擎811而不是从存储器子系统804接收要进行操作的数据。
在各种示例中,处理引擎阵列810使用脉动执行,其中数据以规则间隔从不同方向到达每个处理引擎811。在一些示例中,输入数据可以从左侧流入处理引擎阵列810,而权重值可以在顶部加载。在一些示例中,权重和输入数据可以从左侧流动,而部分和可以从上向下流动。在这些和其他示例中,乘积累加运算作为对角波前移动通过处理引擎阵列810,其中数据在整个阵列中向右及向下移动。控制信号可以与权重同时在左侧输入,并且可以随计算横向和向下流动。
在各种实现方式中,处理引擎阵列810中的列数确定处理引擎阵列810的计算容量,而行数确定用于实现处理引擎阵列810的最大利用率所需的存储器带宽。处理引擎阵列810可以具有例如64列和428行,或一些其他列数和行数。
处理引擎811的示例在图8中以插图示出。如该示例所示,处理引擎811可以包括乘法器-累加器电路。例如,从左边的输入可以包括输入数据i和权重值w,其中输入数据是取自一组输入数据或一组中间结果的值,以及权重值来自将神经网络的一层连接到下一层的一组权重值。例如,一组输入数据可以是为识别或对象识别而提交的图像、为言语识别提供的音频剪辑、用于自然语言处理或机器翻译的文本字符串、或者需要分析以确定下一步行动的游戏的当前状态等。在一些示例中,输入数据和权重值被输出到右边,用于输入到下一处理引擎811。
在例示的示例中,来自上文的输入可以包括部分和p_in,其由处理引擎阵列810从另一处理引擎811或从前一轮计算提供。当开始计算一组新的输入数据时,处理引擎阵列810的顶部行可接收p_in的固定值,诸如零。如该示例所示,i和w相乘,并且结果与p_in求和以产生新的部分和p_out,其可被输入到另一处理引擎811。处理引擎811的各种其他实现方式是可能的。
来自处理引擎阵列810中最后一行的输出可临时存储在结果缓冲器812中。结果可以是中间结果,其可被写入存储体814以提供给处理引擎阵列810用于另外计算。另选地,结果可以是最终结果,其一旦被写入存储体814,就可通过通信结构820从存储器子系统804读取,以由系统输出。
在一些实现方式中,加速器802包括激活引擎816。在这些实现方式中,激活引擎816可以将来自处理引擎阵列810的结果组合成一个或多个输出激活。例如,对于卷积神经网络,可以对来自多个通道的卷积求和以产生单个通道的输出激活。在其他示例中,可能需要将来自处理引擎阵列810中的一列或多列的结果累加以产生用于神经网络中的单个节点的输出激活。在一些示例中,可以绕过激活引擎816。
在各种示例中,激活引擎816可以包括多个单独的执行通道。在这些示例中,执行通道可以对应于处理引擎阵列810的列,并且可以对一列的输出执行操作,该操作的结果可以存储在存储器子系统804中。在这些示例中,激活引擎816可能够执行1至n个并行计算,其中n等于处理引擎阵列810中的列数。在一些情况下,可以同时执行计算中的一个或多个。每个执行通道可以执行的计算的示例包括指数、平方、平方根、恒等式、二元阶跃、双极阶跃、sigmoidal和ramp等其他示例。
在一些实现方式中,加速器802可以包括池化引擎818。池化是处理引擎阵列810的列的输出的组合。例如,组合可以包括计算最大值、最小值、平均值、中值、求和、乘法或其他逻辑或数学组合。在各种示例中,池化引擎818可以包括可对来自处理引擎阵列810的对应列的值进行操作的多个执行通道。在这些示例中,池化引擎818能够执行1至n个并行计算,其中n等于处理引擎阵列810中的列数。在各种示例中,池化引擎818的执行通道可以并行和/或同时操作。在一些示例中,可以绕过池化引擎818。
本文中,激活引擎816和池化引擎818可以被统称为执行引擎。处理引擎阵列810是执行引擎的另一个示例。执行引擎的另一个示例是可以位于加速器802外部的直接存储器访问(DMA)引擎。
输入数据850可以通过通信结构820到达。通信结构820可以将加速器802连接到处理器的其他部件,诸如可以从输入/输出(I/O)装置、存储驱动器或网络接口获得输入数据850的DMA引擎。输入数据850可以是例如一维数据,诸如字符串或数字序列,或二维数据,诸如图像的像素值阵列或音频信号随时间变化的频率和幅值。在一些示例中,输入数据850可以是三维的,例如由自动驾驶车辆使用的情境信息或虚拟现实数据可能就是这种情况。在一些实现方式中,存储器子系统804可以包括用于输入数据850的单独缓冲器。在一些实现方式中,当加速器802接收到输入数据850时,输入数据850可以存储在存储体814中。
在一些示例中,加速器802可以实现神经网络处理引擎。在这些示例中,对于一组输入数据850,加速器802可以执行神经网络以执行训练该神经网络的任务。对一组输入数据执行神经网络可以被称为推理或执行推理。
神经网络的权重可以连同神经网络将在其上操作的输入数据850一起存储在存储器子系统804中。神经网络还可以包括指令,其可以对处理引擎阵列810编程以对权重和输入数据执行各种计算。指令还可以存储在存储器子系统804中、存储体814中或单独的指令缓冲器中。处理引擎阵列810可以输出表示神经网络的各个层的输出的中间结果。在一些情况下,可以针对由神经网络的某些层调用的计算启用激活引擎816和/或池化引擎818。加速器802可以将中间结果存储在存储器子系统804中,用于输入到处理引擎阵列810中以计算神经网络的下一层的结果。处理引擎阵列810还可以输出来自神经网络的最后一层的最终结果。最终结果可以存储在存储器子系统804中,然后被复制到主机处理器存储器或另一位置。
图9包括示出加速引擎900的示例的框图。加速引擎900是可以包括可能类似于图8所示的加速器的一个或多个加速器902a-902n的集成电路的示例。
在图9的示例中,加速引擎900包括多个加速器902a-902n,每个加速器可以执行一组操作。在各种示例中,加速器902a-902n用于特定类型的操作,使得加速器902a-902n可以比通用处理器执行类似操作时更快地执行这些操作。在各种示例中,为了执行一组操作,要对其执行操作的输入数据必须首先被移动到加速器902a-902n中。另外,在一些情况下,程序代码也被移动到加速器902a-902n中,从而对加速器902a-902n将对数据执行的操作进行编程。在例示的示例中,加速引擎900包括n个加速器902a-902n。可以包括在加速引擎900中的加速器的示例包括图形加速器、浮点加速器、神经网络加速器等。在各种示例中,加速器902a-902n可以各自相同(例如,加速器中的每一者为图形加速器)或可以不同(例如,加速器902a-902n包括图形加速器、浮点加速器和神经网络加速器)。
示例性加速引擎900还包括用于与外部存储器通信的DRAM控制器942a-942k。在该示例中,外部存储器是使用DRAM 930实现的。在例示的示例中,加速引擎900包括k个DRAM控制器942a-942k,其中的每一者能够与DRAM的一组独立的存储体通信。在其他示例中,其他类型的RAM技术可以用于外部存储器。DRAM控制器942a-942k也可以被称为存储器控制器。
在各种示例中,加速器902a-902n的输入数据和/或程序代码可以存储在DRAM 930中。不同的程序可以使加速器902a-902n执行不同的操作。例如,当加速器中的一个是神经网络加速器时,一个程序可以配置神经网络加速器来执行言语识别,而另一个程序可以配置神经网络加速器来执行图像识别。在各种示例中,不同的加速器902a-902n可以用不同的程序来编程,使得每个加速器执行一组不同的操作。在各种示例中,处理器948a-948s可以管理程序代码从DRAM 930到加速器902a-902n的移动。
示例性加速引擎900还包括用于与系统中的I/O装置932通信的I/O控制器944a-944p。例如,加速引擎900可以通过处理器总线与I/O装置通信。在一些示例中,可以使用外围部件互连(PCI)和/或PCI总线协议的变体来实现处理器总线。处理器总线可以将加速引擎900连接到I/O装置,诸如例如输入和输出装置、存储器控制器、存储装置和/或网络接口卡等。在一些示例中,I/O控制器944-944p可以使加速引擎900能够充当主机处理器的I/O装置。例如,加速引擎900可以是来自主机处理器的输入数据和指示要对输入数据执行的操作(例如,特定计算或分析)的命令的接收者。在例示的示例中,加速引擎900包括p个I/O控制器944a-944p,其中的每一者可以包括单独的根复合体并且可以与一组单独的I/O装置932通信。在其他示例中,诸如超路径互连(UPI)之类的其他标准化总线协议可以用于主机总线。在其他示例中,可以使用专有总线协议。
加速引擎900中的数据移动可以由一个或多个处理器948a-948s管理,这些处理器也可以被称为数据管理处理器。在图9的示例中,加速引擎900包括结合到装置中的s个处理器948a-948s(例如,位于同一硅管芯上)。在其他示例中,处理器948a-948s可以在加速引擎900的外部(例如,位于不同管芯上和/或在不同封装中)。在一些示例中,处理器948a-948s可以管理数据从I/O装置932到加速器902a-902n或DRAM 930的移动。例如,输入数据可以位于I/O装置932处或处理器存储器中,并且处理器948a-948s可以将来自I/O装置932或处理器存储器的输入移动到加速器或DRAM 930中。又如,加速器902a-902n的程序代码可以位于I/O装置932上或位于处理器存储器中。
示例性加速引擎900还包括可以在加速器902a-902n、DRAM控制器942a-942k和I/O控制器944a-944p之间移动数据的DMA引擎946a-946d。DMA引擎946a-946d可以类似于图1和图3所示的DMA引擎,并且每一者可以包括相应的解压缩电路块947a-947d。在例示的示例中,加速引擎900包括d个DMA引擎946a-946d。在一些实现方式中,DMA引擎946a-946d可以被分配给特定任务,诸如将数据从DRAM控制器942a-942d移动到加速器902a-902n,或者在I/O控制器944a-944p和加速器902a-902n之间移动数据。这些任务可以例如通过将描述符与DMA引擎946a-946d排队来分配,其中描述符标识数据块的地址和要执行的操作(例如,读或写)。例如,描述符可以指导DMA引擎指示DMA控制器从DRAM 930读取数据块。又如,描述符可以指示DMA引擎将由DMA控制器读取的数据写入加速器。另外的描述符可用于将数据从加速器移动到DRAM 930。
在各种示例中,处理器948a-948s中的每一者可以负责管理不同加速器的数据移动。在一些示例中,处理器可以管理多于一个加速器的数据移动。类似地,在各种示例中,可以为处理器948a-948s中的每一者分配一个或多个DMA引擎946a-946d。在这些和其他示例中,处理器948a-948s、加速器902a-902n和DMA引擎946a-946d之间的关联由每个相应处理器执行的程序代码来确定。
在示例性加速引擎900中,各种部件可以通过芯片互连920通信。芯片互连920主要包括用于在加速引擎900的部件之间路由数据的布线。在一些情况下,芯片互连920可以包括最少量的逻辑,诸如用于控制数据方向的多路复用器、用于处理时钟域交叉的触发器以及时序逻辑。
图10包括示出其中可以使用加速引擎1060的主机系统1000的示例的框图。图10的加速引擎1060是可以包括诸如图9所示的一个或多个加速器的装置的示例。图10的示例性主机系统1000包括加速引擎1060、主机处理器1072、DRAM 1030或处理器存储器、I/O装置1032和支持系统1074。在各种实现方式中,主机系统1000可以包括此处未示出的其他硬件。
主机处理器1072是能够执行程序指令的通用集成电路。在一些示例中,主机处理器1072可以包括多个处理核。多核处理器可以包括同一处理器内的多个处理单元。在一些示例中,主机系统1000可以包括多于一个主机处理器1072。在一些示例中,主机处理器1072和加速引擎1060可以是一个芯片,诸如位于同一封装内的一个或多个集成电路。
在各种示例中,主机处理器1072可以通过一个或多个通信通道与主机系统1000中的其他部件通信。例如,主机系统1000可以包括主机处理器总线,主机处理器1072可以使用该总线与例如DRAM 1030通信。又如,主机系统1000可以包括I/O总线,诸如基于PCI的总线,主机处理器1072可以通过该总线与例如加速引擎1060和/或I/O装置1032通信。在各种示例中,主机系统1000可以另选地或另外地包括其他通信通道或总线,诸如串行总线、功率管理总线、存储装置总线等。
在一些示例中,在主机处理器1072上执行的软件程序可以接收或生成用于由加速引擎1060处理的输入。在一些示例中,程序可以选择适当的神经网络来针对给定输入执行。例如,程序可以用于语言翻译,并且可以选择能够进行语音识别和/或机器翻译的一个或多个神经网络。在这些和其他示例中,程序可以利用神经网络来配置加速引擎1060以执行,和/或可以在加速引擎1060上选择先前已被配置为执行所需神经网络的神经网络处理引擎。在一些示例中,一旦加速引擎1060已开始对输入数据的推理,主机处理器1072就可以管理数据(诸如权重、指令、中间结果、条件层的结果和/或最终结果)到加速引擎1060的移入或移出。
在一些示例中,使用加速引擎1060来进行推理的软件程序可以从加速引擎1060的条件层和/或从诸如DRAM 1030中的存储位置读取结果。在这些示例中,程序可以确定神经网络接下来应采取什么动作。例如,程序可以确定终止推理。又如,程序可以确定改变推理的方向,推理的方向可由较低层代码和/或神经网络处理器转换到下一层以执行。在这些和其他示例中,神经网络的执行流程可以由软件来协调。
DRAM 1030是由主机处理器1072用来存储主机处理器1072正在执行的程序代码以及正在操作的值的存储器。在一些示例中,神经网络的数据(例如,权重值、指令和其他数据)可以全部或部分存储在DRAM 1030中。DRAM是用于处理器存储器的常用术语,并且虽然DRAM是易失性存储器,但处理器存储器可以是易失性和/或非易失性的。虽然此处没有示出,但主机系统1000可以包括用于其他目的的其他易失性和非易失性存储器。例如,主机系统1000可以包括存储用于在通电时引导主机系统1000的引导代码和/或基本输入/输出系统(BIOS)代码的只读存储器(ROM)。
虽然此处没有示出,但DRAM 1030可以存储用于各种程序的指令,这些指令可以被加载到主机处理器1072中并由其执行。例如,DRAM 1030可以存储用于操作系统、一个或多个数据存储区、一个或多个应用程序、一个或多个驱动器和/或用于实现本文公开的特征的服务的指令。
操作系统可以管理和协调主机系统1000的整体操作,诸如调度任务、执行应用程序和/或控制器外围装置以及其他操作。在一些示例中,主机系统1000可以托管一个或多个虚拟机。在这些示例中,每个虚拟机可以被配置为执行其自己的操作系统。操作系统的示例包括Unix、Linux、Windows、Mac OS、iOS、Android等。另选地或另外地,操作系统可以是专有操作系统。
数据存储区可以包括由操作系统、应用程序或驱动器使用和/或操作的永久或临时数据。此类数据的示例包括网页、视频数据、音频数据、图像、用户数据等。在一些示例中,数据存储区中的信息可以通过网络提供给用户装置。在一些情况下,数据存储区可以另外地或另选地包括所存储的应用程序和/或驱动器。另选地或另外地,数据存储区可以存储标准和/或专有软件库,和/或标准和/或专有应用用户接口(API)库。数据存储区中存储的信息可以是机器可读目标代码、源代码、解释型代码或中间代码。
驱动器可以包括在主机系统1000中的部件之间提供通信的程序。例如,一些驱动器可以提供操作系统和外围装置或I/O装置1032之间的通信。另选地或附加地,一些驱动器可以提供应用程序和操作系统之间的通信,和/或主机系统1000可访问的应用程序和外围装置之间的通信。在许多情况下,驱动器可以包括提供众所周知的功能的驱动器(例如,打印机驱动器、显示器驱动器、硬盘驱动器、固态装置驱动器等)。在其他情况下,驱动器可以提供专有或专用功能。
I/O装置1032可以包括用于连接到用户输入和输出装置的硬件,诸如键盘、鼠标、笔、输入板、语音输入装置、触摸输入装置、显示器或监测器、扬声器和打印机,以及其他装置。I/O装置1032还可以包括存储驱动器和/或用于连接到网络1080的网络接口。例如,主机系统1000可以使用网络接口来与存储装置、用户终端、其他计算装置或服务器和/或其他网络以及各种示例通信。
在各种示例中,I/O装置1032中的一者或多者可以是存储装置。在这些示例中,存储装置包括非易失性存储器并且可以存储程序指令和/或数据。存储装置的示例包括磁存储装置、光盘、固态盘、闪存存储器和/或磁带存储装置等。存储装置可以容纳在与主机系统1000相同的机箱中,或者可以位于外部壳体中。存储装置可以是固定的(例如,通过螺钉附接)或可移除的(例如,具有物理释放机构并且可能具有热插拔机构)。
存储装置、DRAM 1030以及主机系统1000中的任何其他存储器部件是计算机可读存储介质的示例。计算机可读存储介质是能够以诸如主机处理器1072的装置可以读取的格式存储数据的物理介质。计算机可读存储介质可以是非暂时性的。非暂时性计算机可读介质可以在没有电力施加到介质时保留存储于其上的数据。非暂时性计算机可读介质的示例包括ROM装置、磁盘、磁带、光盘、闪存装置和固态驱动器等。如本文所使用的,计算机可读存储介质不包括计算机可读通信介质。
在各种示例中,存储在计算机可读存储介质上的数据可以包括程序指令、数据结构、程序模块、库、其他软件程序部件和/或可以在诸如载波或其他传输的数据信号内传输的其他数据。另外地或可选地,计算机可读存储介质可以包括文档、图像、视频、音频和可以通过使用软件程序来操作或操纵的其他数据。
在各种示例中,I/O装置1032中的一者或多者可以是基于PCI的装置。在这些示例中,基于PCI的I/O装置包括用于与主机系统1000通信的PCI接口。术语“PCI”或“基于PCI的”可以用于描述PCI总线协议族中的任何协议,包括原始PCI标准、PCI-X、加速图形端口(AGP)和PCI-Express(PCIe)或基于本文讨论的PCI协议的任何其他改进或衍生协议。基于PCI的协议是用于将诸如本地外围装置的装置连接到主机装置的标准总线协议。标准总线协议是数据传输协议,各个制造商已为其定义并采用了规范。制造商确保兼容装置与实现总线协议的计算系统兼容,并且反之亦然。如本文所用,基于PCI的装置还包括使用非易失性存储器快速(NVMe)进行通信的装置。NVMe是用于使用PCIe来访问附接到计算系统的非易失性存储介质的装置接口规范。
基于PCI的装置可以包括一个或多个功能。“功能”描述了可以由基于PCI的装置提供的操作的硬件和/或软件。功能的示例包括大容量存储控制器、网络控制器、显示控制器、存储器控制器、串行总线控制器、无线控制器以及加密和解密控制器等。在某些情况下,基于PCI的装置可以包括一个以上的功能。例如,基于PCI的装置可以提供大容量存储控制器和网络适配器。又如,基于PCI的装置可以提供两个存储控制器以控制两个不同的存储资源。在一些实现方式中,基于PCI的装置可以具有最多八个功能。
在一些示例中,基于PCI的装置可以包括单根I/O虚拟化(SR-IOV)。SR-IOV是可以包括在基于PCI的装置中的扩展能力。SR-IOV允许物理资源(例如,单个网络接口控制器)表现为多个虚拟资源(例如,64个网络接口控制器)。因此,提供特定功能的基于PCI的装置(例如,网络接口控制器)对于使用基于PCI的装置的装置而言可以表现为提供相同功能的多个装置。具有SR-IOV能力的存储适配器装置的功能可以被分类为物理功能(PF)或虚拟功能(VF)。物理功能是装置的可以被发现、管理和操纵的全功能。物理功能具有可以用于配置或控制存储适配器装置的配置资源。物理功能包括非虚拟化装置将具有的相同配置地址空间和存储器地址空间。物理功能可以具有与其相关联的多个虚拟功能。虚拟功能类似于物理功能,但为通常可能缺少配置资源的轻量功能,并且通常由其底层物理功能的配置来控制。每个物理功能和/或虚拟功能可以被分配给在主机装置上运行的相应执行线程(诸如例如虚拟机)。
在各种实现方式中,支持系统1074可以包括用于协调加速引擎1060的操作的硬件。例如,支持系统1074可以包括协调加速引擎1060的活动的微处理器,活动包括在加速引擎1060上来回移动数据。在该示例中,微处理器可以是能够执行微码的集成电路。微码是可以使集成电路能够在集成电路可执行的操作中具有一些灵活性的程序代码,但因为程序代码使用有限的指令集,所以微处理器可能具有比主机处理器1072更有限的能力。在一些示例中,由微处理器执行的程序存储在微处理器的硬件上,或存储在主机系统1000中的非易失性存储器芯片上。在一些示例中,微处理器和加速引擎1060可以位于芯片上,诸如位于同一管芯上或在同一封装内的一个集成电路。
在一些示例中,当在主机处理器1072上执行的程序请求神经网络的执行时,支持系统1074可以负责从主机处理器1072取得指令。例如,主机处理器1072可以向支持系统1074提供一组输入数据和要对该组输入数据执行的任务。在该示例中,支持系统1074可以识别能够执行任务的神经网络,并且可以对加速引擎1060编程以对该组输入数据执行神经网络。在一些示例中,支持系统1074仅需要选择神经网络处理器的适当的神经网络处理引擎。在一些示例中,在加速引擎1060可以开始执行神经网络之前,支持系统1074可能需要将用于神经网络的数据加载到加速引擎1060。在这些和其他示例中,支持系统1074还可以接收执行神经网络的输出并且将输出提供回主机处理器1072。
在一些示例中,支持系统1074的操作可以由主机处理器1072处理。在这些示例中,可能不需要支持系统1074,并且可以从主机系统1000中省略支持系统。
在各种示例中,主机系统1000可以包括主机系统、处理器节点、存储子系统和表示用户装置、服务提供商计算机或第三方计算机的I/O机箱的组合。
用户装置可以包括用于访问应用程序(例如,web浏览器或移动装置应用程序)的计算装置。在一些示例中,应用程序可以由计算资源服务或服务提供商来托管、管理和/或提供。应用程序可以使用户能够与服务提供商计算机交互以例如访问web内容(例如,网页、音乐、视频等)。用户装置可以是计算装置,诸如例如移动电话、智能电话、个人数字助理(PDA)、膝上型计算机、上网本计算机、台式计算机、瘦客户端装置、平板计算机、电子书(e-book)阅读器、游戏控制台等。在一些示例中,用户装置可以通过一个或多个网络与服务提供商计算机通信。另外,用户装置可以是由服务提供商计算机管理、控制的分布式系统的一部分,或以其他方式成为服务提供商计算机的一部分(例如,与服务提供商计算机集成的控制台装置)。
主机系统1000还可以代表一个或多个服务提供商计算机。服务提供商计算机可以提供被配置为在用户可与其交互的用户装置上运行的本机应用程序。在一些示例中,服务提供商计算机可以提供计算资源,诸如但不限于客户端实体、低延迟数据存储、持久数据存储、数据访问、管理、虚拟化、基于云的软件解决方案、电子内容性能管理等。服务提供商计算机还可以用于提供web主机、数据库、计算机应用程序开发和/或实现平台、前述的组合等。在一些示例中,服务提供商计算机可被提供为在主机计算环境中实现的一个或多个虚拟机。主机计算环境可以包括一个或多个快速供应和释放的计算资源。这些计算资源可以包括计算、联网和/或存储装置。主机计算环境也可以被称为云计算环境。服务提供商计算机可以包括可能被布置在集群中、作为服务器场或作为彼此不关联的单个服务器的一个或多个服务器,并且可以托管应用程序和/或基于云的软件服务。这些服务器可以被配置为集成的分布式计算环境的一部分。在一些示例中,服务提供商计算机可以另外地或另选地包括计算装置,诸如例如移动电话、智能电话、个人数字助理(PDA)、膝上型计算机、台式计算机、上网本计算机、服务器计算机、瘦客户端装置、平板计算机、游戏控制台等。在一些实例中,服务提供商计算机可以与一个或多个第三方计算机通信。
本文描述的模块可以是软件模块、硬件模块或其合适的组合。如果模块是软件模块,则模块可以体现在非暂时性计算机可读介质上并由本文描述的计算机系统中的任一者中的处理器处理。应注意,所描述的过程和架构可以在任何用户交互之前以实时或异步模式执行。这些模块可以前面附图中建议的方式配置,和/或本文描述的功能可以由作为单独模块存在的一个或多个模块提供,和/或本文描述的模块功能可以分布在多个模块上。
因此,应在说明性意义而不是限制性意义上理解本说明书和附图。然而,将显而易见的是,在不脱离如在权利要求中阐述的本公开的更宽泛精神和范围的情况下,可对其做出各种修改和改变。
可以鉴于以下条款来描述本公开的各种实现方式:
条款1.一种计算机实现的方法,其包括:
对神经网络模型进行训练操作以生成初始权重张量;
将所述初始权重张量中的非零权重值的子集替换为零值以生成用于所述神经网络模型的权重张量;
生成包括关于零值在所述权重张量中的位置的信息的压缩标头;
通过从所述权重张量中移除零值来生成经压缩权重张量;
将所述经压缩权重张量与所述压缩标头一起存储在系统存储器中;
通过直接存储器访问引擎从所述系统存储器检索所述经压缩权重张量与所述压缩标头;
在所述DMA引擎中使用所述压缩标头来解压缩所述经压缩权重张量以重新生成所述权重张量;
使用所述DMA引擎将所述权重张量加载到神经网络加速器中;以及
使用所述权重张量在所述神经网络加速器中执行神经网络计算以用于进一步训练或推理。
条款2.如条款1所述的计算机实现的方法,其中当所述DMA引擎解压缩所述经压缩权重张量时,所述神经网络加速器使用另一权重张量来执行神经网络计算。
条款3.如条款1至2中任一项所述的计算机实现的方法,其中替换所述初始权重张量中的非零权重值的所述子集包括:
将非零权重值与阈值进行比较;
确定所述非零权重值的量值小于所述阈值;以及
将所述非零权重值替换为零值。
条款4.如条款1至3中任一项所述的计算机实现的方法,其还包括量化权重值以生成所述初始权重张量。
条款5.一种直接存储器访问引擎,其包括:
输入缓冲器,所述输入缓冲器被配置为存储从系统存储器读取的数据集;
输出缓冲器,所述输出缓冲器被配置为将权重张量输出到神经网络加速器;以及
解压缩电路块,所述解压缩电路块耦接在所述输入缓冲器与所述输出缓冲器之间,其中所述解压缩电路块被配置为:
确定存储在所述输入缓冲器中的所述数据集包括对应于用于神经网络模型的权重张量的经压缩权重张量,其中所述经压缩权重张量包括非零权重值集;
确定所述权重张量的大小;
通过将零权重值插入所述非零权重值集中来解压缩所述经压缩权重张量;以及
将所述权重张量提供给所述输出缓冲器。
条款6.如条款5所述的直接存储器访问引擎,其中所述数据集包括由所述解压缩电路块用来解压缩所述经压缩权重张量的压缩标头。
条款7.如条款6所述的直接存储器访问引擎,其中所述压缩标头包括指示所述权重张量的大小的长度值。
条款8.如条款6所述的直接存储器访问引擎,其中所述压缩标头包含以下项中的至少一项:
指示所述权重张量的大小的长度值;或
指示所述权重张量中要插入所述零权重值的位置的索引信息。
条款9.如条款6所述的直接存储器访问引擎,其中所述压缩标头包括指示所述权重张量中要插入所述零权重值的位置的索引信息。
条款10.如条款8至9所述的直接存储器访问引擎,其中所述索引信息被实现为包含等于所述权重张量中的元素数量的位数的二进制位图。
条款11.如条款5至10中任一项所述的直接存储器访问引擎,其中所述解压缩电路块被配置为基于所述数据集的存储器描述符中的运算类型来确定所述数据集包括经压缩权重张量值。
条款12.如条款5至11中任一项所述的直接存储器访问引擎,其中所述解压缩电路块被配置为在所述神经网络加速器正在使用另一权重张量执行一组计算时解压缩所述经压缩权重张量。
条款13.如条款5至12中任一项所述的直接存储器访问引擎,其还包括被配置为在所述神经网络加速器正在执行计算时执行权重张量压缩的DMA控制器。
条款14.如条款5至13中任一项所述的直接存储器访问引擎,其中所述权重张量中的权重值是量化权重值。
条款15.如条款5至14中任一项所述的直接存储器访问引擎,其中所述权重张量包括替换了量值低于阈值的非零值的零值。
条款16.一种方法,其包括:
由直接存储器访问(DMA)引擎接收将数据从系统存储器传输到神经网络加速器的请求;
由所述DMA引擎从所述系统存储器读取数据集;
由所述DMA引擎确定所述数据集包括对应于用于神经网络模型的权重张量的经压缩权重张量,所述经压缩权重张量包括非零权重值集;
由所述DMA引擎确定所述权重张量的大小;
由所述DMA引擎在所述非零权重值集中插入零权重值以解压缩所述经压缩权重张量;以及
由所述DMA引擎将所述权重张量写入所述神经网络加速器中的缓冲器。
条款17.如条款16所述的方法,其中在所述神经网络加速器正在使用另一权重张量执行计算时执行所述DMA引擎对所述经压缩权重张量的解压缩。
条款18.如条款16至17中任一项所述的方法,其中所述数据集包括包含以下项中的至少一项的压缩标头:
指示所述权重张量的所述大小的长度字段;或
指示所述零权重值在所述权重张量中的位置的索引信息。
条款19.如条款16至17中任一项所述的方法,其中所述数据集包括包含指示所述零权重值在所述权重张量中的位置的索引信息的压缩标头。
条款20.如条款16至17中任一项所述的方法,其中所述数据集包括包含指示所述权重张量的所述大小的长度字段的压缩标头。
条款21.一种存储代码的非暂时性计算机可读介质,所述代码在由一个或多个处理器执行时使所述一个或多个处理器执行包括以下项的操作:
基于初始权重张量的稀疏性来确定修改所述初始权重张量;
通过将所述初始权重张量中的非零权重值的子集替换为零值来修改所述初始权重张量,以生成用于神经网络模型的权重张量;
通过从所述权重张量中移除零值来生成经压缩权重张量;以及
使用比所述初始权重张量更少的存储量来存储所述经压缩权重张量。
条款22.如条款21所述的非暂时性计算机可读介质,其中在所述初始权重张量中将非零权重值的所述子集替换为零值包括替换量值低于阈值的权重值。
条款23.如条款21至22中任一项所述的非暂时性计算机可读介质,其中存储所述经压缩权重张量包括将压缩信息与所述经压缩权重张量一起存储。
其他变体也在本公开的精神内。因此,尽管所公开的技术可容许各种修改和替代构造,但在附图中已示出并且在上文中详细描述所示的其特定示例。然而,应当了解,并不旨在将本公开限制于所公开的一种或多种具体形式,相反地,旨在涵盖落在如所附权利要求书限定的本公开的精神和范围内的所有修改、替代构造和等效物。
在描述所公开示例的上下文中(尤其是在所附权利要求书的上下文中),术语“一个(a,an)”和“所述”以及类似指称对象的使用应解释为涵盖单数和复数两者,除非在本文另外地指示或明显地与上下文矛盾。除非另外指出,否则术语“包括(comprising)”、“具有(having)”、“包括(including)”和“包含(containing)”应解释为开放式术语(即,意指“包括但不限于”)。术语“连接的”应解释为部分地或全部地纳入在以下解释内:附接至或结合在一起,即使存在介入物。除非本文另外指出,否则本文中对值范围的列举仅仅意图用作单独提及落在所述范围内的每个单独值的速记方法,并且如同在本文中单独叙述地那样将每个单独值并入本说明书中。除非本文中另外指出或与上下文明显矛盾,否则本文中所描述的所有方法都可以按任何合适的顺序执行。本文所提供的任何以及所有示例或示例性语言(例如,“诸如”)的使用仅意图更好地说明本公开的示例,并且除非另外要求,否则不会对本公开的范围施加限制。本说明书中的语言不应解释为将任何非要求保护的要素指示为实践本公开所必需。
除非另有特别说明,否则诸如短语“X、Y或Z中的至少一者”的析取语言在上下文内旨在理解为通常使用的情况以表示项目、项等可以是X、Y或Z或其任何组合(例如,X、Y和/或Z)。因此,这种析取语言一般不意图且不应暗示某些示例要求分别存在X中的至少一个、Y中的至少一个或Z中的至少一个。
本文中描述了本公开的各个示例,包括发明人已知用于执行本公开的最佳模式。在阅读前述描述之后,这些示例的变型对于本领域普通技术人员可变得显而易见。发明人希望技术人员视情况采用此类变型,并且发明人意图以不同于如本文具体描述的方式来实践本公开。因此,本公开包括适用法律允许的所附权利要求中提到的所述主题的所有修改和等同物。此外,除非本文另外指示或明显地与上下文矛盾,否则本公开涵盖其所有可能变型中的上述元素的任何组合。

Claims (15)

1.一种直接存储器访问引擎,其包括:
输入缓冲器,所述输入缓冲器被配置为存储从系统存储器读取的数据集;
输出缓冲器,所述输出缓冲器被配置为将权重张量输出到神经网络加速器;以及
解压缩电路块,所述解压缩电路块耦接在所述输入缓冲器与所述输出缓冲器之间,其中所述解压缩电路块被配置为:
确定存储在所述输入缓冲器中的所述数据集包括对应于用于神经网络模型的权重张量的经压缩权重张量,其中所述经压缩权重张量包括非零权重值集;
确定所述权重张量的大小;
通过将零权重值插入所述非零权重值集中来解压缩所述经压缩权重张量;以及
将所述权重张量提供给所述输出缓冲器。
2.如权利要求1所述的直接存储器访问引擎,其中所述数据集包括由所述解压缩电路块用来解压缩所述经压缩权重张量的压缩标头。
3.如权利要求2所述的直接存储器访问引擎,其中所述压缩标头包含以下项中的至少一项:
指示所述权重张量的大小的长度值,或
指示所述权重张量中要插入所述零权重值的位置的索引信息。
4.如权利要求3所述的直接存储器访问引擎,其中所述索引信息被实现为包含等于所述权重张量中的元素数量的位数的二进制位图。
5.如权利要求1至4中任一项所述的直接存储器访问引擎,其中所述解压缩电路块被配置为基于所述数据集的存储器描述符中的运算类型来确定所述数据集包括经压缩权重张量值。
6.如权利要求1至5中任一项所述的直接存储器访问引擎,其中所述解压缩电路块被配置为在所述神经网络加速器正在使用另一权重张量执行一组计算时解压缩所述经压缩权重张量。
7.如权利要求1至6中任一项所述的直接存储器访问引擎,其还包括被配置为在所述神经网络加速器正在执行计算时执行权重张量压缩的DMA控制器。
8.如权利要求1至7中任一项所述的直接存储器访问引擎,其中所述权重张量中的权重值是量化权重值。
9.如权利要求1至8中任一项所述的直接存储器访问引擎,其中所述权重张量包括替换了量值低于阈值的非零值的零值。
10.一种方法,其包括:
由直接存储器访问(DMA)引擎接收将数据从系统存储器传输到神经网络加速器的请求;
由所述DMA引擎从所述系统存储器读取数据集;
由所述DMA引擎确定所述数据集包括对应于用于神经网络模型的权重张量的经压缩权重张量,所述经压缩权重张量包括非零权重值集;
由所述DMA引擎确定所述权重张量的大小;
由所述DMA引擎在所述非零权重值集中插入零权重值以解压缩所述经压缩权重张量;以及
由所述DMA引擎将所述权重张量写入所述神经网络加速器中的缓冲器。
11.如权利要求10所述的方法,其中在所述神经网络加速器正在使用另一权重张量执行计算时执行所述DMA引擎对所述经压缩权重张量的解压缩。
12.如权利要求10至11中任一项所述的方法,其中所述数据集包括包含以下项中的至少一项的压缩标头:
指示所述权重张量的所述大小的长度字段;或
指示所述零权重值在所述权重张量中的位置的索引信息。
13.一种存储代码的非暂时性计算机可读介质,所述代码在由一个或多个处理器执行时使所述一个或多个处理器执行包括以下项的操作:
基于初始权重张量的稀疏性来确定修改所述初始权重张量;
通过将所述初始权重张量中的非零权重值的子集替换为零值来修改所述初始权重张量,以生成用于神经网络模型的权重张量;
通过从所述权重张量中移除零值来生成经压缩权重张量;以及
使用比所述初始权重张量更少的存储量来存储所述经压缩权重张量。
14.如权利要求13所述的非暂时性计算机可读介质,其中在所述初始权重张量中将非零权重值的所述子集替换为零值包括替换量值低于阈值的权重值。
15.如权利要求13至14中任一项所述的非暂时性计算机可读介质,其中存储所述经压缩权重张量包括将压缩信息与所述经压缩权重张量一起存储。
CN202280022306.XA 2021-03-30 2022-03-29 稀疏机器学习加速 Pending CN116997909A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/301,271 2021-03-30
US17/301,271 US20220318604A1 (en) 2021-03-30 2021-03-30 Sparse machine learning acceleration
PCT/US2022/071421 WO2022213073A1 (en) 2021-03-30 2022-03-29 Sparse machine learning acceleration

Publications (1)

Publication Number Publication Date
CN116997909A true CN116997909A (zh) 2023-11-03

Family

ID=81308567

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202280022306.XA Pending CN116997909A (zh) 2021-03-30 2022-03-29 稀疏机器学习加速

Country Status (4)

Country Link
US (1) US20220318604A1 (zh)
EP (1) EP4315168A1 (zh)
CN (1) CN116997909A (zh)
WO (1) WO2022213073A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117931706A (zh) * 2024-03-25 2024-04-26 广东琴智科技研究院有限公司 一种dma传输数据预处理方法、计算子系统及智能计算平台

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11588499B2 (en) * 2018-11-05 2023-02-21 Samsung Electronics Co., Ltd. Lossless compression of neural network weights

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117931706A (zh) * 2024-03-25 2024-04-26 广东琴智科技研究院有限公司 一种dma传输数据预处理方法、计算子系统及智能计算平台
CN117931706B (zh) * 2024-03-25 2024-05-28 广东琴智科技研究院有限公司 一种dma传输数据预处理方法、计算子系统及智能计算平台

Also Published As

Publication number Publication date
WO2022213073A1 (en) 2022-10-06
EP4315168A1 (en) 2024-02-07
US20220318604A1 (en) 2022-10-06

Similar Documents

Publication Publication Date Title
US11907830B2 (en) Neural network architecture using control logic determining convolution operation sequence
JP7382925B2 (ja) ニューラルネットワークアクセラレーションのための機械学習ランタイムライブラリ
GB2560600A (en) Nueral Network Hardware
US11809953B1 (en) Dynamic code loading for multiple executions on a sequential processor
GB2568102A (en) Exploiting sparsity in a neural network
US20220188073A1 (en) Data-type-aware clock-gating
CN114830135A (zh) 算子的层次分区
US11494326B1 (en) Programmable computations in direct memory access engine
US10664282B1 (en) Runtime augmentation of engine instructions
US11562554B1 (en) Workload reduction for non-maximum suppression operation
CN116997909A (zh) 稀疏机器学习加速
US11500962B1 (en) Emulating fine-grained sparsity in a systolic array
CN118043821A (zh) 混合稀疏压缩
US11500802B1 (en) Data replication for accelerator
US11803736B1 (en) Fine-grained sparsity computations in systolic array
US11372677B1 (en) Efficient scheduling of load instructions
US11868872B1 (en) Direct memory access operation for neural network accelerator
US11875247B1 (en) Input batching with serial dynamic memory access
US11907144B1 (en) Early semaphore update
US11182314B1 (en) Low latency neural network model loading
US11983128B1 (en) Multidimensional and multiblock tensorized direct memory access descriptors
US11625453B1 (en) Using shared data bus to support systolic array tiling
US11620120B1 (en) Configuration of secondary processors
US20240111528A1 (en) Programmable compute engine having transpose operations

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