CN110352422A - 使用矩阵乘法加速器(mma)实施基本计算原语 - Google Patents
使用矩阵乘法加速器(mma)实施基本计算原语 Download PDFInfo
- Publication number
- CN110352422A CN110352422A CN201880014494.5A CN201880014494A CN110352422A CN 110352422 A CN110352422 A CN 110352422A CN 201880014494 A CN201880014494 A CN 201880014494A CN 110352422 A CN110352422 A CN 110352422A
- Authority
- CN
- China
- Prior art keywords
- matrix
- mma
- buffer
- data
- equipment
- 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.)
- Granted
Links
- 239000011159 matrix material Substances 0.000 title claims abstract description 258
- 230000005540 biological transmission Effects 0.000 claims abstract description 80
- 238000000034 method Methods 0.000 claims abstract description 27
- 230000015654 memory Effects 0.000 claims abstract description 22
- 239000013001 matrix buffer Substances 0.000 claims description 182
- 239000000872 buffer Substances 0.000 claims description 45
- 238000013507 mapping Methods 0.000 claims description 27
- 238000001914 filtration Methods 0.000 claims description 17
- 238000005070 sampling Methods 0.000 claims description 4
- 230000003111 delayed effect Effects 0.000 claims description 2
- 239000013598 vector Substances 0.000 description 108
- 238000006073 displacement reaction Methods 0.000 description 12
- 230000017105 transposition Effects 0.000 description 8
- 238000013527 convolutional neural network Methods 0.000 description 7
- 230000009466 transformation Effects 0.000 description 6
- PXFBZOLANLWPMH-UHFFFAOYSA-N 16-Epiaffinine Natural products C1C(C2=CC=CC=C2N2)=C2C(=O)CC2C(=CC)CN(C)C1C2CO PXFBZOLANLWPMH-UHFFFAOYSA-N 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 101000773153 Homo sapiens Thioredoxin-like protein 4A Proteins 0.000 description 4
- 101000773151 Homo sapiens Thioredoxin-like protein 4B Proteins 0.000 description 4
- 101100063424 Neurospora crassa (strain ATCC 24698 / 74-OR23-1A / CBS 708.71 / DSM 1257 / FGSC 987) dim-5 gene Proteins 0.000 description 4
- 102100030272 Thioredoxin-like protein 4A Human genes 0.000 description 4
- 102100030273 Thioredoxin-like protein 4B Human genes 0.000 description 4
- 229940050561 matrix product Drugs 0.000 description 4
- 229910052757 nitrogen Inorganic materials 0.000 description 4
- 229910052698 phosphorus Inorganic materials 0.000 description 3
- 238000013528 artificial neural network Methods 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000000354 decomposition reaction Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 206010054949 Metaplasia Diseases 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000015689 metaplastic ossification Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 238000012805 post-processing Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000005096 rolling process Methods 0.000 description 1
- 239000007787 solid Substances 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
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/14—Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
- G06F17/141—Discrete Fourier transforms
-
- 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/045—Combinations of 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/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)
- Mathematical Physics (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Computing Systems (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- Evolutionary Computation (AREA)
- Databases & Information Systems (AREA)
- Algebra (AREA)
- Neurology (AREA)
- Discrete Mathematics (AREA)
- Complex Calculations (AREA)
- Image Generation (AREA)
Abstract
在一种用于在设备中执行基本计算原语的方法中,该设备包括处理器和矩阵乘法加速器(MMA)。该方法包括配置(200)设备中的流式传输引擎以从存储器流式传输用于基本计算原语的数据,配置(202)MMA以格式化数据,以及由设备执行(204)基本计算原语。
Description
背景技术
诸如语音识别、智能工业控制、对象检测和识别以及视觉等应用越来越多地迁移到嵌入式设备。在此类设备中可能需要硬件加速以支持在此类应用中使用的算法的计算需求。
发明内容
本文描述的示例涉及使用矩阵乘法加速器来实施基本计算原语。在一个方面,提供一种用于在设备中执行基本计算原语的方法,其中该设备包括处理器和矩阵乘法加速器(MMA)。该方法包括配置设备中的流式传输引擎以从存储器流式传输用于基本计算原语的数据,配置MMA以格式化数据,以及由设备执行基本计算原语。
在一个方面,提供一种设备,该设备包括存储器、耦合到存储器的处理器以及耦合到处理器的矩阵乘法加速器(MMA),该MMA包括乘数缓冲器和第一被乘数缓冲器,其中该设备可操作以配置设备中的流式传输引擎以从存储器流式传输用于基本计算原语的数据,配置MMA以格式化数据并执行基本计算原语。
附图说明
图1描绘可配置成使用耦合到处理器的矩阵乘法加速器(MMA)来实施基本计算原语的示例设备。
图2为用于在图1的设备中执行基本计算原语的方法的流程图。
图3为示出图1的设备中的批量小矩阵矩阵乘法的实施方式的示例。
图4为示出图1的设备中的大矩阵矩阵乘法的实施方式的示例。
图5为示出图1的设备中的矩阵矩阵逐点乘法的实施方式的示例。
图6为示出图1的设备中的矩阵矩阵加法的实施方式的示例。
图7为示出图1的设备中的小向量矩阵乘法的实施方式的示例。
图8为示出图1的设备中的小向量求和的实施方式的示例。
图9为示出图1的设备中的仿射变换的实施方式的示例。
图10和图11为示出图1的设备中的二维(2D)卷积的实施方式的示例。
图12为示出图1的设备中的矩阵行置换的实施方式的示例。
图13为示出图1的设备中的向量列置换的实施方式的示例。
图14为示出滤波器大小和吞吐量之间的折衷的曲线图。
具体实施方式
为了一致性,附图中的相同元件由相同的附图标记表示。
本文描述的示例提供使用矩阵乘法加速器(MMA)实施诸如语音识别、智能工业控制、对象检测和识别以及视觉的应用所使用的基本计算原语。基本计算原语包括例如在卷积神经网络(CNN)中使用的二维(2D)卷积、小矩阵矩阵乘法和大矩阵矩阵乘法、矩阵矩阵逐点乘法、矩阵矩阵加法、向量矩阵乘法、向量求和、仿射变换、快速傅里叶变换、离散余弦变换、卷积、相关、矩阵赋值、矩阵置换和矩阵变换。
图1描绘示例设备100,该示例设备100可配置成使用耦合到处理器102的矩阵乘法加速器(MMA)104来实施基本计算原语,诸如本文先前提到的那些。MMA104包括执行矩阵乘法的功能。矩阵乘法为从两个矩阵产生矩阵的二进制操作。更具体地,如果乘数矩阵A为M×K矩阵并且被乘数矩阵B为K×N矩阵,则这两个矩阵的矩阵乘积为M×N矩阵C,其中A的行n上的m个元素与B的列K下的m个元素相乘,并求和以产生元素Cmn。
MMA 104包括足够的存储器以存储用于存储两个B矩阵的16位元素的两个32×32被乘数缓冲器144和用于存储两个C矩阵的16位元素的两个32×32结果缓冲器134。被乘数缓冲器144在本文可以被称为B矩阵缓冲器,并且结果缓冲器134在本文可以被称为C矩阵缓冲器。MMA 104还包括存储器,以存储用于存储乘数矩阵A的行的16位元素的1×32乘数缓冲器138。乘数缓冲器138在本文可以被称为A矩阵缓冲器。如本文所述,在一些操作中,B矩阵缓冲器144被用作乒乓(ping pong)缓冲器,使得当另一缓冲器中的数据用于操作执行时,数据在后台加载到缓冲器中的一个中。类似地,C矩阵缓冲器134用作前台缓冲器和后台缓冲器,使得例如当另一缓冲器的内容从MMA 104输出时,操作执行的结果存储在一个缓冲器。
在每个周期上,MMA 104执行单个指令,即加载、存储并执行指令,在本文称为LSE指令。如该指令的名称所暗示的,MMA 104可以在单个周期中执行加载操作、存储操作和执行操作。通常,在周期中,将数据向量加载到A矩阵缓冲器138中,并且在存储在所选B矩阵缓冲器144中的B矩阵和A矩阵缓冲器138中的数据向量之间执行矩阵乘法操作。因此,计算A矩阵缓冲器138中的数据向量与所选B矩阵缓冲器144中的B矩阵的每列的矩阵乘积。矩阵乘法操作的结果为一行数据元素,该行数据元素存储在所选C矩阵缓冲器134中的C矩阵的行中。根据LSE指令的字段的内容,周期还可以将一行数据加载到不用于矩阵乘法的B矩阵缓冲器中,即后台B矩阵缓冲器,将来自C矩阵缓冲器的一行数据存储到外部存储器中,和/或在将结果存储在所选C矩阵缓冲器134中之前对矩阵乘积操作的结果执行指定操作。
LSE指令的加载操作部分包括标识下列项的字段:要加载到A矩阵缓冲器138中的数据在缓冲器124中的位置、要加载到B矩阵缓冲器144中的数据在缓冲器128中的位置、作为加载操作的目标的B矩阵缓冲器144以及要加载的目标B矩阵缓冲器中的行。加载操作部分还包括用于指示是否要执行加载操作的字段。
LSE指令的存储操作部分包括标识下列项的字段:要存储的C矩阵缓冲器134中的数据在缓冲器118中的位置、保存要存储的数据的C矩阵缓冲器134以及目标C矩阵缓冲器134中包含要存储的数据的行。存储操作部分还包括用于指示是否要执行存储操作的字段。
LSE指令的执行操作部分包括标识下列项的字段:目标C矩阵缓冲器134和目标C矩阵缓冲器134中要接收执行操作的结果的行,以及在存储在目标C矩阵缓冲器134中之前要对矩阵乘法的结果执行的操作。可以指定的操作包括=、+=、-=或无。=操作使得结果直接存储在指定行中而不进行任何更改。+=操作使结果中的元素加到指定行中的相应元素,其中加法的结果替换指定行的内容。-=操作使得结果中的元素被指定行中的相应元素减去,其中减法的结果替换指定行的内容。顾名思义,无操作指示不执行任何操作。例如,在执行矩阵乘法之前将数据初始加载到B矩阵缓冲器144期间,或者当将存储在C矩阵缓冲器134中的最终结果移出MMA 104时,使用无操作。
MMA 104还包括可配置格式组件130、可配置格式组件136、可配置格式组件140,以分别用于格式化由MMA 104输出的数据和输入到MMA 104的数据。格式A组件136和格式B组件140可配置成根据指定类型(诸如16位浮点型、16位固定有符号型、16位固定无符号型、8位固定有符号型和8位固定无符号型以及定点输入的Q点,即小数位数)格式化相应的输入数据。格式C组件130可配置成根据指定类型(诸如16位浮点型、16位固定有符号型、16位固定无符号型、8位固定有符号型和8位固定无符号型以及定点输出的Q点,即小数位数)格式化输出数据。格式A组件136还可配置成定义查找表(LUT),该查找表允许L2 106中的A数据以4位精度存储以节省存储器并使用不需要统一的4位到16位的映射在A矩阵缓冲器138中扩展到16位精度。这对于所有计算原语均为有用的,并且对于CNN样式的2D卷积特别有用。
MMA 104还包括行偏移组件142,该偏移组件142可配置成指定要加载到B矩阵缓冲器144中的一行数据的每个元素的偏移。行偏移组件142存储三十二个五位偏移值,一行中的三十二个元素中的每个元素均有一个偏移值。行偏移组件142中指定的行偏移值可以用于将一行数据元素中的元素加载到与LSE指令的加载部分中指定的行号的不同的后台B矩阵缓冲器中的不同行中。将对应于数据元素的偏移值添加到在LSE指令的加载部分中指定的B矩阵缓冲器的行号,以确定将在其中加载数据元素的B矩阵缓冲器的行。数据元素的列号不受影响。
更具体地,在MMA 104的周期上,可以将新的数据行加载到后台B矩阵缓冲器中,即,未被用于执行的B矩阵缓冲器144。如果行偏移组件142中的用于该行数据中的所有元素的行偏移值为零,则数据元素将被加载到在该周期的LSE指令中指定的后台B矩阵缓冲器的行中。例如,当新的数据行加载到后台B矩阵缓冲器的第一行中时,第一个元素将被加载到行1列1,第二个元素将被加载到行1列2中,等等。然而,如果行偏移组件142中的行偏移值为非零,则加载相应数据元素的行由LSE指令中指定的行和行偏移值确定。例如,假设行偏移值为0、1、2,...31。当加载新的数据行时,其中在LSE指令中指定后台B矩阵缓冲器的第一行,第一个元素将被加载到行1列1中,第2个元素将被加载到行2列2中,第3个元素将被加载到行3列3中,等等。从而在后台B矩阵缓冲器中形成对角线。
MMA 104还包括可配置的非线性组件132,以用于将非线性应用于C矩阵缓冲器134的输出。所实施的非线性为整流线性单元(ReLU),并且如果被激活,则按如下基本方式施加到C矩阵缓冲器134的输出:如果非线性组件132的输入为负,则将非线性组件132的输出设置为零,并且如果非线性组件132的输入为非负,则设将非线性组件132的输出设置为非线性的输入。
在示例设备100中,处理器102为数字信号处理器(DSP),其包括一级数据(L1D)高速缓存存储器112、二级(L2)统一指令和数据高速缓存存储器106以及两个流式传输引擎(SE0和SE1)108、110。在2017年3月28日发布的专利第US 9,606,803号中描述此类处理器的示例,该专利通过引用并入本文。此外,在2017年10月26日公布的专利第US 9,606,803号和专利申请公开第US 2017/0308381号中描述流式传输引擎的示例,该专利通过引用并入本文。
处理器102被配置成作为用于MMA 104的输入数据源操作并且从MMA 104接收输出数据。更具体地,处理器102被配置成在相应的寄存器文件120、寄存器文件126中从流式传输引擎接收用于MMA 104的数据向量,以根据设备100正执行的基本计算原语的需要对数据应用格式化122,并且将数据向量存储在相应的缓冲器124、缓冲器128中以供MMA 104使用。源A缓冲器124存储要加载到A矩阵缓冲器138中的数据,并且源B缓冲器128存储要加载到B矩阵缓冲器144中的数据。
输入格式化122的示例包括零填充、偶数/奇数向量生成、值复制、已知矩阵创建和链接操作。偶数/奇数向量生成接收两个向量。如果选择偶数选项,则两个向量的所有偶数元素被用于创建用于输入到MMA 104的输出向量。如果选择奇数选项,则两个向量的所有奇数元素被用于创建输出向量。例如,偶数/奇数格式化对于快速傅里叶变换(FFT)和使用大于1的步幅的卷积有用。值复制格式化生成用于输入到MMA 104的向量,其中从L2 106读取的标量值被复制到向量的所有元素。例如,值复制对于偏差创建有用。已知矩阵创建格式化创建用于输入到MMA 104的输出向量序列,这些序列一起形成公共已知矩阵模式,诸如单位矩阵。零填充格式化在输入到MMA 104之前向向量添加零。链接操作获取MMA 104的输出向量并将向量作为输入提供给MMA 104以用于A矩阵缓冲器138或B矩阵缓冲器144。例如,链接操作对于Z=W*X*Y样式的操作有用。
处理器102还被配置成在目的地C缓冲器118中从MMA 104接收数据向量,以根据设备100正执行的基本计算原语的需要对数据应用格式化116,并将数据向量存储在寄存器文件114中。数据向量经由一级数据高速缓存112和二级统一高速缓存106存储到外部存储器(未示出)中。输出格式化116的示例包括接缝去除(seam removal)、步幅去除、零填充和矩阵转置。
流式传输引擎108、流式传输引擎110被配置成将数据元素流从二级高速缓存106传输到相应的寄存器文件120、寄存器文件126。流被定义为具有相同类型和大小的元素序列。流式传输引擎120、流式传输引擎126可编程以通过指定以下流属性来定义特定于基本计算原语的流:流的第一元素的地址、流中元素的大小和类型、流中数据的格式化以及与流相关联的地址序列,即访问元素以将它们放置在流中的寻址顺序。当流被打开时,流式传输引擎120、流式传输引擎126计算地址,从L2获取(fetches)定义的数据类型,执行任何指定数据类型格式化,诸如零扩展或符号扩展,将数据映射成向量,并将数据向量直接递送到相应的寄存器文件120、寄存器文件126。
流式传输引擎108、流式传输引擎110的寻址序列允许多维存储器访问。因此,每个流式传输引擎120、流式传输引擎126根据遍历存储器的指针执行流的元素的寻址序列。每个流式传输引擎120、流式传输引擎126实施控制指针所采取的路径的多级参数化嵌套循环。在该嵌套循环中,循环层级的迭代计数指示该层级的循环重复的次数,并且循环层级的尺寸定义循环层级中指针位置之间的距离。
最里面的循环(即循环0)消耗来自存储器的物理上连续的元素,并且具有一的隐式尺寸,并且指针在该循环层级中以连续的递增顺序从一个元素移动到另一个元素。在内部循环之外的每个层级中,循环基于为循环指定的尺寸大小将指针移动到新位置。这种寻址形式允许程序以少量参数中指定通过存储器的常规路径。
表1示出具有六个层级的此类嵌套循环的示例伪代码。在该伪代码中,ICNTx为层级x的迭代计数,DIMx为层级x的尺寸,并且ELEM_BYTES为每个元素的大小(以字节为单位)。在其他示例中,嵌套循环可以具有更多或更少的层级。
表1
处理器102执行用于为设备100定义的每个基本计算原语的控制软件。控制软件根据执行基本计算原语的需要使得配置流式传输引擎108、流式传输引擎110和MMA 104,控制MMA的执行,并使得应用基本计算原语所需的任何输入格式化122和/或输出格式化116。
图2为用于在设备100中执行基本计算原语的方法的流程图。最初,用于基本计算原语的控制软件配置200流式传输引擎108、流式传输引擎110以按所需顺序流式传输用于基本计算原语的数据元素。因此,控制软件将基本计算原语的流属性传送到流式传输引擎108、流式传输引擎110中的每一个。根据基本计算原语,可以使用一个或两个流式传输引擎。通常,流式传输引擎108被配置成流式传输用于A矩阵缓冲器138的数据元素,并且流式传输引擎110被配置成流式传输用于B矩阵缓冲器144的数据元素。本文描述了为不同的基本计算原语配置流式传输引擎108、流式传输引擎110的示例。
控制软件还根据使用矩阵乘法执行基本计算原语的需要配置202 MMA 104。因此,控制软件根据基本计算原语的需要配置格式组件130、格式组件136、格式组件140、行偏移组件142和非线性组件132。本文描述了为不同的计算原语配置MMA 104的示例。
一旦配置完成,控制软件就启动204经配置的流式传输引擎108、经配置的流式传输引擎110并执行206经配置的基本计算原语。通常,为了执行基本计算原语,控制软件使MMA 104执行一系列LSE指令以将数据元素加载到A矩阵缓冲器138和后台B矩阵缓冲器144中,执行A矩阵缓冲器138和前台B矩阵缓冲器144之间的矩阵乘法,将矩阵乘法的结果存储在所选C矩阵缓冲器134中,并将数据从后台C矩阵缓冲器134移动到缓冲器118。在将数据元素加载到缓冲器138、缓冲器144之前以及当结果从C矩阵缓冲器134移动到缓冲器118时,应用在MMA 104中配置的任何格式化和偏移。作为基本计算原语的执行的一部分,控制软件还可以使得在处理器102上执行特定于基本计算原语的输入格式化122和输出格式化116。
图3为示出图1的设备100中的批量小矩阵矩阵乘法的实施方式的示例。对于足够小的矩阵,通过多个被乘数矩阵X以对角式加载到B矩阵缓冲器144中并与加载到A矩阵缓冲器138中的相应乘数矩阵H相乘,可以在单个批量中执行多个矩阵乘法Y=H*X。如图3所示,假设被乘数矩阵为K×N并且相应的乘数矩阵为M×K,其中K、N和M小于32。批量大小T(即可以以对角式加载到B矩阵缓冲器144中的被乘数矩阵X的数量)为T=floor(32/max(K,N))。因此,T个被乘数矩阵X(t),t=0,1,...,T-1可以以对角式加载到B矩阵缓冲器144中,并且将存在T个乘数矩阵H(t)。
为了执行该原语,将T个H矩阵存储在L2高速缓存106中,使得存在包含T个H矩阵中的每一个的第一行的T*K个连续元素随后为Zk个零,包含T个H矩阵中的每一个的第二行的T*K个连续元素随后为Zk个零,…,H矩阵中的每一个的第M行的T*K个连续元素随后为Zk个零,其中Zk=32-T*K。此外,T个X矩阵存储在L2高速缓存106中,使得存在包含T个X矩阵中的每一个的第一行的T*N个连续元素随后为ZN个零,包含T个X矩阵中的每一个的第二行的T*N个连续元素随后为ZN个零,…,T个X矩阵中的每一个的第M行的T*N个连续元素随后为ZN个零,其中ZN=32-T*N。
流式传输引擎110被配置成从L2高速缓存106读取T个X矩阵的元素,并提供包含T个X矩阵的连续行的元素的向量,以用于加载到MMA 104的B矩阵缓冲器144中。流式传输引擎108被配置成从L2高速缓存106读取T个H矩阵的元素,并提供包含T个H矩阵的连续行的元素的向量,以用于加载到A矩阵缓冲器138中。
MMA 104的行偏移组件140被配置成使得来自流式传输引擎110的每个向量中的行的元素以偏移t*K被加载到B矩阵缓冲器144中。因此,来自X(0)的行的元素以0的偏移量加载,来自X(l)的行的元素以K的偏移量加载,来自X(2)的行的元素以2K的偏移量加载等。
为了执行乘法,在MMA 104上执行经适当配置的LSE指令,以用初始批量的X矩阵加载B矩阵缓冲器144。一旦加载B矩阵缓冲器,就执行另外的LSE指令以将相应H矩阵的行加载到A矩阵缓冲器138中,执行乘法,并将结果存储在C矩阵缓冲器134中。此外,如果要处理多个批量,则LSE指令还将将另一批量的X矩阵加载到后台B矩阵缓冲器144中,并将前一批量的结果从C矩阵缓冲器134移出MMA 104。因此,为了执行批量小矩阵矩阵乘法,将T*K个元素加载到A矩阵缓冲器138中达M个周期,将T*N个元素加载到B矩阵缓冲器144中(在除了初始批量之外都加载到后台B矩阵缓冲器144中)达K个周期,并且T*N个元素被移出C矩阵缓冲器达M个周期。
在其他示例中,流式传输引擎108、流式传输引擎110或输入格式化122被配置成在将向量存储在源A缓冲器124或源B缓冲器128中之前执行零填充,以将所需数量的零添加到每个向量,而不是将ZK和ZN个零存储在L2高速缓存106中。
图4为示出图1的设备100中的大矩阵矩阵乘法Y=H*X的实施方式的示例,其中被乘数矩阵X和乘数矩阵H具有的尺寸大于B矩阵缓冲器144和A矩阵缓冲器138。该示例假设被乘数矩阵X的尺寸为32K×32N而乘数矩阵H的尺寸为32M×32K,即,这些矩阵的每个尺寸均可以被32整除。因此,Y矩阵的尺寸为32M×32N。矩阵X和矩阵H被分为32×32的瓦片(tiles)。因此,矩阵的瓦片T(m,n)由行(32*m):32*((m+1)-1)和列(32*n):(32*(n+1)-1)形成。如图4所示,一行H瓦片与一列X瓦片的矩阵乘法生成单个相应的Y瓦片,诸如通过将H的瓦片行1与X的瓦片列1进行矩阵相乘而生成的瓦片Y(1,1)。
表2为示出由MMA 104执行该原语的示例伪代码。伪代码假设流式传输引擎108被配置成从L2高速缓存106读取乘数矩阵H的元素并向A矩阵缓冲器138提供向量,使得H瓦片中的每行被加载N次,即H(0,0:(K-1))被加载N次,H(1,0:(K-1))被加载N次,H(2,0:(K-1))被加载N次等。因此,H矩阵的所有行连续存储在L2高速缓存106中。流式传输引擎108被配置成加载以下序列N次:H(0,0),H(0,1),…,H(0,K-1);然后加载以下序列N次:H(l,0),H(l,1),…,H(l,K-1);……;然后加载以下序列N次:H(M-1,0),H(M-1,1),...,H(M-1,K-1)。
伪代码还假设流式传输引擎110被配置成从L2高速缓存106读取X瓦片的元素并且将每个X瓦片提供M次以加载到B矩阵缓冲器144中,即,加载序列[X(0:(K-1),0),...,X(0:(K-1),N-1)]重复M次。因此,X矩阵的所有行连续存储在L2高速缓存106中。流式传输引擎110被配置成加载以下序列N次:X(0,0),X(l,0),…X(K-1,0),X(0,1),X(l,1),...,X(K-1,1),...,X(0,N-1),X(1,N-1),...,X(K-1,N-1)。
在该伪代码中,Bback指B矩阵缓冲器144的当前后台缓冲器,Bfore指用于执行的当前前台缓冲器。
表2
图5为示出图1的设备100中的矩阵矩阵逐点乘法C=A.*B的实施方式的示例。在矩阵矩阵逐点乘法中,矩阵A、矩阵B、矩阵C的尺寸相同,诸如m×n,并且元素C(m,n)为A(m,n)和B(m,n)的乘积。在设备100中,C=A.*B可以实施为C(k,:)=A(k,:)*diag(B(k,:)),k=0,...,31。因此,逐点乘法可以通过将B矩阵的每一行的元素依次以对角式加载到B矩阵缓冲器144中并且与加载到A矩阵缓冲器138中的A矩阵的相应行执行矩阵乘法来实施。
图5中的示例对A矩阵和B矩阵的行m说明这一点,假设m=n=32。
为了执行该原语,流式传输引擎110被配置成从L2高速缓存106读取B矩阵的元素,并依次提供B矩阵的每一行以加载到MMA 104的B矩阵缓冲器144中。因此,来自流式传输引擎110的第一向量将包含B矩阵的第一行(即行0),来自流式传输引擎的第二向量将包含B矩阵的第二行,等等。流式传输引擎108被配置成读取来自L2高速缓存106的A矩阵的元素并且依次提供A矩阵的每一行以加载到A矩阵缓冲器138中。因此,来自流式传输引擎108的第一向量将包含A矩阵的第一行(即行0),来自流式传输引擎的第二向量将包含A矩阵的第二行,等等。
MMA 104的行偏移组件140被配置成使得B矩阵的行的元素以对角式加载到B矩阵缓冲器144中。因此,行元素的偏移被设置为范围从0到31的顺序值,使得行的第一元素被加载到行0列0中,第二元素被加载到行1列1中,第3元素加载到行2列2中,等等。
为了执行逐点乘法,在MMA 104上执行经适当配置的LSE指令以用B矩阵的初始行加载B矩阵缓冲器144。一旦加载B矩阵缓冲器,就执行另外的LSE指令以将A矩阵的相应行加载到A矩阵缓冲器138中,执行矩阵乘法,并将结果存储在C矩阵缓冲器134的相应行中。此外,LSE指令还将B矩阵的下一行加载到后台B矩阵缓冲器144中。将B矩阵的行加载到后台B矩阵中的对角线上、在前台B矩阵缓冲器上执行矩阵乘法、以及存储结果的过程被重复,直到已处理完B矩阵的所有行。然后执行将C矩阵缓冲器134的内容移出MMA 104的LSE指令。
图6为示出图1的设备100中的矩阵矩阵加法C=A+B的实施方式的示例。在矩阵矩阵加法中,矩阵A、矩阵B、矩阵C的尺寸相同,诸如m×m,并且元素C(m,n)为A(m,n)和B(m,n)之和。使用MMA 104,C=A+B可以实施为C=A*I+B*I,其中I为单位矩阵。更具体地,如图6所示,C=A+B可以实施为C=A*I,接着为C+=B*I。此外,C=A+B可以实施为C=B*I,接着为C+=A*I。单位矩阵为方阵,其中主对角线的所有元素均为一,所有其他元素均为零。将给定矩阵乘以单位矩阵的效果为使给定矩阵保持不变。
为了执行该原语,流式传输引擎108被配置成从L2高速缓存106读取A的元素并且依次提供A的每一行以加载到A矩阵缓冲器138中。输入格式化122被配置成生成要加载到B矩阵缓冲器144中的单位矩阵I的向量。在MMA 104中执行经适当配置的LSE指令以将A的每一行加载到A矩阵缓冲器138中,在加载到A矩阵缓冲器138中的A的行与B矩阵缓冲器144中的单位矩阵之间执行矩阵乘法,并将结果存储在C矩阵缓冲器134的相应位置。在LSE指令中指定=操作,用于将结果存储在C矩阵缓冲器中。因此,A的每个元素不变地存储在C矩阵缓冲器中的相应位置。
然后,流式传输引擎108被配置成从L2高速缓存106读取B的元素,并且依次提供B的每一行以加载到A矩阵缓冲器138中。在MMA 104中执行经适当配置的LSE指令,以将B的每一行加载到A矩阵缓冲器138中,在加载到A矩阵缓冲器138中的B的行与B矩阵缓冲器144中的单位矩阵之间执行矩阵乘法,并将结果存储在存储A*I的结果的C矩阵缓冲器134的相应位置中。在LSE指令中指定+=操作,用于将结果存储在C矩阵缓冲器中,从而使得B的每个数据元素的值被加到存储在C矩阵缓冲器的相应位置中的A的相应元素的值。然后,执行将C矩阵缓冲器134的内容移出MMA的LSE指令。
图7为示出在图1的设备100中的小向量矩阵乘法y=x*H的实施方式的示例。对于常数矩阵H,通过将H的多个副本以区块对角式加载到B矩阵缓冲器144中,将相应的x向量加载到A矩阵缓冲器138中,并执行矩阵乘法,可以在单个批量中计算乘以多个x向量的乘法。如图7所示,假设H为K×N矩阵并且每个x向量为1×K。批量大小T(即可以以区块对角式加载到B矩阵缓冲器144中的H的副本的数量)为T=floor(32/max(K,N))。因此,可以将H的T个副本以区块对角式加载到B矩阵缓冲器144中,并且可以将相应的向量x(t),t=0,1,...,T-1加载到A矩阵缓冲器138中。
为了执行该原语,流式传输引擎108被配置成从L2高速缓存106读取T个对应的x向量的元素,并提供向量以用于加载到A矩阵缓冲器138中。因此,来自流式传输引擎108的向量包含x(0),...x(T-l)的元素。经由流式传输引擎108对向量的加载类似于参考图3所描述的,其中M=1。流式传输引擎110被配置成从L2高速缓存106读取H矩阵的元素,并提供包含H矩阵的连续行的元素的向量,以用于加载到MMA 104的B矩阵缓冲器144中。为了复制H矩阵,具有适当零填充的H矩阵的行的多个副本被连续存储在L2高速缓存106中。可替代地,输入格式化122或流式传输引擎110被配置成复制H的每一行T次并且添加适当的零填充。
MMA 104的行偏移组件140被配置成使得来自流式传输引擎110的每个向量中的行的元素以偏移t*K被加载到B矩阵缓冲器144中。因此,H矩阵的经复制的行0的元素以0的偏移量加载,H矩阵的经复制的行1的元素以K的偏移量加载,H矩阵的经复制的行2的元素以2K的偏移量加载,等等。
为了执行乘法,在MMA 104上执行经适当配置的LSE指令以用初始批量的经复制的H矩阵加载B矩阵缓冲器144。一旦加载B矩阵缓冲器,就执行另外的LSE指令以将相应的x向量的向量加载到A矩阵缓冲器138中,执行乘法,并将结果存储在C矩阵缓冲器134中。此外,如果要处理多个批量,则经适当配置的LSE指令将会将另一个向量加载到A矩阵缓冲器138中,执行乘法,并存储先前计算的向量。对于加载到A矩阵缓冲器138中的每个新向量,不需要重新加载B矩阵缓冲器144。
图8为示出设备100中的小向量求和的实施方式的示例。向量求和可以表示为y=sum(x),其中y为向量元素之和。对于足够小的向量,通过将多个x向量加载到A矩阵缓冲器144中,将“1”的向量的副本加载到B矩阵缓冲器144中的对角线上,并执行矩阵乘法,可以在单个批量中计算多个求和。如图8所示,假设每个x向量为1×K。批量大小T(即可以加载到A矩阵缓冲器138中的向量的数量)为T=floor(32/K)。因此,x(t),t=0,1,...,T-1可以加载到A矩阵缓冲器138中,并且全为“1”的K×1向量的T个副本应被加载到B矩阵缓冲器144中。
为了执行该原语,流式传输引擎108被配置成从L2高速缓存106读取x向量的元素,并提供包含T个x向量的向量,以用于加载到的A矩阵缓冲器138中。因此,来自流式传输引擎108的向量包含向量x(0),...x(T-l)。经由流式传输引擎108对向量的加载类似于参考图3所描述的,其中M=1。此外,输入格式化122被配置成生成要加载到B矩阵缓冲器144中的对角线上的全为“1”的K×1向量。
为了执行求和,在MMA 104上执行经适当配置的LSE指令,以用全为“1”的K×1向量的多个副本在对角线上加载B矩阵缓冲器144。一旦加载B矩阵缓冲器,就执行另外的LSE指令以将x(0),...x(T-l)向量加载到A矩阵缓冲器138中,执行乘法,并将结果存储在C矩阵缓冲器134的行中。此外,如果要处理多个批量,则经适当配置的LSE指令将会将另一个向量加载到A矩阵缓冲器138中,执行乘法,并存储先前计算的向量。对于加载在A矩阵缓冲器138中的每个新向量,不需要重新加载B矩阵缓冲器144。
图9为示出设备100中的仿射变换的实施方式的示例。仿射变换可以表示为y=x*H+v并且可以被计算为y=[x 1]*[H;v]。如果矩阵H和向量v在多次变换上为常数,则通过将[H;v]的多个副本以区块对角式加载到B矩阵缓冲器144中,将相应的x向量加载到A矩阵缓冲器138中,并执行矩阵乘法,可以批量计算仿射变换。如图9所示,假设H为(K-l)×N矩阵,v为1×N,并且每个x向量为1×(K-l)。批量大小T(即可以以区块对角式加载到B矩阵缓冲器144中的[H;v]的副本的数量)为T=floor(32/max(K,N))。因此,[H;v]的T个副本可以以区块对角式加载到B矩阵缓冲器144中,并且相应的向量x(t),t=0,1,...,T-1可以加载到A矩阵缓冲器138中。
为了执行该原语,流式传输引擎110被配置成从L2高速缓存106读取H矩阵和v的元素,并提供向量,以用于加载到MMA 104的B矩阵缓冲器144中。为了复制与v级联的H矩阵,H的K-1行被连续存储在L2高速缓存106中,接着为一行v,并且输入格式化122被配置成复制该矩阵T次并添加Zn个零。可替代地,H的每一行的T个副本连续存储在L2高速缓存106中,每个后接着为Zn个零,然后v的T个副本连续存储在L2高速缓存106中,接着为Zn个零。
流式传输引擎108被配置成从L2高速缓存106读取T个相应的x向量的元素,并提供向量以用于加载到A矩阵缓冲器138中。在一个示例中,x(t)的T个副本连续存储在L2高速缓存106中,并且输入格式化122被配置成在副本之间添加“1”并且在末尾处添加Zk个零。可替代地,x(t)的T个副本连续存储在L2高速缓存106中,其中在副本之间具有“1”并且在末尾处具有Zk个零。
MMA 104的行偏移组件140被配置成使得来自流式传输引擎110的每个向量中的元素以适当的偏移被加载到B矩阵缓冲器144中。例如,假设H的每个行的T个副本连续存储在L2高速缓存106中,每个接着为Zn个零,然后v的T个副本连续存储在L2高速缓存106中,接着为Zn个零,行偏移组件140被配置成使得[H;v]矩阵的经复制的行0的元素以0的偏移量加载,[H;v]矩阵的经复制的行1的元素以K的偏移量加载,[H;v]矩阵的经复制的行2的元素以2K的偏移量加载,等等。
为了执行乘法,在MMA 104上执行经适当配置的LSE指令以用初始批量的经复制的[H;v]矩阵加载B矩阵缓冲器144。一旦加载B矩阵缓冲器,就执行另外的LSE指令以将相应x向量的向量加载到A矩阵缓冲器138中,执行乘法,并将结果存储在C矩阵缓冲器134中。此外,如果要处理多个批量,则经适当配置的LSE指令将将另一个向量加载到在A矩阵缓冲器138中,执行乘法,并存储先前计算的向量。对于加载到A矩阵缓冲器138中的每个新向量,不需要重新加载B矩阵缓冲器144。
图10为示出在设备100中的卷积神经网络(CNN)中使用的二维(2D)卷积Y=H⊙X的实施方式的示例。典型的卷积神经网络(CNN)包括一些数量的卷积和子采样层以提取特征,接着为如传统神经网络中使用的一个或多个完全连接层,以基于提取的特征执行分类。每个卷积层和每个子采样层的输出为一组特征映射,该特征映射为CNN中的下一层的输入。每个卷积层包括一些数量的滤波器,每个层的滤波器的大小和数量可以不同。滤波器与相应的特征映射卷积以产生对应于每个滤波器的特征映射。
图10示出具有尺寸为Lr×Lc的Ni个输入特征映射1000的通用卷积层。输入特征映射1000与具有尺寸Fr×Fc的相应滤波器1002卷积,以生成具有尺寸Mr×Me的No个输出特征映射1004。为了使用MMA 104执行2D卷积,将特征映射1000瓦片式拼接为尺寸(Fr*Fc*Ni)×(Mr*Mc)的滤波矩阵X 1006。滤波矩阵X中的瓦片大小可以大也可以小,其中根据滤波器长度选择瓦片重叠。存在重叠是因为卷积对于输入大小为L和滤波器长度为F生成M=L-F+1输出。为滤波矩阵X1106中的瓦片选择大尺寸可以避免接缝,而对于小的瓦片大小,瓦片处理将接缝放在相同的位置以便由处理器102去除。大特征映射瓦片满足Lc=32*Bc+Fc-1并且小特征映射瓦片满足Lc<=(32+Fc-1)/Bc。瓦片大小的选择使接缝处于同一位置。
为了计算输出特征映射1004,可以以连续的32×32区块读取滤波器或内核,将其应用于MMA 104中的瓦片滤波矩阵X1006的32×32区块,并且将滤波器应用于输入特征映射1000的结果可以由MMA 104针对瓦片滤波矩阵1006的32×32区块单独地计算,并且将该结果组合以生成输出特征映射1004。滤波器或内核1002的行可以连续存储在L2高速缓存106中并且滤波器矩阵H1008可以以连续的32×32区块从L2高速缓存106读取。如图11中所示,以立方体形式读取瓦片滤波矩阵1006的特征映射瓦片,即,读取初始特征映射FM1 1012的瓦片的所有行,接着为下一特征映射FM2 1014中的相应瓦片的所有行等,直到最后一个特征映射FMNi 1016中的相应瓦片的所有行。可以按下式以区块列顺序执行计算:
Y(:,n)=H*Xfilter(:,n),n=0,...,N-1
或者按下式以区块行顺序(在该示例中示出)执行计算:
Y(m,:)=H(m,:)*Xfilter,m=0,...,M-1
其中Xfilter为瓦片滤波矩阵。
为了在使用大特征映射瓦片时执行该原语,流式传输引擎108被配置成以区块行顺序从L2高速缓存106读取滤波器矩阵H1008的滤波器向量,以便加载到MMA 104的A矩阵缓冲器138中。流式传输引擎110被配置成从L2高速缓存106读取特征映射的行的元素,并且依次提供特征映射中的32×32瓦片的每行,以加载到MMA 104的B矩阵缓冲器144中。表3为用于配置流式传输引擎108的伪代码的示例,并且表4为用于配置流式传输引擎110的伪代码的示例。在该伪代码中,Bf为每个特征映射数据元素的字节数,S为步幅,VECLEN为向量长度,并且瓦片大小为Lr×Lc×Ni,其中Lc=32*Bc+Fc-1并且Bc为指示有效输入特征映射瓦片列的数量的正整数。例如,可以将Bc的值选择为使得32*Bc+Fc-1≤特征映射中的列的数量的最大可能整数。也可以使用较小的Bc值。
在表3的伪代码中,选择ICNTx和DIMx的值,使得滤波器矩阵H以如先前指定的区块行顺序生成。H矩阵的行以零填充存储在L2高速缓存106中或流式传输引擎108中,或者输入格式化122被配置成添加零填充。在表3的伪代码中,选择ICNTx和DIMs的值,使得滤波矩阵X以如先前指定的区块列顺序生成。该for循环指示整个模式重复ceil(No/32)次。
表3和表4的伪代码中的模式创建大矩阵矩阵乘法问题,即,从MMA 104的角度来看,所执行的处理为如先前参考图4所述执行的大矩阵矩阵乘法问题。
表3
//以区块行顺序生成H
//区块行重复=Xfilter的区块列
VECLEN =32*Bf
ELEM_BYTES=Bf
ICNT0 =32
ICNT1 =32
DIM1 =Bf*Fr*Fc*Ni
ICNT2 =ceil(Fr*Fc*Ni/32)//零填充Fr*Fc*Ni至多个32
DIM2 =32*Bf
ICNT3 =Bc*ceil((Lr-Fr+1)/S)//这为区块
DIM3 =0 //行重复
ICNT4 =ceil(No/32)
DIM4 =32*Bf*Fr*Fc*Ni
ICNT5 =not used
DIM5 =not used
表4
//以区块列顺序生成滤波矩阵X
//l x用于H的每个区块行
for(r=0;r<ceil(No/32);r++){
VECLEN =32*Bf
ELEM_BYTES=Bf
ICNT0 =32
ICNT1 =Fc
DIM1 =Bf
ICNT2 =Fr
DIM2 =Bf*Lc
ICNT3 =Ni
DIM3 =Bf*Lr*Lc
ICNT4 =Bc
DIM4 =32*Bf
ICNT5 =ceil((Lr–Fr+1)/S)
DIM5 =Bf*S*Lc}
为了在使用小特征映射瓦片时执行该原语,流式传输引擎108被配置成从L2高速缓存106中以区块行顺序读取滤波器矩阵H 1008的滤波器向量,以用于加载到MMA 104的A矩阵缓冲器138中。流式传输引擎110被配置成从L2高速缓存106读取特征映射的元素,并且依次提供特征映射中的32×32瓦片的每一行,以用于加载到MMA 104的B矩阵缓冲器144中。表5为用于配置流式传输引擎108的伪代码的示例,并且表6为用于配置流式传输引擎110的伪代码的示例。在该伪代码中,Bf为每个特征映射数据元素的字节数,S为步幅,VECLEN为向量长度,瓦片大小为Lr×Lc×Ni,其中Tc≤(32+Fc-1)/Bc并且Bc为指示有效输入特征映射瓦片列的数量的正整数,并且M=max(Bc,S)。Bc的值为满足Bc≤(32+Fc-1)/Lc的最大整数。
在表5的伪代码中,选择ICNTx和DIMx的值,使得滤波器矩阵H以如先前指定的区块行顺序生成。H矩阵的行以零填充存储在L2高速缓存106中或流式传输引擎108中,或者输入格式化122被配置成添加零填充。在表6的伪代码中,选择ICNTx和DIMx的值,使得滤波矩阵X以如先前指定的区块列顺序生成。该for循环指示整个模式重复ceil(No/32)次。
表5和表6的伪代码中的模式创建大矩阵矩阵乘法问题,即,从MMA 104的角度来看,所执行的处理为如先前参考图4所述执行的大矩阵矩阵乘法问题。
表5
//以区块行顺序生成H
//区块行重复=Xfilter的区块列
VECLEN =32*Bf
ELEM_BYTES=Bf
ICNT0 =32
ICNT1 =32
DIM1 =Bf*Fr*Fc*Ni
ICNT2 =ceil(Fr*Fc*Ni/32)//零填充Fr*Fc*Ni至多个32
DIM2 =32*Bf
ICNT3 =ceil((Lr-Fr+1)/M)//这为区块
DIM3 =0 //行重复
ICNT4 =ceil(No/32)
DIM4 =32*Bf*Fr*Fc*Ni
ICNT5 =not used
DIM5 =not used
表6
//以区块列顺序生成滤波矩阵X
//1x用于H的每个区块行
for(r=0;r<ceil(No/32);r++){
VECLEN =(Bc*Lc-Fc+1)*Bf
ELEM_BYTES=Bf
ICNT0 =Bc*Lc-Fc+1
ICNT1 =Fc
DIM1 =Bf
ICNT2 =Fr
DIM2 =Bf*Lc
ICNT3 =Ni
DIM3 =Bf*Lr*Lc
ICNT4 =ceil((Lr–Fr+1)/M)
DIM4 =Bf*M*Lc
ICNT5 =not used
DIM5 =not used}
当使用大特征瓦片时,如果步幅S大于1,则流式传输引擎108的配置处理行步幅。通过配置输出格式化116以写出由MMA 104生成的每S列中的一列来处理列步幅。当使用小特征瓦片时,需要从MMA 104的输出中去除接缝。如果没有指定步幅S,则输出格式化116被配置成从输出中去除大小为Fc-1的Bc–1个接缝,并且如果(Lr-Fr+1)/Bc不为整数,则从输出中去除最后的32-Bc*Lc+Fc-1样本并忽略最终样本。如果指定步幅S,则输出格式化116被配置成对输出执行接缝去除并从输出中去除(S-1)/S行和列。在一些示例中,当下一个卷积层需要零填充时,输出格式化116被配置成将零填充添加到MMA 104的输出。
图12为示出图1的设备100中的矩阵行置换C=B(new index,:))的实施方式的示例。行置换可以实施为C=P*B,其中置换矩阵P在每一行和每一列中具有单个“1”,其列位置为用于B的相应元素的新行索引。P中的所有其他元素均设置为零。
为了执行该原语,流式传输引擎110被配置成依次从L2高速缓存106提供B矩阵的每一行,用于加载到MMA 104的B矩阵缓冲器144中。因此,来自流式传输引擎110的第一向量将包含B矩阵的第一行(即行0),来自流式传输引擎110的第二向量将包含B矩阵的第二行等。流式传输引擎108被配置成依次从L2高速缓存106提供P矩阵的每一行,以用于加载到A矩阵缓冲器138中。因此,来自流式传输引擎108的第一向量将包含P矩阵的第一行(即行0),来自流式传输引擎的第二向量将包含A矩阵的第二行,等等。
为了执行行置换,在MMA 104上执行经适当配置的LSE指令以用B矩阵加载B矩阵缓冲器144。一旦加载B矩阵缓冲器,就执行另外的LSE指令以将P矩阵的行加载到A矩阵缓冲器138中,执行矩阵乘法,并将结果存储在C矩阵缓冲器134的相应行中。一旦完成所有矩阵乘法,就执行将C矩阵缓冲器134的内容移出MMA 104的LSE指令。
图13为示出图1的系统中的向量列置换c(k,:)=a(k,new index))的实施方式的示例。向量列置换可以实施为c(k,:)=a(k,:)*P,其中置换矩阵P在每一行和每一列中均具有单个“1”,其行位置为用于a的元素的新列索引。P中的所有其他元素均设置为零。
为了执行该原语,流式传输引擎110被配置成依次从L2高速缓存106提供P矩阵的每一行,以用于加载到MMA 104的B矩阵缓冲器144中。因此,来自流式传输引擎110的第一向量将包含P矩阵的第一行(即行0),来自流式传输引擎的第二向量将包含P矩阵的第二行,等等。流式传输引擎108被配置成从L2高速缓存106提供向量c,以用于加载到A矩阵缓冲器138中。
为了执行列置换,在MMA 104上执行经适当配置的LSE指令以用P矩阵加载B矩阵缓冲器144。一旦加载B矩阵缓冲器,就执行另外的LSE指令以将c向量加载到A矩阵缓冲器138中,执行矩阵乘法,并将结果存储在C矩阵缓冲器134的相应行中。一旦完成所有矩阵乘法,就执行将C矩阵缓冲器134的内容移出MMA 104的LSE指令。
设备100还可以被配置成执行具有交错的实部和虚部且具有单独的实部和虚部的批量小一维(1D)复数到复数快速傅立叶变换(FFT),以及具有交错的实部和虚部且具有单独的实部和虚部的大一维复数到复数FFT。在下面的FFT描述中,下标“co”表示复数,下标“re”表示实数,并且下标“im”表示虚数。
具有交错的实部和虚部的长度为N≤16的小复数到复数FFT可以按下式根据强力离散傅里叶变换(DFT)计算
yco N=xco N*Fco N
其中
xco N=[xre(0) xim(0) ... xre(N-l) xim(N-l)]
yco N=[yre(0) yim(0) ... yre(N-l) yim(N-1)]
Fco N=[Fre N(0,0) Fim N(0,0) ... Fre N(0,N-l) Fim N(0,N-l)]
[-Fim N(0,0) Fre N(0,0) ... -Fim N(0,N-l) Fre N(0,N-l)]
[... ... ... ... ]
[Fre N(N-l,0) Fim N(N-l,0) ... Fre N(N-l,N-l) Fim N(N-l,N-l)]
[-Fim N(N-l,0) Fre N(N-l,0) ... -Fim N(N-l,N-l) Fre N(N-l,N-l)]
FN(r,c)=e-j*(2*π/N)*r*c
如本文所使用的,强力DFT使用DFT矩阵乘以输入向量从而创建输出向量,该输出向量为输入的DFT。
对于N=16,向量矩阵乘法可以用于计算yco 16=xco 16*Fco 16,因为xco 16和yco 16为具有交错的实值和虚值的1×32向量,并且Fco 16为32×32矩阵。因此,可以将向量xco 16加载到MMA104的A矩阵缓冲器138中,并且可以将矩阵Fco 16加载到B矩阵缓冲器144中,计算矩阵乘积,并将结果存储在C矩阵缓冲器134中。对于较小的N值,如前面参考图7所述的小向量矩阵乘法可以用于计算批量强力DFT。
具有单独的实部和虚部的批量小复数到复数FFT可以按下式根据强力离散傅里叶变换(DFT)计算
Yre M,N=Xre M,N*Fre N–Xim M,N*Fim N
Yim M,N=Xim M,N*Fre N+Xre M,N*Fim N
其中
Xre M,N=[xre 0,N]
[...]
[xre M-1,N]
Xim M,N=[xim 0,N]
[...]
[xim M-1,N]
Yre M,N=[yre 0,N]
[...]
[yre M-1,N]
Yim M,N=[yim 0,N]
[...]
[yim M-1,N]
Fre N=[Fre N(0,0) ... Fre N(0,N-1)]
[... ...]
[Fre N(N-1,0) ... Fre N(N-1,N-1)]
Fim N=[Fim N(0,0) ... Fim N(0,N-1)]
[... ...]
[Fim N(N-1,0) ... Fim N(N-1,N-1)]
其中
xre m,N=[xre m,N(0) ... xre m,N(N-1)]
xim m,N=[xim m,N(0) ... xim m,N(N-1)]
yre N=[yre N(0) ... yre N(N-1)]
通过按下式将Yre M,32和Yim M,32的计算分成两个计算,可以使用矩阵矩阵乘法在设备100中计算具有单独的实部和虚部的批量M 32点复数到复数FFT。
Yre M,32=Xre M,32*Fre 32
Yre M,32-=Xim M,32*Fim 32
Yim M,32=Xim M,32*Fre 32
Yim M,32+=Xre M,32*Fim 32
为了执行这些计算,流式传输引擎108、流式传输引擎110和MMA 104被配置用于矩阵矩阵乘法。此外,输入格式化122被配置成将输入分成实部和虚部。
具有单独的实部和虚部的较小复数到复数FFT可以在设备100中使用上述公式和如前所述的批量小矩阵矩阵乘法分批计算,其中N=K=FFT大小≤32。
可以如下计算大复数到复数一维FFT:1)以连续顺序将数据X加载到矩阵的行中;2)对矩阵的列进行FFT;3)将矩阵逐点乘以旋转因子ej*(2*π/N)*row*col(对于IFFT)或e-j*(2*π/N)*row*col(对于IFFT);4)对矩阵的行进行FFT;5)转置矩阵;6)以连续顺序存储所得矩阵的行。
在给定数据矩阵X的情况下,该处理可以如下在设备100中实施。为了对X的列进行FFT,将矩阵X加载到B矩阵缓冲器144中,并将DFT矩阵F加载到A矩阵缓冲器138中。然后使用如本文所述的矩阵矩阵逐点乘法来执行与旋转因子的乘法。为了对X的行进行FFT,将DFT矩阵F加载到B矩阵缓冲器144中,并将矩阵X加载到A矩阵缓冲器138中。将数据矩阵X加载到A矩阵缓冲器或B矩阵缓冲器中,以允许列或行的FFT而无需转置。矩阵X的最终转置可以在MMA 104或输出格式化116中执行。
表7为示出具有单独的实部和虚部的具有长度1024的复数到复数一维FFT的计算的示例。例如,Tre 32=Fre 32和Tim 32=Fim 32。此外,明确提到的所有加载操作都进入B矩阵缓冲器144中,并且除了初始化加载之外,与矩阵乘法并行执行。输入格式化122被配置成将输入分成实部和虚部。
表7
初始化
加载Xre 32,32
1.对列进行FFT
Yre 32,32=Fre 32*Xre 32,32并且加载Xim 32,32
Yre 32,32-=Fim 32*Xim 32,32
Yim 32,32=Fre 32*Xim 32,32并且加载Xre 32,32
Yim 32,32+=Fim 32*Xre 32,32并且加载Yre 32,32
2.逐点乘以旋转因子
Xre 32,32=Tre 32.*Yre 32,32并且加载Yim 32,32
Xre 32,32-=Tim 32.*Yim 32,32
Xim 32,32=Tre 32.*Yim 32,32并且加载Yre 32,32
Xim 32,32+=Tim 32.*Yre 32,32并且加载Fre 32
3.对行进行FFT
Yre 32,32=Xre 32,32*Fre 32并且加载Fim 32,
Yre 32,32-=Xim 32,32*Fim 32
Yim 32,32=Xre 32,32*Fim 32并且加载Fre 32,
Yim 32,32+=Xim 32,32*Fre 32
4.转置
Xre 32,32=(Yre 32,32)T
Xim 32,32=(Yim 32,32)T
设备100还可以被配置成根据y=dct(x)执行一维(1D)离散余弦变换(DCT)。批量小一维(1D)离散余弦变换(DCT)和大一维DCT的计算类似于先前描述的小一维和大一维复数到复数FFT,除了DCT矩阵为实数的并且数据为实数。参考DCT大小的术语“小”和“大”与术语“小FFT大小”和“大FFT大小”相同地使用。小DCT可以经由矩阵向量乘法实施。大DCT可以经由预处理(步骤1)、FFT(步骤2)和后处理(步骤3)实施,具体如下:
x’(n)=x(2*n)且x’(N-1-n)=x(2*n-1)其中n=0,1,...,N/2-1, (步骤1)
计算y’=FFT(x’) (步骤2)
y(n)=real(exp(-j*n*pi/(2*N))*y(n)) (步骤3)
任何FFT方法可以用于计算上述序列中的步骤2,包括先前描述的小FFT和大FFT。
设备100还可以被配置成根据执行小一维和大一维(1D)卷积/滤波。一维卷积/滤波可以按下式计算
y(n)=∑h(τ)*x(n-τ),τ=0,1,...,L-1;n=L-1,L,...
其中L为滤波器长度,τ为按卷积定义的滤波器系数索引。小卷积为其中L≤32的卷积,而大卷积为其中L>32的卷积。对于小一维卷积,假设滤波器长度L在[1,32]中,并且输出对于n≥L-1有效。可以按下式在设备100中计算小一维卷积
C(t,:)=A(t,:)*B,t=0,1,...
其中
A(t,:)=[x((33-L)*t) ... x((33-L)*t+31)]
B=[h(L-1) 0 ]
[h(L-2) h(L-1) ]
[... ... ]
[h(0) h(1) ]
[0 h(0) ]
[0 0 ... h(L-1) 0 ... 0]
[... ... ... ]
[0 0 h(0) 0 ... 0]
C(t,:)=[y((33-L)*t+L-1) ... y((33-L)*t+31) 0 ... 0]
在B中,所有行的最后的L-1列为零,而在C中,最后的L-1条目为零,并且变量t用于索引生成32-L输出的次数。
为了执行一维卷积,流式传输引擎110被配置成从L2高速缓存106提供滤波器h的元素,以用33-L个滤波器副本初始加载B矩阵缓冲器144。h的多个副本存储在L2高速缓存106中,或者单个副本存储在L2高速缓存106中,并通过配置输入格式化122来复制。流式传输引擎108被配置成在每个周期从L2高速缓存106读取33-L个新的x(n)值并生成A(t,:)。MMA 104被配置用于向量矩阵乘法,并且在每个周期,MMA 104计算C(t,:)中y(n)的33-L个值。
用于在设备100中计算大一维卷积/滤波器的策略基于以下关于将大滤波器分解成两个较小滤波器片段的观察:
设L=L1+L2
h1(τ)=h(τ),τ=0,...,L1-1
h2(τ)=h(τ+L1),τ=0,...,L2-1
y(n)=∑h(τ)*x(n-τ),
=∑h1(τ1)*x(n-τ1)+∑h2(τ2)*x(n–τ2–L1),
其中τ=0,...,L-1;n=L-1,L,...并且τ1=0,...,L1-1;τ2=0,...,L2–1。
使用上述分解的递归应用将滤波器h分成较小的片段,直到滤波器片段的大小尽可能最佳,即,将滤波器大小挑选为最大化MMA 104的吞吐量和最小化滤波器总数之间的折衷。图14的曲线图示出滤波器片段大小与MMA 104的吞吐量之间的折衷。如该曲线图所示,MMA 104的最佳滤波器片段大小约为缓冲器138、缓冲器144的宽度的一半,即MMA 104的计算原语大小的宽度的大约一半。在一些示例中,离线执行用于选择较小滤波器片段的大小的分解。在一些示例中,分解由处理器102执行。按上述等式进行适当移位的输入版本用相应的滤波器片段进行滤波,并将结果相加。如前所述,使用向量矩阵乘法来实施滤波。
设备100还可以被配置成按y=h★x执行一维相关。相关与以时间反转顺序对滤波器系数进行卷积相同。因此,可以使用如前所述的小一维或大一维卷积来实施一维相关,其中输入格式化122被配置成在h或x任一者上执行时间反转。
设备100还可以被配置成按C=A或C=B实施矩阵分配。因此,可以在MMA 104中按C=A*I或C=I*B执行分配,其中I为单位矩阵。
设备100还可以被配置成实施矩阵转置BT。矩阵的转置为一个新的矩阵,该新矩阵中的列为原始矩阵的行。为了执行转置操作,MMA 104包括操作模式,即复制操作,其指定A矩阵缓冲器138中的元素将被复制到B矩阵缓冲器144的指定列。
为了执行矩阵的转置,流式传输引擎108被配置成从L2高速缓存106读取矩阵的行的元素,并依次提供矩阵的每一行以加载到B矩阵缓冲器144中。因此,来自流式传输引擎108的第一向量将包含矩阵的第一行(即行0),来自流式传输引擎的第二向量将包含矩阵的第二行,等等。然后执行经适当配置的LSE指令,该LSE指令加载来自缓冲器124的矩阵的行并将元素存储在B矩阵缓冲器144的连续列中。一旦已转置矩阵的所有行,就执行经适当配置的LSE指令以将B矩阵缓冲器的内容移动到C矩阵缓冲器134并且移出MMA 104。
其他示例
本文已经描述其中处理器为DSP并且执行控制软件的示例,该控制软件配置设备100以执行基本计算原语并控制原语的执行。在其他示例中,耦合到设备100的主处理器执行用以执行基本计算原语所需的控制操作中的一些或全部。处理器可以为任何合适类型以及电子数据处理器的组合。例如,处理器可以为来自英特尔公司(Intel Corp.)或高级微设备公司(Advanced Micro Devices,Inc.)的一个或多个处理器、一个或多个精简指令集计算机(RISC)、一个或多个专用集成电路(ASIC)、一个或多个数字信号处理器(DSP)等。
本文已经描述其中MMA中的缓冲器尺寸为1×32或32×32的示例。在其他示例中,MMA中的缓冲器尺寸可以更小或更大。
在所描述的实施例中,修改是可能的,并且在权利要求的范围内,其他实施例也是可能的。
Claims (26)
1.一种用于在设备中执行基本计算原语的方法,所述设备包括处理器和矩阵乘法加速器即MMA,所述方法包括:
配置被包括在所述设备中的流式传输引擎以从存储器流式传输用于所述基本计算原语的数据;
配置所述MMA以格式化所述数据;以及
由所述设备执行所述基本计算原语。
2.根据权利要求1所述的方法,其中执行所述基本计算原语还包括在使用第二被乘数矩阵缓冲器中的数据执行矩阵乘法的同时将数据加载到第一被乘数矩阵缓冲器中,所述第一被乘数矩阵缓冲器和所述第二被乘数矩阵缓冲器被包括在所述MMA中。
3.根据权利要求1所述的方法,其中配置所述MMA还包括配置所述MMA以偏移被包括在所述MMA中的被乘数矩阵缓冲器中的加载数据。
4.根据权利要求1所述的方法,其中所述数据包括矩阵的行,并且其中执行所述基本计算原语还包括将所述数据复制到被包括在所述MMA中的被乘数矩阵缓冲器中的列。
5.根据权利要求1所述的方法,还包括配置所述处理器以将零填充添加到所述MMA的输出。
6.根据权利要求1所述的方法,还包括配置所述处理器以对所述MMA的输出执行接缝去除。
7.根据权利要求1所述的方法,还包括配置所述处理器以根据指定步幅对所述MMA的输出执行列子采样。
8.根据权利要求1所述的方法,其中配置所述流式传输引擎还包括配置所述流式传输引擎以将多个特征映射的数据瓦片式拼接为滤波矩阵。
9.根据权利要求8所述的方法,其中选择数据瓦片的大小,使得在所述MMA的所述输出中不存在接缝。
10.根据权利要求8所述的方法,其中选择数据瓦片的大小,使得接缝始终在所述MMA的所述输出中的相同位置。
11.根据权利要求1所述的方法,其中所述数据包括复数,其中所述复数的实部和虚部被交错存储在所述存储器中,并且所述方法还包括配置所述处理器以将每个复数分成所述实部和所述虚部,以用于加载到所述MMA中。
12.根据权利要求1所述的方法,其中所述基本计算原语为快速傅里叶变换即FFT,并且执行所述基本计算原语还包括:
将离散傅里叶变换矩阵即DFT矩阵加载到被包括在所述MMA中的乘数矩阵缓冲器中,并将数据矩阵加载到被包括在所述MMA中的被乘数矩阵缓冲器中,以对所述数据矩阵的列执行所述FFT;以及
将所述数据矩阵加载到所述乘数矩阵缓冲器中并且将所述DFT矩阵加载到被乘数矩阵缓冲器中,以对所述数据矩阵的行执行所述FFT。
13.根据权利要求1所述的方法,其中所述数据包括长度大于被包括在所述MMA中的被乘数矩阵缓冲器的宽度的滤波器,并且所述滤波器被分解成多个较小滤波器,其中所述较小滤波器的大小被挑选为在最大化所述MMA的所述吞吐量和最小化较小滤波器的总数之间的折衷。
14.一种设备,其包括:存储器;
处理器,其耦合到所述存储器;以及
矩阵乘法加速器即MMA,其耦合到所述处理器,所述MMA包括乘数缓冲器和第一被乘数缓冲器,
其中所述设备可操作以:配置被包括在所述设备中的流式传输引擎,以从所述存储器流式传输用于基本计算原语的数据;配置所述MMA以格式化所述数据;以及执行所述基本计算原语。
15.根据权利要求14所述的设备,其中所述设备还可操作以执行所述基本计算原语,其中在使用被包括在所述MMA中的第二被乘数矩阵缓冲器中的数据执行矩阵乘法的同时将数据加载到所述第一被乘数矩阵缓冲器中。
16.根据权利要求14所述的设备,其中所述设备还可操作以配置所述MMA以偏移所述第一被乘数矩阵缓冲器中的加载数据。
17.根据权利要求14所述的设备,其中所述设备还可操作以执行所述基本计算原语,其中所述数据包括矩阵的行,并且所述数据被复制到所述第一被乘数矩阵缓冲器中的列。
18.根据权利要求14所述的设备,其中所述设备还可操作以配置所述处理器以将零填充添加到所述MMA的输出。
19.根据权利要求14所述的设备,其中所述设备还可操作以配置所述处理器以对所述MMA的输出执行接缝去除。
20.根据权利要求14所述的设备,其中所述设备还可操作以配置所述处理器以根据指定步幅对所述MMA的输出执行列子采样。
21.根据权利要求14所述的设备,其中所述设备还可操作以配置所述流式传输引擎以将多个特征映射的数据瓦片式拼接为滤波矩阵。
22.根据权利要求21所述的设备,其中选择数据瓦片的大小,使得在所述MMA的输出中不存在接缝。
23.根据权利要求21所述的设备,其中选择数据瓦片的大小,使得接缝始终在所述MMA的输出中的相同位置。
24.根据权利要求14所述的设备,其中所述数据包括复数,其中所述复数的实部和虚部被交错存储在所述存储器中,并且所述设备还可操作以配置所述处理器以将每个复数分成所述实部和所述虚部,以用于加载到所述MMA中。
25.根据权利要求14所述的设备,其中所述基本计算原语为快速傅里叶变换即FFT并且所述设备还可操作以执行所述基本计算原语,其中
离散傅里叶变换矩阵即DFT矩阵被加载到所述乘数矩阵缓冲器中,并且数据矩阵被加载到所述第一被乘数矩阵缓冲器中,以对所述数据矩阵的列执行所述FFT;以及
所述数据矩阵被加载到所述乘数矩阵缓冲器中,并且所述DFT矩阵被加载到所述第一被乘数矩阵缓冲器中,以对所述数据矩阵的行执行所述FFT。
26.根据权利要求14所述的设备,其中所述数据包括长度大于所述第一被乘数矩阵缓冲器的宽度的滤波器,并且所述设备还可操作以将所述滤波器分解成多个较小滤波器,其中所述较小滤波器的大小被挑选为在最大化所述MMA的所述吞吐量和最小化所述较小滤波器的总数之间的折衷。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201762465620P | 2017-03-01 | 2017-03-01 | |
US62/465,620 | 2017-03-01 | ||
US15/907,356 US11086967B2 (en) | 2017-03-01 | 2018-02-28 | Implementing fundamental computational primitives using a matrix multiplication accelerator (MMA) |
US15/907,356 | 2018-02-28 | ||
PCT/US2018/020462 WO2018160843A1 (en) | 2017-03-01 | 2018-03-01 | Implementing fundamental computational primitives using a matrix multiplication accelerator (mma) |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110352422A true CN110352422A (zh) | 2019-10-18 |
CN110352422B CN110352422B (zh) | 2024-01-02 |
Family
ID=63355695
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880014494.5A Active CN110352422B (zh) | 2017-03-01 | 2018-03-01 | 使用矩阵乘法加速器(mma)实施基本计算原语 |
Country Status (5)
Country | Link |
---|---|
US (2) | US11086967B2 (zh) |
EP (1) | EP3590048A4 (zh) |
JP (1) | JP7271820B2 (zh) |
CN (1) | CN110352422B (zh) |
WO (1) | WO2018160843A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116248252A (zh) * | 2023-05-10 | 2023-06-09 | 蓝象智联(杭州)科技有限公司 | 一种用于联邦学习的数据点乘处理方法 |
Families Citing this family (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10809978B2 (en) * | 2017-06-02 | 2020-10-20 | Texas Instruments Incorporated | Merge sort accelerator |
WO2019090325A1 (en) | 2017-11-06 | 2019-05-09 | Neuralmagic, Inc. | Methods and systems for improved transforms in convolutional neural networks |
US20190156214A1 (en) | 2017-11-18 | 2019-05-23 | Neuralmagic Inc. | Systems and methods for exchange of data in distributed training of machine learning algorithms |
US11436483B2 (en) * | 2018-01-17 | 2022-09-06 | Mediatek Inc. | Neural network engine with tile-based execution |
CN108388537B (zh) * | 2018-03-06 | 2020-06-16 | 上海熠知电子科技有限公司 | 一种卷积神经网络加速装置和方法 |
US10853034B2 (en) * | 2018-03-30 | 2020-12-01 | Intel Corporation | Common factor mass multiplication circuitry |
US11256979B2 (en) * | 2018-03-30 | 2022-02-22 | Intel Corporation | Common factor mass multiplication circuitry |
US10963787B2 (en) * | 2018-05-31 | 2021-03-30 | Neuralmagic Inc. | Systems and methods for generation of sparse code for convolutional neural networks |
US11449363B2 (en) | 2018-05-31 | 2022-09-20 | Neuralmagic Inc. | Systems and methods for improved neural network execution |
US11216732B2 (en) | 2018-05-31 | 2022-01-04 | Neuralmagic Inc. | Systems and methods for generation of sparse code for convolutional neural networks |
US10832133B2 (en) | 2018-05-31 | 2020-11-10 | Neuralmagic Inc. | System and method of executing neural networks |
US11429850B2 (en) * | 2018-07-19 | 2022-08-30 | Xilinx, Inc. | Performing consecutive mac operations on a set of data using different kernels in a MAC circuit |
WO2020072274A1 (en) | 2018-10-01 | 2020-04-09 | Neuralmagic Inc. | Systems and methods for neural network pruning with accuracy preservation |
WO2020073211A1 (zh) * | 2018-10-09 | 2020-04-16 | 华为技术有限公司 | 运算加速器、处理方法及相关设备 |
US11100193B2 (en) | 2018-12-07 | 2021-08-24 | Samsung Electronics Co., Ltd. | Dataflow accelerator architecture for general matrix-matrix multiplication and tensor computation in deep learning |
US11544559B2 (en) | 2019-01-08 | 2023-01-03 | Neuralmagic Inc. | System and method for executing convolution in a neural network |
JP7062617B2 (ja) * | 2019-06-26 | 2022-05-06 | 株式会社東芝 | 演算装置および演算方法 |
WO2021026225A1 (en) | 2019-08-08 | 2021-02-11 | Neuralmagic Inc. | System and method of accelerating execution of a neural network |
US11657282B2 (en) * | 2019-09-16 | 2023-05-23 | Qualcomm Incorporated | Efficient inferencing with fast pointwise convolution |
US11847184B2 (en) * | 2020-01-14 | 2023-12-19 | Texas Instruments Incorporated | Two-way descriptor matching on deep learning accelerator |
US11556757B1 (en) | 2020-12-10 | 2023-01-17 | Neuralmagic Ltd. | System and method of executing deep tensor columns in neural networks |
US11556337B2 (en) * | 2021-04-12 | 2023-01-17 | Analog Devices International Unlimited Company | Parallel matrix multiplication technique optimized for memory fetches |
CN113496008B (zh) * | 2021-09-06 | 2021-12-03 | 北京壁仞科技开发有限公司 | 用于执行矩阵计算的方法、计算设备和计算机存储介质 |
US11960982B1 (en) | 2021-10-21 | 2024-04-16 | Neuralmagic, Inc. | System and method of determining and executing deep tensor columns in neural networks |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8301749B1 (en) * | 2004-02-13 | 2012-10-30 | Habanero Holdings, Inc. | Unused resource recognition in real time provisioning and management of fabric-backplane enterprise servers |
CN104899182A (zh) * | 2015-06-09 | 2015-09-09 | 中国人民解放军国防科学技术大学 | 一种支持可变分块的矩阵乘加速方法 |
CN104915322A (zh) * | 2015-06-09 | 2015-09-16 | 中国人民解放军国防科学技术大学 | 一种卷积神经网络硬件加速方法及其axi总线ip核 |
CN106228238A (zh) * | 2016-07-27 | 2016-12-14 | 中国科学技术大学苏州研究院 | 现场可编程门阵列平台上加速深度学习算法的方法和系统 |
Family Cites Families (33)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4897717A (en) | 1988-03-30 | 1990-01-30 | Starsignal, Inc. | Computer-based video compression system |
US5099447A (en) | 1990-01-22 | 1992-03-24 | Alliant Computer Systems Corporation | Blocked matrix multiplication for computers with hierarchical memory |
US5519839A (en) | 1992-10-02 | 1996-05-21 | Compaq Computer Corp. | Double buffering operations between the memory bus and the expansion bus of a computer system |
US5745793A (en) | 1995-06-07 | 1998-04-28 | Seagate Technology, Inc. | Apparatus having a circular buffer that maintains a one entry gap between elements written to the microprocessor and elements operated on by the clock |
JP3675537B2 (ja) * | 1995-11-29 | 2005-07-27 | 富士通株式会社 | 高速フーリエ変換を行うメモリ分散型並列計算機およびその方法 |
US5982375A (en) | 1997-06-20 | 1999-11-09 | Sun Microsystems, Inc. | Floating point processor for a three-dimensional graphics accelerator which includes single-pass stereo capability |
US7386046B2 (en) | 2001-02-13 | 2008-06-10 | Realtime Data Llc | Bandwidth sensitive data compression and decompression |
EP2093895A1 (en) | 2002-08-20 | 2009-08-26 | Interdigital Technology Corporation | Fast joint detection |
US7856465B2 (en) * | 2006-12-21 | 2010-12-21 | Intel Corporation | Combined fast fourier transforms and matrix operations |
US8533251B2 (en) | 2008-05-23 | 2013-09-10 | International Business Machines Corporation | Optimized corner turns for local storage and bandwidth reduction |
US8250130B2 (en) | 2008-05-30 | 2012-08-21 | International Business Machines Corporation | Reducing bandwidth requirements for matrix multiplication |
KR101074010B1 (ko) | 2009-09-04 | 2011-10-17 | (주)이스트소프트 | 블록 단위 데이터 압축 및 복원 방법 및 그 장치 |
US8984043B2 (en) | 2009-12-23 | 2015-03-17 | Intel Corporation | Multiplying and adding matrices |
US9600281B2 (en) | 2010-07-12 | 2017-03-21 | International Business Machines Corporation | Matrix multiplication operations using pair-wise load and splat operations |
US9201701B2 (en) | 2010-07-16 | 2015-12-01 | Nokia Technologies Oy | Method and apparatus for distributing computation closures |
US9042440B2 (en) | 2010-12-03 | 2015-05-26 | Qualcomm Incorporated | Coding the position of a last significant coefficient within a video block based on a scanning order for the block in video coding |
US8433148B2 (en) | 2011-03-31 | 2013-04-30 | Mitsubishi Electric Research Laboratories, Inc. | Method for compressing textured images |
US9647731B2 (en) * | 2011-10-20 | 2017-05-09 | Microelectronics Research & Development Corp. | Reconfigurable network on a chip (NoC) radio through reduced instruction set computer (RISC) agents by overwriting program store for different phases of demodulation |
JP5840994B2 (ja) | 2012-03-27 | 2016-01-06 | 富士通株式会社 | 行列演算装置 |
US20130332498A1 (en) * | 2012-05-21 | 2013-12-12 | Stmicroelectronics, Inc. | Method and apparatus for efficient frequency-domain implementation of time-varying filters |
US8847798B2 (en) | 2012-12-17 | 2014-09-30 | Maxeler Technologies, Ltd. | Systems and methods for data compression and parallel, pipelined decompression |
US9384168B2 (en) | 2013-06-11 | 2016-07-05 | Analog Devices Global | Vector matrix product accelerator for microprocessor integration |
US10203958B2 (en) | 2013-07-15 | 2019-02-12 | Texas Instruments Incorporated | Streaming engine with stream metadata saving for context switching |
US10078551B2 (en) | 2013-07-15 | 2018-09-18 | Texas Instruments Incorporated | Streaming engine with error detection, correction and restart |
US10083035B2 (en) | 2013-07-15 | 2018-09-25 | Texas Instruments Incorporated | Dual data streams sharing dual level two cache access ports to maximize bandwidth utilization |
US10073696B2 (en) | 2013-07-15 | 2018-09-11 | Texas Instruments Incorporated | Streaming engine with cache-like stream data storage and lifetime tracking |
US10061675B2 (en) | 2013-07-15 | 2018-08-28 | Texas Instruments Incorporated | Streaming engine with deferred exception reporting |
US9606803B2 (en) | 2013-07-15 | 2017-03-28 | Texas Instruments Incorporated | Highly integrated scalable, flexible DSP megamodule architecture |
US9785444B2 (en) * | 2013-08-16 | 2017-10-10 | Analog Devices Global | Hardware accelerator configuration by a translation of configuration data |
US9645974B1 (en) | 2015-03-11 | 2017-05-09 | Google Inc. | Optimized matrix multiplication using vector multiplication of interleaved matrix values |
US10762894B2 (en) * | 2015-03-27 | 2020-09-01 | Google Llc | Convolutional neural networks |
US10114613B2 (en) * | 2016-09-07 | 2018-10-30 | International Business Machines Corporation | Mixed-precision memcomputing system |
US20190266218A1 (en) | 2018-02-28 | 2019-08-29 | Wave Computing, Inc. | Matrix computation within a reconfigurable processor fabric |
-
2018
- 2018-02-28 US US15/907,356 patent/US11086967B2/en active Active
- 2018-03-01 EP EP18760733.8A patent/EP3590048A4/en active Pending
- 2018-03-01 JP JP2019547631A patent/JP7271820B2/ja active Active
- 2018-03-01 CN CN201880014494.5A patent/CN110352422B/zh active Active
- 2018-03-01 WO PCT/US2018/020462 patent/WO2018160843A1/en unknown
-
2021
- 2021-07-04 US US17/367,389 patent/US11960567B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8301749B1 (en) * | 2004-02-13 | 2012-10-30 | Habanero Holdings, Inc. | Unused resource recognition in real time provisioning and management of fabric-backplane enterprise servers |
CN104899182A (zh) * | 2015-06-09 | 2015-09-09 | 中国人民解放军国防科学技术大学 | 一种支持可变分块的矩阵乘加速方法 |
CN104915322A (zh) * | 2015-06-09 | 2015-09-16 | 中国人民解放军国防科学技术大学 | 一种卷积神经网络硬件加速方法及其axi总线ip核 |
CN106228238A (zh) * | 2016-07-27 | 2016-12-14 | 中国科学技术大学苏州研究院 | 现场可编程门阵列平台上加速深度学习算法的方法和系统 |
Non-Patent Citations (1)
Title |
---|
YURAN QIAO 等: "FPGA-accelerated deep convolutional neural networks for high throughput and energy efficiency", CONCURRENCY AND COMPUTATION: PRACTICE AND EXPERIENCE * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116248252A (zh) * | 2023-05-10 | 2023-06-09 | 蓝象智联(杭州)科技有限公司 | 一种用于联邦学习的数据点乘处理方法 |
Also Published As
Publication number | Publication date |
---|---|
JP7271820B2 (ja) | 2023-05-12 |
JP2020509501A (ja) | 2020-03-26 |
US11960567B2 (en) | 2024-04-16 |
US20210334337A1 (en) | 2021-10-28 |
EP3590048A4 (en) | 2020-03-04 |
CN110352422B (zh) | 2024-01-02 |
US20180253402A1 (en) | 2018-09-06 |
EP3590048A1 (en) | 2020-01-08 |
WO2018160843A1 (en) | 2018-09-07 |
US11086967B2 (en) | 2021-08-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110352422A (zh) | 使用矩阵乘法加速器(mma)实施基本计算原语 | |
US11809514B2 (en) | Expanded kernel generation | |
KR102452757B1 (ko) | 가속화된 수학 엔진 | |
CN110366732B (zh) | 用于在卷积神经网络中进行矩阵处理的方法和设备 | |
KR102451239B1 (ko) | 매트릭스 프로세서를 위해 매트릭스 입력을 벡터화된 입력으로 변환하기 위한 시스템 및 방법 | |
Cox et al. | GANGLION-a fast field-programmable gate array implementation of a connectionist classifier | |
CN109635916A (zh) | 具有可变输出数据格式的深度神经网络的硬件实现 | |
Ashpazzadeh et al. | Hermite multiwavelets representation for the sparse solution of nonlinear Abel’s integral equation | |
WO2017180712A2 (en) | Method, system and program product for mask-based compression of a sparse matrix | |
CN109117187A (zh) | 卷积神经网络加速方法及相关设备 | |
Pitsianis | The Kronecker product in approximation and fast transform generation | |
Agarwal et al. | High-throughput implementation of a million-point sparse Fourier transform | |
US20230073012A1 (en) | Memory processing unit core architectures | |
Marino et al. | A parallel implementation of the 2-D discrete wavelet transform without interprocessor communications | |
EP4345691A1 (en) | Methods and systems for performing channel equalisation on a convolution layer in a neural network | |
Sathe et al. | A scalable hybrid linear solver based on combinatorial algorithms | |
Parker | Embedded Compute Matrix Processing and FFTs using Floating Point FPGAs | |
Johnsson | Massively parallel computing: Data distribution and communication | |
TWI841631B (zh) | 用於矩陣的空間地域轉換之方法及處理器電路 | |
TWI841632B (zh) | 用於矩陣的空間地域轉換之方法及系統 | |
Hemkemeier et al. | On the decomposition of lattices | |
Astola et al. | Architecture-oriented regular algorithms for discrete sine and cosine transforms | |
CN117474046A (zh) | 卷积神经网络的零填充 | |
CN117321590A (zh) | 多项式处理系统和方法 | |
CA1231177A (en) | Computer and method for discrete transforms |
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 |