CN112840356B - 运算加速器、处理方法及相关设备 - Google Patents

运算加速器、处理方法及相关设备 Download PDF

Info

Publication number
CN112840356B
CN112840356B CN201880098517.5A CN201880098517A CN112840356B CN 112840356 B CN112840356 B CN 112840356B CN 201880098517 A CN201880098517 A CN 201880098517A CN 112840356 B CN112840356 B CN 112840356B
Authority
CN
China
Prior art keywords
row vectors
row
vectors
matrix
read
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201880098517.5A
Other languages
English (en)
Other versions
CN112840356A (zh
Inventor
刘虎
黄彬
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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202310472072.5A priority Critical patent/CN116541647A/zh
Publication of CN112840356A publication Critical patent/CN112840356A/zh
Application granted granted Critical
Publication of CN112840356B publication Critical patent/CN112840356B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • G06F17/153Multidimensional correlation or convolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • 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
    • G06N3/045Combinations of networks
    • 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
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Biophysics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Neurology (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Complex Calculations (AREA)

Abstract

一种运算加速器(10)、处理方法及相关设备,包括:第一存储器(102),用于存储输入数据集;矩阵转换器(101),用于执行以下动作:从所述输入数据集中读出M个行向量,生成第一指令;向第二存储器(103)发送所述M个行向量和所述第一指令;所述第二存储器(103),根据所述第一指令对所述M个行向量进行预处理,得到n个行向量,并存储所述n个行向量;所述n个行向量包括所述M个行向量和(n‑M)个填充行向量;其中,所述n个行向量为目标矩阵的N个行向量,所述n个行向量在所述第二存储器(103)中的存储顺序与所述目标矩阵中的N个行向量的顺序一致。采用上述运算加速器(10)、处理方法及相关设备可以提升卷积运算的效率。

Description

运算加速器、处理方法及相关设备
技术领域
本申请涉及人工智能领域的数据处理技术,尤其涉及一种运算加速器、处理方法及相关设备。
背景技术
近年来,随着深度神经网络、异构计算、高带宽高存储密度、大数据、云计算等技术的突破,人工智能的应用迅猛发展,走进大众生活的方方面面。当前的人工智能很大一部分的计算就是各种神经网络的运算,而卷积计算占据了整个神经网络的大部分计算量和数据吞吐量。
由于各种人工智能(Artificial Intelligence,AI)设备的遍及,云端大数据分析计算对AI加速的饥渴需求,神经网络的计算,特别是对卷积的计算能力、计算效率的提升问题日显突出。
卷积神经网络的主要组成部分为卷积计算,占据整个卷积神经网络95%以上计算量。卷积计算当前主流的计算方式是将3D的卷积输入数据集和3D的权重参数数据集的卷积运算转换成两个矩阵之间的乘法计算。但是,当两个矩阵较大时,可能会存在矩阵缓存空间不足、计算不灵活、计算效率低的问题。因此,如何提高卷积计算的效率,达到显著的提高神经网络算法的应用效果成为亟待解决的问题。
发明内容
本发明实施例提供一种运算加速器、处理方法及相关设备,以提升对卷积神经网络的运算效率。
第一方面,本发明实施例提供了一种运算加速器,可包括:矩阵转换器,以及与所述矩阵转换器耦合的第一存储器和第二存储器:其中,所述第一存储器,用于存储输入数据集;所述输入数据集包括S个行向量,所述S个行向量中的每一个行向量包括C0个数据,所述C0个数据为输入特征图中元素Aij在C方向上连续C0个通道对应的数据,其中,所述输入特征图的尺寸为W*H*C,W为宽度、H为高度、C为通道数,Aij为所述输入特征图的W*H平面中第i行第j列的元素,i为小于或者等于W的正整数,j为小于或者等于H的正整数;所述矩阵转换器,用于执行以下动作:从所述输入数据集中读出M个行向量,生成第一指令;所述M个行向量为目标矩阵中的M个行向量,所述目标矩阵的尺寸为N*C0,所述目标矩阵的N个行向量为卷积核在所述输入特征图的W*H平面上连续滑动N次时,所述W*H平面上与所述卷积核中元素Wmt对应的N个元素Aij所对应的行向量,Wmt为所述卷积核中的第m行第t列的元素;所述第一指令包括针对所述M个行向量进行预处理的指令,所述预处理包括移位、拼接和填充的一种或多种;其中,M为小于或者等于S的整数,N为大于或者等于M的整数,C0为小于或者等于C的整数;向所述第二存储器发送所述M个行向量和所述第一指令;所述第二存储器,根据所述第一指令对所述M个行向量进行所述预处理,得到n个行向量,并存储所述n个行向量;所述n个行向量包括所述M个行向量和(n-M)个填充行向量;其中,所述n个行向量为所述目标矩阵的N个行向量,所述n个行向量在所述第二存储器中的存储顺序与所述目标矩阵中的N个行向量的顺序一致。
本发明实施例,通过对输入特征图中的数据进行预处理(包括移位、拼接和填充的一种或多种)得到拆分后的小矩阵即目标矩阵,一次只对一部分数据转换存入缓存,将大矩阵运算划分为小矩阵运算解决了缓存不足的问题,且可以实现边转换边计算,解决了转换与计算两个过程之间的依赖。进一步地,由于本发明实施例所提供的数据拆分方式以及矩阵运算方式,可最大程度的实现数据复用,例如,可以在第一存储器存储的所有目标矩阵都运算完成之后才更新权重矩阵存储器。另外,由于本发明实施例中的进行运算的目标矩阵中的行向量是从通道C方向以一段固定长度C0进行划分的,在生成N*C0小矩阵时将矩阵W和H方向的元素离散性降维至只有H方向的离散性,降低了从第一存储器读feature map数据产生的冲突概率,提升原始数据读取的性能。
在一种可能的实现方式中,在N大于M的情况下,所述目标矩阵的N个行向量,具体为卷积核在填充后的输入特征图的W*H平面上连续滑动N次时,在所述填充后的W*H平面上与所述卷积核中元素Wmt对应的N个元素Aij所对应的行向量;所述第二存储器,用于根据所述第一指令对所述M个行向量进行所述预处理,得到n个行向量,并存储所述n个行向量,具体包括:对所述(n-M)个填充行向量进行固定值填充;按照所述第一指令,对所述M个行向量和所述(n-M)个填充行向量进行移位或拼接操作之后,得到n个行向量并进行存储。
本发明实施例通过在线padding的方式,解决feature map的输入数据集传输padding占用带宽和存储空间的问题。
在一种可能的实现方式中,所述运算加速器还包括与所述矩阵转换器耦合的第三存储器,以及与所述第三存储器耦合的运算电路;所述矩阵转换器,还用于:先后P次向所述第三存储器发送所述第二存储器存储的所述n个行向量和所述矩阵转换器生成的对应的第二指令,其中,P为大于或者等于1的整数,所述第二指令包括写使能、写地址和写尺寸指令;所述第三存储器,用于根据对应的第二指令存储P*n个行向量,并将所述P*n个行向量发送至所述运算电路;其中,P次接收的所述n个行向量中每一次接收的n个行向量在所述第三存储器中的存储顺序与对应的目标矩阵中的N个行向量的顺序一致,且P次接收的所述n个行向量之间在所述第三存储器中的存储顺序与接收的先后顺序一致;所述运算电路,用于对所述P*n个行向量进行矩阵运算。
本发明实施例通过在第二存储器中转换生成多个目标矩阵,并依次发送给第三存储器,最终第三存储器可以一次性对P*n个行向量进行相关的矩阵运算,当有多轮转换及运算时则可以边转换边运算,提升运算效率。
在一种可能的实现方式中,所述S个行向量为所述输入特征图中先W方向后H方向上连续的S个Aij在C方向上连续C0个通道对应的数据。
在一种可能的实现方式中,所述矩阵转换器,用于从所述输入数据集中读出M个行向量,生成第一指令,具体包括:根据读指令从所述S个行向量中读出M个行向量,所述读指令包括读使能、读地址、读步幅和读尺寸,所述读步幅与所述卷积核的滑动步幅相等。
本发明实施例通过在矩阵转换器读取M个行向量时,依据目标矩阵中所包含的元素,生成包括读使能、读地址、读步幅和读尺寸的微指令,以从第一存储器中读出生成目标矩阵的相关行向量。
在一种可能的实现方式中,所述矩阵转换器,还用于:根据所述第二存储器存储的n个行向量和所述第一指令,对所述n个行向量进行反向操作还原得到所述M个行向量,所述反向操作包括移位、拆分和去填充中的一种或多种;根据从所述输入数据集中读出M个行向量的读指令,对所述M个行向量在所述S个行向量中的位置进行还原,所述读指令包括读使能、读地址、读步幅和读尺寸。
本发明实施例中,矩阵转换器通过利用第一指令和n个行向量,可以还原该n个行向量在原始的输入数据集中的位置,以进行卷积的反向操作。本发明实施例实现了在一个硬件结构实现卷积前向和反向两种转换操作。
第二方面,本申请提供了一种数据处理方法,可包括:
从输入数据集中读出M个行向量;其中,所述输入数据集包括S个行向量,所述S个行向量中的每一个行向量包括C0个数据,所述C0个数据为输入特征图中元素Aij在C方向上连续C0个通道对应的数据,其中,所述输入特征图的尺寸为W*H*C,W为宽度、H为高度、C为通道数,Aij为所述输入特征图的W*H平面中第i行第j列的元素,i为小于或者等于W的正整数,j为小于或者等于H的正整数;所述M个行向量为目标矩阵中的M个行向量,所述目标矩阵的尺寸为N*C0,所述目标矩阵的N个行向量为卷积核在所述输入特征图的W*H平面上连续滑动N次时,所述W*H平面上与所述卷积核中元素Wmt对应的N个元素Aij所对应的行向量,Wmt为所述卷积核中的第m行第t列的元素;其中,M为小于或者等于S的整数,N为大于或者等于M的整数,C0为小于或者等于C的整数;
对所述M个行向量进行预处理,得到n个行向量;所述预处理包括移位、拼接和填充的一种或多种;所述n个行向量包括所述M个行向量和(n-M)个填充行向量;其中,所述n个行向量为所述目标矩阵的N个行向量,所述n个行向量在所述第二存储器中的存储顺序与所述目标矩阵中的N个行向量的顺序一致。
在一种可能的实现方式中,在N大于M的情况下,所述目标矩阵的N个行向量,具体为卷积核在填充后的输入特征图的W*H平面上连续滑动N次时,在所述填充后的W*H平面上与所述卷积核中元素Wmt对应的N个元素Aij所对应的行向量;
所述对所述M个行向量进行所述预处理,得到n个行向量,包括:
对所述(n-M)个填充行向量进行固定值填充;
对所述M个行向量和所述(n-M)个填充行向量进行移位或拼接之后,得到n个行向量。
在一种可能的实现方式中,所述S个行向量为所述输入特征图中先W方向后H方向上连续的S个Aij在C方向上连续C0个通道对应的数据。
在一种可能的实现方式中,所述从所述输入数据集中读出M个行向量,包括:
根据读指令从所述S个行向量中读出M个行向量,所述读指令包括读使能、读地址、读步幅和读尺寸,所述读步幅与所述卷积核的滑动步幅相等。
在一种可能的实现方式中,所述方法,还包括:
对所述n个行向量进行反向操作还原得到所述M个行向量,所述反向操作包括移位、拆分和去填充中的一种或多种;
根据从所述输入数据集中读出M个行向量的读指令,对所述M个行向量在所述S个行向量中的位置进行还原,所述读指令包括读使能、读地址、读步幅和读尺寸。
第三方面,本申请提供了一种神经网络处理器,可包括上述第一方面中任意一项所述的运算加速器。
第四方面,本申请提供一种片上系统芯片,可包括:上述第一方面中任意一种实现方式中所提供的运算加速器以及耦合于所述运算加速器的其他分立器件。
第五方面,本申请提供了一种运算加速系统,所述运算加速系统包括处理器、运算加速器以及存储器,所述运算加速器在所述处理器的控制下调用所述存储器中的数据实现上述第一方面以及任意一种实现方式中的运算加速器的功能。
附图说明
图1是现有技术中的将卷积核转换为权重矩阵的示意图;
图2是现有技术中的将输入数据转换为输入矩阵的示意图;
图3是现有技术中的两个矩阵进行乘法运算的方法示意图;
图4是现有技术中的TPU脉动阵列示意图;
图5是现有技术中的TPU结构示意图;
图6是现有技术中的3×3 2D脉动阵列结构示意图;
图7是本发明实施例提供的一种运算加速器的结构图;
图8是本发明实施例提供的另一种运算加速器的结构图;
图9是本发明实施例提供的一种输入特征图的存储方式;
图10是本发明实施例提供的一种运算加速器的细化结构示意图;
图11是本发明实施例提供的一种目标矩阵生成示意图;
图12是本发明实施例提供的一种移位、拼接或替换示意图;
图13是本发明实施例提供的另一种移位、拼接或替换示意图;
图14是本发明实施例提供的另一种移位、拼接或替换示意图;
图15是本发明实施提供的一个3D数据集转换矩阵过程的二维平面图;
图16是本发明实施例提供的一种神经网络处理器的硬件结构示意图;
图17是本发明实施例提供的一种数据处理方法流程示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例进行描述。
本申请的说明书和权利要求书及所述附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
在本说明书中使用的术语“部件”、“模块”、“系统”等用于表示计算机相关的实体、硬件、固件、硬件和软件的组合、软件、或执行中的软件。例如,部件可以是但不限于,在处理器上运行的进程、处理器、对象、可执行文件、执行线程、程序和/或计算机。通过图示,在计算设备上运行的应用和计算设备都可以是部件。一个或多个部件可驻留在进程和/或执行线程中,部件可位于一个计算机上和/或分布在2个或更多个计算机之间。此外,这些部件可从在上面存储有各种数据结构的各种计算机可读介质执行。部件可例如根据具有一个或多个数据分组(例如来自与本地系统、分布式系统和/或网络间的另一部件交互的二个部件的数据,例如通过信号与其它系统交互的互联网)的信号通过本地和/或远程进程来通信。
首先,对本申请中的部分用语进行解释说明,以便于本领域技术人员理解。
(1)人工智能(Artificial Intelligence,AI),是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。换句话说,人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式作出反应的智能机器。人工智能也就是研究各种智能机器的设计原理与实现方法,使机器具有感知、推理与决策的功能。人工智能领域的研究包括机器人,自然语言处理,计算机视觉,决策与推理,人机交互,推荐与搜索,AI基础理论等。
(2)卷积神经网络(Convolutional Neural Network,CNN)是一种多层的神经网络,每层有多个二维平面组成,而每个平面由多个独立神经元组成,每个平面的多个神经元共享权重,通过权重共享可以降低神经网络中的参数数目。目前,在卷积神经网络中,处理器进行卷积操作通常是将输入信号特征与权重的卷积,转换为特征图矩阵与权重矩阵之间的矩阵乘运算。
(3)卷积就是卷积核跟卷积层的输入矩阵的运算。通常输入矩阵(input matrix)是卷积时根据卷积核的步幅(stride)从图像矩阵提取出来的矩阵。卷积核是一个小窗口,记录的是权重。卷积核在图像矩阵上按步幅滑动,每次滑动卷积核对应图像矩阵的一个子矩阵,将卷积核中的权值和该子矩阵包含的值相乘再相加,赋给卷积核当前所在的特征图矩阵(输出矩阵)对应的一个元素。
(4)卷积核沿图像矩阵的高度方向移动一次的步幅为卷积核高度滑动的步幅,卷积核沿图像矩阵的宽度方向移动一次的步幅为卷积核宽度滑动的步幅。卷积核的滑动步幅用参数stride表示。通常输入矩阵是卷积时根据卷积核的步幅(stride)从图像矩阵(即输入数据)提取出来的。举例来说,stride=[s1,s2],s1表示卷积核高度滑动的步幅,s2表示卷积核宽度滑动的步幅。
(5)填充像素(padding),由于卷积后的矩阵越变越小(例如卷积层100层,每一层都缩小最终得到的将是很小的图片),图像矩阵的边缘像素可能只被计算过一次,而中间像素被卷积计算多次,意味着会丢失图像角落信息。为了解决这两个问题,就对输入图像进行padding,即填充像素,用于保持边界信息;也可以利用padding对输入尺寸有差异图片进行补齐,使得输入图片尺寸一致;还可以使得卷积层的输入维度和输出维度一致等。
其次,提出本申请需要解决的技术问题及应用场景。近些年,由于卷积神经网络在图像分类、图像识别、音频识别以及其他相关领域的不俗表现,使其成为了学术界与工业界的研究与开发热门。卷积神经网络主要包括卷积和全连接(fully connected,FC)运算,其中卷积运算的运算量通常能够占据整个网络运算量的70%以上。
卷积运算从严格意义上不等同与矩阵乘法运算,但通过合理的数据调整,可以将卷积运算转换成矩阵乘法运算。在卷积神经网络中,通常会有多个卷积核,卷积核是三维的,包含三个维度的数据,x、y方向为数据的长和宽,z方向可以认为是数据的深度。卷积核其实就是滤波器(filter),主要用于提取图像中不同的特征。参见图1,卷积核实质上是一系列权重的组合,假设卷积核个数为K,将K个卷积核中同一位置z方向上的N个元素提取出来,即可得到N*K的权重矩阵(weight matrix),根据矩阵乘法器的规格(即矩阵乘法器可以计算的矩阵的行数和列数),可以将卷积核按照权重矩阵的形式预先存储在矩阵乘法器的存储器中,以便在矩阵乘法器进行矩阵乘法运算时进行调用。本发明实施例中的“*”表示“乘以”。
参见图2,根据卷积核的步幅(stride)(本发明实施例中步幅为1),矩阵乘法器可提取输入的M个点在z方向的N个数据,共M*N个数据,可以形成输入矩阵(input matrix),矩阵乘法器需要对输入矩阵和权重矩阵进行乘法运算。
FC运算本质上是一个向量与矩阵的乘法操作。FC运算的输入为一个9216的向量,FC需要输出4096个点,那么要得到FC输出的一个点,需要一个9126的向量与9216个权重进行点乘操作,要得到所有4096个点,需要9216的向量与9216x4096个权重进行点乘操作。
图3示出了矩阵C=A*B的计算公式,其中,A为尺寸为M*K的矩阵,B为尺寸为K*N的矩阵,在本发明实施例中,M、N和K均为正整数。要计算得到C矩阵中的一个数据,需要矩阵A中的一个行向量中的数据与矩阵B中的一个列向量中的对应数据做点乘运算后再累加,即要计算得到C矩阵中的一个数据要进行N次乘法运算,则要计算得到矩阵C需要进行M*N*K次乘法运算。
现有技术中,脉动阵列计算方式,例如Google为机器学习定制的专用芯片(ASIC)Google TPUv1,TPU使用了脉动阵列的设计,实现了一个256×256的2-D MAC Array用来优化矩阵乘法与卷积运算(如图4所示)。图中每一行的Value Loader和每一列的WeightFetcher Interface为中间的Cell(计算单元)矩阵以脉动的方式传送数据。图中每个Cell为一个乘法器,当乘法器将两个矩阵中的某一元素相乘后,计算得出的结果(Partial Sum,即矩阵乘法中的中间结果)会向下传输到图中下方的累加单元并与上一次的相关累加值进行累加。如此,当数据满负荷运转时,该脉动阵列会在每一个时钟周期累加一个矩阵大小的中间值。
该方案将数据集的矩阵转换和矩阵乘法糅合在一起,其中通过Value Loader对输入数据集的元素进行选择再传送至Cell矩阵。其整体结构如图5所示。为了更方便理解二维脉动阵列计算矩阵的方式,以下用一个3x3的脉动阵列为例,图6是现有技术中的3×3 2D脉动阵列结构示意图,如图6所示:
在第一个时钟周期,矩阵A[0,0]和矩阵B[0,0]传入第一个乘法器(其中,所有[x,y]的表达代表第x行,第y列)算出的结果会传入下方的累加单元。
在第二个时钟周期,矩阵A[0,1]与矩阵B[1,0]传入第一个乘法器算出A矩阵第一行和B矩阵第一列相乘的第二个中间值,并传入累加单元和上一个时钟周期算好的第一个中间值累加。与此同时上一轮传入的A[0,0]进入了右边的第二个乘法器与新传入的B[0,1]进行A矩阵第一行和B矩阵第二列的中间值运算。相同地,B[0,0]进入了下方的第二个乘法器与新传入的A[1,0]进行A矩阵第二行和B矩阵第一列的中间值运算。
上述方案中,输入数据集的矩阵转换与乘累加(Multiply and Accumulate,MAC)计算单元强耦合,矩阵转换的数据与计算单元直接硬线连接,矩阵运算的灵活性低;做矩阵乘法时,由于脉动阵列在初始阶段需要逐个传递进入Cell矩阵的特性,数据需要大批尺寸才可达到流水执行的效果。计算尺寸比较固定不灵活;256x256的2D脉动阵列在小矩阵上的计算效率不高;并且无法实现矩阵向3D数据集转换的反向过程。
因此,本申请所要解决的技术问题在于,设计一种运算加速器可以高效率、灵活且低能耗地对卷积神经网络中的大量的数据运算进行计算。其中,包括:实现输入数据集的矩阵转换与MAC计算单元解耦合,解决硬件结构设计灵活性低和数据复用率低的问题;设计一种NC1HWC0数据结构,将输入数据集转换后的矩阵拆分成小矩阵处理,解决TPU架构中处理小矩阵效率不高的问题;设计在线生成padding数据,解决feature map的输入数据集传输padding占用带宽和存储空间的问题等。
可以理解的是,本发明实施例提供的运算加速器不仅可以应用于机器学习、深度学习以及卷积神经网络等领域,也可以应用到数字图像处理和数字信号处理等领域,还可以应用在其他涉及矩阵乘法运算的领域。
基于上述分析,本申请提供一种运算加速器,对本申请中提出的技术问题进行具体分析和解决。请参见图7,图7是本发明实施例提供的一种运算加速器的结构图,如图7所示,运算加速器10包括:矩阵转换器101、和与该矩阵转换器101耦合的第一存储器102和第二存储器103。可选的,请参见图8,图8是本发明实施例提供的另一种运算加速器的结构图,运算加速器10还可以包括第三存储器104和运算电路105。其中,矩阵转换器101与第一存储器102、第二存储器103和第三存储器104可以通过总线进行数据通信,也可以组成小系统直接进行通信。运算电路105用于提取第三存储器104中的矩阵数据以及其它相关存储器中的权重矩阵进行向量的乘法和加法运算等。其中,
第一存储器102用于存储输入数据集;所述输入数据集包括S个行向量,所述S个行向量中的每一个行向量包括C0个数据,所述C0个数据为输入特征图中元素Aij在C方向上连续C0个通道对应的数据,其中,所述输入特征图的尺寸为W*H*C,W为宽度、H为高度、C为通道数,Aij为所述输入特征图的W*H平面中第i行第j列的元素,i为小于或者等于W的正整数,j为小于或者等于H的正整数,C0为小于或者等于C的整数。可以理解的是,上述S个行向量中处于相同列的元素在同一个通道对应的W*H平面上。在一种可能的实现方式中,所述S个行向量为所述输入特征图中先W方向后H方向上连续的S个Aij在C方向上连续C0个通道对应的数据。
例如,如图9所示,图9为本发明实施例提供的一种输入特征图的存储方式,在图9中将输入特征图(feature map)转换后的数据结构命名为NC1HWC0,假设输入特征图为图9中所示的尺寸为W*H*C的3D矩阵,将输入特征图按照通道channel方向进行拆分,拆分出一段一段固定长度的C0(如16个通道或4个通道等),命名为C0.0、C0.1、C0.2、C0.3……C0.(C1-1),一共拆分为C1个。拆分后的每个3D矩阵块例如C0.0为层尺寸C0为W*H卷积层。对于整个通道channel数不满足整数倍的C0,可以在尾部进行填充,使得整个channel数为C0的整数倍,最终图9中输入特征图的通道数channel=C0xC1,C1为整数。可选的,调整输入特征图的存储顺序可以按C0.0→W→H→C0.0→W→H→……→C0.(C1-1)的顺序进行存储,此处的N是指可以由多个上述输入特征图构成。
结合图9,本发明实施例中的输入数据集则可以是由一个或者多个上述输入特征图中的部分或全部Aij对应的C0个通道组成的行向量。假设,C0=4,若S个行向量为C0.0的矩阵块的W*H平面中连续(先W方向后H方向)S个Aij在C方向上连续C0个通道对应的数据,那么则可以为C0.0的矩阵块的W*H平面中A12,A12,A13,A14,……A1w,A21,A22,A23……对应的行向量,比如。其中第2行第2列的元素A22对应的行向量即为A22在C方向上连续4个通道上对应的数据为{A22-1,A22-2,A22-3,A22-4}。可以理解的是,各个通道的数据在行向量中的列顺序可以是按照从小到大、从大到小或者是按照预设值的排列方式即可,上述S个行向量之间处于相同列的元素是在同一个通道对应的W*H平面上即可。
矩阵转换器101,为由控制逻辑和运算器等组成的硬件功能模块,用于生成Img2Col或者Col2Img的相关微指令。具体地,矩阵转换器101用于执行以下动作:从所述输入数据集中读出M个行向量,生成第一指令;所述M个行向量为目标矩阵中的M个行向量,所述目标矩阵的尺寸为N*C0,所述目标矩阵的N个行向量为卷积核在所述输入特征图的W*H平面上连续滑动N次时,所述W*H平面上与所述卷积核中元素Wmt对应的N个元素Aij所对应的行向量,Wmt为所述卷积核中的第m行第t列的元素;所述第一指令包括针对所述M个行向量进行预处理的指令,所述预处理包括移位、拼接和填充的一种或多种指令;其中,M为小于或者等于S的整数,N为大于或者等于M的整数;向所述第二存储器发送所述M个行向量和所述第一指令。其中,本发明实施例中的一个目标矩阵,是由卷积核中某一个权重元素在做卷积过程中,按照固定滑动步幅连续滑动N次后与该权重元素进行运算的Aij所对应的C0个数据组成的N*C0矩阵,且一个Aij所对应的C0个数据为该目标矩阵中的一个行向量,可选的,该目标矩阵中的行向量的排列顺序与卷积核滑动的顺序是一致的。
在一种可能的实现方式中,矩阵转换器101用于从所述输入数据集中读出M个行向量,生成第一指令,具体包括:根据读指令从所述S个行向量中读出M个行向量,所述读指令包括读使能、读地址、读步幅和读尺寸,所述读步幅与所述卷积核的滑动步幅相等。具体地,从S个行向量中读出M个行向量,需要基于目标矩阵中具体包括的元素来进行读取,即需要根据目标矩阵中的元素产生对应的读地址、读尺寸以及读步幅等微指令进行读取。其中的读地址可以根据处理器下发的矩阵转换指令中给定的feature map尺寸、当前卷积核滑动的起始位置、当前卷积核处理的元素所在位置及feature map存储在L1 Memory中的起始地址等参数计算得到;读尺寸可以根据每个行向量的尺寸来确定,读步幅则可以根据卷积核的滑动步幅(stride)来确定。并且,当N大于M时,则表明目标矩阵中有填充padding的行向量,当N=M时,则表明目标矩阵中没有填充padding的行向量。
第二存储器103,用于根据所述第一指令对所述M个行向量进行所述预处理,得到n个行向量,并存储所述n个行向量;所述n个行向量包括所述M个行向量和(n-M)个填充行向量;其中,所述n个行向量为所述目标矩阵的N个行向量,所述n个行向量在所述第二存储器中的存储顺序与所述目标矩阵中的N个行向量的顺序一致。具体地,第二存储器用于根据上述包含拼接、移位和替换中的一种或多种操作的微指令(第一指令),对读取的M个行向量进行读写地址的映射关系的调整,并写入到对应的位置。需要说明的是,第二存储器中所存储的所述n个行向量,即为所述目标矩阵中的所述N个行向量,后续不再赘述。可选的,当(N-M)大于0时,则代表需要进行填充,此时,则需要首先进行固定值的填充,再进行移位或拼接;当(N-M)等于0时,则代表不需要进行填充,此时,只需要进行移位或拼接即可。可以理解的是,有可能存在某个目标矩阵刚好和读出的M个行向量的顺序一致,那么则不需要进行上述操作。
在一种可能的实现方式中,在N大于M的情况下,所述目标矩阵的N个行向量具体为卷积核在填充padding后的输入特征图的W*H平面上连续滑动N次时,填充后的W*H平面上与所述卷积核中元素Wmt对应的N个元素Aij所对应的行向量;第二存储器103,用于根据所述第一指令对所述M个行向量进行所述预处理,得到n个行向量,并存储所述n个行向量,具体包括:对所述(n-M)个填充行向量进行固定值填充;按照所述第一指令,对所述M个行向量和所述(n-M)个填充行向量进行移位或拼接操作之后,得到n个行向量并进行存储。即先根据padding表进行定值填充,如0值。
如图10所示,图10为本发明实施例提供的一种运算加速器的细化结构示意图,其中L1Memory则为本发明实施例中的第一存储器,L1 Align buffer则本本发明实施例中的第二存储器,L0 buffer则为本发明实施例中的第三存储器;具体地,L1 Memory中包含多个存储单元Bank,其中每个Bank都可以用于存储本发明实施例中的一个行向量,Alignbuffer中包括多个存储单元P,其中每个P都可以用于存储本发明实施例中的一个行向量。如图11所示,结合图10,图11为本发明实施例提供的一种目标矩阵生成示意图,假设输入特征图为W*H*C0,即C=C0,其中灰色部分为原始输入特征图,白色部分则为经过填充元素(例如为0)填充后的输入特征图,则此时,其尺寸已经变为(W+2)*(H+2)*C0;如图10中所示在W*H平面(包含填充部分)上,假设卷积核为3*3的权重矩阵,卷积以步幅1在W*H上连续滑动,并且其中的W33,在W*H上滑动的16次时,分别对应输入特征图的W*H平面中的元素0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15。其中15所在的元素为padding填充元素,因此矩阵转换器(Img2Col Engine)从输入数据集中读出的M个行向量为0、1、2、3、4、5、6、7、8、9、10、11、12、13、14对应的行向量。其中L1 Memory实际上存储的内容包括了上述0-14对应的行向量,当经过矩阵转换器转换后,生成对应的指令,对0-14个行向量从L1 Memory读出来后并对第15个行向量进行padding替换,其中,用0值填充15,其它15个行向量则无需替换,然后将填充后的15拼接到14的后面,最终存储在第二存储器中的n个行向量则为按照0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15的顺序存储各元素对应的行向量。
可选的,本发明实施例中的运算加速器还包括第三存储器104和运算电路105;其中
矩阵转换器102,还用于先后P次向所述第三存储器发送所述第二存储器存储的所述n个行向量和所述矩阵转换器生成的对应的第二指令,其中,P为大于或者等于1的整数,所述第二指令包括写使能、写地址和写尺寸指令。
第三存储器104,用于根据对应的第二指令存储P*n个行向量,并将所述P*n个行向量发送(可一次发送)至运算电路105;其中,P次接收的所述n个行向量中每一次接收的n个行向量在所述第三存储器中的存储顺序与对应的目标矩阵中的N个行向量的顺序一致,且P次接收的所述n个行向量之间在所述第三存储器中的存储顺序与接收的先后顺序一致;
运算电路105,可以包括X行*Y列*Z片运算单元,具体地,一个运算单元可以包括向量乘法电路和加法电路。运算电路105接收第三存储器104发送的P*n个行向量数据和权重存储器(图中未示出)发送的列向量数据,并将所述两路向量相乘;加法电路用于对所述两路向量相乘的结果相加,以及对属于同一个运算单元的计算结果进行累加得到每个运算单元的计算结果。
可选的,运算电路的运算尺寸X*Y*Z,可以与目标矩阵的尺寸N*C0或(P*N)*C0之间相等也可以成整数倍关系,如此一来,便可以刚好在一个时钟周期或者是多个时钟周期内完成矩阵运算。
例如,针对每一个W*H*C0的输入特征图来讲,对于卷积核中的某一个权重元素Wmt,其在整个卷积过程中,滑动窗口可能会滑动X次,假设X=P*N,那么对于该某个权重元素Wmt,实际上在此输入特征图中则有对应的P*N个行向量需要与该权重元素Wmt进行运算,因此,可以通过在第二存储器中,经过多次(P次)转换并存储的n个行向量并分别输入到第三存储器中,第三存储器则可以根据运算电路的尺寸,在一个时钟周期或者连续的时钟周期将顺序存储的P*n个行向量送入到运算电路中与对应的Wmt进行运算,此时,由于是针对同一个权重元素Wmt的P*n个行向量,因此,权重存储器中的Wmt在该运算周期内可以不变,直到运算另一个权重元素Wmt对应的运算时才更换,以节省读写开销、提升效率。
本发明实施例中的第一存储器102,第二存储器103、第三存储器104和本申请中的其它存储器均可以为寄存器、随机存取存储器(random access memory,简称RAM)、静态随机存储器、闪存或其他可读可写的存储器。可选的,上述第一存储器102和第二存储器103可以集成在一个存储器上作为L1 Buffer,第三存储器104则单独作为L0 Buffer,例如,运算加速器10中含有多级缓存,从L0,到L1,再到L2等缓存,容量递增,访问带宽递减,延迟递增,功耗开销递增,即L0为最内层的缓存,可与运算电路直接连接,本发明实施例对此不作具体限定。可选的,本申请中的输入数据集以及各个行向量的数据类型,都可以是int 8、fp16、或者fp32等类型。
本发明实施例,将大矩阵分小块后解决了缓存不足的问题,一次只将一部分数据转换存入缓存,并且可以实现边转换边计算,解决了转换与计算两个过程之间的依赖。并且由于本发明实施例所提供的3D矩阵的拆分方式以及矩阵运算方式,可最大程度的实现数据复用,可以在第一存储器存储的所有目标矩阵都运算完成之后才更新权重矩阵存储器。另外,由于本发明实施例中的进行运算的目标矩阵中的行向量是从通道C方向以一段固定长度C0进行划分的,在生成N*C0小矩阵时将矩阵W和H方向的元素离散性降维至只有H方向的离散性,降低了从第一存储器读feature map数据产生的冲突概率,提升原始数据读取的性能。
在一种可能的实现方式中,矩阵转换器,还用于:根据所述第二存储器存储的n个行向量和所述第一指令,对所述n个行向量进行反向操作还原得到所述M个行向量,所述反向操作包括移位、拆分和去填充中的一种或多种;根据从所述输入数据集中读出M个行向量的读指令,对所述M个行向量在所述S个行向量中的位置进行还原,所述读指令包括读使能、读地址、读步幅和读尺寸。即根据第一指令和n个行向量矩阵转换器可以还原该n个行向量在原始的输入数据集中的位置,以进行卷积的反向操作。卷积的反向操作是神经网络训练的重要步骤,本发明实施例实现了在一个硬件结构实现前向和反向两种转换操作。
以下基于上述运算加速器的结构,对本发明实施例中的运算加速器是如何在卷积过程中对输入特征图到目标矩阵的转换及存储进行示例性说明。
首先,运算加速器中的L1 Buffer中的L1Memory根据目标矩阵(小矩阵)的行数(例如行数为N)划分Bank数,Bank位宽根据C0大小直接划分,例如:
Bank Num=Matrix Row Num;例如,bank的数量等于目标矩阵的行数;
Bank Width=C0*Data Width;例如,bank的位宽等于C0的宽度;
如此一来,可以在一个时钟周期从一个Bank中读出目标矩阵(也即是小矩阵)的一行的数据解决了在一个时钟周期中读一行数据可能产生的读冲突问题。并且可以在无任何读冲突的情况下在一个时钟周期从N个Bank读出N(N为Bank个数)行的数据,即若N等于小矩阵的行数,且卷积核在输入特征图中连续滑动的情况下,可以一个时钟周期就生成一个小矩阵,极好的解决了卷积运算中的内存限制(Memory bound)的问题。
Img2Col Engine(即矩阵转换器)通过微指令(uOP)控制L1/L0完成数据集到矩阵的转换过程。Img2Col Engine对L1 Buffer的L1 memory产生读地址、读使能、读尺寸以及读步幅(read stride)的微指令,这些微指令用于控制数据从L1 memory中读出来,进一步地,Img2Col Engine对L1 Buffer的Align Buffer产生移位、拼接、替换(包括padding替换表)的微指令即第一指令,这些微信指令控制从L1 memory中读出来的数据进行调整,从而变成目标矩阵中行向量的排列顺序。最终,Img2Col Engine对L0产生写使能、写地址、写尺寸的微指令即第二指令,这些微指令完成了将Align Buffer中的数据写入L0的过程。其中,读地址是针对非padding的地址。
以下对将数据从L1 memory中读出如何写入Align Buffer中进行进一步的示例性说明。
首先根据读地址,读尺寸及读步幅将数据读出并往align buffer第一级缓存传输,如下图12所示。在图12中,假设L1 memory中存储的是输入特征图中的H*W平面中的连续S个元素A所对应的行向量,卷积核的滑动步幅为2,因此卷积核中某个权重元素在滑动N次时,其对应的N个元素在输入特征图的H*W平面上的间隔也为卷积核的滑动步幅,如图12中所述,S个行向量在L1 Memory中存储的顺序如图12所示,对应0到15个行向量。
在往L1 align buffer第一级缓存传输的路上会根据padding替换表做Padding的替换,padding替换表用0/1即能表示是否padding即是否需要替换,最大长度即为目标矩阵的行数。如图13所示,其中Padding专用寄存器(special purpose register,SPR)为存放padding值的寄存器,可由配置指令进行配值。
在往align buffer第二级缓存传输的路上会做移位和拼接,因为当前的读出来的数据可能是小矩阵的中间部分或尾部,例如,当首部是padding或者中间部分为padding,需要移位至正确位置与前面写入的数据拼接起来完成整个目标矩阵的生成。如13所示,0对应的位置填从L1 Memory中读出的数据,1对应的位置填充padding元素。如14所示,进行对应的拼接和移位。
最后在整个小矩阵完成后Engine再通过写使能、写地址、写尺寸这些微指令完成写入L0的过程。
请参见图15,图15是一个3D数据集转换矩阵过程的二维平面图,图中隐藏了channel方向,即每个方块后面有C0个通道对应的数据图中未示出。其中周围深色部分,包括第1行、第10行、第11行以机构第1列、10列、第11列是padding,不存储在L1 memory中,只存在于坐标计算的过程中。中间浅色部分,包括从第2行至第9行,以及第2列至第9列部分的元素是feature map数据,沿W→H→C方向连续存储在DDR/L1中。
图15中卷积核在当前的操作中以步幅为2(stride=2)滑动5次经历了5/6/7/8/9这5个点记录其中Padding的点,以及输入特征图(feature map)数据的点的位置及其地址,生成一个padding替换表(pad bit-map),以及辅助的mask表记录当前滑动在整个小矩阵的位置和有效点。
从L1 memory中读取相应的feature map数据后填入Align buffer第一级缓存的路上,通过padding替换表和mask表对于padding位置的那些点,则填充固定值(配置在Padding SRP中),即可实现在线生成padding数据。
具体包含了两个步骤:1)根据mask表将padding替换表进行移位;2)根据mask表的有效点,截取有效的部分再进行Padding替换操作。
进一步地,针对矩阵向3D输入数据集转换的反向过程,即Col2Img过程与上述描述的Img2Col是一个逆向的过程,均可以有本发明实施例提供的运算加速器(如图7、图8和图10中的运算加速器)即同一个硬件结构来实现,即矩阵转换器与第三存储器之间既可以有写数据(Img2Col)又可以有读数据(Col2Img)的过程,需要分别有读和写的控制线路,以及读和写数据的传输线路,如图10中所示的正向ctrl和data以及逆向ctrl和data。
例如,首先分配一块全为0的虚拟的3D数据集空间,该空间也为目标数据集空间,其尺寸为输入数据集的大小,通过Img2Col生成小矩阵(过程与上上述Img2col过程一样);同时目标矩阵(Delta matrix)也按同样的方式划分小矩阵(离线产生或是处理器其他的组件中间计算生成的);取出对应位置的两块小矩阵进行element wise加法。将结果矩阵回写3D数据集空间,其中写回的参数(包括地址、尺寸、移位拼接)与第一指令中的内容时一致,无需另外计算。该过程可以沿列方向进行,使得前后两块矩阵参数没有依赖关系,实现读写并行。按一列一列的方式遍历所有目标矩阵Delta matrix并写回即可完成目标矩阵向3D数据集转换的反向过程。
基于上述,下面结合本发明实施例提供的运算加速器10,描述一种将运算加速器10应用于神经网络处理器中的可能的实施例。请参见图16,图16是本发明实施例提供的一种神经网络处理器的硬件结构示意图,该神经网络处理器NPU 20作为协处理器挂载到CPU30(如Host CPU)上,由Host CPU 30分配任务。NPU 20的核心部分为运算电路105,通过直接内存访问控制器DMAC 110控制运算电路105提取存储器(包括输入存储器104和权重存储器106等)中的矩阵数据进行乘法运算;进一步地,DMAC110还控制运算电路105中的运算结果或者统一存储器109中的矩阵数据进入到累加器107和/或向量计算单元108中进行进一步的运算。其中,
运算电路105,也可以称之为矩阵运算单元(Cube Unit),用于完成矩阵*矩阵的操作。运算电路105可以包括多个处理单元(Process Engine,PE)。在一种可能的实现方式中,运算电路105是二维脉动阵列。可选的,运算电路105还可以是一维脉动阵列或者能够执行例如乘法和加法这样的数学运算的其它电子线路。在一些实现中,运算电路1203是通用的矩阵处理器。
向量计算单元(Vector Unit)108,用于对运算电路105的输出做进一步处理,如向量乘,向量加,指数运算,对数运算,大小比较等等。主要用于神经网络中非卷积/FC层网络计算,如池化(Pooling)、批归一化(Batch Normalization)、局部响应归一化(LocalResponse Normalization)等。在一些实现中,向量计算单元108能将经处理的输出的向量存储到统一存储器109。例如,向量计算单元108可以将非线性函数应用到运算电路105的输出,例如累加值的向量,用以生成激活值。在一些实现中,向量计算单元108生成归一化的值或合并值,或者,所述向量计算单元108生成归一化的值和合并值。在一些实现中,处理过的输出的向量能够用作运算电路105的激活输入,例如用于在神经网络中的后续层中的使用。
统一存储器109,也可以称之为片上存储器(On-chip buffer),用于存放输入数据以及输出数据。权重数据(权重矩阵)通过DMAC110被搬运到权重存储器106中。输入矩阵(输入矩阵)也通过DMAC被搬运到统一存储器109或输入存储器2011中。
第三存储器104即输入存储器,也可以称之为特征图存储器(Feature mapbuffer),用于存储Feature map矩阵。用于接收本发明实施例中的第二存储器传输过来的目标矩阵(即所述n个行向量)。
其中,矩阵转换器102、第一存储器102以及第二存储器103的功能请参见上述图7-图15中的相关的实施例的描述,在此不再赘述。
权重存储器(Weight Buffer)106,用于存放权重矩阵。权重矩阵的格式包括四个维度:卷积核高度、卷积核宽度、输入通道数(卷积核深度)、输出通道数(卷积核个数)。在卷积层仅使用一个卷积核进行卷积时,权重矩阵就是卷积核。在卷积层使用两个或两个以上卷积核进行卷积时,权重矩阵可以是卷积层进行卷积所使用的各卷积核组成的矩阵。
直接内存访问控制器(Direct Memory Access Controller,DMAC)110,用于将外部存储器40中的输入数据或输入矩阵搬运到各类存储器Buffer中,例如,将权重数据搬运到权重存储器106中或将输入数据数据搬运到第三存储器(输入存储器)104中。或者从统一存储器109将输出数据搬运到DDR/HBM中。可选的,一个完整的DMA传输过程需要经过DMA请求、DMA响应、DMA传输、DMA结束4个步骤。其中,外部存储器40可以是双倍速率同步动态随机存储器(Double Data Rate,DDR)、高带宽存储器(High Bandwidth Memory,HBM)等。
控制单元(Flow control)111,芯片控制单元/流水,控制数据读取方式,用于控制处理流程以及控制数据读取方式。
需要说明的是,统一存储器109,输入存储器104,权重存储器106均为On-Chip存储器。外部存储器即DDR/HBM可以私有于该CNN 20的硬件架构,也可以在服务该CNN 20的情况下还服务于其它处理器。可以理解的是,主CPU30还用于运行通用操作系统软件,并在通用操作系统软件的作用下控制神经网络处理器20进行神经网络训练。
可选的,上述神经网络处理器20也可以作为主CPU 30中的一部分集成在主CPU 30中;也可以为耦合于上述主CPU30,且能实现相关功能的其它功能芯片。同理,主CPU 30所执行的功能也可以分布在多个不同的功能芯片上执行,本发明实施例对此不作具体限定。
基于上述结构,举例来说,假设有输入矩阵A,权重矩阵B,输出矩阵C。运算电路105从权重存储器106中取矩阵B相应的数据,并缓存在运算电路中每一个PE上。运算电路105从输入存储器104中取矩阵A数据与矩阵B进行矩阵运算,然后在累加器107中进行加法操作,得到的矩阵的部分结果或最终结果,保存在统一存储器109中。
可以理解的是,上述CNN的硬件结构只是本发明实施例所提供的其中一种示例性硬件结构,本发明实施例中的CNN的硬件结构,包括但不仅限于以上结构和连接关系。
请参见图17,图17是本发明实施例提供的一种数据处理方法流程示意图,可以应用于上述图7、图8或图10中的运算加速器,或图16中的神经网络处理器。该方法可以包括以下步骤S101-步骤S102。
步骤S101:从输入数据集中读出M个行向量。
其中,所述输入数据集包括S个行向量,所述S个行向量中的每一个行向量包括C0个数据,所述C0个数据为输入特征图中元素Aij在C方向上连续C0个通道对应的数据,其中,所述输入特征图的尺寸为W*H*C,W为宽度、H为高度、C为通道数,Aij为所述输入特征图的W*H平面中第i行第j列的元素,i为小于或者等于W的正整数,j为小于或者等于H的正整数;所述M个行向量为目标矩阵中的M个行向量,所述目标矩阵的尺寸为N*C0,所述目标矩阵的N个行向量为卷积核在所述输入特征图的W*H平面上连续滑动N次时,所述W*H平面上与所述卷积核中元素Wmt对应的N个元素Aij所对应的行向量,Wmt为所述卷积核中的第m行第t列的元素;其中,M为小于或者等于S的整数,N为大于或者等于M的整数,C0为小于或者等于C的整数;
步骤S102:对所述M个行向量进行预处理,得到n个行向量。
其中,所述预处理包括移位、拼接和填充的一种或多种;所述n个行向量包括所述M个行向量和(n-M)个填充行向量;其中,所述n个行向量为所述目标矩阵的N个行向量,所述n个行向量在所述第二存储器中的存储顺序与所述目标矩阵中的N个行向量的顺序一致。
在一种可能的实现方式中,在N大于M的情况下,所述目标矩阵的N个行向量,具体为卷积核在填充后的输入特征图的W*H平面上连续滑动N次时,在所述填充后的W*H平面上与所述卷积核中元素Wmt对应的N个元素Aij所对应的行向量;所述对所述M个行向量进行所述预处理,得到n个行向量,包括:对所述(n-M)个填充行向量进行固定值填充;对所述M个行向量和所述(n-M)个填充行向量进行移位或拼接之后,得到n个行向量。
在一种可能的实现方式中,所述S个行向量为所述输入特征图中先W方向后H方向上连续的S个Aij在C方向上连续C0个通道对应的数据。
在一种可能的实现方式中,所述从所述输入数据集中读出M个行向量,包括:根据读指令从所述S个行向量中读出M个行向量,所述读指令包括读使能、读地址、读步幅和读尺寸,所述读步幅与所述卷积核的滑动步幅相等。
在一种可能的实现方式中,所述方法,还包括:对所述n个行向量进行反向操作还原得到所述M个行向量,所述反向操作包括移位、拆分和去填充中的一种或多种;根据从所述输入数据集中读出M个行向量的读指令,对所述M个行向量在所述S个行向量中的位置进行还原,所述读指令包括读使能、读地址、读步幅和读尺寸。
需要说明的是,本发明实施例中所描述的数据处理方法中的具体流程,可参见上述图1-图6中所述的发明实施例中的相关描述,此处不再赘述。
本发明实施例还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时包括上述方法实施例中记载的任意一种的部分或全部步骤。
本发明实施例还提供一种计算机程序,该计算机程序包括指令,当该计算机程序被计算机执行时,使得计算机可以执行任意一种数据处理方法的部分或全部步骤。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可能可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
上述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以为个人计算机、服务器或者网络设备等,具体可以是计算机设备中的处理器)执行本申请各个实施例上述方法的全部或部分步骤。其中,而前述的存储介质可包括:U盘、移动硬盘、磁碟、光盘、只读存储器(Read-Only Memory,缩写:ROM)或者随机存取存储器(Random Access Memory,缩写:RAM)等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

Claims (12)

1.一种运算加速器,其特征在于,包括:矩阵转换器,以及与所述矩阵转换器耦合的第一存储器和第二存储器:其中,
所述第一存储器,用于存储输入数据集,所述输入数据集为输入特征图对应的数据集;所述输入数据集包括S个行向量,所述S个行向量中的每一个行向量包括C0个数据,所述C0个数据为所述输入特征图中元素Aij在C方向上连续C0个通道对应的数据,其中,所述输入特征图的尺寸为W*H*C,W为宽度、H为高度、C为通道数,Aij为所述输入特征图的W*H平面中第i行第j列的元素,i为小于或者等于W的正整数,j为小于或者等于H的正整数;
所述矩阵转换器,用于执行以下动作:
从所述输入数据集中读出M个行向量,生成第一指令;所述M个行向量为目标矩阵中的M个行向量,所述目标矩阵的尺寸为N*C0,所述目标矩阵的N个行向量为卷积核在所述输入特征图的W*H平面上连续滑动N次时,所述W*H平面上与所述卷积核中元素Wmt对应的N个元素Aij所对应的行向量,Wmt为所述卷积核中的第m行第t列的元素;所述第一指令包括针对所述M个行向量进行预处理的指令,所述预处理包括移位、拼接和填充的一种或多种;其中,M为小于或者等于S的整数,N为大于或者等于M的整数,C0为小于C的整数;
向所述第二存储器发送所述M个行向量和所述第一指令;
所述第二存储器,根据所述第一指令对所述M个行向量进行所述预处理,得到n个行向量,并存储所述n个行向量;所述n个行向量包括所述M个行向量和(n-M)个填充行向量;其中,所述n个行向量为所述目标矩阵的N个行向量,所述n个行向量在所述第二存储器中的存储顺序与所述目标矩阵中的N个行向量的顺序一致。
2.如权利要求1所述的运算加速器,其特征在于,在N大于M的情况下,所述目标矩阵的N个行向量,具体为卷积核在填充后的输入特征图的W*H平面上连续滑动N次时,在所述填充后的W*H平面上与所述卷积核中元素Wmt对应的N个元素Aij所对应的行向量;
所述第二存储器,用于根据所述第一指令对所述M个行向量进行所述预处理,得到n个行向量,并存储所述n个行向量,具体包括:
对所述(n-M)个填充行向量进行固定值填充;
按照所述第一指令,对所述M个行向量和所述(n-M)个填充行向量进行移位或拼接操作之后,得到n个行向量并进行存储。
3.如权利要求1或2所述的运算加速器,其特征在于,所述运算加速器还包括与所述矩阵转换器耦合的第三存储器,以及与所述第三存储器耦合的运算电路;
所述矩阵转换器,还用于:
先后P次向所述第三存储器发送所述第二存储器存储的所述n个行向量和所述矩阵转换器生成的对应的第二指令,其中,P为大于或者等于1的整数,所述第二指令包括写使能、写地址和写尺寸指令;
所述第三存储器,用于根据对应的第二指令存储P*n个行向量,并将所述P*n个行向量发送至所述运算电路;其中,P次接收的所述n个行向量中每一次接收的n个行向量在所述第三存储器中的存储顺序与对应的目标矩阵中的N个行向量的顺序一致,且P次接收的所述n个行向量之间在所述第三存储器中的存储顺序与接收的先后顺序一致;
所述运算电路,用于对所述P*n个行向量进行矩阵运算。
4.如权利要求1-2任意一项所述的运算加速器,其特征在于,所述S个行向量为所述输入特征图中先W方向后H方向上连续的S个Aij在C方向上连续C0个通道对应的数据。
5.如权利要求1-2任意一项所述的运算加速器,其特征在于,所述矩阵转换器,用于从所述输入数据集中读出M个行向量,生成第一指令,具体包括:
根据读指令从所述S个行向量中读出M个行向量,所述读指令包括读使能、读地址、读步幅和读尺寸,所述读步幅与所述卷积核的滑动步幅相等。
6.如权利要求1-2任意一项所述的运算加速器,其特征在于,所述矩阵转换器,还用于:
根据所述第二存储器存储的n个行向量和所述第一指令,对所述n个行向量进行反向操作还原得到所述M个行向量,所述反向操作包括移位、拆分和去填充中的一种或多种;
根据从所述输入数据集中读出M个行向量的读指令,对所述M个行向量在所述S个行向量中的位置进行还原,所述读指令包括读使能、读地址、读步幅和读尺寸。
7.一种数据处理方法,其特征在于,包括:
从输入数据集中读出M个行向量,所述输入数据集为输入特征图对应的数据集;其中,所述输入数据集包括S个行向量,所述S个行向量中的每一个行向量包括C0个数据,所述C0个数据为所述输入特征图中元素Aij在C方向上连续C0个通道对应的数据,其中,所述输入特征图的尺寸为W*H*C,W为宽度、H为高度、C为通道数,Aij为所述输入特征图的W*H平面中第i行第j列的元素,i为小于或者等于W的正整数,j为小于或者等于H的正整数;所述M个行向量为目标矩阵中的M个行向量,所述目标矩阵的尺寸为N*C0,所述目标矩阵的N个行向量为卷积核在所述输入特征图的W*H平面上连续滑动N次时,所述W*H平面上与所述卷积核中元素Wmt对应的N个元素Aij所对应的行向量,Wmt为所述卷积核中的第m行第t列的元素;其中,M为小于或者等于S的整数,N为大于或者等于M的整数,C0为小于C的整数;
对所述M个行向量进行预处理,得到n个行向量;所述预处理包括移位、拼接和填充的一种或多种;所述n个行向量包括所述M个行向量和(n-M)个填充行向量;其中,所述n个行向量为所述目标矩阵的N个行向量,所述n个行向量在第二存储器中的存储顺序与所述目标矩阵中的N个行向量的顺序一致。
8.如权利要求7所述的方法,其特征在于,在N大于M的情况下,所述目标矩阵的N个行向量,具体为卷积核在填充后的输入特征图的W*H平面上连续滑动N次时,在所述填充后的W*H平面上与所述卷积核中元素Wmt对应的N个元素Aij所对应的行向量;
所述对所述M个行向量进行所述预处理,得到n个行向量,包括:
对所述(n-M)个填充行向量进行固定值填充;
对所述M个行向量和所述(n-M)个填充行向量进行移位或拼接之后,得到n个行向量。
9.如权利要求7或8所述的方法,其特征在于,所述S个行向量为所述输入特征图中先W方向后H方向上连续的S个Aij在C方向上连续C0个通道对应的数据。
10.如权利要求7-8任意一项所述的方法,其特征在于,所述从输入数据集中读出M个行向量,包括:
根据读指令从所述S个行向量中读出M个行向量,所述读指令包括读使能、读地址、读步幅和读尺寸,所述读步幅与所述卷积核的滑动步幅相等。
11.如权利要求7-8任意一项所述的方法,其特征在于,所述方法,还包括:
对所述n个行向量进行反向操作还原得到所述M个行向量,所述反向操作包括移位、拆分和去填充中的一种或多种;
根据从所述输入数据集中读出M个行向量的读指令,对所述M个行向量在所述S个行向量中的位置进行还原,所述读指令包括读使能、读地址、读步幅和读尺寸。
12.一种神经网络处理器,其特征在于,包括如权利要求1-6任意一项所述的运算加速器。
CN201880098517.5A 2018-10-09 2018-10-09 运算加速器、处理方法及相关设备 Active CN112840356B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310472072.5A CN116541647A (zh) 2018-10-09 2018-10-09 运算加速器、处理方法及相关设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2018/109543 WO2020073211A1 (zh) 2018-10-09 2018-10-09 运算加速器、处理方法及相关设备

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN202310472072.5A Division CN116541647A (zh) 2018-10-09 2018-10-09 运算加速器、处理方法及相关设备

