CN111381882A - 数据处理装置及相关产品 - Google Patents
数据处理装置及相关产品 Download PDFInfo
- Publication number
- CN111381882A CN111381882A CN201811628235.XA CN201811628235A CN111381882A CN 111381882 A CN111381882 A CN 111381882A CN 201811628235 A CN201811628235 A CN 201811628235A CN 111381882 A CN111381882 A CN 111381882A
- Authority
- CN
- China
- Prior art keywords
- data
- processing unit
- parallel
- shared
- slave processing
- 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
- 238000012545 processing Methods 0.000 title claims abstract description 437
- 238000010801 machine learning Methods 0.000 claims abstract description 89
- 238000004364 calculation method Methods 0.000 claims description 25
- 238000004891 communication Methods 0.000 claims description 8
- 238000013467 fragmentation Methods 0.000 claims 1
- 238000006062 fragmentation reaction Methods 0.000 claims 1
- 230000005540 biological transmission Effects 0.000 abstract description 17
- 238000000034 method Methods 0.000 abstract description 12
- 230000003993 interaction Effects 0.000 abstract description 8
- 230000015654 memory Effects 0.000 description 26
- 210000002364 input neuron Anatomy 0.000 description 19
- 239000011159 matrix material Substances 0.000 description 17
- 210000004205 output neuron Anatomy 0.000 description 10
- 210000002569 neuron Anatomy 0.000 description 9
- 230000006870 function Effects 0.000 description 7
- 230000004913 activation Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 5
- 238000013528 artificial neural network Methods 0.000 description 4
- 101100498818 Arabidopsis thaliana DDR4 gene Proteins 0.000 description 3
- 210000004027 cell Anatomy 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000009825 accumulation Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000005481 NMR spectroscopy Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 239000002245 particle Substances 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 238000012706 support-vector machine Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000005406 washing Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Neurology (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Multi Processors (AREA)
- Image Processing (AREA)
Abstract
本发明涉及一种数据处理装置及相关产品。包括:主处理单元和至少一个从处理单元组,从处理单元组包括共享从处理单元和至少一个并行从处理单元;主处理单元用于向共享从处理单元发送共享数据,分别向各并行从处理单元发送并行计算数据;共享从处理单元将共享数据传输给各并行从处理单元;并行从处理单元在两个时钟周期分别接收并行计算数据,并将并行计算数据逐级传输给其他并行从处理单元。本申请提供的数据处理装置及相关产品,将机器学习数据拆分为共享数据和并行计算数据,通过两个时钟周期实现主处理单元和从处理单元之间的数据交互,降低了主、从处理单元之间的数据交互所占的数据带宽,进而降低了机器学习芯片用于传输的硬件开销。
Description
技术领域
本申请涉及信息处理技术领域,特别是涉及一种数据处理装置及相关产品。
背景技术
随着目前机器学习的不断发展,越来越多的多架构的机器学习芯片逐渐问世,这些机器学习芯片在访问或者处理存储器中的数据时,由于机器学习芯片所需的数据量大,且机器学习芯片对数据处理的速度要求高。
常见的机器学习芯片通常包括主运算单元和从运算单元,主处理单元在同一时刻,分别向多个从处理单元传输机器学习数据及运算指令,多个从处理单元根据获得的传输机器学习数据及运算指令,执行机器学习运算。
采用上述方法,主处理单元与各从处理单元之间均进行数据传输,需要占用大量的传输接口,使得机器学习芯片的硬件开销大。
发明内容
本申请实施例提供了一种数据处理装置及相关产品,可以降低机器学习芯片的硬件开销。
第一方面,一种数据处理装置,所述数据处理装置用于执行机器学习数据的处理,所述数据处理装置包括:主处理单元和至少一个从处理单元组,所述从处理单元组包括共享从处理单元和至少一个并行从处理单元;
所述主处理单元,用于将机器学习数据拆分为共享数据和至少两个并行计算数据,向所述共享从处理单元发送所述共享数据,并根据预设的两个时钟周期内分别向各所述并行从处理单元发送所述并行计算数据;
所述共享从处理单元,用于接收所述共享数据,并将所述共享数据传输给各所述并行从处理单元;
所述并行从处理单元,用于在第一个时钟周期内接收第一并行数据、在第二个时钟周期内接收第二并行数据,并将所述第一并行数据传输给上一级并行从处理单元,或者,所述共享从处理单元。
在其中一个实施例中,所述主处理单元,具体用于在第一个时钟周期向所述共享从处理单元发送所述共享数据,向各所述并行从处理单元发送所述第一并行计算数据;在第二个时钟周期向最后一级并行从处理单元发送所述第二并行计算数据。
在其中一个实施例中,所述共享从处理单元,具体用于在所述第一个时钟周期接收所述共享数据,在所述第二个时钟周期向各所述并行从处理单元广播所述共享数据,并在所述第二个时钟周期接收第一级并行从处理单元发送的所述第一并行计算数据。
在其中一个实施例中,所述共享从处理单元还用于根据所述共享数据和所述第一级并行从处理单元发送的并行计算数据,进行中间运算,得到中间结果,并将所述中间结果传输给所述主处理单元;
所述并行从处理器还用于根据所述共享数据和所述并行计算数据,进行中间运算,得到所述中间结果,并将所述中间结果传输给所述主处理单元。
在其中一个实施例中,所述共享从处理单元和所述并行从处理单元包括通讯接口,所述通讯接口用于传输所述共享数据和所述并行计算数据。
在其中一个实施例中,所述主处理单元包括分配处理电路,所述分配处理电路用于对所述机器学习数据进行拆解分配,获得所述共享数据和所述至少两个并行计算数据。
在其中一个实施例中,所述主处理单元还包括缓存电路,所述缓存电路用于记录各所述从处理单元标识信息,所述标识信息包括所述从处理单元的标识和/或地址信息。
第二方面,本申请实施例提供了一种组合处理装置,该组合处理装置包括如第一方面所述的数据处理装置、通用互联接口,和其他处理装置。该数据处理装置与上述其他处理装置进行交互,共同完成用户指定的操作。该组合处理装置还可以包括存储装置,该存储装置分别与所述数据处理装置和所述其他处理装置连接,用于保存所述数据处理装置和所述其他处理装置的数据。
第三方面,本申请实施例提供了一种机器学习芯片,该机器学习芯片包括上述第一方面所述的数据处理装置、上述第二方面所述的组合处理装置。
第四方面,本申请实施例提供了一种机器学习芯片封装结构,该机器学习芯片封装结构包括上述第三方面所述的机器学习芯片。
第五方面,本申请实施例提供了一种板卡,该板卡包括上述第四方面所述的机器学习芯片封装结构。
第六方面,本申请实施例提供了一种电子装置,该电子装置包括上述第三方面所述的机器学习芯片或者上述第五方面所述的板卡。
上述数据处理装置及相关产品,数据处理装置包括:主处理单元和至少一个从处理单元组,从处理单元组包括共享从处理单元和至少一个并行从处理单元;主处理单元,用于将机器学习数据拆分为共享数据和至少两个并行计算数据,向共享从处理单元发送共享数据,并根据预设的两个时钟周期内分别向各并行从处理单元发送并行计算数据;共享从处理单元,用于接收共享数据,并将共享数据传输给各并行从处理单元;并行从处理单元,用于在两个时钟周期分别接收并行计算数据,并将并行计算数据逐级传输给其他并行从处理单元。本申请提供的数据处理装置及相关产品,将机器学习数据拆分为共享数据和并行计算数据,通过两个时钟周期,分两次实现主处理单元和从处理单元之间的数据交互,降低了主、从处理单元之间的数据交互所占的数据带宽,进而降低了机器学习芯片用于传输的硬件开销。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为一个实施例中数据处理装置的结构示意图;
图2为另一个实施例中数据处理装置的结构示意图;
图3为另一实施例中数据处理装置的结构示意图;
图4为一个实施例中一种组合处理装置的结构示意图;
图5为一个实施例中另一种组合处理装置的结构示意图;
图6为一个实施例中一种板卡的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
本发明实施例涉及的数据处理装置,可以通过软件、硬件或者软硬件结合的方式实现;该数据处理装置可以为图1所示的部分或者全部。该数据处理装置用于执行机器学习数据的处理,数据处理装置可以包括:主处理单元10和至少一个从处理单元组20,从处理单元组20包括共享从处理单元201和至少一个并行从处理单元202;主处理单元10,用于将机器学习数据拆分为共享数据和至少两个并行计算数据,向共享从处理单元201发送共享数据,并在预设的两个时钟周期内分别向各并行从处理单元202发送并行计算数据;共享从处理单元201,用于接收共享数据,并将共享数据传输给各并行从处理单元;并行从处理单元202,用于在第一个时钟周期内接收第一并行数据、在第二个时钟周期内接收第二并行数据,并将所述第一并行数据传输给上一级并行从处理单元,或者,所述共享从处理单元。
需要说明的是,本申请提出的数据处理装置可以应用于机器学习运算,其中,机器学习运算包括神经网络运算、k-means运算、支持向量机运算等。可选地,上述机器学习数据可以包括输入神经元数据和权值数据,该输入神经元数据和权值数据是在执行一种机器学习运算时需要输入的数据;相应的,上述输出数据可以包括输出神经元数据,该输出神经元数据是在执行一种机器学习运算时输出的中间结果或最终结果。
以神经网络运算为例(如果不进行额外说明,本实施例中均以神经网络运算为例进行说明),本申请提出的数据处理装置可以进行机器学习中的一层的运算。对于多层机器学习,其实现过程可以是:在正向运算中,当上一层机器学习执行完成之后,下一层的运算指令会将运算单元中计算出的输出神经元数据作为下一层的输入神经元数据进行运算(或者是对该输出神经元数据进行某些操作再作为下一层的输入神经元数据),同时,将权值数据也替换为下一层的权值数据;在反向运算中,当上一层机器学习的反向运算执行完成后,下一层运算指令会将运算单元中计算出的输入神经元梯度(同样可以作为一种输入的神经元数据)作为下一层的输出神经元梯度进行运算(同样可以作为一种输出的神经元数据)(或者是对该输入神经元梯度进行某些操作再作为下一层的输出神经元梯度),同时将权值数据替换为下一层的权值数据。
在一种可选的方案中,针对多层机器学习的运算,以正向运算中某一层机器学习的计算为例进行说明。在一种实施方式中,上述数据处理装置可以通过多个机器学习单元(MLU,Machine Learning Unit)并行计算机器学习中该层所有神经元的输出神经元数据。
参照图2所示,这里对机器学习单元1000进行详细说明。在一种方案中,机器学习单元1000可以包括:至少一个运算模块100、以及与运算模块100连接的控制器模块200;运算模块100可以包括一个主处理单元10、一个共享从处理单元201和多个并行从处理单元202;
控制器模块200,用于通过第一传输接口14向传输电路12(图中未示出)发送数据操作信号和输出神经元数据,并通过第一传输接口14接收传输电路12从共享存储器13(图中未示出)获取的输入神经元数据和权值数据,并将输入神经元数据和权值数据发送给主处理单元10、共享从处理单元201和/或并行从处理单元202;
主处理单元10,用于将输入神经元数据和权值数据分发至多个从处理单元201;共享从处理单元201和并行从处理单元202,用于依据神经元数据和权值数据并行执行中间运算得到多个中间结果,并将多个中间结果传输给主处理单元10;主处理单元10,还用于对多个中间结果执行后续处理得到计算结果,后续处理包括激活运算。具体地,该控制器模块200还可以获取计算指令,并解析该计算指令得到多个运算指令,将该多个运算指令发送给主处理单元。
示例性的,以上述的机器学习单元的结构为例,对该机器学习单元的机器学习运算流程进行详细说明,参见以下步骤S101-S106:
S101,在控制器模块的指令存储单元的首地址处预先存入一条IO指令;
S102,控制器模块从指令存储单元的首地址读取该IO指令,然后根据该IO指令译出的控制信号,通过片外接口从片外存储器中获取该机器学习单元对应的机器学习运算指令,或者,通过传输电路从共享存储器中获取该机器学习单元对应的机器学习计算指令,并将获得的计算指令储存在指令存储单元中;
S103,控制器模块从指令存储单元中读入下一条IO指令,根据该IO指令译出的数据操作信号,通过传输电路从共享存储器中读取运算单元需要的所有数据块,包括需要的分配的该层神经元的输入神经元数据和权值数据,还可以包括用于作快速的激活函数运算的插值表、用于配置运算器件参数的常数表、偏置数据等;上述数据操作信号中包括上述数据块在共享存储器中的源地址;
S104,控制器模块从指令存储单元中读入下一条CONFIG(配置)指令,根据该CONFIG指令译出的控制信号,配置该层机器学习计算所需的各类常数,例如,运算模块根据激活函数所需的常数配置其内寄存器的值;
S105,控制器模块从指令存储单元中读入下一条COMPUTE(计算)指令,根据该COMPUTE指令译出的控制信号(即运算指令),运算模块将分配的该层神经元的输入神经元数据、权值数据和运算指令传输给主处理电路;主处理单元可以将分配的该层神经元的输入神经元数据确定为广播数据,权值数据确定为分发数据,将一个分发数据分配成多个数据块,将多个数据块中的至少一个数据块、广播数据以及多个运算指令中的至少一个运算指令发送给共享从处理单元和/或并行从处理单元,由从处理单元根据乘法处理电路、累加处理电路等得到中间结果,并由主处理单元根据中间结果和激活处理电路等得到分配的该层神经元输出的神经元数据;
S106,控制器模块从指令存储单元中读入下一条IO指令,根据该IO指令译出的数据操作信号,将上述输出的神经元数据,通过传输电路传输至共享存储器中存储,下一层部分神经元的输入神经元数据;上述数据操作信号中包括上述输出的神经元数据在共享存储器中的目的地址。
以下示例性地对S105进行说明。以机器学习运算中的全连接运算为例,某层机器学习过程可以为:y=f(wx+b),其中,x为输入神经元矩阵,w为权值矩阵,b为偏置标量,f为激活函数,具体可以为:sigmoid函数,tanh、relu、softmax函数中的任意一个。这里假设主从处理电路之间为二叉树关系(一种树型关系),运算模块具有一个主处理单元、一个共享从处理单元和七个并行从处理单元,则上述S105的实现的方法可以为:控制器模块从共享存储器内获取输入神经元矩阵x,权值矩阵w以及全连接运算指令,将输入神经元矩阵x,权值矩阵w以及全连接运算指令传输给主处理单元;主处理单元确定该输入神经元矩阵x为广播数据,确定权值矩阵w为分发数据,将权值矩阵w拆分成8个子矩阵,然后在第一个时钟周期内将输入神经元矩阵x发送给共享从处理单元,将前7个子矩阵分发给7个并行从处理单元,在第二个时钟周期内,主处理单元将第8个子矩阵发给并行从处理单元,共享从处理单元将输入神经元矩阵x分发给7个并行从处理单元,7个并行从处理单元将前7个子矩阵分发给上一级并行从处理单元获得共享从处理单元;共享从处理电路和并行从处理单元并行执行8个子矩阵与输入神经元矩阵x的乘法运算和累加运算得到8个中间结果,将8个中间结果发送给主处理单元;主处理单元,用于将8个中间结果排序得到wx的运算结果,将该运算结果执行偏置b的运算后执行激活运算得到最终结果y。
需要说明的是,各机器学习单元中可以包括一个运算模块,也可以包括多个运算模块,而且各运算模块的结构可以相同,也可以不同。其中,各运算模块的结构体现在主处理单元和各从处理单元的关系可以包括但不限于是树型、H型、脉冲阵列型的关系。本申请提供的技术方案将运算模块设置成一主多从结构,对于正向运算的计算指令,其可以将依据正向运算的计算指令将数据进行拆分,这样通过多个从处理单元即能够对计算量较大的部分进行并行运算,从而提高运算速度,节省运算时间,进而降低功耗。
具体地,继续如图1所示,数据处理装置包括主处理单元10和至少一个从处理单元组20,从处理单元组20可以包括共享从处理单元201和至少一个并行从处理单元202,其中,至少一个并行从处理单元202可以是1个并行从处理单元,也可以是多个并行从处理单元,本申请实施例对此不做限制。
上述主处理单元10用于将机器学习数据拆分为共享数据和至少两个并行计算数据,其中,共享数据可以是机器学习算法中每一步计算均需要用到的数据,并行计算数据可以是机器学习算法中可以分开计算的数据。以计算矩阵乘法y=Ax为例,其可以分解为y=A[1]x+A[2]x+A[3]x+……A[n]x,其中,x为共享数据,A[1],A[2],A[3]……A[n]为并行计算数据。当主处理单元10将机器学习数据拆分为共享数据和至少两个并行计算数据后,主处理单元10向共享处理单元201发送共享数据,并在预设的两个时钟周期内分别向各并行从处理单元202发送并行计算数据,拆分出的至少两个并行计算数据可以是2个并行计算数据,也可以是多个并行计算数据,并行计算数据的个数多于并行从处理单元的个数。其可以是同时向各并行从处理单元202发送并行结算数据,也可以是在预设的两个时钟周期内依次向各并行从处理单元202发送并行计算数据。以依次向各并行从处理单元202发送并行计算数据为例,假设从处理单元组中包括3个并行从处理单元202,分别为并行从处理单元1、并行从处理单元2和并行从处理单元3,其可以是在第一个时钟周期内,主处理单元10向共享从处理单元201发送共享数据,且向并行从处理单元202发送并行计算数据A[1]-A[n-1],在第二个时钟周期内,主处理单元10向并行从处理单元202发送并行计算数据A[n]。
进一步地,共享从处理单元201用于接收上述共享数据,并将共享数据传输给各并行从处理单元,其可以是将共享数据通过各并行从处理单元逐级传输给各并行处理单元,也可以是通过广播的方式将将共享数据传输给各并行处理单元,本申请实施例对此不做限制。并行从处理单元202,用于在第一个时钟周期内接收第一并行数据、在第二个时钟周期内接收第二并行数据,并将第一并行数据传输给上一级并行从处理单元202,或者,共享从处理单元201。由于并行计算数据的数量多于并行从处理单元的数量,在第一个时钟周期,各并行从处理单元202分别接收第一并行计算数据,在第二个时钟周期,并行从处理单元202接收第二并行计算数据。
上述数据处理装置包括:主处理单元和至少一个从处理单元组,从处理单元组包括共享从处理单元和至少一个并行从处理单元;主处理单元,用于将机器学习数据拆分为共享数据和至少两个并行计算数据,向共享从处理单元发送共享数据,并根据预设的两个时钟周期内分别向各并行从处理单元发送并行计算数据;共享从处理单元,用于接收共享数据,并将共享数据传输给各并行从处理单元;并行从处理单元,用于在两个时钟周期分别接收并行计算数据,并将并行计算数据逐级传输给其他并行从处理单元。本实施例中,通过主处理单元将机器学习数据拆分为共享数据和并行计算数据,通过两个时钟周期实现主处理单元和从处理单元之间的数据交互,使得在一次主、从处理单元之间的交互数据分成2次进行,降低了主、从处理单元之间的数据交互所占的数据带宽,进而降低了机器学习芯片用于传输的硬件开销。
在上述实施例的基础上,主处理单元可以在两个时钟周期内分别将共享数、第一并行数据和第二并行数据发送给个从处理单元,通过下述实施例来详细描述。
可选地,主处理单元10,具体用于在第一个时钟周期向共享从处理单元201发送共享数据,向各并行从处理单元202发送第一并行计算数据;在第二个时钟周期向最后一级并行从处理单元发送第二并行计算数据。
具体地,主处理单元10在第一时钟周期内向共享从处理单元201发送共享数据,同时分别向各并行从处理单元202发送第一并行计算数据,其可以是向每一个并行从处理单元发送一个并行计算数据,在具体发送第一并行计算数据时,可以是根据第一并行计算数据的顺序和并行从处理单元的级别,向并行从处理单元发送第一并行计算数据。例如,并行从处理单元包括第一级并行从处理单元、第二级并行从处理单元,第三级并行从处理单元……第n-1级并行从处理单元,其中,第一级并行从处理单元可以与共享从处理单元连接。继续以计算矩阵乘法y=Ax为例,x为共享数据,A[1],A[2],A[3]……A[n]为并行计算数据,其中,A[1]-A[n-1]为第一并行计算数据,A[n]为第二并行计算数据。主处理单元10在第一个时钟周期向共享从处理单元201发送共享数据,向各并行从处理单元202发送第一并行计算数据;其可以是在第一个时钟周期内将共享数据x发送给共享从处理单元201,将A[1]发送给第一级并行从处理单元,将A[2]发送给第二级并行从处理单元,将A[3]发送给第三级并行从处理单元……将A[n-1]发送给第n-1级并行从处理单元;也可以是将A[n-1]发送给第一级并行从处理单元,将A[n-2]发送给第二级并行从处理单元,将A[n-3]发送给第三级并行从处理单元……将A[1]发送给第n级并行从处理单元;本申请实施例对此不做限制。在第二个时钟周期,主处理单元10将A[n]发送给最后一级并行从处理单元。
上述数据处理装置,主处理单元在第一个时钟周期向共享从处理单元发送共享数据,向各并行从处理单元发送第一并行计算数据;在第二个时钟周期向最后一级并行从处理单元发送第二并行计算数据。本实施例中,主处理单元通过两个时钟周期,将共享数据和并行计算数据分别发送给共享从处理单元和并行从处理单元,降低了主、从处理单元之间的数据交互所占的数据带宽,进而降低了机器学习芯片用于传输的硬件开销。
在上述实施例的基础上,共享从处理单元在接收到主处理单元发送的共享数据后,还可以将共享数据广播给各并行从处理单元,并接收第一级并行从处理单元发送的并行计算数据。
可选地,共享从处理单元201,具体用于在第一个时钟周期接收共享数据,在第二个时钟周期向各并行从处理单元202广播共享数据,并在第二个时钟周期接收第一级并行从处理单元发送的第一并行计算数据。
具体地,共享从处理单元201在第一个时钟周期接收主处理单元10发送的共享数据,在第二个时钟周期向各并行从处理单元202广播共享数据,其可以是共享从处理单元201分别向各并行从处理单元202发送共享数据,也可以是共享从处理单元201将共享数据发送给第一级并行从处理单元,并行从处理单元逐级向下将共享数据传递给各并行从处理单元,本申请实施例对此不做限制。同时,共享从处理单元201在第二个时钟周期接收第一级并行从处理单元发送的第一并行计算数据。因此在第二个时钟周期内,共享从处理单元201接收的数据包括共享数据和第一并行计算数据,各并行从处理单元202接收的数据包括共享数据和并行计算数据。继续以计算矩阵乘法y=Ax为例,其中x为共享数据,A[1],A[2],A[3]……A[n]为并行计算数据,在第二个时钟周期,共享从处理单元201接收的数据包括:共享数据x和第一级并行从处理单元发送的并行计算数据A[1],第一级并行从处理单元接收的数据包括:共享从处理单元201广播的共享数据x和第二级并行从处理单元发送的并行计算数据A[2],第二级并行从处理单元接收的数据包括:共享从处理单元201广播的共享数据x和第三级并行从处理单元发送的并行计算数据A[3]……,最后一级并行从处理单元接收的数据包括:共享从处理单元201广播的共享数据x和主处理单元10发送的并行计算数据A[n]。
上述数据处理装置,共享从处理单元具体用于在第一个时钟周期接收共享数据,在第二个时钟周期向各并行从处理单元广播共享数据,并在第二个时钟周期接收第一级并行从处理单元发送的第一并行计算数据。本实施例中,通过两个时钟周期,将共享数据发送给所有并行从处理单元,同时接收第一级并行从处理单元发送的第一并行计算数据,使得共享从处理单元接收到共享数据和并行计算数据,并将共享数据发送给了各并行从处理单元,采用上述方法,与主处理单元直接将机器学习算法数据直接发送给从处理单元相比,降低了主、从处理单元之间的数据交互所占的数据带宽,进而降低了机器学习芯片用于传输的硬件开销。
在上述实施例的基础上,当在各从处理单元分别接收到共享数据和并行结算数据后,各从处理单元还可以根据共享数据和并行计算数据进行中间运算,得到中间结果,并将各中间结果传输给主处理单元。通过下述实施例来详细描述这一过程。
可选地,共享从处理单元201还用于根据共享数据和第一级并行从处理单元发送的并行计算数据,进行中间运算,得到中间结果,并将中间结果传输给主处理单元10;并行从处理器202还用于根据共享数据和并行计算数据,进行中间运算,得到中间结果,并将中间结果传输给主处理单元10。
具体地,中间结果可以是根据共享数据和并行计算数据在共享从处理单元201或并行从处理单元202进行中间运算获得的。中间结果为机器学习算法中从处理单元进行中间计算获得的。共享从处理单元201将中间结果发送给主处理单元10,并行从处理单元202将中间结果发送给主处理单元10。进一步地,主处理单元10可以根据中间结果,获得机器学习算法的最终运算结果。
在上述实施例的基础上,继续以计算矩阵乘法y=Ax为例,在第二个时钟周期,共享从处理单元201接收的数据包括:共享数据x和第一级并行从处理单元发送的并行计算数据A[1],第一级并行从处理单元接收的数据包括:共享从处理单元201广播的共享数据x和第二级并行从处理单元发送的并行计算数据A[2],第二级并行从处理单元接收的数据包括:共享从处理单元201广播的共享数据x和第三级并行从处理单元发送的并行计算数据A[3]……,最后一级并行从处理单元接收的数据包括:共享从处理单元201广播的共享数据x和主处理单元10发送的并行计算数据A[n]。此时,共享从处理单元201根据共享数据x和并行计算数据A[1],进行中间运算,获得中间结果,并将中间结果传输给主处理单元10。第一级并行从处理单元根据共享数据x和并行计算数据A[2];第二级并行从处理单元根据共享数据x和并行计算数据A[3],进行中间运算,获得中间结果;第三级并行从处理单元根据共享数据x和并行计算数据A[4];……最后一级并行从处理单元根据共享数据x和并行计算数据A[n],进行中间运算,获得中间结果,并将中间结果传输给主处理单元10。
上述数据处理装置,共享从处理单元还用于根据共享数据和第一级并行从处理单元发送的并行计算数据,进行中间运算,得到中间结果,并将中间结果传输给主处理单元;并行从处理器还用于根据共享数据和并行计算数据,进行中间运算,得到中间结果,并将中间结果传输给主处理单元。本实施例中,通过共享从处理单元和并行从处理单元获得中间结果,并将中间结果发送给主处理单元。使得共享从处理单元和并行从处理单元分别执行中间运算,获得中间结果,进而将各中间结果发送给主处理单元,使得数据处理装置中的所有运算单元均进行运算,提高了数据处理装置的运算效率。
在上述实施例的基础上,从处理单元可以通过通讯接口传输数据;主处理单元可以通过分配处理电路拆分机器学习数据,获得共享数据和至少两个并行计算数据;主处理单元还可以通过缓存电路记录各从处理单元标识信息。下面通过图3所示实施例来详细说明。
参照图3所示,可选地,共享从处理单元201和并行从处理单元202均包括通讯接口203,通讯接口用于传输共享数据和并行计算数据。其可以是各从处理单元分别包括一个通讯接口,各从处理单元通过其对应的通讯接口与其他从处理单元传输共享数据和并行计算数据。
可选地,主处理单元10包括分配处理电路101,分配处理电路101用于对机器学习数据进行拆解分配,获得共享数据和至少两个并行计算数据。可选地,主处理单元10还包括缓存电路102,缓存电路102用于记录各从处理单元标识信息,标识信息包括从处理单元的标识和/或地址信息。
参照图4所示,本申请还提供了一种组合处理装置,其包括上述数据处理装置、通用互联接口和除上述数据处理装置以外的其它处理装置;数据处理装置与其它处理装置进行交互,共同完成用户指定的计算操作。其中,其他处理装置,包括中央处理器CPU、图形处理器GPU、神经网络处理器等通用/专用处理器中的一种或以上的处理器类型。其他处理装置所包括的处理器数量不做限制。其他处理装置作为数据处理装置与外部数据和控制的接口,包括数据搬运,完成对本数据处理装置的开启、停止等基本控制;其他处理装置也可以和数据处理装置协作共同完成运算任务。通用互联接口,用于在所述数据处理装置与其他处理装置间传输数据和控制指令。该数据处理装置从其他处理装置中获取所需的输入数据,写入数据处理装置片上的共享存储器;可以从其他处理装置中获取控制指令,写入数据处理装置片上的机器学习装置;也可以读取数据处理装置的共享存储器中的数据并传输给其他处理装置。
可选的,参照图5所示,上述组合处理装置还可以包括存储装置,存储装置分别与所述数据处理装置和所述其他处理装置连接。存储装置用于保存在所述数据处理装置和所述其他处理装置的数据,尤其适用于所需要运算的数据在本数据处理装置或其他处理装置的内部存储中无法全部保存的数据。
该组合处理装置可以作为手机、机器人、无人机、视频监控设备等设备的SOC片上系统,有效降低控制部分的核心面积,提高处理速度,降低整体功耗。此情况时,该组合处理装置的通用互联接口与设备的某些部件相连接。某些部件譬如摄像头,显示器,鼠标,键盘,网卡,wifi接口。
在一个实施例中,本申请还提供了一种机器学习芯片,其包括了上述数据处理装置和/或组合处理装置。
在一个实施例中,本申请还提供了一种机器学习芯片封装结构,其包括了上述机器学习芯片。
在一个实施例中,本申请还提供了一种板卡,其包括了上述机器学习芯片封装结构。参照图6所示,上述板卡除了包括上述芯片封装结构81以外,还可以包括其他的配套部件,该配套部件包括但不限于:存储器件82、接口装置83和控制器件84;所述存储器件82与所述芯片封装结构81内的机器学习芯片811通过总线连接,用于存储数据,所述存储器件82可以包括多组存储单元821。每一组所述存储单元821与所述机器学习芯片811通过总线连接。可以理解,每一组所述存储单元821可以是DDR SDRAM(Double Data Rate SDRAM,双倍速率同步动态随机存储器)。
DDR不需要提高时钟频率就能加倍提高SDRAM的速度。DDR允许在时钟脉冲的上升沿和下降沿读出数据。DDR的速度是标准SDRAM的两倍。在一个实施例中,所述存储装置可以包括4组所述存储单元。每一组所述存储单元可以包括多个DDR4颗粒(芯片)。在一个实施例中,所述机器学习芯片内部可以包括4个72位DDR4控制器,上述72位DDR4控制器中64bit用于传输数据,8bit用于ECC校验。在一个实施例中,每一组所述存储单元包括多个并联设置的双倍速率同步动态随机存储器。DDR在一个时钟周期内可以传输两次数据。在所述芯片中设置控制DDR的控制器,用于对每个所述存储单元的数据传输与数据存储的控制。
所述接口装置83与所述芯片封装结构81内的机器学习芯片811电连接。所述接口装置83用于实现所述机器学习芯片811与外部设备(例如服务器或计算机)之间的数据传输。例如在一个实施例中,所述接口装置83可以为标准PCIE(peripheral componentinterconnect express,一种高速串行计算机扩展总线标准)接口。比如,待处理的数据由服务器通过标准PCIE接口传递至所述机器学习芯片,实现数据转移。优选的,当采用PCIE3.0X 16接口传输时,理论带宽可达到16000MB/s。在另一个实施例中,所述接口装置83还可以是其他的接口,本申请并不限制上述其他的接口的具体表现形式,所述接口装置能够实现转接功能即可。另外,所述机器学习芯片811的计算结果仍由所述接口装置83传送回外部设备(例如服务器)。
所述控制器件84与所述机器学习芯片811电连接。所述控制器件84用于对所述芯片的状态进行监控。具体的,所述机器学习芯片811与所述控制器件84可以通过SPI(SerialPeripheral Interface,串行外设接口)接口电连接。所述控制器件可以包括单片机(MicroController Unit,MCU)。如所述机器学习芯片可以包括多个数据处理装置和/或组合处理装置,可以带动多个负载。因此,所述机器学习芯片可以处于多负载和轻负载等不同的工作状态。通过所述控制器件84可以实现对所述机器学习芯片中多个数据处理装置和/或组合处理装置的工作状态的调控。
在一些实施例里,申请了一种电子设备,其包括了上述板卡。电子设备包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、服务器、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。
本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本申请所必须的。在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。
所述集成的单元如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
本领域普通技术人员可以理解上述实施例的全部或部分处理过程是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储器中,存储器可以包括:闪存盘、只读存储器(英文:Read-Only Memory,简称:ROM)、随机存取器(英文:RandomAccess Memory,简称:RAM)、磁盘或光盘等。
以上对本申请实施例进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (13)
1.一种数据处理装置,其特征在于,所述数据处理装置用于执行机器学习数据的处理,所述数据处理装置包括:主处理单元和至少一个从处理单元组,所述从处理单元组包括共享从处理单元和至少一个并行从处理单元;
所述主处理单元,用于将机器学习数据拆分为共享数据和至少两个并行计算数据,向所述共享从处理单元发送所述共享数据,并根据预设的两个时钟周期内分别向各所述并行从处理单元发送所述并行计算数据;
所述共享从处理单元,用于接收所述共享数据,并将所述共享数据传输给各所述并行从处理单元;
所述并行从处理单元,用于在第一个时钟周期内接收第一并行数据、在第二个时钟周期内接收第二并行数据,并将所述第一并行数据传输给上一级并行从处理单元,或者,所述共享从处理单元。
2.根据权利要求1所述装置,其特征在于,所述主处理单元,具体用于在第一个时钟周期向所述共享从处理单元发送所述共享数据,向各所述并行从处理单元发送所述第一并行计算数据;在第二个时钟周期向最后一级并行从处理单元发送所述第二并行计算数据。
3.根据权利要求2所述装置,其特征在于,所述共享从处理单元,具体用于在所述第一个时钟周期接收所述共享数据,在所述第二个时钟周期向各所述并行从处理单元广播所述共享数据,并在所述第二个时钟周期接收第一级并行从处理单元发送的所述第一并行计算数据。
4.根据权利要求2所述装置,其特征在于,所述共享从处理单元还用于根据所述共享数据和所述第一级并行从处理单元发送的并行计算数据,进行中间运算,得到中间结果,并将所述中间结果传输给所述主处理单元;
所述并行从处理器还用于根据所述共享数据和所述并行计算数据,进行中间运算,得到所述中间结果,并将所述中间结果传输给所述主处理单元。
5.根据权利要求1-4任一项所述装置,其特征在于,所述共享从处理单元和所述并行从处理单元包括通讯接口,所述通讯接口用于传输所述共享数据和所述并行计算数据。
6.根据权利要求1-4任一项所述装置,其特征在于,所述主处理单元包括分配处理电路,所述分配处理电路用于对所述机器学习数据进行拆解分配,获得所述共享数据和所述至少两个并行计算数据。
7.根据权利要求1-4任一项所述装置,其特征在于,所述主处理单元还包括缓存电路,所述缓存电路用于记录各所述从处理单元标识信息,所述标识信息包括所述从处理单元的标识和/或地址信息。
8.一种组合处理装置,其特征在于,所述组合处理装置包括如权利要求1-7中任一项所述的数据操作装置、通用互联接口和除所述数据操作装置以外的其它处理装置;所述数据操作装置与所述其它处理装置进行交互。
9.根据权利要求8所述的组合处理装置,其特征在于,还包括:存储装置,所述存储装置分别与所述数据操作装置和所述其它处理装置连接,用于保存所述数据操作装置和所述其它处理装置的数据。
10.一种机器学习芯片,其特征在于,所述机器学习芯片包括如权利要求8-9中任一项所述的组合处理装置。
11.一种机器学习芯片封装结构,其特征在于,所述机器学习芯片封装结构包括如权利要求10所述的机器学习芯片。
12.一种板卡,其特征在于,所述板卡包括如权利要求11所述的机器学习芯片封装结构。
13.一种电子设备,其特征在于,所述电子设备包括如权利要求12所述的板卡。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811628235.XA CN111381882B (zh) | 2018-12-28 | 2018-12-28 | 数据处理装置及相关产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811628235.XA CN111381882B (zh) | 2018-12-28 | 2018-12-28 | 数据处理装置及相关产品 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111381882A true CN111381882A (zh) | 2020-07-07 |
CN111381882B CN111381882B (zh) | 2022-12-02 |
Family
ID=71220579
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811628235.XA Active CN111381882B (zh) | 2018-12-28 | 2018-12-28 | 数据处理装置及相关产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111381882B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113469365A (zh) * | 2021-06-30 | 2021-10-01 | 上海寒武纪信息科技有限公司 | 基于神经网络模型的推理和编译方法及其相关产品 |
CN113596472A (zh) * | 2021-07-27 | 2021-11-02 | 安谋科技(中国)有限公司 | 数据处理方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5428754A (en) * | 1988-03-23 | 1995-06-27 | 3Dlabs Ltd | Computer system with clock shared between processors executing separate instruction streams |
CN101169774A (zh) * | 2007-11-22 | 2008-04-30 | 中兴通讯股份有限公司 | 一种多处理器系统、共享控制装置及启动从处理器的方法 |
US20170277658A1 (en) * | 2014-12-19 | 2017-09-28 | Intel Corporation | Method and apparatus for distributed and cooperative computation in artificial neural networks |
CN107918794A (zh) * | 2017-11-15 | 2018-04-17 | 中国科学院计算技术研究所 | 基于计算阵列的神经网络处理器 |
-
2018
- 2018-12-28 CN CN201811628235.XA patent/CN111381882B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5428754A (en) * | 1988-03-23 | 1995-06-27 | 3Dlabs Ltd | Computer system with clock shared between processors executing separate instruction streams |
CN101169774A (zh) * | 2007-11-22 | 2008-04-30 | 中兴通讯股份有限公司 | 一种多处理器系统、共享控制装置及启动从处理器的方法 |
US20170277658A1 (en) * | 2014-12-19 | 2017-09-28 | Intel Corporation | Method and apparatus for distributed and cooperative computation in artificial neural networks |
CN107918794A (zh) * | 2017-11-15 | 2018-04-17 | 中国科学院计算技术研究所 | 基于计算阵列的神经网络处理器 |
Non-Patent Citations (1)
Title |
---|
钱艺等: "一种神经网络并行处理器的体系结构", 《小型微型计算机系统》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113469365A (zh) * | 2021-06-30 | 2021-10-01 | 上海寒武纪信息科技有限公司 | 基于神经网络模型的推理和编译方法及其相关产品 |
CN113469365B (zh) * | 2021-06-30 | 2024-03-19 | 上海寒武纪信息科技有限公司 | 基于神经网络模型的推理和编译方法及其相关产品 |
CN113596472A (zh) * | 2021-07-27 | 2021-11-02 | 安谋科技(中国)有限公司 | 数据处理方法及装置 |
CN113596472B (zh) * | 2021-07-27 | 2023-12-22 | 安谋科技(中国)有限公司 | 数据处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111381882B (zh) | 2022-12-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110968532B (zh) | 数据传输方法及相关产品 | |
CN110059797B (zh) | 一种计算装置及相关产品 | |
CN111488976B (zh) | 神经网络计算装置、神经网络计算方法及相关产品 | |
CN109670581B (zh) | 一种计算装置及板卡 | |
CN111209244B (zh) | 数据处理装置及相关产品 | |
CN109711540B (zh) | 一种计算装置及板卡 | |
CN111381882B (zh) | 数据处理装置及相关产品 | |
CN109753319B (zh) | 一种释放动态链接库的装置及相关产品 | |
CN110059809B (zh) | 一种计算装置及相关产品 | |
CN111488963A (zh) | 神经网络计算装置和方法 | |
CN109740730B (zh) | 运算方法、装置及相关产品 | |
CN111368967B (zh) | 一种神经网络计算装置和方法 | |
CN111209230B (zh) | 数据处理装置、方法及相关产品 | |
CN111382853B (zh) | 数据处理装置、方法、芯片及电子设备 | |
CN111078625B (zh) | 片上网络处理系统和片上网络数据处理方法 | |
CN111367567B (zh) | 一种神经网络计算装置和方法 | |
CN111368986B (zh) | 一种神经网络计算装置和方法 | |
CN111078623B (zh) | 片上网络处理系统和片上网络数据处理方法 | |
CN111382852B (zh) | 数据处理装置、方法、芯片及电子设备 | |
CN111209245B (zh) | 数据处理装置、方法及相关产品 | |
KR20200139256A (ko) | 네트워크 온칩 데이터 처리 방법 및 장치 | |
CN111723920A (zh) | 人工智能计算装置及相关产品 | |
CN111078624A (zh) | 片上网络处理系统和片上网络数据处理方法 | |
CN111210011B (zh) | 数据处理装置及相关产品 | |
CN111368990A (zh) | 一种神经网络计算装置和方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |