CN110163338B - 具有运算阵列的芯片运算方法、装置、终端及芯片 - Google Patents
具有运算阵列的芯片运算方法、装置、终端及芯片 Download PDFInfo
- Publication number
- CN110163338B CN110163338B CN201910101463.XA CN201910101463A CN110163338B CN 110163338 B CN110163338 B CN 110163338B CN 201910101463 A CN201910101463 A CN 201910101463A CN 110163338 B CN110163338 B CN 110163338B
- Authority
- CN
- China
- Prior art keywords
- neural network
- neuron data
- array
- data
- network layer
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 98
- 210000002569 neuron Anatomy 0.000 claims abstract description 607
- 238000013528 artificial neural network Methods 0.000 claims abstract description 339
- 238000003062 neural network model Methods 0.000 claims abstract description 170
- 230000003139 buffering effect Effects 0.000 claims description 9
- 238000012163 sequencing technique Methods 0.000 claims description 7
- 210000002364 input neuron Anatomy 0.000 claims description 4
- 238000004364 calculation method Methods 0.000 claims description 3
- 210000005036 nerve Anatomy 0.000 abstract description 14
- 238000013473 artificial intelligence Methods 0.000 abstract description 5
- 238000013507 mapping Methods 0.000 abstract description 4
- 230000001537 neural effect Effects 0.000 description 23
- 238000010586 diagram Methods 0.000 description 16
- 230000015654 memory Effects 0.000 description 15
- 239000011159 matrix material Substances 0.000 description 11
- 238000013527 convolutional neural network Methods 0.000 description 4
- 238000003491 array Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000000295 complement effect Effects 0.000 description 2
- 230000007787 long-term memory Effects 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000000047 product Substances 0.000 description 1
- 230000000306 recurrent effect Effects 0.000 description 1
- 230000006403 short-term memory Effects 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
Classifications
-
- 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
-
- 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/044—Recurrent networks, e.g. Hopfield 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/04—Architecture, e.g. interconnection topology
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- General Health & Medical Sciences (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Image Analysis (AREA)
Abstract
本申请公开了一种具有运算阵列的芯片运算方法、装置、终端及芯片,涉及人工智能领域。该方法包括:获取待运算的神经网络模型,神经网络模型包括D个神经网络层,每个神经网络层用于运算M*N个神经元数据;从D个神经网络层的M*N*D个神经元数据中,确定出每个运算时钟对应的待运算的K个神经元数据,输入至运算阵列的K行运算单元;通过运算阵列在每个运算时钟对输入的K个神经元数据进行运算。将D个神经网络层中属于D个维度的M*N*D个神经元数据映射至K个维度,之后分配至K行运算单元中,利用运算阵列中的所有行对神经网络模型进行运算,实现运算阵列的满负荷运算,同时兼容任意深度的神经网络模型与任意行数的神经网络模型。
Description
技术领域
本申请涉及人工智能领域,特别涉及一种具有运算阵列的芯片运算方法、装置、终端及芯片。
背景技术
人工智能(Artificial Intelligence,AI)芯片是适用于对人工智能进行运算的芯片。比如,用于神经网络模型运算的芯片。
一个神经网络模型可以抽象成一个三维的立方体,三维分别对应它的长度、宽度和深度。AI芯片上的一个运算矩阵可以抽象成一个二维的平面,由若干行乘以若干列的运算单元组成。以神经网络模型包括3*3*3个卷积核、运算矩阵包括8*8个运算单元为例,相关技术中将神经网络模型的第1个卷积层中的9个数据按照从左到右、从上到下的顺序输入至运算矩阵的第1行运算单元中;将神经网络模型的第2个卷积层中的9个参数按照从左到右、从上到下的顺序输入至运算矩阵的第2行运算单元中;将神经网络模型的第3个卷积层中的9个数据按照从左到右、从上到下的顺序输入至运算矩阵的第3行运算单元中。按照上述方式需要9个时钟周期来完成一个神经网络模型的运算。
由于同一时钟周期内,运算矩阵上只有第1-3行运算单元处于运算状态,其余4-8行处于闲置状态,导致整个芯片的利用率较低。由此得知,应用上述方式运算神经网络模型,当神经网络模型的深度与运算阵列的行数相等时,运算阵列才能实现满负荷运算;当神经网络模型的深度小于或者大于运算阵列的行数时,不能实现运算阵列的满负荷运算或者无法运算,其兼容性差。
发明内容
本申请实施例提供了一种具有运算阵列的芯片运算方法、装置、终端及芯片,可以解决不能使运算阵列满负荷运算的同时,兼容任意深度的神经网络模型和任意行数的运算阵列的问题。所述技术方案如下:
根据本申请的一个方面,提供了一种具有运算阵列的芯片运算方法,该运算阵列包括K行运算单元,该方法包括:
获取待运算的神经网络模型,该神经网络模型包括D个神经网络层,每个神经网络层对应M行*N列个神经元数据;
从上述D个神经网络层的M*N*D个神经元数据中,确定出每个运算时钟对应的待运算的K个神经元数据,输入至运算阵列的K行运算单元;
通过运算阵列在每个运算时钟对输入的K个神经元数据进行运算;其中,M、N、D、K均为正整数。
根据本申请的另一个方面,提供了一种具有运算阵列的芯片运算装置,该运算装置连接运算阵列,上述运算阵列包括K行运算单元,该装置包括:
获取模块,用于获取待运算的神经网络模型,神经网络模型包括D个神经网络层,每个神经网络层对应M行*N列个神经元数据;
控制模块,用于从D个神经网络层的M*N*D个神经元数据中,确定出每个运算时钟对应的待运算的K个神经元数据,输入至运算阵列的K行运算单元;
运算模块,用于通过运算阵列在每个运算时钟对输入的K个神经元数据进行运算;其中,M、N、D、K均为正整数。
根据本申请的另一方面,提供了一种终端,该终端安装有具有运算阵列的芯片,该芯片上包括:存储阵列、处理器和运算阵列,处理器与存储阵列电性相连,处理器与运算阵列电性相连,运算阵列包括K行*L列运算单元;
存储阵列,用于存储神经网络模型,该神经网络模型包括D个神经网络层,每个神经网络层对应M行*N列个神经元数据;
处理器,用于获取待运算的上述神经网络模型;从D个神经网络层的M*N*D个神经元数据中,确定出每个运算时钟对应的待运算的K个神经元数据,输入至运算阵列的K行运算单元;
运算阵列,用于通过运算阵列在每个运算时钟对输入的K个神经元数据进行运算;其中,M、N、D、K均为正整数。
根据本申请的另一方面,提供了一种具有运算阵列的芯片,应用于神经网络模型的运算,该芯片包括:存储阵列、第一可编程逻辑电路、第二可编程逻辑电路和运算阵列,第一可编程逻辑电路与存储阵列、第二可编程逻辑电路电性相连,第二可编程逻辑电路与存储阵列、运算阵列电性相连,运算阵列包括K行*L列运算单元;
存储阵列,用于存储神经网络模型,该神经网络模型包括D个神经网络层,每个神经网络层对应M行*N列个神经元数据;
第一可编程逻辑电路,用于获取待运算的上述神经网络模型;
第二可编程逻辑电路,用于从D个神经网络层的M*N*D个神经元数据中,确定出每个运算时钟对应的待运算的K个神经元数据,输入至运算阵列的K行运算单元;
运算阵列,用于在每个运算时钟对输入的K个神经元数据进行运算。
本申请实施例提供的技术方案带来的有益效果至少包括:
通过获取待运算的神经网络模型,该神经网络模型包括D个神经网络层,每个神经网络层包括M*N个神经元数据;从D个神经网络层的M*N*D个神经元数据中,确定出每个运算时钟对应的待运算的K个神经元数据,输入至运算阵列的K行运算单元;通过运算阵列在每个运算时钟对输入的K个神经元数据进行运算;将D个神经网络层中属于D个维度的M*N*D个神经元数据映射至K个维度后分配至K行运算单元中,利用运算阵列中的所有行对神经网络模型进行运算,实现运算阵列的满负荷运算,同时兼容任意深度的神经网络模型与任意行数的神经网络模型,从而提高运算阵列的利用率,更高效率地发挥运算阵列的运算性能。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是相关技术提供的具有运算阵列的芯片运算方法的示意图;
图2是本申请一个示例性实施例提供的具有运算阵列的芯片运算方法的流程图;
图3是本申请一个示例性实施例提供的具有运算阵列的芯片运算方法的示意图;
图4是本申请另一个示例性实施例提供的具有运算阵列的芯片运算方法的示意图;
图5是本申请另一个示例性实施例提供的具有运算阵列的芯片运算方法的示意图;
图6是本申请另一个示例性实施例提供的具有运算阵列的芯片运算方法的示意图;
图7是本申请另一个示例性实施例提供的具有运算阵列的芯片运算方法的示意图;
图8是本申请另一个示例性实施例提供的具有运算阵列的芯片运算方法的示意图;
图9是本申请另一个示例性实施例提供的具有运算阵列的芯片运算方法的流程图;
图10是本申请另一个示例性实施例提供的具有运算阵列的芯片运算方法的流程图;
图11是本申请另一个示例性实施例提供的具有运算阵列的芯片运算方法的流程图;
图12是本申请另一个示例性实施例提供的具有运算阵列的芯片运算方法的示意图;
图13是本申请另一个示例性实施例提供的具有运算阵列的芯片运算方法的示意图;
图14是本申请另一个示例性实施例提供的具有运算阵列的芯片运算方法的流程图;
图15是本申请另一个示例性实施例提供的具有运算阵列的芯片运算方法的流程图;
图16是本申请另一个示例性实施例提供的具有运算阵列的芯片运算方法的示意图;
图17是本申请一个示例性实施例提供的具有运算阵列的芯片运算装置的框图;
图18是本申请一个示例性实施例提供的终端的结构示意图;
图19是本申请一个示例性实施例提供的具有运算阵列的芯片的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
常见的神经网络模型包括:感知机(Perceptron)、卷积神经网络(ConvolutionalNeural Networks,CNN)、反卷积神经网络(Deconvolutional Networks,DN)、循环神经网络(Recurrent Neural Networks,RNN)、长短期记忆(Long/Short Term Memory,LSTM)网络、Hopfield网络(Hopfield Networks,HN)、玻尔兹曼机(Boltzmann Machine,BM)网络、深度置信网络(Deep Belief Networks,DBN)、自动编码器(AutoEncoder,AE)等等。
典型的,一个神经网络模型可以抽象成一个三维的立方体,三维分别对应它的长度M、宽度N和深度D,每个深度平面上包括M*N个神经元,每个神经元用于运算各自的神经元数据。用于运算神经网络模型的AI芯片上包括一个或多个运算阵列,每个运算阵列可以抽象成一个二维的平面,由若干行乘以若干列的运算单元组成。每个运算单元用于在一个运算时钟对一个神经元数据进行运算。
相关技术中,神经网络模型的运算方式是将神经网络模型中D个深度平面中的神经元数据按照行顺序进行展开后,映射到运算阵列的D个行中进行运算。参考图1,以神经网络模型包括3*3*3个神经元、运算矩阵包括8*8个运算单元为例,将神经网络模型的第1个卷积层0中的9个神经元数据按照从左到右、从上到下的顺序进行展开后,在9个运算时钟中依次输入至运算矩阵的第1行运算单元中;将神经网络模型的第2个卷积层1中的9个神经元数据按照从左到右、从上到下的顺序进行展开后,在9个运算时钟中依次输入至运算矩阵的第2行运算单元中;将神经网络模型的第3个卷积层2中的9个神经元数据按照从左到右、从上到下的顺序进行展开后,在9个运算时钟中依次输入至运算矩阵的第3行运算单元中。
按照上述运算方式,在运算一个3*3*3的神经网络模型的过程中,仅使用到了运算阵列中的前3行运算单元,其它5行运算单元均处于闲置状态。相关技术中神经网络模型的运算方式,在神经网络模型的深度维数D小于运算阵列的行数K的场景中,会使得运算矩阵中的大部分运算单元在运算过程中处于闲置状态,导致芯片的利用率低。
其中,本申请中,“*”表示乘法符号,比如,“M*N”表示M乘以N。
本申请提出了一种具有运算阵列的芯片运算方法,通过将沿深度方向的D层神经网络层中的各个神经元数据映射到运算阵列的K行运算单元中进行运算,采用将各个神经元数据从D维度转变为K维度的方式,实现了运算阵列的满负荷运行。
参考图2,示出了本申请的一个示例性实施例提供的具有运算阵列的芯片运算方法的流程图,应用于具有运算阵列的芯片上,该运算阵列包括K行运算单元,该方法包括:
步骤101,获取待运算的神经网络模型,该神经网络模型包括D个神经网络层,每个神经网络层对应M行*N列个神经元数据。
终端获取待运算的神经网络模型,该神经网络模型包括D个神经网络层,每个神经网络层对应M行*N列个神经元,该M*N个神经元用于运算M*N个待运算的神经元数据。
以神经网络模型为卷积神经网络为例,神经网络模型包括M*N*D个卷积核,将尺寸为M*N*D的神经网络模型沿深度方向解耦为D个神经网路层。其中,每个神经网络层用于运算M*N个神经元数据,M、N、D为正整数。M、N、D的取值可以相同,也可以不同。在一些实施例中,M与N相等且均为奇数。
在不同实施例中,根据神经网络模型的类型不同,神经网络层中的神经元可以为卷积核、高斯核、核结构、门结构、记忆单元中的至少一种。
在不同实施例中,根据神经网络模型的应用领域不同,神经元数据具有不同的物理含义。在图像处理领域中,神经元数据可以是图像上的像素点;在互联网领域中,神经元数据可以是用户的画像数据、浏览数据、支付数据等;在医学领域中,神经元数据可以是人体建模数据;在银行和金融领域,神经元数据可以是金融产品的时间序列数据。
步骤102,从D个神经网络层的M*N*D个神经元数据中,确定出每个运算时钟中待运算的K个神经元数据,输入至该运算阵列的K行运算单元。
终端从D层神经网络层中的M*N*D个神经元数据中获取K个神经元数据,在第i个时钟输入至运算阵列的K行运算单元;
当M*N*D个神经元数据大于K个神经元数据时,终端在第一个时钟的K个神经元数据输入至运算阵列的K行运算单元之后,从D层神经网络层中的剩余未运算的神经元数据中继续确定出第二个时钟对应的待运算的K个神经元数据;以此类推,直至第i个时钟将M*N*D个神经元数据均运算完毕。
步骤103,通过运算阵列在每个运算时钟对输入的K个神经元数据进行运算。
终端通过K行*L列的运算阵列在第i个时钟对输入的K个神经元数据进行运算,L为正整数。
结合参考图3,对于具有M*N*D个神经元的神经网络模型12,将神经网络模型12按照深度方向进行展开得到D个深度平面,每个深度平面对应各自的M*N个神经元数据。D个深度平面中的神经元数据可视为D维度的神经元数据(或称D路神经元数据),将D维度的M*N*D个神经元数据映射为K维度的神经元数据(或称K路神经元数据)输入运算阵列14中进行运算。由于每个时钟都能使得运算阵列的K行运算单元进行满负荷运算,因此能够提高芯片的运算效率。
在一个示意性的例子中,终端通过8行*8列的运算阵列运算3*3*3的神经网络模型,将3个神经网络层中的27个神经元数据分配至8行运算单元中。参考图4,从3个神经网络层中分别确定出时钟1、时钟2、时钟3和时钟4中每个时钟待运算的8个神经元数据。在时钟1中,先从第一层神经网络层中读取0行运算单元需运算的神经元数据1,然后从第二层神经网络层中读取1行运算单元需运算的神经元数据10,接着从第三层神经网络层中读取2行运算单元需运算的神经元数据19,再轮询回第一层神经网络层中读取3行运算单元需运算的神经元数据2。依此类推,确定出每个时钟需要的8个待运算的神经元数据;分别在时钟1、时钟2、时钟3和时钟4对输入8*8的运算阵列的8个神经元数据进行运算;在时钟4,读取并运算剩余的3个神经元数据9、18、27。
在另一个示意性的例子中,终端通过8行*8列的运算阵列运算3*3*3的神经网络模型,将3个神经网络层中的27个神经元数据分配至8行运算单元中。参考图5,依次从每个神经网络层中按照行方向从左往右,列方向从上往下的顺序确定出时钟1至时钟4中每个时钟待运算的8个神经元数据,并分别在时钟1至时钟4对输入8*8的运算阵列的8个神经元数据进行运算;在时钟2时,确定出0行运算单元的待运算神经元数据之后,第一层神经网络层中的神经元数据读取结束,继续从第二层神经网络层中按照行方向左往右,列方向从上往下的顺序继续读取神经元数据;在时钟4,读取并运算剩余的3个神经元数据25、26、27。
在另一个示意性的例子中,终端通过8行*8列的运算阵列运算3*2*3的神经网络模型,将3个神经网络层中的18个神经元数据分配至8行运算单元中。参考图6,从3个神经网络层中分别确定出时钟1、时钟2和时钟3的8个待运算神经元数据,并分别在时钟1、时钟2和时钟3对输入8行*8列的运算阵列的8个神经元数据进行运算;在时钟3,读取并运算剩余的神经元数据12、18。
在另一个示意性的例子中,终端通过5行*6列的运算阵列运算3*2*6的神经网络模型,将6个神经网络层中的36个神经元数据分配至5行的运算单元中。参考图7,从6个神经网络层中分别确定出时钟1-8的5个待运算神经元数据,并分别在时钟1-8对输入5行*6列的运算阵列的5个神经元数据进行运算;在时钟8,读取并运算剩余的神经元数据36。
在另一个示意性的例子中,终端通过6行*6列的运算阵列运算5*3*2的神经网络模型,将2个神经网络层中的30个神经元数据分配至6行的运算单元中。参考图8,从2个神经网络层中分别确定出时钟1-5的6个待运算神经元数据,并分别在时钟1-5对输入6行*6列的运算阵列的6个神经元数据进行运算;该神经网络模型中共包括30个神经元数据,运算阵列的行数为6,神经元数据的数量是运算阵列行数的倍数,所以时钟5时,将神经元数据运算完毕,不需要补充神经元数据。神经网络模型的深度维度D为2,运算阵列的行维度K为6,该神经网络模型的深度维度D是运算阵列的行维度K的约数,所以,终端在时钟i从每个神经网络层中读取神经元数据的个数相等。比如,在时钟1,终端从第一个神经网络层中读取1、2、3共3个神经元数据,从第二个神经网络层中读取16、17、18共3个神经元数据;在时钟2,终端从第一个神经网络层中读取4、5、6共3个神经元数据,从第二个神经网络层中读取19、20、21共3个神经元数据。
综上所述,本实施例提供的具有运算阵列的芯片运算方法,通过获取待运算的神经网络模型,该神经网络模型包括D个神经网络层,每个神经网络层包括M*N个神经元数据;从D个神经网络层的M*N*D个神经元数据中,确定出每个运算时钟对应的待运算的K个神经元数据,输入至运算阵列的K行运算单元;通过运算阵列在每个运算时钟对输入的K个神经元数据进行运算。该方法通过将D个神经网络层属于D个维度的M*N*D个神经元数据映射至K个维度后分配至K行运算单元中,利用运算阵列中的所有行对神经网络模型进行运算,实现运算阵列的满负荷运算,同时兼容任意深度的神经网络模型与任意行数的神经网络模型,从而提高运算阵列的利用率。
另外,本方案还提高了运算阵列的运算效率,比如,相关技术中在8*8的运算阵列中完成对3*3*3的神经网络模型的运算需要9个时钟,如图1所示;而本方案中在8*8的运算阵列中完成对3*3*3的神经网络模型的运算需要4个时钟,比相关技术的运算时间减少了5个时钟,使运算阵列的运算效率更高。
在一个可能的实施例中,M*N*D个神经元数据可视为一个数据立方体,该数据立方体是M*N*D的神经网络模型在运算过程中的输入数据,该数据立方体可以是从更大的数据立方体中拆分出的一个数据立方体,也即该更大的数据立方体会被拆分为多个M*N*D的数据立方体来进行运算。那么在第i-1个时钟,若当前运算的数据立方体a中剩余的未运算的神经元数据小于K个神经元数据,本轮运算是该数据立方体a的最后一轮运算,终端可从尚未运算的另一个数据立方体b中获取j个神经元数据补齐为K个神经元数据,在第i个时钟输入至运算阵列的K行运算单元中,j小于K;
或者,在第i-1个时钟,若该M*N*D的神经网络模型A的一个数据立方体中剩余的未运算的神经元数据小于K个神经元数据,也就是当前运算的上述数据立方体中剩余的未运算的神经元数据不足K个,终端还可以从另一个神经网络模型B待运算的数据立方体中获取j个神经元数据补齐为K个神经元数据,在第i个时钟输入至运算阵列的K行运算单元中,K、i、j为正整数。神经网络模型A和神经网络模型B的行数、列数和深度可以相同或不同。比如,上述神经网络模型A和神经网络模型B的尺寸均为3*3*3,或者上述神经网络模型A的尺寸为3*3*3,神经网络模型B的尺寸为3*2*5。需要说明的是,在运算阵列中,分属于两个神经网络模型的神经元数据并不会进行累加运算。
示意性的,如图4所示,在时钟4,一个3*3*3的数据立方体中的剩余未运算的神经元数据不足8个,本轮运算是该数据立方体的最后一轮运算,终端可以从另一个3*3*3的数据立方体中读取5个神经元数据进行补齐,图中被框起来的5个神经元数据就是终端从另一个3*3*3的数据立方体中读取的。
如图5所示,在时钟4,一个3*3*3的数据立方体中的剩余未运算的神经元数据不足8个,本轮运算是该数据立方体的最后一轮运算,且对应的3*3*3的神经网络模型的数据立方体中,没有未运算的数据立方体了,终端可以从另一3*2*3的神经网络模型的数据立方体中读取数据进行补齐,图中被框起来的5个神经元数据就是从另一个3*2*3的神经网络模型对应的一个3*2*3的数据立方体中读取得到的。
如图6至图7所示的示例性的例子中,一个数据立方体的最后一轮运算的神经元数据不足K个时,神经元数据的补齐方法可以参照图4和图5所示的补齐方法,在此不再加以赘述。
综上所述,本申请的技术方案至少包括如下三点有益效果:
第一,芯片在运算神经网络模型时的利用率更高。当对不同尺寸的神经网络模型中的神经元数据进行运算时,运算阵列均能够满负荷运行,实现运算阵列与神经网络模型的解耦。
第二,神经网络模型与运算阵列解耦的灵活性更大。对于不同尺寸的运算阵列,本技术方案的运算方法能够将不同尺寸的神经网络模型与不同尺寸的运算阵列解耦。比如,将3*3*3的神经网络模型与8*8的运算阵列解耦,或者,将3*3*2的神经网络模型与2*8的运算阵列解耦,或者,将3*2*3的神经网络模型与9*8的运算阵列解耦。
第三,使芯片的性能、竞争力提高以及降低芯片使用的成本。本运算方案的运算方法通过运算单元利用率的提高,能够提高运算效率。与其它芯片相比,能够使用更低的硬件成本达到相同的运算性能。
首先,AI处理器或者AI芯片的一个性能指标是每秒完成运算的次数。上述运算是由运算阵列(也即脉动阵列)完成,每个运算阵列是由K*L个运算单元组成的。那么一个AI处理器或者AI芯片的实际运算性能由以下公式计算得到:
Ptheorectical=Frequency*K*L*2 (1);
Pactual=Ptheoretical*Efficiency (2);
其中,Ptheorectical是AI处理器或AI芯片理论上的最大性能,Frequency是AI处理器或者AI芯片中运算阵列的时钟频率,K是运算阵列的行,L是运算阵列的列,Pactual是AI处理器或AI芯片的实际性能,Efficiency是运算阵列的运算效率。
以输入RGB(Red-Green-Blue)三维图像为例,在相关技术中与本申请中,运算阵列中运算单元的利用率对比如下表1所示,
表1
通过表1可知,相对于本技术方案中运算单元的利用率,相关技术中运算单元的利用率处于较低水平。比如,在一个8*L的运算阵列中,运算一个3*3的神经网络层,相关技术中运算阵列中运算单元的利用率仅37.5%,本方案中运算阵列中运算单元的利用率则是100%;在一个32*L的运算阵列中,运算一个3*3的神经网络层,相关技术中运算阵列中运算单元的利用率仅9.375%,本方案中运算阵列中运算单元的利用率则是100%。
将运算阵列中运算单元的利用率近似为运算阵列的运算效率,根据上述计算公式计算相关技术中芯片的最大性能和实际性能。假设一个64*64的运算阵列,运算阵列的时钟频率是1Ghz,那么根据公式(1)计算得到AI处理器或者AI芯片的最大性能是8T;以表1中数据作为参考,运算效率为37.5%,根据公式(2)计算得到AI处理器或者AI芯片的实际性能是3T。
如果在图像识别的实际应用中,根据业务需求需要使用6T的算力,则相关技术中需要使用2个AI处理器或者AI处理芯片,而本申请的技术方案中仅需要1个AI处理器或者AI处理芯片。
得出结论,本技术方案使芯片的性能、竞争力提高以及降低芯片使用的成本。
在基于图2的可选实施例中,上述步骤102可以由两部分算法实现,如图9所示:
一、划窗地址生成算法a;
根据神经网络模型的尺寸(M*N*D)以及运算阵列的尺寸(K*L),确定出运算阵列中每个运算时钟所需要的K个神经元数据的存储地址,从而实现神经网络模型的深度维度与运算阵列的尺寸解耦。
二、输入数据重排序算法b;
根据划窗地址生成算法a确定的存储地址,从存储阵列16中读取出待运算的各个神经元数据,将待运算的神经元数据缓存至深度平面寄存器中。在每个运算时钟,通过输入数据重排序算法b将时钟i所需的K个神经元数据进行重排序后,输入至运算阵列14的K行运算单元中,从而实现神经网络模型的长宽维度与运算阵列的尺寸解耦。
在本实施例中,可以将步骤102替换为步骤1021至步骤1024。参考图10,将D个神经网络层的M*N*D个神经元数据映射至K行运算单元的实现方式如下:
步骤1021,从D个神经网络层的M*N*D个神经元数据中,运算出运算阵列在运算时钟i所需运算的K个神经元数据在存储阵列中的存储地址。
终端根据划窗地址生成算法从D个神经网络层的M*N*D个神经元数据中,运算出运算阵列在运算时钟i所需运算的K个神经元数据在存储阵列中的存储地址,并记录每个神经元数据的偏移量以及每个神经元数据所在神经网络层的维度,i为整数。
步骤1022,根据K个存储地址从存储阵列中读取K个神经元数据。
终端根据K个存储地址从存储阵列中的D个神经网络层中读取K个神经元数据,存储至片上存储单元阵列的深度平面寄存器中。
深度平面寄存器是有限存贮容量的高速存贮部件,可用来暂存指令、数据和地址。本实施例中,深度平面寄存器用于暂存待运算的神经元数据。终端将根据K个存储地址从存储阵列中读取的K个神经元数据暂存在深度平面寄存器中,在时钟i时,将深度平面寄存器中暂存的K个神经元数据送至运算阵列中进行运算。
步骤1023,将K个神经元数据按照排序规则进行排序。
终端根据输入数据重排序算法将深度平面寄存器中的K个神经元数据按照排序规则进行输出。
排序规则包括但不限于如下规则中的任意一种:
-不同层交替排序为第一排序优先级,相同层按行列位置顺序进行排序为第二排序优先级;
将K个神经元数据,优先按照来自不同神经网络层的神经元数据依层号由小到大(或由大到小)轮询出现的顺序进行排序;然后,将来自相同神经网络层的神经元数据依行列位置顺序进行排序。
-相同层按行列位置顺序进行排序为第一排序优先级,不同层交替排序为第二排序优先级。
将K个神经元数据,优先按照来自相同神经网络层的神经元数据依行列位置顺序进行排序;然后,将来自不同神经网络层的神经元数据依层号由小到大(或由大到小)出现的顺序进行排序。
步骤1024,将排序后的K个神经元数据在运算时钟i输入至运算阵列的K行运算单元。
综上所述,本实施例提供的具有运算阵列的芯片运算方法,通过获取待运算的神经网络模型,该神经网络模型包括D个神经网络层,每个神经网络层包括M*N个神经元数据;从D个神经网络层的M*N*D个神经元数据中,确定出每个运算时钟对应的待运算的K个神经元数据,输入至运算阵列的K行运算单元;通过运算阵列在每个运算时钟对输入的K个神经元数据进行运算。该方法通过将D个神经网络层中属于D个维度的M*N*D个神经元数据映射至K个维度后分配至K行运算单元中,利用运算阵列中的所有行对神经网络模型进行运算,实现运算阵列的满负荷运算,同时兼容任意深度的神经网络模型与任意行数的神经网络模型,从而提高运算阵列的利用率,更高效率地发挥运算阵列的运算性能。
终端根据存储地址从存储阵列中取出K个神经元数据,之后将K个神经元数据按照排序规则进行排序,排序规则可以包括以下两种规则中的任意一种:
-不同层交替排序为第一排序优先级,相同层按行列位置顺序进行排序为第二排序优先级;
将K个神经元数据,优先按照来自不同神经网络层的神经元数据依层号由小到大(或由大到小)轮询出现的顺序进行排序;然后,将来自相同神经网络层的神经元数据依行列位置顺序进行排序。
-相同层按行列位置顺序排序为第一排序优先级,不同层交替排序为第二排序优先级。
将K个神经元数据,优先按照来自相同神经网络层的神经元数据依行列位置顺序进行排序;然后,将来自不同神经网络层的神经元数据依层号由小到大(或由大到小)出现的顺序进行排序。
示意性的,行列位置顺序包括如下四种:
1、沿行方向从左到右、列方向从上到下的顺序;
2、沿行方向从左到右、列方向从下到上的顺序;
3、沿行方向从右到左、列方向从上到下的顺序;
4、沿行方向从右到左、列方向从下到上的顺序。
以下实施例中,图11是对第一种排序方式的说明;图15是对第二种排序方式的说明。
参考图11,示出了本申请的另一示例性实施例提供的具有运算阵列的芯片运算方法的流程图,该运算方法应用于上述具有运算阵列的芯片上,运算阵列包括K行运算单元,该方法包括:
步骤201,获取待运算的神经网络模型,神经网络模型包括D个神经网络层,每个神经网络层对应M行*N列个神经元数据。
终端获取待获取运算的神经网络模型,神经网络模型包括M*N*D的神经网络模型,上述神经网络模型包括D个M*N的神经网络层,每个神经网络层对应M行*N列个神经元数据。
步骤202,从D个神经网络层的M*N*D个神经元数据中,运算出运算阵列在运算时钟i所需运算的K个神经元数据在存储阵列中的存储地址。
D个M*N的神经网络层存储在存储阵列中,终端中K行*L列的运算阵列包括K行运算单元。终端从D个神经网络层的M*N*D个神经元数据中,运算出运算阵列在运算时钟i所需的K个神经元数据在存储阵列中的存储地址,并记录每个神经元数据的偏移量以及所在的神经网络层的维度。
步骤203,根据K个存储地址从存储阵列中读取K个神经元数据。
终端根据K个存储地址从存储阵列中读取K个神经元数据存储至深度平面寄存器中。
可选的,终端运算对应时钟i需要从每个神经网络层中需要读取的神经元数据的数量k,根据D*k个存储地址从存储阵列中的每个神经网络层中分别读取k个神经元数据,将D*k个神经元数据分别暂存至对应的深度平面寄存器中,k为正整数,D*k小于或者等于K。
示意性的,3*3*3的神经网络模型映射至8*8的运算阵列中,运算阵列每个时钟需要运算8个神经元数据,对应的需要从存储阵列中的神经网络层中分别读取3、3、2个待运算的神经元数据,将从不同神经网络层中读取的神经元数据分别暂存在每个神经网络层对应的深度平面寄存器中。
比如,如图13所示,运算阵列每个时钟需要运算8个神经元数据,终端从神经网络层0-2中分别读取待运算的3个神经元数据暂存至深度平面寄存器中,从神经网络层0读取神经元数据1、2、3暂存至深度平面寄存器Dim_data_0中,从神经网络层1读取神经元数据10、11、12暂存至深度平面寄存器Dim_data_1中,从神经网络层2读取神经元数据19、20、21暂存至深度平面寄存器Dim_data_2中。
步骤204,将K个神经元数据,按照来自不同神经网络层的神经元数据依层号轮询出现的顺序进行排序。
可选的,终端将K个神经元数据,按照来自不同神经网络层的神经元数据依层号由小到大轮询出现的顺序进行排序;或者,将K个神经元数据,按照来自不同神经网络层的神经元数据依层号由大到小轮询出现的顺序进行排序。
示意性的,以终端将K个神经元数据按照来自不同神经网络层的神经元数据依层号由小到大轮询出现的顺序进行排列为例对排序进行说明。
还需要说明的是,参考图12,M*N*D的神经网络模型的神经元数据存储在存储阵列c中,神经网络模型沿D维度划分为D个神经网络层从神经网络层0至(D-1)依次存储在存储阵列c中,存储阵列c中存储每个神经元数据的位置对应一个存储地址,示意性的,存储阵列c中神经元数据“1”的存储地址为0,依次的神经元数据“2”的存储地址在神经元数据“1”的存储地址的基础上加1,神经元数据“2”的存储地址为1,则神经元数据“3”的存储地址为2,依此类推,当存储阵列c的存储长度为Conv_Length,第Conv_Length个存储地址为Conv_Length-1;将上述一行作为存储阵列c的第一行,则第二行的第一列的存储地址为Conv_Length;以此类推。
终端根据存储地址读取存储阵列c中的神经元数据,当在存储地址为2的位置读取到神经元数据“3”之后,需要读取神经元数据“4”,神经元数据“4”与神经元数据“3”的存储地址不连续,需要跳转,根据上述存储地址的推论,读取神经元数据“4”的跳转地址为Conv_Length-1。
终端在存储阵列c中完成划窗地址生成算法之后,读取存储阵列c中的神经元数据之后,将神经元数据暂存至深度平面寄存器组d中,在本申请的实施例中,每一个神经网络层对应一个深度平面寄存器。深度平面寄存器d是有限存贮容量的高速存贮部件,由于待运算的神经元数据要进行重排序,需要中间暂存的过程,所以本实施例中通过深度平面寄存器d实现神经元数据的中间暂存过程。
终端将待运算的神经元数据读取至深度平面寄存器组d中之后,根据输入数据重排序算法将待运算的神经元数据输入至运算阵列e中进行运算。
具体的,参考图13,将3*3*3的神经网络模型映射至8行的运算阵列中,3*3*3的神经网络模型包括神经网络层0、神经网络层1和神经网络层2;通过运算可知,从每个神经网络层中需要获取3个神经元数据。
从存储阵列中读取时钟1需要的8个神经元数据,首先,从神经网络层0中获取神经元数据1、2、3调度至深度平面寄存器Dim_data_0中,从神经网络层1中获取神经元数据10、11、12调度至深度平面寄存器Dim_data_1中,从神经网络层2中获取神经元数据19、20、21调度至深度平面寄存器Dim_data_2中。
其次,对时钟1的8个待运算的神经元数据进行排序,运算阵列的0行的运算单元对应Dim_data_0中偏移量为0的神经元数据1,运算阵列的1行的运算单元对应Dim_data_1中偏移量为0的神经元数据10,运算阵列的2行的运算单元对应Dim_data_2中偏移量为0的神经元数据19,运算阵列的3行的运算单元对应Dim_data_0中偏移量为1的神经元数据2,运算阵列的4行的运算单元对应Dim_data_1中偏移量为1的神经元数据11,运算阵列的5行的运算单元对应Dim_data_2中偏移量为1的神经元数据20,运算阵列的6行的运算单元对应Dim_data_0中偏移量为2的神经元数据3,运算阵列的7行的运算单元对应Dim_data_1中偏移量为2的神经元数据12,依照上述对应顺序排序,准备将神经元数据1、10、19、2、11、20、3、12在时钟1对应输入至运算阵列的0-7行的运算单元中。
上述一轮神经元数据输出运算之后,将运算完毕的数据移出并记录当前运算的神经网络层是神经网络层1。深度平面寄存器Dim_data_2中余下偏移量为2的神经元数据21,重新读取待运算的神经元数据;从神经网络层0中获取神经元数据4、5、6调度至深度平面寄存器Dim_data_0中,从神经网络层1中获取神经元数据13、14、15调度至深度平面寄存器Dim_data_1中,从神经网络层2中获取神经元数据22、23、24调度至深度平面寄存器Dim_data_2中。
之后,更新深度平面寄存器中神经元数据的偏移量,将神经元数据21的偏移量更新为0,依次的神经元数据22、23、24则为1、2、3。记录的当前的运算的神经网络层为1,则从神经网络层为2开始轮询,对时钟2的8个待运算的神经元数据进行排序,运算阵列的0行的运算单元对应Dim_data_2中偏移量为0的神经元数据21,运算阵列的1行的运算单元对应Dim_data_0中偏移量为0的神经元数据4,运算阵列的2行的运算单元对应Dim_data_1中偏移量为0的神经元数据13,运算阵列的3行的运算单元对应Dim_data_2中偏移量为1的神经元数据22,运算阵列的4行的运算单元对应Dim_data_0中偏移量为1的神经元数据5,运算阵列的5行的运算单元对应Dim_data_1中偏移量为1的神经元数据14,运算阵列的6行的运算单元对应Dim_data_2中偏移量为2的神经元数据6,运算阵列的7行的运算单元对应Dim_data_0中偏移量为2的神经元数据15;依照上述对应顺序排序,准备将神经元数据21、4、13、22、5、14、23、6在时钟2对应输入至运算阵列的0-7行的运算单元中。
上述二轮神经元数据输出运算之后,将运算完毕的数据移出并记录当前运算的神经网络层是神经网络层0。深度平面寄存器Dim_data_1中余下偏移量为2的神经元数据15,深度平面寄存器Dim_data_2中余下偏移量为3的神经元数据24,重新读取待运算的神经元数据;从神经网络层0中获取神经元数据7、8、9调度至深度平面寄存器Dim_data_0中,从神经网络层1中获取神经元数据16、17、18调度至深度平面寄存器Dim_data_1中,从神经网络层2中获取神经元数据25、26、27调度至深度平面寄存器Dim_data_2中。
之后,更新深度平面寄存器中神经元数据的偏移量,将神经元数据15的偏移量更新为0,依次的神经元数据16、17、18则为1、2、3;将神经元数据24的偏移量更新为0,依次的神经元数据25、26、27则为1、2、3。记录的当前的运算的神经网络层为0,则从神经网络层为1开始轮询,对时钟3的8个待运算的神经元数据进行排序,运算阵列的0行的运算单元对应Dim_data_1中偏移量为0的神经元数据15,运算阵列的1行的运算单元对应Dim_data_2中偏移量为0的神经元数据24,运算阵列的2行的运算单元对应Dim_data_0中偏移量为0的神经元数据7,运算阵列的3行的运算单元对应Dim_data_1中偏移量为1的神经元数据16,运算阵列的4行的运算单元对应Dim_data_2中偏移量为1的神经元数据25,运算阵列的5行的运算单元对应Dim_data_0中偏移量为1的神经元数据8,运算阵列的6行的运算单元对应Dim_data_1中偏移量为2的神经元数据17,运算阵列的7行的运算单元对应Dim_data_2中偏移量为2的神经元数据26;依照上述对应顺序排序,准备将神经元数据15、24、7、16、25、8、17、26在时钟3对应输入至运算阵列的0-7行的运算单元中。
上述三轮神经元数据输出运算之后,将运算完毕的数据移出并记录当前运算的神经网络层是神经网络层2。深度平面寄存器Dim_data_0中余下偏移量为2的神经元数据9,深度平面寄存器Dim_data_1中余下偏移量为3的神经元数据18,深度平面寄存器Dim_data_2中余下偏移量为3的神经元数据27。上述一个神经网络模型共27个神经元数据,三轮神经元数据输出之后,剩余3个数据,不足8个,从神经网络模型的另一个数据立方体中读取待运算的神经元数据进行补齐;从神经网络层0中获取神经元数据1、2、3调度至深度平面寄存器Dim_data_0中,从神经网络层1中获取神经元数据10、11、12调度至深度平面寄存器Dim_data_1中,从神经网络层2中获取神经元数据19、20、21调度至深度平面寄存器Dim_data_2中。
之后,更新深度平面寄存器中神经元数据的偏移量,将神经元数据9的偏移量更新为0,依次的神经元数据1、2、3则为1、2、3;将神经元数据18的偏移量更新为0,依次的神经元数据10、11、12则为1、2、3;将神经元数据27的偏移量更新为0,依次的神经元数据19、20、21则为1、2、3。记录的当前的运算的神经网络层为2,则从神经网络层为0开始轮询,对时钟3的8个待运算的神经元数据进行排序,运算阵列的0行的运算单元对应Dim_data_0中偏移量为0的神经元数据9,运算阵列的1行的运算单元对应Dim_data_1中偏移量为0的神经元数据18,运算阵列的2行的运算单元对应Dim_data_2中偏移量为0的神经元数据27,运算阵列的3行的运算单元对应Dim_data_0中偏移量为1的神经元数据1,运算阵列的4行的运算单元对应Dim_data_1中偏移量为1的神经元数据10,运算阵列的5行的运算单元对应Dim_data_2中偏移量为1的神经元数据19,运算阵列的6行的运算单元对应Dim_data_0中偏移量为2的神经元数据2,运算阵列的7行的运算单元对应Dim_data_1中偏移量为2的神经元数据11;依照上述对应顺序排序,准备将神经元数据9、18、27、1、10、19、2、11在时钟4对应输入至运算阵列的0-7行的运算单元中。经过四轮运算,完成对一个神经网络模型的运算。
步骤205,将排序后的K个神经元数据在运算时钟i输入至运算阵列的K行运算单元。
终端将上述排序后的K个神经元数据在运算时钟i输入至运算阵列的K行运算单元。
步骤206,通过运算阵列在每个运算时钟对输入的K个神经元数据进行运算。
终端通过运算阵列在每个运算时钟对输入的K个神经元数据进行运算。
综上所述,本实施例提供的具有运算阵列的芯片运算方法,通过获取待运算的神经网络模型,该神经网络模型包括D个神经网络层,每个神经网络层包括M*N个神经元数据;从D个神经网络层的M*N*D个神经元数据中,确定出每个运算时钟对应的待运算的K个神经元数据,输入至运算阵列的K行运算单元。该方法通过将D个神经网络层属于D个维度的M*N*D个神经元数据映射至K个维度后分配至K行运算单元中,利用运算阵列中的所有行对神经网络模型进行运算,实现运算阵列的满负荷运算,同时兼容任意深度的神经网络模型与任意行数的神经网络模型,从而提高运算阵列的利用率。
另外,本方案还提高了运算阵列的运算效率,比如,相关技术中在8*8的运算阵列中完成对3*3*3的神经网络模型的运算需要9个时钟,如图1所示;而本方案中在8*8的运算阵列中完成对3*3*3的神经网络模型的运算需要4个时钟,比相关技术的运算时间减少了5个时钟,使运算阵列的运算效率更高。
需要说明的是,参考图14,以终端将K个神经元数据按照来自不同神经网络层的神经元数据依层号由小到大轮询出现的顺序进行排列为第一排序优先级为例,说明本技术方案的程序的实现过程,步骤如下所示:
步骤21:获取待运算的神经网络模型,神经网络模型包括D个神经网络层,每个神经网络层对应M行*N列个神经元数据。
请参考步骤201,在此不再加以赘述。
步骤22:从D个神经网络层的M*N*D个神经元数据中,运算出运算阵列在运算时钟i所需的K个神经元数据在存储阵列中的存储地址。
终端采用划窗地址生成算法运算出运算阵列在运算时钟i所需的K个神经元数据在存储阵列中的存储地址,
需要说明的是,终端在根据划窗地址生成算法获得上述每个神经元数据的存储地址之后,通过输入数据重排序算法从存储阵列中读取待运算的神经元数据,并将上述神经元数据送至运算阵列的K行运算单元中,如下步骤23至步骤29所示。
步骤23:根据运算阵列的行数K和神经网络层的层数D,确定每次缓存过程在每个神经网络层中需缓存的数据个数Dim_read_num。
首先终端记录从每个神经网络层地区的神经元数据的数据量,第i个神经网络层读取的神经元数据的数据量表示为Dim_data_num[i],
Total_left_data=Dim_data_num[0]+Dim_data_num[1]+Dim_data_num[2]+...+Dim_data_num[D-1];//从D个神经网络层中读取的神经元数据的数据量;
其次,终端运算从D个神经网络层的每个神经网络层中需要读取的神经元数据的数据量,当行数K除以层数D的余数为0时,将行数K和层数D的商,确定为每次缓存过程在每个神经网络层中需缓存的数据个数Dim_read_num;当行数K除以层数D的余数不为0时,将行数K和层数D的商加一,确定为每次缓存过程在每个神经网络层中需缓存的数据个数Dim_read_num,
If(K%D==0)//如果K除以D取余等于0;
Dim_read_num=K/D;//从D个神经网络层的每个神经网络层中需要读取的神经元数据的数据量是K除以D的商;
else
Dim_read_num=K/D+1;//否则,是K除以D的商加上1。
步骤24:确定上一个时钟运算剩余的已缓存的神经元数据的个数是否小于行数K。
当终端确定上一个时钟运算剩余的已缓存的神经元数据的个数小于行数K时,执行步骤25。
步骤25:根据至少一个运算时钟对应的K个存储地址,从存储阵列中存储的每个神经网络层中读取尚未运算的Dim_read_num个神经元数据,缓存至深度平面寄存器组Dim_data中。
其中,至少一个运算时钟包括运算时钟i,或,运算时钟i以及运算时钟i的相邻时钟;上一时钟运算剩余的已缓存的神经元数据和本次缓存的D*Dim_read_num个神经元数据中包括运算时钟i所需的K个神经元数据。
示意性的,步骤24至步骤25对应的程序语言如下:
If(Total_store_data<K)//如果深度平面寄存器中神经元数据的数据量小于运算阵列的行数K;
其中,每一个神经网络层对应一个深度平面寄存器。
步骤26:对于深度平面寄存器组Dim_Data中每个神经网络层的缓存数组中缓存的神经元数据,按照缓存时间由小到大排列的顺序更新缓存索引。
深度平面寄存器组Dim_Data包括每个神经网络层对应的缓存数组,缓存数组中缓存的每个神经元数据对应有按照缓存时间由小到大排列的缓存索引,比如,神经元数据1-3依次被读取至同一缓存数组,则按照缓存时间由小到大排序,神经元数据1的索引位置为0,神经元数据2的索引位置为1,神经元数据3的索引位置为2。
当一轮运算之后,神经元数据3未运算,更新神经元数据3在缓存数组中的索引位置为0,继续下一轮的运算。
步骤27:对于K行运算单元中的第x行运算单元,根据行号x确定目标神经元数据在当前神经网络层对应的缓存数组中的缓存索引。
其中,目标神经元数据是第x行运算单元在运算时钟i需运算的神经元数据,x为不大于K的整数。
可选的,终端将行号x和层数D相除后的余数,确定为目标神经元数据在当前神经网络层对应的缓存数组中的缓存索引。
步骤28:根据缓存索引将目标神经元数据从当前神经网络层对应的缓存数组中移出至第x行运算单元。
在运算时钟i,终端根据缓存索引将K个目标神经元数据从缓存数组中移除至K行运算单元,上一轮运算中,记录了最后移出的神经元数据的所在神经网络层,终端根据从小到大的顺序轮询神经网络层,当最后移出的神经元数据的所在神经网络层为j层,则从j+1层的神经网络层对应的缓存数组中移出神经元数据;当最后移出的神经元数据的所在神经网络层为最后一层,则从第1层的神经网络层对应的缓存数组中移出神经元数据。
步骤29:按照轮询顺序将下一个神经网络层更新为当前神经网络层,且更新已缓存的神经元数据的个数。
终端按照轮询顺序将下一个神经网络层更新为下一轮运算中第一行运算单元需要运算的神经元数据的所处的神经网络层。
步骤26至步骤29的相应程序如下:
综上所述,本实施例提供的具有运算阵列的芯片运算方法,通过获取待运算的神经网络模型,该神经网络模型包括D个神经网络层,每个神经网络层包括M*N个神经元数据;根据划窗地址生成算法生成每个神经元数据在存储阵列中的存储地址;再通过输入数据重排序算法读取运算时钟i运算阵列需要运算的K个神经元数据,并对上述K个神经元数据进行排序;最终将排序后的K个神经元数据输入至K行运算单元中进行运算。该方法通过将D个神经网络层属于D个维度的M*N*D个神经元数据映射至K个维度,之后分配至K行运算单元中,利用运算阵列中的所有行对神经网络模型进行运算,实现运算阵列的满负荷运算,同时兼容任意深度的神经网络模型与任意行数的神经网络模型,从而提高运算阵列的利用率。
另外,本方案还提高了运算阵列的运算效率,比如,相关技术中在8*8的运算阵列中完成对3*3*3的神经网络模型的运算需要9个时钟,如图1所示;而本方案中在8*8的运算阵列中完成对3*3*3的神经网络模型的运算需要4个时钟,比相关技术的运算时间减少了5个时钟,使运算阵列的运算效率更高。
请参考图15,将步骤204替换至步骤304,对第二种排序方式进行说明,步骤如下:
步骤304,将K个神经元数据,按照来自同一神经网络层的神经元数据的行列位置顺序进行排序。
在一些实施例中,终端将K个神经元数据,按照来自同一神经网络层的神经元数据先沿行方向从左到右、再沿列方向从上到下的顺序进行排序。
在一些实施例中,终端将K个神经元数据,按照来自同一神经网络层的神经元数据先沿行方向从左到右、再沿列方向从下到上的顺序进行排序。
在一些实施例中,终端将K个神经元数据,按照来自同一神经网络层的神经元数据先沿行方向从右到左、再沿列方向从上到下的顺序进行排序。
在一些实施例中,终端将K个神经元数据,按照来自同一神经网络层的神经元数据先沿行方向从右到左、再沿列方向从下到上的顺序进行排序。
当K个神经元数据中包括第i层神经网络层的神经元数据和第i+1层神经网络层的神经元数据时,将第i+1层神经网络层的神经元数据排序在第i层神经网络层的神经元数据之后;或者,当K个神经元数据中包括第i层神经网络层的神经元数据和第i+1层神经网络层的神经元数据时,将第i+1层神经网络层的神经元数据排序在第i层神经网络层的神经元数据之前。
示意性的,以终端将K个神经元数据按照来自同一神经网络层的神经元数据先从左到右,再从上到下的顺序进行排列为例,参考图16,一个3*3*3的神经网络模型包括神经网络层0-1,将3*3*3的神经网络模型映射到8行的运算阵列中;首先,将神经网络层0中神经元数据1-9暂存至深度平面寄存器Dim_data_0中,将神经网络层1中神经元数据10-18暂存至深度平面寄存器Dim_data_1中,将神经网络层2中神经元数据19-27暂存至深度平面寄存器Dim_data_2中;读取时钟1需要的8个神经元数据,从深度平面寄存器Dim_data_0中读取按照从左到右、再从上到下的顺序排列的神经网络层0中神经元数据1-8;
上述一轮神经元数据输出运算之后,读取时钟2需要的8个神经元数据,从深度平面寄存器Dim_data_0中读取神经网络层0中神经元数据9,跳转至深度平面寄存器Dim_data_1中继续读取按照从左到右、再从上到下的顺序排列的神经网络层1中神经元数据10-16,将神经网络层1中读取的神经元数据排列在神经网络层0中读取的神经元数据之后;
上述二轮神经元数据输出运算之后,读取时钟3需要的8个神经元数据,从深度平面寄存器Dim_data_1中读取按照从左到右、再从上到下的顺序排列的神经网络层1中神经元数据17、18,跳转至深度平面寄存器Dim_data_2中继续读取按照从左到右、再从上到下的顺序排列的神经网络层2中神经元数据19-24,将神经网络层2中读取的神经元数据排列在神经网络层1中读取的神经元数据之后;
上述三轮神经元数据输出运算之后,读取时钟4需要的8个神经元数据,此时,深度平面寄存器Dim_data_2中剩余3个神经元数据,不足8个,终端获取该神经网络模型的另一个数据立方体的第一层神经网络层的神经元数据1-9,暂存至深度平面寄存器Dim_data_3中;从深度平面寄存器Dim_data_2中读取按照从左到右、再从上到下的顺序排列的神经网络层2中神经元数据25-27,跳转至深度平面寄存器Dim_data_3中继续读取按照从左到右、再从上到下的顺序排列的神经网络层3中神经元数据1-5,将神经网络层3中读取的神经元数据排列在神经网络层2中读取的神经元数据之后;经过四轮运算,完成对一个神经网络模型的运算。
综上所述,本实施例提供的具有运算阵列的芯片运算方法,通过获取待运算的神经网络模型,该神经网络模型包括D个神经网络层,每个神经网络层包括M*N个神经元数据;从D个神经网络层的M*N*D个神经元数据中,确定出每个运算时钟对应的待运算的K个神经元数据,输入至运算阵列的K行运算单元;通过运算阵列在每个运算时钟对输入的K个神经元数据进行运算。该方法通过将D个神经网络层属于D个维度的M*N*D个神经元数据映射至K个维度,之后分配至K行运算单元中,利用运算阵列中的所有行对神经网络模型进行运算,实现运算阵列的满负荷运算,同时兼容任意深度的神经网络模型与任意行数的神经网络模型,从而提高运算阵列的利用率。
另外,本方案还提高了运算阵列的运算效率,比如,相关技术中在8*8的运算阵列中完成对3*3*3的神经网络模型的运算需要9个时钟,如图1所示;而本方案中在8*8的运算阵列中完成对3*3*3的神经网络模型的运算需要4个时钟,比相关技术的运算时间减少了5个时钟,使运算阵列的运算效率更高。
请参考图17,示出了本申请一个示例性实施例提供的具有运算阵列的芯片运算装置的框图,该装置连接上述运算阵列,运算阵列包括K行运算单元,该装置包括:
获取模块320,用于获取待运算的神经网络模型,神经网络模型包括D个神经网络层,每个神经网络层对应M行*N列个神经元数据;
控制模块340,用于从D个神经网络层的M*N*D个神经元数据中,确定出每个运算时钟对应的待运算的K个神经元数据,输入至运算阵列的K行运算单元;
运算模块360,用于通过运算阵列在每个运算时钟对输入的K个神经元数据进行运算;其中,M、N、D、K均为正整数。
在一些实施例中,控制模块340,包括:
运算子模块341,用于从D个神经网络层的M*N*D个神经元数据中,运算出运算阵列在运算时钟i所需运算的K个神经元数据在存储阵列中的存储地址;
读取子模块342,用于根据K个存储地址从存储阵列中读取K个神经元数据;
排序子模块343,用于将K个神经元数据按照排序规则进行排序;
输入子模块344,用于将排序后的K个神经元数据在运算时钟i输入至运算阵列的K行运算单元。
在一些实施例中,排序规则,包括:
来自不同神经网络层的神经元数据依层号由小到大轮询出现的顺序进行排序为第一排序优先级,或,来自不同神经网络层的神经元数据依层号由大到小轮询出现的顺序进行排序为第一排序优先级;
来自相同神经网络层的神经元数据依行列位置顺序进行排序为第二排序优先级。
在一些实施例中,排序规则,包括:
来自同一神经网络层的神经元数据依行列位置顺序进行排序为第一排序优先级;
来自不同神经网络层的神经元数据依层号由大到小出现的顺序进行排序为第二排序优先级,或,来自不同神经网络层的神经元数据依层号由小到大出现的顺序进行排序为第二排序优先级。
在一些实施例中,行列位置顺序包括:
沿行方向从左到右、列方向从上到下的顺序;
或,沿行方向从左到右、列方向从下到上的顺序;
或,沿行方向从右到左、列方向从上到下的顺序;
或,沿行方向从右到左、列方向从下到上的顺序。
在一些实施例中,读取子模块342,用于根据运算阵列的行数K和神经网络层的层数D,确定每次缓存过程在每个神经网络层中需缓存的数据个数Dim_read_num;确定上一时钟运算剩余的已缓存的神经元数据的个数是否小于行数K;当已缓存的神经元数据的个数小于行数K时,根据至少一个运算时钟对应的K个存储地址,从存储阵列中存储的每个神经网络层中读取尚未运算的Dim_read_num个神经元数据,缓存至深度平面寄存器组Dim_data中;其中,上一时钟运算剩余的已缓存的神经元数据和本次缓存的D*Dim_read_num个神经元数据中包括运算时钟i所需的K个神经元数据。
在一些实施例中,读取子模块342,还用于当行数K除以层数D的余数为0时,将行数K和层数D的商,确定为每次缓存过程在每个神经网络层中需缓存的数据个数Dim_read_num;当行数K除以层数D的余数不为0时,将行数K和层数D的商加一,确定为每次缓存过程在每个神经网络层中需缓存的数据个数Dim_read_num。
在一些实施例中,深度平面寄存器组包括每个神经网络层对应的缓存数组,缓存数组中缓存的每个神经元数据对应有按照缓存时间由小到大排列的缓存索引;
排序子模块343,用于对于K行运算单元中的第x行运算单元,根据行号x确定目标神经元数据在当前神经网络层对应的缓存数组中的缓存索引,目标神经元数据是第x行运算单元在运算时钟i需运算的神经元数据,x为不大于K的整数;根据缓存索引将目标神经元数据从当前神经网络层对应的缓存数组中移出至第x行运算单元;按照轮询顺序将下一个神经网络层更新为当前神经网络层,且更新已缓存的神经元数据的个数。
在一些实施例中,排序子模块343,还用于将行号x和层数D相除后的余数,确定为目标神经元数据在当前神经网络层对应的缓存数组中的缓存索引。
在一些实施例中,控制模块340还包括:
更新子模块345,用于对于深度平面寄存器组Dim_data中每个神经网络层的缓存数组中缓存的神经元数据,按照缓存时间由小到大排列的顺序更新缓存索引。
综上所述,本实施例提供的具有运算阵列的芯片运算装置,通过获取待运算的神经网络模型,该神经网络模型包括D个神经网络层,每个神经网络层包括M*N个神经元数据;从D个神经网络层的M*N*D个神经元数据中,确定出每个运算时钟对应的待运算的K个神经元数据,输入至运算阵列的K行运算单元。该装置通过将D个神经网络层属于D个维度的M*N*D个神经元数据映射至K个维度,之后分配至K行运算单元中,利用运算阵列中的所有行对神经网络模型进行运算,实现运算阵列的满负荷运算,同时兼容任意深度的神经网络模型与任意行数的神经网络模型,从而提高运算阵列的利用率。。
另外,本技术方案还提高了运算阵列的运算效率,比如,相关技术中在8*8的运算阵列中完成对3*3*3的神经网络模型的运算需要9个时钟,如图1所示;而本方案中在8*8的运算阵列中完成对3*3*3的神经网络模型的运算需要4个时钟,比相关技术的运算时间减少了5个时钟,使运算阵列的运算效率更高。
请参考图18,示出了本申请一个示例性实施例提供的终端的结构框图,上述图2至图16所示的方法通过软件实现时,应用于该终端中,该终端安装有具有运算阵列的芯片,该芯片上包括存储阵列420、处理器440和运算阵列460。
存储阵列420,用于存储神经网络模型,神经网络模型包括D个神经网络层,每个神经网络层对应M行*N列个神经元数据;
处理器440,用于获取待运算的上述神经网络模型;从D个神经网络层的M*N*D个神经元数据中,确定出每个运算时钟对应的待运算的K个神经元数据,输入至运算阵列460的K行运算单元;
运算阵列460,用于通过运算阵列460在每个运算时钟对输入的K个神经元数据进行运算;其中,M、N、D、K均为正整数。
在一些实施例中,处理器440,用于从D个神经网络层的M*N*D个神经元数据中,运算出运算阵列460在运算时钟i所需运算的K个神经元数据在存储阵列420中的存储地址;根据K个存储地址从存储阵列420中读取K个神经元数据;将K个神经元数据按照排序规则进行排序;将排序后的K个神经元数据在运算时钟i输入至运算阵列460的K行运算单元。
在一些实施例中,排序规则,包括:
来自不同神经网络层的神经元数据依层号由小到大轮询出现的顺序进行排序为第一排序优先级,或,来自不同神经网络层的神经元数据依层号由大到小轮询出现的顺序进行排序为第一排序优先级;
来自相同神经网络层的神经元数据依行列位置顺序进行排序为第二排序优先级。
在一些实施例中,排序规则,包括:
来自同一神经网络层的神经元数据依行列位置顺序进行排序为第一排序优先级;
来自不同神经网络层的神经元数据依层号由大到小出现的顺序进行排序为第二排序优先级,或,来自不同神经网络层的神经元数据依层号由小到大出现的顺序进行排序为第二排序优先级。
在一些实施例中,行列位置顺序包括:
沿行方向从左到右、列方向从上到下的顺序;
或,沿行方向从左到右、列方向从下到上的顺序;
或,沿行方向从右到左、列方向从上到下的顺序;
或,沿行方向从右到左、列方向从下到上的顺序。
在一些实施例中,处理器440,用于根据运算阵列460的行数K和神经网络层的层数D,确定每次缓存过程在每个神经网络层中需缓存的数据个数Dim_read_num;确定上一时钟运算剩余的已缓存的神经元数据的个数是否小于行数K;当已缓存的神经元数据的个数小于行数K时,根据至少一个运算时钟对应的K个存储地址,从存储阵列420中存储的每个神经网络层中读取尚未运算的Dim_read_num个神经元数据,缓存至深度平面寄存器组Dim_data中;其中,上一时钟运算剩余的已缓存的神经元数据和本次缓存的D*Dim_read_num个神经元数据中包括运算时钟i所需的K个神经元数据。
在一些实施例中,处理器440,用于当行数K除以层数D的余数为0时,将行数K和层数D的商,确定为每次缓存过程在每个神经网络层中需缓存的数据个数Dim_read_num;当行数K除以层数D的余数不为0时,将行数K和层数D的商加一,确定为每次缓存过程在每个神经网络层中需缓存的数据个数Dim_read_num。
在一些实施例中,深度平面寄存器组包括每个神经网络层对应的缓存数组,缓存数组中缓存的每个神经元数据对应有按照缓存时间由小到大排列的缓存索引;
处理器440,用于对于K行运算单元中的第x行运算单元,根据行号x确定目标神经元数据在当前神经网络层对应的缓存数组中的缓存索引,目标神经元数据是第x行运算单元在运算时钟i需运算的神经元数据,x为不大于K的整数;根据缓存索引将目标神经元数据从当前神经网络层对应的缓存数组中移出至第x行运算单元;按照轮询顺序将下一个神经网络层更新为当前神经网络层,且更新已缓存的神经元数据的个数。
在一些实施例中,处理器440,用于将行号x和层数D相除后的余数,确定为目标神经元数据在当前神经网络层对应的缓存数组中的缓存索引。
在一些实施例中,处理器440,还用于对于深度平面寄存器组Dim_data中每个神经网络层的缓存数组中缓存的神经元数据,按照缓存时间由小到大排列的顺序更新缓存索引。
综上所述,本实施例提供的终端,通过获取待运算的神经网络模型,该神经网络模型包括D个神经网络层,每个神经网络层包括M*N个神经元数据;从D个神经网络层的M*N*D个神经元数据中,确定出每个运算时钟对应的待运算的K个神经元数据,输入至运算阵列的K行运算单元;通过运算阵列在每个运算时钟对输入的K个神经元数据进行运算。该终端通过将D个神经网络层属于D个维度的M*N*D个神经元数据映射至K个维度,之后分配至K行运算单元中,利用运算阵列中的所有行对神经网络模型进行运算,实现运算阵列的满负荷运算,同时兼容任意深度的神经网络模型与任意行数的神经网络模型,从而提高运算阵列的利用率。。
另外,本技术方案还提高了运算阵列的运算效率,比如,相关技术中在8*8的运算阵列中完成对3*3*3的神经网络模型的运算需要9个时钟,如图1所示;而本方案中在8*8的运算阵列中完成对3*3*3的神经网络模型的运算需要4个时钟,比相关技术的运算时间减少了5个时钟,使运算阵列的运算效率更高。
请参考图19,示出了本申请一个示例性实施例提供的具有运算阵列的芯片的结构框图,上述图2至图16所示的方法通过硬件实现时,应用于该芯片中,该芯片包括存储阵列520、第一可编程逻辑电路540、第二可编程逻辑电路560和运算阵列580。
存储阵列520,用于存储神经网络模型,神经网络模型包括D个神经网络层,每个神经网络层对应M行*N列个神经元数据;
第一可编程逻辑电路540,用于获取待运算的上述神经网络模型;
第二可编程逻辑电路560,用于从D个神经网络层的M*N*D个神经元数据中,确定出每个运算时钟对应的待运算的K个神经元数据,输入至运算阵列580的K行运算单元;
运算阵列580,用于通过运算阵列580在每个运算时钟对输入的K个神经元数据进行运算。
在一些实施例中,第一可编程逻辑电路540,用于从D个神经网络层的M*N*D个神经元数据中,运算出运算阵列580在运算时钟i所需运算的K个神经元数据在存储阵列520中的存储地址;
第二可编程逻辑电路560,用于根据K个存储地址从存储阵列520中读取K个神经元数据;将K个神经元数据按照排序规则进行排序;将排序后的K个神经元数据在运算时钟i输入至运算阵列580的K行运算单元。
在一些实施例中,排序规则,包括:
来自不同神经网络层的神经元数据依层号由小到大轮询出现的顺序进行排序为第一排序优先级,或,来自不同神经网络层的神经元数据依层号由大到小轮询出现的顺序进行排序为第一排序优先级;
来自相同神经网络层的神经元数据依行列位置顺序进行排序为第二排序优先级。
在一些实施例中,排序规则,包括:
来自同一神经网络层的神经元数据依行列位置顺序进行排序为第一排序优先级;
来自不同神经网络层的神经元数据依层号由大到小出现的顺序进行排序为第二排序优先级,或,来自不同神经网络层的神经元数据依层号由小到大出现的顺序进行排序为第二排序优先级。
在一些实施例中,行列位置顺序包括:
沿行方向从左到右、列方向从上到下的顺序;
或,沿行方向从左到右、列方向从下到上的顺序;
或,沿行方向从右到左、列方向从上到下的顺序;
或,沿行方向从右到左、列方向从下到上的顺序。
在一些实施例中,第二可编程逻辑电路560,用于根据运算阵列580的行数K和神经网络层的层数D,确定每次缓存过程在每个神经网络层中需缓存的数据个数Dim_read_num;确定上一时钟运算剩余的已缓存的神经元数据的个数是否小于行数K;当已缓存的神经元数据的个数小于行数K时,根据至少一个运算时钟对应的K个存储地址,从存储阵列520中存储的每个神经网络层中读取尚未运算的Dim_read_num个神经元数据,缓存至深度平面寄存器组Dim_data中;其中,上一时钟运算剩余的已缓存的神经元数据和本次缓存的D*Dim_read_num个神经元数据中包括运算时钟i所需的K个神经元数据。
在一些实施例中,第二可编程逻辑电路560,用于当行数K除以层数D的余数为0时,将行数K和层数D的商,确定为每次缓存过程在每个神经网络层中需缓存的数据个数Dim_read_num;当行数K除以层数D的余数不为0时,将行数K和层数D的商加一,确定为每次缓存过程在每个神经网络层中需缓存的数据个数Dim_read_num。
在一些实施例中,深度平面寄存器组包括每个神经网络层对应的缓存数组,缓存数组中缓存的每个神经元数据对应有按照缓存时间由小到大排列的缓存索引;
第二可编程逻辑电路560,用于对于K行运算单元中的第x行运算单元,根据行号x确定目标神经元数据在当前神经网络层对应的缓存数组中的缓存索引,目标神经元数据是第x行运算单元在运算时钟i需运算的神经元数据,x为不大于K的整数;根据缓存索引将目标神经元数据从当前神经网络层对应的缓存数组中移出至第x行运算单元;按照轮询顺序将下一个神经网络层更新为当前神经网络层,且更新已缓存的神经元数据的个数。
在一些实施例中,第二可编程逻辑电路560,用于将行号x和层数D相除后的余数,确定为目标神经元数据在当前神经网络层对应的缓存数组中的缓存索引。
在一些实施例中,其特征在于,第二可编程逻辑电路560,还用于对于深度平面寄存器组Dim_data中每个神经网络层的缓存数组中缓存的神经元数据,按照缓存时间由小到大排列的顺序更新缓存索引。
综上所述,本实施例提供的具有运算阵列的芯片,该芯片包括存储阵列、第一可编程逻辑电路、第二可编程逻辑电路和运算阵列;存储阵列上存储有神经网络模型的D个神经网络层,每个神经网络层包括M*N个神经元数据;第一可编程逻辑电路用于获取待运算的神经网络模型;第二可编程逻辑电路用于从D个神经网络层的M*N*D个神经元数据中,确定出每个运算时钟对应的待运算的K个神经元数据,输入至运算阵列的K行运算单元;运算阵列对输入的K个神经元数据进行运算。该芯片通过第二可编程逻辑电路将D个神经网络层属于D个维度的M*N*D个神经元数据映射至K个维度,之后分配至运算单元的K行运算单元中,利用运算阵列中的所有行对神经网络模型进行运算,实现运算阵列的满负荷运算,同时兼容任意深度的神经网络模型与任意行数的神经网络模型,从而提高运算阵列的利用率。
另外,本技术方案还提高了运算阵列的运算效率,比如,相关技术中在8*8的运算阵列中完成对3*3*3的神经网络模型的运算需要9个时钟,如图1所示;而本方案中在8*8的运算阵列中完成对3*3*3的神经网络模型的运算需要4个时钟,比相关技术的运算时间减少了5个时钟,使运算阵列的运算效率更高。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的较佳实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (16)
1.一种具有运算阵列的芯片运算方法,其特征在于,所述运算阵列包括K行运算单元,所述方法包括:
获取待运算的神经网络模型,所述神经网络模型包括D个神经网络层,每个所述神经网络层对应M行*N列个神经元数据;
从所述D个神经网络层的M*N*D个神经元数据中,运算出所述运算阵列在运算时钟i所需运算的K个神经元数据在存储阵列中的存储地址;
根据所述运算阵列的行数K和所述神经网络层的层数D,确定每次缓存过程在每个所述神经网络层中需缓存的数据个数Dim_read_num;
确定上一时钟运算剩余的已缓存的神经元数据的个数是否小于所述行数K;
当所述已缓存的神经元数据的个数小于所述行数K时,根据至少一个运算时钟对应的所述K个存储地址,从所述存储阵列中存储的每个所述神经网络层中读取尚未运算的Dim_read_num个神经元数据,缓存至深度平面寄存器组Dim_data中;其中,所述上一时钟运算剩余的已缓存的神经元数据和本次缓存的D*Dim_read_num个神经元数据中包括所述运算时钟i所需运算的K个神经元数据;所述深度平面寄存器组包括每个所述神经网络层对应的缓存数组,所述缓存数组中缓存的每个神经元数据对应有按照缓存时间由小到大排列的缓存索引;
对于K行运算单元中的第x行运算单元,根据行号x确定目标神经元数据在当前神经网络层对应的缓存数组中的缓存索引,所述目标神经元数据是所述第x行运算单元在所述运算时钟i需运算的神经元数据,x为不大于K的整数;
根据所述缓存索引将所述目标神经元数据从所述当前神经网络层对应的缓存数组中移出至所述第x行运算单元;
按照轮询顺序将下一个神经网络层更新为所述当前神经网络层,且更新所述已缓存的神经元数据的个数,直至所述K个神经元数据排序结束,得到排序后的所述K个神经元数据;
将排序后的所述K个神经元数据在所述运算时钟i输入至所述运算阵列的K行运算单元;
通过所述运算阵列在所述每个运算时钟对输入的排序后的所述K个神经元数据进行运算;
其中,M、N、D、K均为正整数。
2.根据权利要求1所述的方法,其特征在于,所述根据所述运算阵列的行数K和所述神经网络层的层数D,确定每次缓存过程在每个所述神经网络层中需缓存的数据个数Dim_read_num,包括:
当所述行数K除以所述层数D的余数为0时,将所述行数K和所述层数D的商,确定为每次缓存过程在每个所述神经网络层中需缓存的数据个数Dim_read_num;
当所述行数K除以所述层数D的余数不为0时,将所述行数K和所述层数D的商加一,确定为每次缓存过程在每个所述神经网络层中需缓存的数据个数Dim_read_num。
3.根据权利要求1所述的方法,其特征在于,所述根据行号x确定目标神经元数据在当前神经网络层对应的缓存数组中的缓存索引,包括:
将所述行号x和所述层数D相除后的余数,确定为所述目标神经元数据在当前神经网络层对应的缓存数组中的缓存索引。
4.根据权利要求3所述的方法,其特征在于,所述从所述存储阵列中存储的每个所述神经网络层中读取尚未运算的Dim_read_num个神经元数据,缓存至深度平面寄存器组Dim_data中之后,还包括:
对于所述深度平面寄存器组Dim_data中每个所述神经网络层的缓存数组中缓存的神经元数据,按照缓存时间由小到大排列的顺序更新所述缓存索引。
5.一种具有运算阵列的芯片运算装置,其特征在于,所述装置连接所述运算阵列,所述运算阵列包括K行运算单元,所述装置包括:
获取模块,用于获取待运算的神经网络模型,所述神经网络模型包括D个神经网络层,每个所述神经网络层对应M行*N列个神经元数据;
运算子模块,用于从所述D个神经网络层的M*N*D个神经元数据中,运算出所述运算阵列在运算时钟i所需运算的K个神经元数据在存储阵列中的存储地址;
读取子模块,用于根据所述运算阵列的行数K和所述神经网络层的层数D,确定每次缓存过程在每个所述神经网络层中需缓存的数据个数Dim_read_num;确定上一时钟运算剩余的已缓存的神经元数据的个数是否小于所述行数K;当所述已缓存的神经元数据的个数小于所述行数K时,根据至少一个运算时钟对应的所述K个存储地址,从所述存储阵列中存储的每个所述神经网络层中读取尚未运算的Dim_read_num个神经元数据,缓存至深度平面寄存器组Dim_data中;其中,所述上一时钟运算剩余的已缓存的神经元数据和本次缓存的D*Dim_read_num个神经元数据中包括所述运算时钟i所需的K个神经元数据;所述深度平面寄存器组包括每个所述神经网络层对应的缓存数组,所述缓存数组中缓存的每个神经元数据对应有按照缓存时间由小到大排列的缓存索引;
排序子模块,用于对于K行运算单元中的第x行运算单元,根据行号x确定目标神经元数据在当前神经网络层对应的缓存数组中的缓存索引,所述目标神经元数据是所述第x行运算单元在所述运算时钟i需运算的神经元数据,x为不大于K的整数;根据所述缓存索引将所述目标神经元数据从所述当前神经网络层对应的缓存数组中移出至所述第x行运算单元;按照轮询顺序将下一个神经网络层更新为所述当前神经网络层,且更新所述已缓存的神经元数据的个数;直至所述K个神经元数据排序结束,得到排序后的所述K个神经元数据;
输入子模块,用于将排序后的所述K个神经元数据在所述运算时钟i输入至所述运算阵列的K行运算单元;
运算模块,用于通过所述运算阵列在所述每个运算时钟对输入的所述K个神经元数据进行运算;其中,M、N、D、K均为正整数。
6.根据权利要求5所述的装置,其特征在于,
所述读取子模块,还用于当所述行数K除以所述层数D的余数为0时,将所述行数K和所述层数D的商,确定为每次缓存过程在每个所述神经网络层中需缓存的数据个数Dim_read_num;当所述行数K除以所述层数D的余数不为0时,将所述行数K和所述层数D的商加一,确定为每次缓存过程在每个所述神经网络层中需缓存的数据个数Dim_read_num。
7.根据权利要求5所述的装置,其特征在于,
所述排序子模块,还用于将所述行号x和所述层数D相除后的余数,确定为所述目标神经元数据在当前神经网络层对应的缓存数组中的缓存索引。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:
更新子模块,用于对于所述深度平面寄存器组Dim_data中每个所述神经网络层的缓存数组中缓存的神经元数据,按照缓存时间由小到大排列的顺序更新所述缓存索引。
9.一种终端,其特征在于,所述终端安装有具有运算阵列的芯片,所述芯片上包括:存储阵列、处理器和所述运算阵列,所述处理器与所述存储阵列电性相连,所述处理器与所述运算阵列电性相连,所述运算阵列包括K行*L列运算单元;
所述存储阵列,用于存储神经网络模型,所述神经网络模型包括D个神经网络层,每个所述神经网络层对应M行*N列个神经元数据;
所述处理器,用于获取待运算的所述神经网络模型;从所述D个神经网络层的M*N*D个神经元数据中,运算出所述运算阵列在运算时钟i所需运算的K个神经元数据在存储阵列中的存储地址;根据所述运算阵列的行数K和所述神经网络层的层数D,确定每次缓存过程在每个所述神经网络层中需缓存的数据个数Dim_read_num;确定上一时钟运算剩余的已缓存的神经元数据的个数是否小于所述行数K;当所述已缓存的神经元数据的个数小于所述行数K时,根据至少一个运算时钟对应的所述K个存储地址,从所述存储阵列中存储的每个所述神经网络层中读取尚未运算的Dim_read_num个神经元数据,缓存至深度平面寄存器组Dim_data中;其中,所述上一时钟运算剩余的已缓存的神经元数据和本次缓存的D*Dim_read_num个神经元数据中包括所述运算时钟i所需运算的K个神经元数据;所述深度平面寄存器组包括每个所述神经网络层对应的缓存数组,所述缓存数组中缓存的每个神经元数据对应有按照缓存时间由小到大排列的缓存索引;对于K行运算单元中的第x行运算单元,根据行号x确定目标神经元数据在当前神经网络层对应的缓存数组中的缓存索引,所述目标神经元数据是所述第x行运算单元在所述运算时钟i需运算的神经元数据,x为不大于K的整数;根据所述缓存索引将所述目标神经元数据从所述当前神经网络层对应的缓存数组中移出至所述第x行运算单元;按照轮询顺序将下一个神经网络层更新为所述当前神经网络层,且更新所述已缓存的神经元数据的个数,直至所述K个神经元数据排序结束,得到排序后的所述K个神经元数据;将排序后的所述K个神经元数据在所述运算时钟i输入至所述运算阵列的K行运算单元;
所述运算阵列,用于通过所述运算阵列在所述每个运算时钟对输入的排序后的所述K个神经元数据进行运算;其中,M、N、D、K均为正整数。
10.根据权利要求9所述的终端,其特征在于,
所述处理器,用于当所述行数K除以所述层数D的余数为0时,将所述行数K和所述层数D的商,确定为每次缓存过程在每个所述神经网络层中需缓存的数据个数Dim_read_num;当所述行数K除以所述层数D的余数不为0时,将所述行数K和所述层数D的商加一,确定为每次缓存过程在每个所述神经网络层中需缓存的数据个数Dim_read_num。
11.根据权利要求9所述的终端,其特征在于,
所述处理器,用于将所述行号x和所述层数D相除后的余数,确定为所述目标神经元数据在当前神经网络层对应的缓存数组中的缓存索引。
12.根据权利要求11所述的终端,其特征在于,
所述处理器,还用于对于所述深度平面寄存器组Dim_data中每个所述神经网络层的缓存数组中缓存的神经元数据,按照缓存时间由小到大排列的顺序更新所述缓存索引。
13.一种具有运算阵列的芯片,应用于神经网络模型的运算,其特征在于,所述芯片包括:存储阵列、第一可编程逻辑电路、第二可编程逻辑电路和所述运算阵列,所述第一可编程逻辑电路与所述存储阵列、所述第二可编程逻辑电路电性相连,所述第二可编程逻辑电路与所述存储阵列、所述运算阵列电性相连,所述运算阵列包括K行*L列运算单元;
所述存储阵列,用于存储神经网络模型,所述神经网络模型包括D个神经网络层,每个所述神经网络层对应M行*N列个神经元数据;
所述第一可编程逻辑电路,用于获取待运算的所述神经网络模型;
所述第二可编程逻辑电路,用于从所述D个神经网络层的M*N*D个神经元数据中,运算出所述运算阵列在运算时钟i所需运算的K个神经元数据在存储阵列中的存储地址;根据所述运算阵列的行数K和所述神经网络层的层数D,确定每次缓存过程在每个所述神经网络层中需缓存的数据个数Dim_read_num;确定上一时钟运算剩余的已缓存的神经元数据的个数是否小于所述行数K;当所述已缓存的神经元数据的个数小于所述行数K时,根据至少一个运算时钟对应的所述K个存储地址,从所述存储阵列中存储的每个所述神经网络层中读取尚未运算的Dim_read_num个神经元数据,缓存至深度平面寄存器组Dim_data中;其中,所述上一时钟运算剩余的已缓存的神经元数据和本次缓存的D*Dim_read_num个神经元数据中包括所述运算时钟i所需运算的K个神经元数据;所述深度平面寄存器组包括每个所述神经网络层对应的缓存数组,所述缓存数组中缓存的每个神经元数据对应有按照缓存时间由小到大排列的缓存索引;对于K行运算单元中的第x行运算单元,根据行号x确定目标神经元数据在当前神经网络层对应的缓存数组中的缓存索引,所述目标神经元数据是所述第x行运算单元在所述运算时钟i需运算的神经元数据,x为不大于K的整数;根据所述缓存索引将所述目标神经元数据从所述当前神经网络层对应的缓存数组中移出至所述第x行运算单元;按照轮询顺序将下一个神经网络层更新为所述当前神经网络层,且更新所述已缓存的神经元数据的个数,直至所述K个神经元数据排序结束,得到排序后的所述K个神经元数据;将排序后的所述K个神经元数据在所述运算时钟i输入至所述运算阵列的K行运算单元;
所述运算阵列,用于通过所述运算阵列在所述每个运算时钟对输入的所述K个神经元数据进行运算。
14.根据权利要求13所述的芯片,其特征在于,
所述第二可编程逻辑电路,用于当所述行数K除以所述层数D的余数为0时,将所述行数K和所述层数D的商,确定为每次缓存过程在每个所述神经网络层中需缓存的数据个数Dim_read_num;当所述行数K除以所述层数D的余数不为0时,将所述行数K和所述层数D的商加一,确定为每次缓存过程在每个所述神经网络层中需缓存的数据个数Dim_read_num。
15.根据权利要求13所述的芯片,其特征在于,
所述第二可编程逻辑电路,用于将所述行号x和所述层数D相除后的余数,确定为所述目标神经元数据在当前神经网络层对应的缓存数组中的缓存索引。
16.根据权利要求15所述的芯片,其特征在于,
所述第二可编程逻辑电路,还用于对于所述深度平面寄存器组Dim_data中每个所述神经网络层的缓存数组中缓存的神经元数据,按照缓存时间由小到大排列的顺序更新所述缓存索引。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910101463.XA CN110163338B (zh) | 2019-01-31 | 2019-01-31 | 具有运算阵列的芯片运算方法、装置、终端及芯片 |
PCT/CN2020/074096 WO2020156508A1 (zh) | 2019-01-31 | 2020-01-31 | 基于具有运算阵列的芯片的运算方法、装置及芯片 |
US17/334,205 US20210287076A1 (en) | 2019-01-31 | 2021-05-28 | Neural network operation method and apparatus based on a chip having an operation array |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910101463.XA CN110163338B (zh) | 2019-01-31 | 2019-01-31 | 具有运算阵列的芯片运算方法、装置、终端及芯片 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110163338A CN110163338A (zh) | 2019-08-23 |
CN110163338B true CN110163338B (zh) | 2024-02-02 |
Family
ID=67644848
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910101463.XA Active CN110163338B (zh) | 2019-01-31 | 2019-01-31 | 具有运算阵列的芯片运算方法、装置、终端及芯片 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20210287076A1 (zh) |
CN (1) | CN110163338B (zh) |
WO (1) | WO2020156508A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110163338B (zh) * | 2019-01-31 | 2024-02-02 | 腾讯科技(深圳)有限公司 | 具有运算阵列的芯片运算方法、装置、终端及芯片 |
US11556450B2 (en) | 2019-10-11 | 2023-01-17 | International Business Machines Corporation | Hybrid data-model parallelism for efficient deep learning |
CN113168429A (zh) * | 2020-05-11 | 2021-07-23 | 深圳市大疆创新科技有限公司 | 卷积计算装置、方法和计算机存储介质 |
CN111507465B (zh) * | 2020-06-16 | 2020-10-23 | 电子科技大学 | 一种可配置的卷积神经网络处理器电路 |
CN113836481B (zh) * | 2020-06-24 | 2024-07-02 | 广州希姆半导体科技有限公司 | 矩阵计算电路、方法、电子设备及计算机可读存储介质 |
CN114090470B (zh) * | 2020-07-29 | 2023-02-17 | 深圳市中科元物芯科技有限公司 | 数据预加载装置及其预加载方法、存储介质和计算机设备 |
CN114168895A (zh) * | 2020-09-11 | 2022-03-11 | 北京希姆计算科技有限公司 | 矩阵计算电路、方法、电子设备及计算机可读存储介质 |
TWI838797B (zh) * | 2022-07-22 | 2024-04-11 | 臺灣發展軟體科技股份有限公司 | 記憶體裝置及用於記憶體內運算的資料重排方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9747546B2 (en) * | 2015-05-21 | 2017-08-29 | Google Inc. | Neural network processor |
CN107239823A (zh) * | 2016-08-12 | 2017-10-10 | 北京深鉴科技有限公司 | 一种用于实现稀疏神经网络的装置和方法 |
CN108647777A (zh) * | 2018-05-08 | 2018-10-12 | 济南浪潮高新科技投资发展有限公司 | 一种实现并行卷积计算的数据映射***及方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5822742A (en) * | 1989-05-17 | 1998-10-13 | The United States Of America As Represented By The Secretary Of Health & Human Services | Dynamically stable associative learning neural network system |
US11841920B1 (en) * | 2016-02-17 | 2023-12-12 | Ultrahaptics IP Two Limited | Machine learning based gesture recognition |
US10838910B2 (en) * | 2017-04-27 | 2020-11-17 | Falcon Computing | Systems and methods for systolic array design from a high-level program |
CN110163338B (zh) * | 2019-01-31 | 2024-02-02 | 腾讯科技(深圳)有限公司 | 具有运算阵列的芯片运算方法、装置、终端及芯片 |
-
2019
- 2019-01-31 CN CN201910101463.XA patent/CN110163338B/zh active Active
-
2020
- 2020-01-31 WO PCT/CN2020/074096 patent/WO2020156508A1/zh active Application Filing
-
2021
- 2021-05-28 US US17/334,205 patent/US20210287076A1/en active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9747546B2 (en) * | 2015-05-21 | 2017-08-29 | Google Inc. | Neural network processor |
CN107239823A (zh) * | 2016-08-12 | 2017-10-10 | 北京深鉴科技有限公司 | 一种用于实现稀疏神经网络的装置和方法 |
CN108647777A (zh) * | 2018-05-08 | 2018-10-12 | 济南浪潮高新科技投资发展有限公司 | 一种实现并行卷积计算的数据映射***及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110163338A (zh) | 2019-08-23 |
WO2020156508A1 (zh) | 2020-08-06 |
US20210287076A1 (en) | 2021-09-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110163338B (zh) | 具有运算阵列的芯片运算方法、装置、终端及芯片 | |
US11580352B2 (en) | System and method for compact and efficient sparse neural networks | |
CN107657581B (zh) | 一种卷积神经网络cnn硬件加速器及加速方法 | |
CN106875011B (zh) | 二值权重卷积神经网络加速器的硬件架构及其计算流程 | |
CN109034373B (zh) | 卷积神经网络的并行处理器及处理方法 | |
Yepez et al. | Stride 2 1-D, 2-D, and 3-D Winograd for convolutional neural networks | |
CN110390384A (zh) | 一种可配置的通用卷积神经网络加速器 | |
CN108629406B (zh) | 用于卷积神经网络的运算装置 | |
CN107239824A (zh) | 用于实现稀疏卷积神经网络加速器的装置和方法 | |
CN111738433B (zh) | 一种可重配置的卷积硬件加速器 | |
US11727256B2 (en) | Hardware architecture for processing data in neural network | |
CN113673701A (zh) | 神经网络模型的运行方法、可读介质和电子设备 | |
CN109934336A (zh) | 基于最优结构搜索的神经网络动态加速平台设计方法及神经网络动态加速平台 | |
CN111898733A (zh) | 一种深度可分离卷积神经网络加速器架构 | |
US10402196B2 (en) | Multi-dimensional sliding window operation for a vector processor, including dividing a filter into a plurality of patterns for selecting data elements from a plurality of input registers and performing calculations in parallel using groups of the data elements and coefficients | |
CN110674927A (zh) | 一种用于脉动阵列结构的数据重组方法 | |
CN110807170A (zh) | 多样本多通道卷积神经网络Same卷积向量化实现方法 | |
CN111768458A (zh) | 一种基于卷积神经网络的稀疏图像处理方法 | |
CN112559046A (zh) | 数据处理装置及人工智能处理器 | |
KR20230081697A (ko) | 팽창 컨볼루션 계산 가속화 방법 및 장치 | |
CN115238863A (zh) | 一种卷积神经网络卷积层的硬件加速方法、***及应用 | |
CN116090518A (zh) | 基于脉动运算阵列的特征图处理方法、装置以及存储介质 | |
CN111191774A (zh) | 面向精简卷积神经网络的低代价加速器架构及其处理方法 | |
CN113112400B (zh) | 一种模型训练方法及模型训练装置 | |
CN110503193B (zh) | 一种基于roi的池化运算方法和电路 |
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 |