Publications (2)

Publication Number Publication Date
CN112840356A CN112840356A (zh) 2021-05-25
CN112840356B true CN112840356B (zh) 2023-04-11

Family

ID=70163758

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202310472072.5A Pending CN116541647A (zh) 2018-10-09 2018-10-09 运算加速器、处理方法及相关设备
CN201880098517.5A Active CN112840356B (zh) 2018-10-09 2018-10-09 运算加速器、处理方法及相关设备

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202310472072.5A Pending CN116541647A (zh) 2018-10-09 2018-10-09 运算加速器、处理方法及相关设备

Country Status (4)

Country Link
US (1) US20210224125A1 (zh)
EP (1) EP3855367A4 (zh)
CN (2) CN116541647A (zh)
WO (1) WO2020073211A1 (zh)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111859273A (zh) 2017-12-29 2020-10-30 华为技术有限公司 矩阵乘法器
JP7353772B2 (ja) * 2019-03-07 2023-10-02 キヤノン株式会社 データ処理装置及びその方法、プログラム
CN113366454A (zh) 2019-03-15 2021-09-07 英特尔公司 用于图形操作的多片架构
WO2020190796A1 (en) * 2019-03-15 2020-09-24 Intel Corporation Systems and methods for cache optimization
US11520371B2 (en) * 2020-02-10 2022-12-06 Northwestern University Compute-adaptive clock management for machine learning accelerators
CN111767508B (zh) * 2020-07-09 2024-02-23 地平线(上海)人工智能技术有限公司 计算机实现张量数据计算的方法、装置、介质和设备
US11347652B2 (en) * 2020-08-31 2022-05-31 Microsoft Technology Licensing, Llc Banked memory architecture for multiple parallel datapath channels in an accelerator
US11972348B2 (en) * 2020-10-30 2024-04-30 Apple Inc. Texture unit circuit in neural network processor
CN112394645B (zh) * 2021-01-20 2021-04-16 中国人民解放军国防科技大学 一种航天器姿态跟踪的神经网络反步滑模控制方法和系统
CN113487017A (zh) * 2021-07-27 2021-10-08 湖南国科微电子股份有限公司 数据卷积处理方法、装置及计算机设备
CN113688069B (zh) * 2021-09-10 2022-08-02 北京百度网讯科技有限公司 数据处理方法、装置、电子设备及介质
CN116382782A (zh) * 2021-12-20 2023-07-04 深圳市中兴微电子技术有限公司 向量运算方法、向量运算器、电子设备和存储介质
CN114758209B (zh) * 2022-06-14 2022-09-02 深圳思谋信息科技有限公司 卷积结果获取方法、装置、计算机设备及存储介质
CN115034376B (zh) * 2022-08-12 2022-11-18 上海燧原科技有限公司 神经网络处理器的批量标准化处理方法及存储介质
CN115982530A (zh) * 2023-03-13 2023-04-18 苏州浪潮智能科技有限公司 加速器运算控制方法、系统、存储介质、装置及设备
CN116152520B (zh) * 2023-04-23 2023-07-07 深圳市九天睿芯科技有限公司 用于神经网络加速器的数据处理方法、芯片及电子设备
CN116795432B (zh) * 2023-08-18 2023-12-05 腾讯科技(深圳)有限公司 运算指令的执行方法、装置、电路、处理器及设备

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2843929C (en) * 2011-09-15 2018-03-27 Exxonmobil Upstream Research Company Optimized matrix and vector operations in instruction limited algorithms that perform eos calculations
US10223333B2 (en) * 2014-08-29 2019-03-05 Nvidia Corporation Performing multi-convolution operations in a parallel processing system
US9805303B2 (en) * 2015-05-21 2017-10-31 Google Inc. Rotating data for neural network computations
CN105843591B (zh) * 2016-04-08 2018-06-19 龙芯中科技术有限公司 多维数组滑动生成数据的方法、装置及处理器
CN106445471B (zh) * 2016-10-13 2018-06-01 北京百度网讯科技有限公司 处理器和用于在处理器上执行矩阵乘运算的方法
JP6767660B2 (ja) * 2017-01-27 2020-10-14 富士通株式会社 プロセッサ、情報処理装置及びプロセッサの動作方法
CN106940815B (zh) * 2017-02-13 2020-07-28 西安交通大学 一种可编程卷积神经网络协处理器ip核
US11086967B2 (en) * 2017-03-01 2021-08-10 Texas Instruments Incorporated Implementing fundamental computational primitives using a matrix multiplication accelerator (MMA)
CN106970896B (zh) * 2017-03-30 2020-05-12 中国人民解放军国防科学技术大学 面向向量处理器的二维矩阵卷积的向量化实现方法
CN108171327A (zh) * 2017-12-25 2018-06-15 郑州云海信息技术有限公司 一种基于卷积运算的矩阵转化方法、装置及介质
CN108205702B (zh) * 2017-12-29 2020-12-01 中国人民解放军国防科技大学 一种多输入多输出矩阵卷积的并行处理方法

Also Published As

Publication number Publication date
CN112840356A (zh) 2021-05-25
EP3855367A4 (en) 2022-06-29
EP3855367A1 (en) 2021-07-28
US20210224125A1 (en) 2021-07-22
WO2020073211A1 (zh) 2020-04-16
CN116541647A (zh) 2023-08-04

Similar Documents

Publication Publication Date Title
CN112840356B (zh) 运算加速器、处理方法及相关设备
CN112214726B (zh) 运算加速器
US11734006B2 (en) Deep vision processor
CN109992743B (zh) 矩阵乘法器
JP7329533B2 (ja) 演算を加速するための方法および加速器装置
CN110050267B (zh) 用于数据管理的系统和方法
KR102142889B1 (ko) 스파스 연결용 인공 신경망 계산 장치와 방법
CN111897579B (zh) 图像数据处理方法、装置、计算机设备和存储介质
KR20200143686A (ko) 연산을 가속하기 위한 가속기 및 시스템
WO2022037257A1 (zh) 卷积计算引擎、人工智能芯片以及数据处理方法
CN111465943B (zh) 一种集成电路和用于神经网络处理的方法
EP3754503A1 (en) Allocation system, method and apparatus for machine learning, and computer device
CN112789627B (zh) 一种神经网络处理器、数据处理方法及相关设备
CN110991619A (zh) 神经网络处理器、芯片和电子设备
US11610128B2 (en) Neural network training under memory restraint
CN111047036A (zh) 神经网络处理器、芯片和电子设备
CN114118348A (zh) 加速器、操作加速器的方法以及包括加速器的电子装置
US11868875B1 (en) Data selection circuit
CN111047035A (zh) 神经网络处理器、芯片和电子设备
US11636569B1 (en) Matrix transpose hardware acceleration
CN114595811A (zh) 用于执行深度学习操作的方法和设备
KR102372869B1 (ko) 인공 신경망을 위한 행렬 연산기 및 행렬 연산 방법
CN114692854A (zh) 用于生成人工神经网络模型的内核的npu及其方法
WO2021120036A1 (zh) 数据处理装置和数据处理方法
US20210027142A1 (en) Neural network system and operating method of the same

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