CN110533177B - 一种数据读写装置、方法、设备、介质及卷积加速器 - Google Patents
一种数据读写装置、方法、设备、介质及卷积加速器 Download PDFInfo
- Publication number
- CN110533177B CN110533177B CN201910779660.7A CN201910779660A CN110533177B CN 110533177 B CN110533177 B CN 110533177B CN 201910779660 A CN201910779660 A CN 201910779660A CN 110533177 B CN110533177 B CN 110533177B
- Authority
- CN
- China
- Prior art keywords
- input data
- convolution
- processing unit
- memory bank
- write
- 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 108
- 230000015654 memory Effects 0.000 claims abstract description 499
- 238000012545 processing Methods 0.000 claims description 544
- 238000003491 array Methods 0.000 claims description 79
- 230000008569 process Effects 0.000 claims description 53
- 238000003860 storage Methods 0.000 claims description 13
- 238000010586 diagram Methods 0.000 description 16
- 238000013527 convolutional neural network Methods 0.000 description 10
- 238000011176 pooling Methods 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 5
- 238000009826 distribution Methods 0.000 description 4
- 238000007792 addition Methods 0.000 description 3
- 238000013528 artificial neural network Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 230000003139 buffering effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 239000003086 colorant Substances 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 238000012935 Averaging Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 238000003909 pattern recognition Methods 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/15—Correlation function computation including computation of convolution operations
-
- 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
Abstract
本申请涉及一种数据读写装置,包括:读写单元;控制单元与读写单元耦合,用于控制读写单元将多个卷积运算所需的至少一个输入数据组写入至少一个存储器库组,其中,控制单元用于控制读写单元将至少一个输入数据组中一个或多个输入数据组写入至少一个存储器库组中的一个存储器库组,并用于在已将一个或多个输入数据组的预定数量的输入数据写入一个存储器库组的一个存储器库的情况下,控制读写单元将一个或多个输入数据组的下一个输入数据写入一个存储器库组的下一个存储器库,预定数量等于与多个卷积运算相关的卷积核沿着至少一个输入数据组的第一方向移动的第一步长或者第一步长的整数倍。本申请还涉及一种卷积加速器、数据读写方法、设备、介质。
Description
技术领域
本申请属于卷积运算技术领域,具体涉及一种数据读写装置、方法、设备、介质及卷积加速器。
背景技术
近年来,随着人工智能技术的发展,卷积神经网络(CNN)算法广泛用于计算机视觉和模式识别领域。作为卷积神经网络中的基本运算,卷积运算需要进行大量的矩阵乘法,是卷积神经网络中最耗时的运算,卷积运算中使用的数据占用了很大一部分内存,提高卷积运算的运算速度以及减少卷积运算的内存占用在卷积神经网络的应用过程中是一个很大的挑战。
发明内容
为了解决上述全部或部分问题,本申请提供一种用于多个卷积运算的数据读写装置,包括:
读写单元;和
控制单元,与所述读写单元耦合,用于控制所述读写单元将所述多个卷积运算所需的至少一个输入数据组写入至少一个存储器库组,其中,所述控制单元用于:
控制所述读写单元将所述至少一个输入数据组中的一个或多个输入数据组写入所述至少一个存储器库组中的一个存储器库组中;并在已将所述一个或多个输入数据组中的预定数量的输入数据写入所述一个存储器库组中的一个存储器库的情况下,控制所述读写单元将所述一个或多个输入数据组中的下一个输入数据写入所述一个存储器库组中的下一个存储器库,其中所述预定数量等于与所述多个卷积运算相关的卷积核沿着所述至少一个输入数据组的第一方向移动的第一步长,或者所述第一步长的整数倍。
在本申请中,将一个输入数据组中前步长(卷积核沿输入数据组的第一方向移动的第一步长)个或者步长的整数倍个输入数据存储在第一个存储器库中,而将之后的步长(卷积核沿输入数据组的第一方向移动的第一步长)个或者步长的整数倍个输入数据存储在第二个存储器库中,其中,该前步长个或者步长的整数倍个输入数据包括了第一个卷积运算需要的输入数据,该之后的步长个或者步长的整数倍个输入数据包括了第一个卷积运算和与第一个卷积运算相邻的第二个卷积运算都需要的输入数据,如此,在为负责第一个卷积运算的处理单元从第一个存储器库读取第一个卷积运算需要的输入数据时,可以为负责第二个卷积运算的处理单元从第二个存储器库中读取第二个卷积运算需要的输入数据,而在下一时段,在为负责第一个卷积运算的处理单元从第二个存储器库读取第一个卷积运算需要的剩余的输入数据时,可以为负责第二个卷积运算的处理单元从存储之后的又一步长(卷积核沿输入数据组的第一方向移动的第一步长)个或者步长的整数倍个输入数据的第三个存储器库读取第二个卷积运算需要的剩余的输入数据。由此可见,第二个存储器库中存储的第一个卷积运算和第二个卷积运算都需要的输入数据在不同的时段被读取给负责第一个卷积运算的处理单元和负责第二个卷积运算的处理单元,因此,在本申请中,避免了重复存储相邻两个卷积运算都需要的输入数据,减少了内存占用;并且在本申请中,负责相邻两个卷积运算的处理单元在不同的时段使用相邻两个卷积运算都需要的输入数据,这种并行处理方式可以提高卷积运算的整体运算速度。
本申请还提供一种用于多个卷积运算的数据读写装置,包括:
读写单元,用于从多个存储器库中读取所述多个卷积运算所需的多个输入数据,并从所述多个存储器库中的一个存储器库中读取所述多个卷积运算所需的多个卷积核,其中,所述多个卷积运算包括所述多个卷积核中的每个卷积核与所述多个输入数据的多次卷积运算;和
控制单元,用于控制所述读写单元从所述多个存储器库中读取所述多个输入数据和所述多个卷积核。
相比于将多个输入数据重复写入多个存储器库以用于与多个卷积核的卷积运算,本申请中将多个存储器库中存储的多个输入数据重复利用到与多个卷积核的卷积运算中的方式可以显著提高卷积运算的整体运算速度。
本申请还提供一种用于卷积运算的数据读写装置,包括:
读写单元;和
控制单元,与所述读写单元耦合,用于控制所述读写单元从至少一个存储器库组读取所述多个卷积运算所需的至少一个输入数据组,其中,所述至少一个输入数据组中的一个或多个输入数据组存储在所述至少一个存储器库组中的一个存储器库组中,并且在所述一个存储器库组中的一个存储器库已存储所述一个或多个输入数据组中的预定数量的输入数据的情况下,所述一个或多个输入数据组中的下一个输入数据存储在所述一个存储器库组中的下一个存储器库,其中所述预定数量等于与所述多个卷积运算相关的卷积核沿着所述至少一个输入数据组的第一方向移动的第一步长。
在本申请中,将一个输入数据组中前步长(卷积核沿输入数据组的第一方向移动的第一步长)个或者步长的整数倍个输入数据存储在第一个存储器库中,而将之后的步长(卷积核沿输入数据组的第一方向移动的第一步长)个或者步长的整数倍个输入数据存储在第二个存储器库中,其中,该前步长个或者步长的整数倍个输入数据包括了第一个卷积运算需要的输入数据,该之后的步长个或者步长的整数倍个输入数据包括了第一个卷积运算和与第一个卷积运算相邻的第二个卷积运算都需要的输入数据,如此,在为负责第一个卷积运算的处理单元从第一个存储器库读取第一个卷积运算需要的输入数据时,可以为负责第二个卷积运算的处理单元从第二个存储器库中读取第二个卷积运算需要的输入数据,而在下一时段,在为负责第一个卷积运算的处理单元从第二个存储器库读取第一个卷积运算需要的剩余的输入数据时,可以为负责第二个卷积运算的处理单元从存储之后的又一步长(卷积核沿输入数据组的第一方向移动的第一步长)个或者步长的整数倍个输入数据的第三个存储器库读取第二个卷积运算需要的剩余的输入数据。由此可见,第二个存储器库中存储的第一个卷积运算和第二个卷积运算都需要的输入数据在不同的时段被读取给负责第一个卷积运算的处理单元和负责第二个卷积运算的处理单元,因此,在本申请中,避免了重复存储相邻两个卷积运算都需要的输入数据,减少了内存占用;并且在本申请中,负责相邻两个卷积运算的处理单元在不同的时段使用相邻两个卷积运算都需要的输入数据,这种并行处理方式可以提高卷积运算的整体运算速度。
本申请还提供一种用于多个卷积运算的数据读写装置,包括:
读写单元;和
控制单元,与所述读写单元耦合,用于控制所述读写单元将与所述多个卷积运算相关的多个输入数据写入多个存储器库,其中,
在所述多个卷积运算中的两个卷积运算共享所述多个输入数据中的至少一个输入数据,所述两个卷积运算不共享所述多个输入数据中的至少两个输入数据,以及所述不共享的至少两个输入数据分别属于所述两个卷积运算的情况下,控制所述读写单元将所述共享的至少一个输入数据写入所述多个存储器库中的至少一个共享存储器库,并将所述不共享的至少两个输入数据写入所述多个存储器库中的至少一个不共享存储器库中,其中所述至少一个共享存储器库与至少一个不共享存储器库不同。
在本申请中,通过将两个卷积运算共享的至少一个输入数据写入至少一个共享存储器库,将两个卷积运算不共享的至少两个输入数据写入至少一个不共享存储器库中,那么在为负责其中一个卷积运算的处理单元从不共享存储器库中读取该卷积运算需要的不共享的输入数据时,可以为负责另外一个卷积运算的处理单元从共享存储器库中读取该卷积运算需要的共享的输入数据,在下一时段,在为负责其中一个卷积运算的处理单元从共享存储器库中读取该卷积运算需要的共享的输入数据时,可以为负责另外一个卷积运算的处理单元从不共享存储器库中读取该卷积运算需要的不共享的输入数据。由此可见,在本申请中,避免了重复存储相邻两个卷积运算共享的输入数据,减少了内存占用;并且在本申请中,负责相邻两个卷积运算的处理单元在不同的时段使用相邻两个卷积运算共享的输入数据,这种并行处理方式可以提高卷积运算的整体运算速度。
本申请还提供一种卷积加速器,包括:
多个存储器库;
多个处理单元;和
如上所述的任一种用于多个卷积运算的数据读写装置。
本申请还提供一种用于多个卷积运算的数据读写方法,包括:
接收所述多个卷积运算所需的至少一个输入数据组;
将所述至少一个输入数据组写入至少一个存储器库组,其中,
将所述至少一个输入数据组中的一个或多个输入数据组写入所述至少一个存储器库组中的一个存储器库组中;和
在已将所述一个或多个输入数据组中的预定数量的输入数据写入所述一个存储器库组中的一个存储器库的情况下,将所述一个或多个输入数据组中的下一个输入数据写入所述一个存储器库组中的下一个存储器库,其中所述预定数量等于与所述多个卷积运算相关的卷积核沿着所述至少一个输入数据组的第一方向移动的第一步长,或者所述第一步长的整数倍。
在本申请中,将一个输入数据组中前步长(卷积核沿输入数据组的第一方向移动的第一步长)个或者步长的整数倍个输入数据存储在第一个存储器库中,而将之后的步长(卷积核沿输入数据组的第一方向移动的第一步长)个或者步长的整数倍个输入数据存储在第二个存储器库中,其中,该前步长个或者步长的整数倍个输入数据包括了第一个卷积运算需要的输入数据,该之后的步长个或者步长的整数倍个输入数据包括了第一个卷积运算和与第一个卷积运算相邻的第二个卷积运算都需要的输入数据,如此,在为负责第一个卷积运算的处理单元从第一个存储器库读取第一个卷积运算需要的输入数据时,可以为负责第二个卷积运算的处理单元从第二个存储器库中读取第二个卷积运算需要的输入数据,而在下一时段,在为负责第一个卷积运算的处理单元从第二个存储器库读取第一个卷积运算需要的剩余的输入数据时,可以为负责第二个卷积运算的处理单元从存储之后的又一步长(卷积核沿输入数据组的第一方向移动的第一步长)个或者步长的整数倍个输入数据的第三个存储器库读取第二个卷积运算需要的剩余的输入数据。由此可见,第二个存储器库中存储的第一个卷积运算和第二个卷积运算都需要的输入数据在不同的时段被读取给负责第一个卷积运算的处理单元和负责第二个卷积运算的处理单元,因此,在本申请中,避免了重复存储相邻两个卷积运算都需要的输入数据,减少了内存占用;并且在本申请中,负责相邻两个卷积运算的处理单元在不同的时段使用相邻两个卷积运算都需要的输入数据,这种并行处理方式可以提高卷积运算的整体运算速度。
本申请还提供一种用于多个卷积运算的数据读写方法,包括:
从多个存储器库中读取所述多个卷积运算所需的多个输入数据;和
从所述多个存储器库中的一个存储器库中读取所述多个卷积运算所需的多个卷积核,其中,所述多个卷积运算包括所述多个卷积核中的每个卷积核与所述多个输入数据的多次卷积运算。
相比于将多个输入数据重复写入多个存储器库以用于与多个卷积核的卷积运算,本申请将多个存储器库中存储的多个输入数据重复利用到与多个卷积核的卷积运算中的方式可以显著提高卷积运算的整体运算速度。
本申请还提供一种用于卷积运算的数据读写方法,包括:
从至少一个存储器库组读取所述多个卷积运算所需的至少一个输入数据组,其中,
所述至少一个输入数据组中的一个或多个输入数据组存储在所述至少一个存储器库组中的一个存储器库组中;和
在所述一个存储器库组中的一个存储器库已存储所述一个或多个输入数据组中的预定数量的输入数据的情况下,所述一个或多个输入数据组中的下一个输入数据存储在所述一个存储器库组中的下一个存储器库,其中所述预定数量等于与所述多个卷积运算相关的卷积核沿着所述至少一个输入数据组的第一方向移动的第一步长,或者所述第一步长的整数倍。
在本申请中,将一个输入数据组中前步长(卷积核沿输入数据组的第一方向移动的第一步长)个或者步长的整数倍个输入数据存储在第一个存储器库中,而将之后的步长(卷积核沿输入数据组的第一方向移动的第一步长)个或者步长的整数倍个输入数据存储在第二个存储器库中,其中,该前步长个或者步长的整数倍个输入数据包括了第一个卷积运算需要的输入数据,该之后的步长个或者步长的整数倍个输入数据包括了第一个卷积运算和与第一个卷积运算相邻的第二个卷积运算都需要的输入数据,如此,在为负责第一个卷积运算的处理单元从第一个存储器库读取第一个卷积运算需要的输入数据时,可以为负责第二个卷积运算的处理单元从第二个存储器库中读取第二个卷积运算需要的输入数据,而在下一时段,在为负责第一个卷积运算的处理单元从第二个存储器库读取第一个卷积运算需要的剩余的输入数据时,可以为负责第二个卷积运算的处理单元从存储之后的又一步长(卷积核沿输入数据组的第一方向移动的第一步长)个或者步长的整数倍个输入数据的第三个存储器库读取第二个卷积运算需要的剩余的输入数据。由此可见,第二个存储器库中存储的第一个卷积运算和第二个卷积运算都需要的输入数据在不同的时段被读取给负责第一个卷积运算的处理单元和负责第二个卷积运算的处理单元,因此,在本申请中,避免了重复存储相邻两个卷积运算都需要的输入数据,减少了内存占用;并且在本申请中,负责相邻两个卷积运算的处理单元在不同的时段使用相邻两个卷积运算都需要的输入数据,这种并行处理方式可以提高卷积运算的整体运算速度。
本申请还提供一种用于卷积运算的数据读写方法,包括:
接收所述多个卷积运算所需的多个输入数据;和
将所述多个输入数据写入多个存储器库,其中,
在所述多个卷积运算中的两个卷积运算共享所述多个输入数据中的至少一个输入数据,所述两个卷积运算不共享所述多个输入数据中的至少两个输入数据,以及所述不共享的至少两个输入数据分别属于所述两个卷积运算的情况下,将所述共享的至少一个输入数据写入所述多个存储器库中的至少一个共享存储器库,并将所述不共享的至少两个输入数据写入所述多个存储器库中的至少一个不共享存储器库中,其中所述至少一个共享存储器库与至少一个不共享存储器库不同。
在本申请中,通过将两个卷积运算共享的至少一个输入数据写入至少一个共享存储器库,将两个卷积运算不共享的至少两个输入数据写入至少一个不共享存储器库中,那么在为负责其中一个卷积运算的处理单元从不共享存储器库中读取该卷积运算需要的不共享的输入数据时,可以同时为负责另外一个卷积运算的处理单元从共享存储器库中读取该卷积运算需要的共享的输入数据,在下一时段,在为负责其中一个卷积运算的处理单元从共享存储器库中读取该卷积运算需要的共享的输入数据时,可以同时为负责另外一个卷积运算的处理单元从不共享存储器库中读取该卷积运算需要的不共享的输入数据。由此可见,在本申请中,避免了重复存储相邻两个卷积运算共享的输入数据,减少了内存占用;并且在本申请中,负责相邻两个卷积运算的处理单元在不同的时刻使用相邻两个卷积运算共享的输入数据,这种并行处理方式可以提高卷积运算的整体运算速度。
本申请还提供一种非易失性存储介质,在所述存储介质上存储有用于多个卷积运算的数据读写程序,所述程序被计算机执行以实施上述任意一种用于多个卷积运算的数据读写方法。
本申请还提供一种用于多个卷积运算的数据读写设备,包括:
存储器,存储有计算机可以执行的用于多个卷积运算的数据读写程序;以及
处理器,连接至所述存储器,并且被配置为执行所述用于多个卷积运算的数据读写以实施上述任意一种用于多个卷积运算的数据读写方法。
附图说明
图1示出根据本申请实施例的卷积神经网络的一个示例;
图2示出根据本申请实施例的卷积加速器的结构的一个示例;
图3示出了根据本申请实施例,图2的卷积加速器中的一个处理单元阵列的示例,其中每个处理单元阵列用于处理与同一个卷积核相关的多个卷积运算;
图4示出了根据本申请实施例,图2的卷积加速器中的多个处理单元阵列的示例,其中每个处理单元阵列用于处理与同一个卷积核相关的多个卷积运算,而且各处理单元阵列所对应的卷积核不同;
图5是根据本申请实施例的输入数据阵列的示意图;
图6是根据本申请实施例的卷积核阵列的示意图;
图7示出了根据本申请实施例,输入数据阵列的一个示例以及沿输入数据阵列的宽度方向和高度方向滑移的卷积窗口的示意图;
图8示出了根据本申请实施例,输入数据阵列的另一个示例以及沿输入数据阵列的宽度方向和高度方向滑移的卷积窗口的示意图;
图9示出了根据本申请实施例,将图7中的输入子数据阵列以及沿高度方向选取的下一个输入数据子阵列写入图2的卷积加速器中的输入数据存储器库的一个示例;
图10示出了根据本申请实施例,将图7中的输入数据子阵列以及下一个输入数据阵列的一个输入数据子阵列写入图2中的卷积加速器中的输入数据存储器库的一个示例;
图11示出了根据本申请实施例,将图8中的输入数据子阵列以及沿高度方向选取的下一个输入子数据阵列写入图2的卷积加速器中的输入数据存储器库的一个示例;
图12示出了根据本申请实施例,将图8中的输入数据子阵列以及下一个输入数据阵列的一个输入数据子阵列写入图2中的卷积加速器中的输入数据存储器库的一个示例;
图13A示出了根据本申请实施例,用于处理关于图7中的输入数据子阵列的卷积运算的图3中的各组处理单元在不同时间段需要的输入数据在各个输入数据存储器库组中的分布示意图;
图13B示出了根据本申请实施例,用于处理关于图7中的输入数据子阵列的卷积运算的图3中的第一组处理单元中的各个处理单元在不同时刻需要的输入数据在各个输入数据存储器库中的分布示意图;
图14示出根据本申请的一些实施例,在一个卷积核存储器库存储一个卷积核的情况下,输出数据子阵列的输出次序;
图15示出根据本申请的一些实施例,在一个卷积核存储器库存储两个卷积核的情况下,输出数据子阵列的输出次序;
图16示出根据本申请的一些实施例,一种计算输入数据子阵列与卷积核的卷积的方法的一个示例;
图17示出根据本申请的一些实施例,将输入数据子阵列写入输入数据存储器库的方法的一个示例;
图18示出根据本申请的一些实施例,一种计算一个输入数据阵列与多个卷积核的卷积的方法的一个示例;
图19示出了根据本申请的一个实施例的一种系统的框图;
图20示出了根据本申请的一个实施例的一种片上系统(SoC)的框图。
具体实施方式
下面结合具体实施例和附图对本申请做进一步说明。可以理解的是,本公开的说明性实施例包括但不限于用于多个卷积运算的数据读写装置、方法和卷积加速器,此处描述的具体实施例仅仅是为了解释本申请,而非对本申请的限定。此外,为了便于描述,附图中仅示出了与本申请相关的部分而非全部的结构或过程。
以下由特定的具体实施例说明本申请的实施方式,本领域技术人员可由本说明书所揭示的内容轻易地了解本申请的其他优点及功效。虽然本申请的描述将结合较佳实施例一起介绍,但这并不代表此发明的特征仅限于该实施方式。恰恰相反,结合实施方式作发明介绍的目的是为了覆盖基于本申请的权利要求而有可能延伸出的其它选择或改造。为了提供对本申请的深度了解,以下描述中将包含许多具体的细节。本申请也可以不使用这些细节实施。此外,为了避免混乱或模糊本申请的重点,有些具体细节将在描述中被省略。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
此外,各种操作将以最有助于理解说明性实施例的方式被描述为多个离散操作;然而,描述的顺序不应被解释为暗示这些操作必须依赖于顺序。特别是,这些操作不需要按呈现顺序执行。
除非上下文另有规定,否则术语“包含”,“具有”和“包括”是同义词。短语“A/B”表示“A或B”。短语“A和/或B”表示“(A和B)或者(A或B)”。
如这里所使用的,术语“模块”或“单元”可以指代、是或者包括:专用集成电路(ASIC)、电子电路、执行一个或多个软件或固件程序的(共享、专用或组)处理器和/或存储器、组合逻辑电路和/或提供所描述的功能的其他合适的组件。另外,在本申请中一处进行的术语的定义适用于本申请中其他处的相同术语的定义。
在一些情况下,所公开的实施例可以以硬件、固件、软件或其任何组合来实现。所公开的实施例还可以被实现为由一个或多个暂时或非暂时性机器可读(例如,计算机可读)存储介质承载或存储在其上的指令,其可以由一个或多个处理器读取和执行。例如,指令可以通过网络或通过其他计算机可读介质的途径分发。因此,机器可读介质可以包括用于以机器(例如,计算机)可读的形式存储或传输信息的任何机制、但不限于、软盘、光盘、光盘、只读存储器(CD-ROM)、磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、闪存、或用于通过电、光、声或其他形式的传播信号(例如,载波、红外信号、数字信号等)通过因特网传输信息的有形的机器可读存储器。因此,机器可读介质包括适合于以机器(例如,计算机)可读的形式存储或传输电子指令或信息的任何类型的机器可读介质。
在附图中,以特定布置和/或顺序示出一些结构或方法特征。然而,应该理解,可以不需要这样的特定布置和/或排序。在一些实施例中,这些特征可以以不同于说明性附图中所示的方式和/或顺序来布置。另外,在特定图中包含结构或方法特征并不意味着暗示在所有实施例中都需要这样的特征,并且在一些实施例中,可以不包括这些特征或者可以与其他特征组合。
应当理解的是,虽然在这里可能使用了术语“第一”、“第二”等等来描述各个单元或是数据,但是这些单元或数据不应当受这些术语限制。使用这些术语仅仅是为了将一个特征与另一个特征进行区分。举例来说,在不背离示例性实施例的范围的情况下,第一特征可以被称为第二特征,并且类似地第二特征可以被称为第一特征。
应注意的是,在本说明书中,相似的标号和字母表示类似项,因此,一旦某一项在说明书中或在一个附图中被定义,则在随后的说明书中或附图中不需要对其进行进一步定义和解释。同理,一旦某一术语在说明书中一处被定义,则在随后的说明书中或附图中不需要对其进行进一步定义和解释。
应注意的是,在本说明书中,所有表示数量的字母变量均为正整数。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请的实施方式作进一步地详细描述。
图1示出了本申请的示例应用的卷积神经网络1000的示意图,其中,输入层1100对输入的图像等数据进行去均值、归一化等预处理,并将结果输出至卷积层1200;卷积层1200对输入层1100的输出数据进行特征提取,并将结果输出至池化层1300;池化层1300对卷积层1200的输出数据进行特征选择和信息过滤,并将结果输出至下一卷积层1200,卷积层1200和池化层1300可以重复出现多次,最后一个池化层1300将结果输出至全连接层1400;全连接层1400将池化层1300的输出数据中的所有特征综合起来,并将结果输出至分类层1500;分类层1500对全连接层1400的输出数据进行分类,并输出分类结果等数据。本申请的目的在于减少卷积运算的内存占用并提高卷积运算的速度,因此可用于上述卷积神经网络1000的卷积层1200。需要说明的是,卷积神经网络只是本申请的示例应用,本申请亦可用于其他的利用卷积运算的应用。
图2示出了根据本申请实施例的卷积加速器2000的结构示意图。在卷积神经网络的应用中,卷积加速器2000用于完成卷积层1200中涉及的卷积运算。卷积加速器2000包括控制单元2100、输入/输出(I/O)接口2200、读写单元(未图示)、存储器集群2400、处理单元集群2600和/或其他组件。其中,所述控制单元2100和所述读写单元(未图示)构成卷积加速器2000的数据读写装置,用于将卷积运算所需的输入数据和/或卷积核写入存储器集群2400,并从所述存储器集群2400读取输入数据和卷积核用于处理单元集群2600的卷积运算。输入数据可以是图像数据、声音数据等样本数据,但输入数据的类型不限于此。卷积核包括多个权重,根据本申请的一些实施例,将输入数据与卷积核中的权重进行卷积可以用于对输入数据的某些特征进行提取。
根据本申请的一些实施例,所述读写单元(未图示)可以包括如图2所示的多路分配器(DEMUX)2300以及多路复用器(MUX)2500。
根据本申请的一些实施例,卷积加速器2000中的一个或多个组件,例如,控制单元2100、输入/输出(I/O)接口2200、DEMUX 2300、存储器集群2400、MUX 2500、处理单元集群2600、和/或其他组件,可以由专用集成电路(ASIC)、电子电路、执行一个或多个软件或固件程序的(共享、专用或组)处理器和/或存储器、组合逻辑电路和/或提供所描述的功能的其他合适的组件构成。
虽然如图2所示,数据读写装置中的控制单元2100、DEMUX 2300和MUX 2500分开设置,但是本技术领域的人员应该可以理解,控制单元2100可以与DEMUX 2300和/或MUX 2500合并设置,或者DEMUX 2300可以与MUX 2500合并设置。
I/O接口2200用于接收卷积运算所需的多个输入数据,例如,接收来自卷积神经网络的输入层1100的多个输入数据,又如,接收来自卷积加速器外部的存储器的多个输入数据。I/O接口2200还可以用于接收卷积运算所需的卷积核,例如,接收来自卷积加速器外部的存储器的卷积核。根据本申请的一些实施例,卷积核可以预先存储在存储器集群2400中,而无需通过I/O接口2200从卷积加速器外部接收。I/O接口2200还可以用于将卷积运算结果输出,例如,将卷积运算的结果输出至卷积神经网络的池化层1300,又如,将卷积运算的结果输出至卷积加速器外部的存储器。I/O接口2200还可以用于连接DEMUX 2300,以使得I/O接口2200接收的多个输入数据可以通过DEMUX 2300写入存储器集群2400。根据本申请的另一些实施例,卷积加速器2000还包括至少一个寄存器,用于连接I/O接口2200和DEMUX2300,并用于缓存通过I/O接口2200接收的多个输入数据。
DEMUX 2300用于连接I/O接口2200和存储器集群2400,并将通过I/O接口2200接收的多个输入数据写入存储器集群2400。根据本申请的另一些实施例,DEMUX 2300用于连接至少一个寄存器和存储器集群2400,所述至少一个寄存器用于缓存通过I/O接口2200接收的多个输入数据。
存储器集群2400用于连接DEMUX 2300和MUX 2500,还用于存储处理单元集群2600进行卷积运算所需要的数据,包括输入数据和卷积核。存储器集群2400包括多个存储器库,为了便于描述,将存储器集群2400中用于存储输入数据的存储器库称为输入数据存储器库,将存储器集群2400中用于存储卷积核的存储器库称为卷积核存储器库。根据本申请的一些实施例,每个存储器库可以是一个或多个存储器的组合,例如,一个或多个RAM组合。根据本申请的另一些实施例,每个存储器库可以是一个存储器中的一部分,例如,一个RAM中的一部分。本领域的技术人员应该理解,上述存储器库可以包括其他类型的存储器。根据本申请的一些实施例,存储器集群2400中多个输入数据存储器库被划分为至少一个输入数据存储器库组,每个输入数据存储器库组用于存储多个输入数据的至少一个输入数据。
MUX 2500用于连接存储器集群2400和处理单元集群2600,并将输入数据和卷积核从存储器集群2400写入处理单元集群2600的处理单元中的至少一个寄存器,或者将卷积运算的结果从所述处理单元集群2600的处理单元中的至少一个寄存器写入存储器集群2400。根据本申请的另一些实施例,处理单元与其对应的寄存器可以分开设置。
处理单元集群2600用于连接MUX 2500,还用于进行卷积运算,例如,卷积神经网络的卷积层1200中涉及的卷积运算。处理单元集群2600包括至少一个处理单元。
控制单元2100用于控制DEMUX 2300将多个卷积运算所需的至少一个输入数据组写入至少一个存储器库组,其中,所述控制单元2100用于:
控制所述DEMUX 2300将所述至少一个输入数据组中的一个或多个输入数据组写入所述至少一个存储器库组中的一个存储器库组中,并用于在已将所述一个或多个输入数据组中的预定数量的输入数据写入所述一个存储器库组中的一个存储器库的情况下,控制所述DEMUX 2300将所述一个或多个输入数据组中的下一个输入数据写入所述一个存储器库组中的下一个存储器库,其中所述预定数量等于与所述多个卷积运算相关的卷积核沿着所述至少一个输入数据组的第一方向移动的第一步长,或者所述第一步长的整数倍。
控制单元2100还用于在已将第二预定数量的所述一个或多个输入数据组写入所述一个存储器库组中的情况下,控制所述DEMUX 2300将所述至少一个输入数据组中的下一个输入数据组写入所述至少一个存储器库组中的下一个存储器库组中,其中所述第二预定数量是所述卷积核沿着所述至少一个数据组的第二方向上移动的第二步长。
根据本申请的一些实施例,所述整数倍的数量与输入通道方向上的输入通道元素的个数相关。
控制单元2100还用于根据处理所述多个卷积运算的多个处理单元的数量,将所述多个处理单元分成至少一个处理单元组;其中,所述至少一个存储器库组的数量与所述至少一个处理单元组的数量相同,而所述至少一个存储器库组中的每个存储器库组包括的所述存储器库的数量等于所述至少一个处理单元组中的每个处理单元组包括的所述处理单元的数量与所述处理单元的运算能力系数的乘积。
控制单元2100还用于根据处理所述多个卷积运算的多个处理单元的数量,将所述多个处理单元分成至少一个处理单元组;其中,所述至少一个存储器库组的数量等于所述至少一个处理单元组中的每个处理单元组包括的所述处理单元的数量与所述处理单元的运算能力系数的乘积,而所述至少一个存储器库组中的每个存储器库组包括的所述存储器库的数量与所述至少一个处理单元组的数量相同。
根据本申请的一些实施例,所述至少一个输入数据组的数量,按照如下计算:
Get_H=(n-1)*Stride_H+Kernel_H,
其中,Get_H表示所述至少一个输入数据组的数量,Stride_H表示所述卷积核沿所述至少一个输入数据组的第二方向移动的第二步长,Kernel_H表示所述卷积核在所述至少一个输入数据组的所述第二方向上的大小,n表示所述至少一个处理单元组在所述至少一个输入数据组的所述第二方向上能够同时处理的所述卷积运算的数量。
根据本申请的一些实施例,所述至少一个输入数据组中的每个输入数据组包括的所述输入数据的数量,按照如下计算:
Get_W=(m-1)*Stride_W+Kernel_W,
其中Get_W表示所述每个输入数据组包括的所述输入数据的数量,Stride_W表示所述卷积核沿所述至少一个输入数据组的所述第一方向移动的所述第一步长,Kernel_W表示所述卷积核在所述至少一个输入数据组的所述第一方向上的大小,m表示所述至少一个处理单元组在所述至少一个输入数据组的所述第一方向上能够同时处理的所述卷积运算的数量。
根据本申请的一些实施例,所述至少一个输入数据组的数量,按照如下计算:
Get_W=(m-1)*Stride_W+Kernel_W,
其中Get_W表示所述每个输入数据组包括的所述输入数据的数量,Stride_W表示所述卷积核沿所述至少一个输入数据组的所述第一方向移动的所述第一步长,Kernel_W表示所述卷积核在所述至少一个输入数据组的所述第一方向上的大小,m表示所述至少一个处理单元组在所述至少一个输入数据组的所述第一方向上能够同时处理的所述卷积运算的数量。
根据本申请的一些实施例,所述至少一个输入数据组中的每个输入数据组包括的所述输入数据的数量,按照如下计算:
Get_H=(n-1)*Stride_H+Kernel_H,
其中,Get_H表示所述至少一个输入数据组的数量,Stride_H表示所述卷积核沿所述至少一个输入数据组的第二方向移动的第二步长,Kernel_H表示所述卷积核在所述至少一个输入数据组的所述第二方向上的大小,n表示所述至少一个处理单元组在所述至少一个输入数据组的所述第二方向上能够同时处理的所述卷积运算的数量。
控制单元2100还用于控制MUX 2500从多个存储器库中读取多个卷积运算所需的多个输入数据,并从所述多个存储器库中的一个存储器库中读取所述多个卷积运算所需的多个卷积核,其中,所述多个卷积运算包括所述多个卷积核中的每个卷积核与所述多个输入数据的多次卷积运算。
控制单元2100还用于将所述多个输入数据沿着输入通道、高度以及宽度方向排列。
控制单元2100还用于控制MUX 2500从所述多个存储器库中读取与所述多个输入数据的输入通道方向相对应的输入数据阵列,其中,所述输入数据阵列包括沿着所述高度和所述宽度方向上排列的多个输入数据子阵列,其中所述多个输入数据子阵列中的每个输入数据子阵列包括至少一个处理单元同时处理所述多个卷积运算中的至少一个卷积运算所需的所述多个输入数据中的至少一个输入数据。
控制单元2100还用于控制所述读写单元沿着所述输入数据阵列的高度和宽度方向依次读取所述多个输入数据子阵列。
控制单元2100还用于控制MUX 2500从至少一个存储器库组读取多个卷积运算所需的至少一个输入数据组,其中,所述至少一个输入数据组中的一个或多个输入数据组存储在所述至少一个存储器库组中的一个存储器库组中,并且在所述一个存储器库组中的一个存储器库已存储所述一个或多个输入数据组中的预定数量的输入数据的情况下,所述一个或多个输入数据组中的下一个输入数据存储在所述一个存储器库组中的下一个存储器库,其中所述预定数量等于与所述多个卷积运算相关的卷积核沿着所述至少一个输入数据组的第一方向移动的第一步长,或者所述第一步长的整数倍。
控制单元2100还用于控制DEMUX 2300将所述多个卷积运算所需的多个输入数据写入多个存储器库,其中,在所述多个卷积运算中的两个卷积运算共享所述多个输入数据中的至少一个输入数据,所述两个卷积运算不共享所述多个输入数据中的至少两个输入数据,以及所述不共享的至少两个输入数据分别属于所述两个卷积运算的情况下,控制DEMUX2300将所述共享的至少一个输入数据写入所述多个存储器库中的至少一个共享存储器库,并将所述不共享的至少两个输入数据写入所述多个存储器库中的至少一个不共享存储器库中,其中所述至少一个共享存储器库与至少一个不共享存储器库不同。
以下,将具体描述控制单元2100对输入数据和卷积核的写入控制以及对输入数据和卷积核的读取控制。
1.控制单元2100控制DEMUX 2300将输入数据写入至多个输入数据存储器库
(1)控制单元确定可用的处理单元的数量以及每个处理单元的运算能力系数c。
在处理器集群2600中,每个处理单元可同时处理的卷积运算的个数取决于处理单元的运算能力系数(例如,运算能力系数c,c为正整数),其中运算能力系数代表了一个处理单元同时可以进行的乘法运算或加法运算的数量。例如,在一个处理单元中包括多个计算模块,其中每个计算模块可以包括乘法运算子模块和/或加法运算子模块。这样,这个处理单元可以同时进行多次(例如,c次)乘法运算或者加法运算。此外,本领域的技术人员应该理解,具有运算能力系数c的一个处理单元相当于运算能力系数为1的c个处理单元。
(2)控制单元确定每个处理单元阵列中处理单元组的数量以及每个处理单元组中处理单元的数量。
根据本申请的一些实施例,在处理单元集群2600中,处理单元被划分为至少一个处理单元阵列(例如,数量M个处理单元阵列),每个处理单元阵列包括至少一个处理单元(例如,数量N个处理单元)。图3示出了根据本申请实施例,图2的卷积加速器中的一个处理单元阵列的示例,其中该处理单元阵列用于处理与同一个卷积核相关的多个卷积运算;图4示出了根据本申请实施例,图2的卷积加速器中的多个处理单元阵列的示例,其中每个处理单元阵列用于处理与同一个卷积核相关的多个卷积运算,而各处理单元阵列相对应的卷积核不同。
如图3所示,根据本申请的一些实施例,在一个处理单元阵列中,处理单元被划分为至少一个处理单元组,每个处理单元组包括至少一个处理单元,每个处理单元组用于处理与同一个卷积核相关的卷积运算。例如,如图3所示,一个处理单元阵列包括16个处理单元(PU0-PU15),被划分为4个处理单元组,其中每个处理单元组包括4个处理单元。例如,第一个处理单元组包括处理单元PU0-PU3,第二个处理单元组包括处理单元PU4-PU7,第三个处理单元组包括处理单元PU8-PU11,和第四个处理单元组包括PU12-PU15。本领域的技术人员应该可以理解,图3所示只是一个示例,而且,一个处理单元阵列可以包括任何数量的处理单元组(例如,数量P个处理单元组),且每个处理单元组可以包括任何数量的处理单元(例如,数量Q个处理单元)。又如,如图3所示的一个处理单元阵列可以处理与多个卷积核相关的卷积运算,其中,所述卷积运算包括每个卷积核与相同的输入数据之间的卷积运算,例如,当该处理单元阵列处理完一个卷积核与输入数据之间的卷积运算,该处理单元阵列处理下一个卷积核与相同的输入数据之间的的卷积运算。
图4示出了根据本申请的一些实施例,多个处理单元阵列的示例,如图4所示,多个处理单元阵列包括处理单元阵列Array 1至处理单元阵列Array 16,其中,每个处理单元阵列用于处理与同一个卷积核相关的多个卷积运算,而各处理单元阵列相对应的卷积核不同。例如,处理单元阵列Array 1处理的卷积运算相对应的卷积核与处理单元阵列Array 2处理的卷积运算相对应的卷积核不同。根据本申请的一些实施例,对于图4中的一个处理单元阵列(如,处理单元阵列Array 1)的处理单元组的划分可同图3,并且各个处理单元阵列的处理单元组的划分可以相同。根据本申请的一些实施例,处理单元集群2600中的各个处理单元阵列共享相同的输入数据用于卷积运算。例如,处理单元阵列Array 1至Array 16共享相同的输入数据,其中,处理单元阵列Array 1将输入数据与处理单元阵列Array 1对应的卷积核进行卷积运算,而处理单元阵列Array 2通过备份处理单元阵列Array 1的输入数据,将与处理单元阵列Array 1相同的输入数据与处理单元阵列Array 2的卷积核进行卷积运算。
本领域的技术人员应该可以理解,上述图3和4所示的处理单元阵列是逻辑阵列,而与图2中的处理单元集群2600的硬件(例如,集成电路)排列可以不同。另外,可以根据处理单元的运算能力系数,计算精度、和/或其他因素,对处理单元集群2600中的处理单元进行任何其他分组。
(3)控制单元根据处理单元组的数量P、每个处理单元组包括的处理单元的数量Q、每个处理单元的运算能力系数c、卷积核的大小、卷积核沿输入数据阵列的宽度方向W和高度方向H滑移的步长确定一个处理单元阵列的P(处理单元组的数量)个处理单元组同时处理卷积运算需要的输入数据子阵列的大小。
为了便于描述,在本申请的一些实施例中,将输入数据根据输入数据的特征组合成具有多个维度的输入数据阵列。根据本申请的一些实施例,在输入数据的特征量较大的情况下,例如图像数据要体现在一个图像帧中的不同图像像素的不同颜色的数据,可以将输入数据组合成具有多个维度(例如,三个维度)的输入数据阵列,该三个维度可以分别为宽度方向、高度方向以及输入通道方向。从输入通道方向上看,输入数据阵列包括与多个输入通道元素对应的输入数据,其中每个输入通道元素与输入数据的一个特征相对应。。例如,在初级的图像帧的卷积运算中,将图像帧的各像素的不同颜色特征(例如,红、蓝、绿)称为不同输入通道元素。图5是根据本申请实施例的输入数据阵列的示意图,如图所示,输入数据阵列包括宽度方向W、高度方向H、输入通道方向C三个维度,从输入通道方向上看,输入数据阵列包括与4个输入通道元素对应的输入数据,其中,对于每一个输入通道元素,其对应的输入数据包含在沿宽度方向W和高度方向H延伸的输入数据面中,例如,图中所示的输入数据面S0与第一个输入通道元素相对应,并且包含了宽度方向W和高度方向H上的多个输入数据。本领域的技术人员应该可以理解,图5所示只是一个示例,输入数据阵列可以包括与任何数量的输入通道元素相对应的输入数据,并且在输入通道元素的数量为1的情况下,输入数据阵列可以是二维阵列,即包括宽度方向和和高度方向而不包括输入通道方向。
根据本申请的一些实施例,为了便于描述,将输入数据阵列的一个输入数据面中的一个输入数据以及其他各个输入数据面中分别与该输入数据对应的输入数据的组合称为一个输入数据单元,例如,如图5所示,将输入数据面S0中的一个输入数据D000以及其他各个输入数据面中分别与D000对应的D001、D002、D003的组合称为输入数据单元d0.0,将输入数据面S0中的一个输入数据D010以及其他各个输入数据面中分别与D010对应的D011、D012、D013的组合称为输入数据单元d0.1,将输入数据面S0中的一个输入数据D110以及其他各个输入数据面中分别与D110对应的D111、D112、D113的组合称为输入数据单元d1.1。根据本申请的一些实施例,图5中的一个输入数据单元与一个输入单元相对应,不同的输入数据单元对应不同的输入单元,在初级的图像帧的卷积运算中,输入单元与一个或多个图像帧中的各像素相对应。本领域的技术人员应该可以理解,图5所示只是一个示例,每个输入数据单元可以包括其他数量个输入数据,当输入数据阵列包含输入通道方向时,每个输入数据单元中包含的输入数据的数量与对应该输入数据阵列的输入通道元素的数量相同,当输入数据阵列不包含输入通道方向时,每个输入数据单元将包括对应于一个输入通道元素的一个输入数据。
在本申请的一些实施例中,为了便于描述,将一个卷积核的权重也组合成具有多个维度的卷积核阵列,其中,卷积核阵列的各个维度与输入数据阵列的各个维度相对应。图6示出了卷积核阵列的一种示意图,在图6中包含多个卷积核阵列K1至K16,每个卷积核阵列包括三个维度,即宽度方向W、高度方向H、输入通道方向C,分别与图5中所示出的输入数据阵列的各个维度相对应。如图6中所示,根据本申请的一些实施例,可以将该卷积核阵列的大小表示为Kernel_H*Kernel_W*Kernel_C,其中,Kernel_H为卷积核阵列在高度方向H上的权重的数量,Kernel_W为卷积核阵列在宽度方向W上的权重的数量,Kernel_C为卷积核阵列在输入通道方向C上的权重的数量,其中,卷积核阵列在输入通道方向C上的权重的数量与输入数据阵列中每个输入数据单元包含的输入数据的数量相同。根据本申请的另一些实施例,当卷积核阵列不包含输入通道方向时,可以将该卷积核阵列的大小表示为Kernel_H*Kernel_W,其中,Kernel_H为卷积核阵列在高度方向H上的权重的数量,Kernel_W为卷积核阵列在宽度方向W上的权重的数量。
图7示出了根据本申请实施例,输入数据阵列的一个示例以及沿该输入数据阵列的宽度方向和高度方向滑移的卷积窗口的示意图,图8示出了根据本申请实施例,输入数据阵列的另一个示例以及沿该输入数据阵列的宽度方向和高度方向滑移的卷积窗口的示意图。在图7和图8中,输入数据阵列以输入数据单元的形式示出,当输入数据阵列为三维阵列时,每个输入数据单元包括对应于各个输入通道元素的多个输入数据。例如,图7和图8中的d0.0代表了一个图像帧中一个图像像素对于不同颜色的输入数据,如,该图像像素与红、蓝、绿色对应的输入数据。当输入数据阵列为二维阵列时,每个输入数据单元包括对应于一个输入通道元素的一个输入数据。例如,图7和图8中的d0.0代表一个语音帧中的一个语音采样的一个输入数据。对于将与图7和图8中的输入数据阵列进行卷积运算的卷积核阵列,其大小例如可以被配置为:Kernel_H(卷积核阵列在高度方向H上的权重的数量)=Kernel_W(卷积核阵列在宽度方向W上的权重的数量)=3,Kernel_C(卷积核阵列在输入通道方向C上的权重的数量)与输入数据阵列中每个输入数据单元包含的输入数据的数量相同。
如图7和图8中所示,卷积核阵列的大小小于输入数据阵列的大小,因此卷积核阵列需要在输入数据阵列上进行滑移以与整个输入数据阵列的输入数据进行卷积运算。如图7和图8中所示,在本申请的一些实施例中,为了便于描述,在输入数据阵列上定义输入数据的一个卷积窗口,其在图7和图8中以框的形式示出,卷积窗口的大小和卷积核阵列的大小相同,在图7和图8的示例中为3*3*Kernel_C(卷积核阵列在输入通道方向C上的权重的数量)。如图7和图8所示,卷积窗口可以随着卷积核阵列沿输入数据阵列的宽度方向W滑移而形成一行卷积窗口,也可以随着卷积核阵列沿输入数据阵列的高度方向H滑移而形成一列卷积窗口,卷积窗口每次滑移,包括在卷积窗口内的输入数据与卷积核阵列进行卷积运算(具体为两个阵列中对应位置的数据相乘再加和),相邻卷积运算是卷积窗口滑移前后进行的两次卷积运算。在图7中,卷积核阵列(或卷积窗口)沿输入数据阵列的宽度方向W滑移的步长Stride_W=1,卷积核阵列(或卷积窗口)沿输入数据阵列的高度方向H滑移的步长Stride_H=1,在图8中,卷积核阵列(或卷积窗口)沿输入数据阵列的宽度方向W滑移的步长Stride_W=2,卷积核阵列(或卷积窗口)沿输入数据阵列的高度方向H滑移的步长Stride_H=2。在本申请的一些实施例中,Stride_W(卷积核阵列沿输入数据阵列的宽度方向W进行滑移的步长)<=Kernel_W(卷积核阵列在宽度方向W上的权重的数量),并且Stride_H(卷积核阵列沿输入数据阵列的高度方向H进行滑移的步长)<=Kernel_H(卷积核阵列在高度方向H上的权重的数量)。了简洁性,图7和图8中只示出了一行和一列卷积窗口,输入数据阵列中还可以包含未示出的其他卷积窗口。
本领域技术人员可以理解的是,虽然以上描述了输入数据阵列、卷积核阵列、以及卷积核阵列和卷积窗口的滑移,但控制单元2100并不真的需要将输入数据和卷积核的权重组合成阵列形式,也不真的需要控制卷积核阵列和卷积窗口在输入数据阵列上滑移。
在本申请的一些实施例中,对于一个处理单元阵列,每个处理单元组内的每个处理单元可以被配置为同时处理一行卷积窗口中c(运算能力系数)个连续卷积窗口内的输入数据的卷积运算,每个处理单元组由此可以同时处理一行卷积窗口中c(运算能力系数)*Q(每个处理单元组包含的处理单元的数量)个连续卷积窗口内的输入数据的卷积运算,其中,各个处理单元组处理的卷积窗口的行互不相同。例如,对于图3中示出的一个处理单元阵列,如果每个处理单元的运算能力系数c=2,那么第一个处理单元组PU0-PU3可以被配置为同时处理图7或图8中示出的包含2*4=8个连续卷积窗口的第一行卷积窗口内的输入数据的卷积运算,第二个处理单元组PU4-PU7可以被配置为同时处理图7或图8中示出的包含8个连续卷积窗口的第二行卷积窗口内的输入数据的卷积运算,第三个处理单元组PU8-PU11可以被配置为同时处理图7或图8中示出的包含8个连续卷积窗口的第三行卷积窗口内的输入数据的卷积运算,第四个处理单元组PU12-PU15可以被配置为同时处理图7或图8中示出的包含8个连续卷积窗口的第四行卷积窗口内的输入数据的卷积运算。
在本申请的另一些实施例中,对于一个处理单元阵列,每个处理单元组内的每个处理单元也可以被配置为同时处一列卷积窗口中c(运算能力系数)个连续卷积窗口内的输入数据的卷积运算,每个处理单元组由此可以同时处理一列卷积窗口中c(运算能力系数)*Q(每个处理单元组包含的处理单元的数量)个连续卷积窗口内的输入数据的卷积运算,其中,各个处理单元组处理的卷积窗口的列互不相同。
在本申请的一些实施例中,根据上述对一个处理单元阵列中处理单元的配置,在输入数据阵列中,将与处理单元阵列内各个处理单元对应的各个卷积窗口内的输入数据的组合称为一个输入数据子阵列,其包含了处理单元阵列内各个处理单元同时进行卷积运算所需要的输入数据。在本申请的一些实施例中,将输入数据子阵列大小表示为Get_H*Get_W,其中,Get_H为输入数据子阵列在高度方向H上的输入数据单元的数量,Get_W为输入数据子阵列在宽度方向W上的输入数据单元的数量。
在本申请的一些实施例中,输入数据子阵列的大小按照以下公式计算:
Get_H=(n-1)*Stride_H+Kernal_H;
Get_W=(m-1)*Stride_W+Kernal_W;(1)
其中,公式(1)中,Get_H表示输入数据子阵列在高度方向H上的输入数据单元的数量,Stride_H表示卷积核阵列沿输入数据子阵列的高度方向H滑移的步长,Kernal_H表示卷积核阵列在高度方向H上的大小,n表示P(处理单元组的数量)个处理单元组在输入数据子阵列的高度方向H上能够同时处理的卷积运算的数量,当每个处理单元组被配置为同时处理图7和图8所示的一行卷积窗口的卷积运算时,n等于处理单元组的数量,当每个处理单元组被配置为同时图7和图8所示的一列卷积窗口的卷积运算时,n等于每个处理单元组包括的处理单元的数量与处理单元的运算能力系数的乘积。例如,对于图3中示出的一个处理单元阵列,如果每个处理单元的运算能力系数c=2,那么在上述各个处理单元组被分别配置为处理图7中示出的包含8个卷积窗口的各行卷积窗口的情形中,输入数据子阵列在高度方向H上的输入数据单元的数量Get_H=(4-1)*1+3=6,图3中示出的一个处理单元阵列同时进行卷积运算需要的输入数据子阵列在图7中以浅色标识出,如图7所示,该输入数据子阵列在高度方向H上的输入数据单元的数量为6。又如,对于图3中示出的一个处理单元阵列,如果每个处理单元的运算能力系数c=2,那么在上述各个处理单元组被分别配置为处理图8中示出的包含8个卷积窗口的各行卷积窗口的情形中,输入数据子阵列在高度方向H上的输入数据单元的数量Get_H=(4-1)*2+3=9,图3中示出的一个处理单元阵列同时进行卷积运算需要的输入数据子阵列在图8中以浅色标识出,如图8所示,该输入数据子阵列在高度方向H上的输入数据单元的数量为9。
Get_W表示输入数据子阵列在宽度方向W上的输入数据单元的数量,Stride_W表示卷积核阵列沿输入数据子阵列的宽度方向W滑移的步长,Kernal_W表示卷积核阵列在宽度方向W上的大小,m表示P(处理单元组的数量)个处理单元组在输入数据子阵列的宽度方向W上能够同时处理的卷积运算的数量,当每个处理单元组被配置为同时处理图7和图8所示的一行卷积窗口的卷积运算时,m等于每个处理单元组包括的处理单元的数量与处理单元的运算能力系数的乘积,当每个处理单元组被配置为同时处理图7和图8所示的一列卷积窗口的卷积运算时,m等于处理单元组的数量。例如,对于图3中示出的一个处理单元阵列,如果每个处理单元的运算能力系数c=2,那么在上述各个处理单元组被分别配置为处理图7中示出的包含8个卷积窗口的各行卷积窗口的情形中,输入数据子阵列在宽度方向W上的输入数据单元的数量Get_W=(2*4-1)*1+3=10,如图7所示,该输入数据子阵列在宽度方向W上的输入数据单元的数量为10。又如,对于图3中示出的一个处理单元阵列,如果每个处理单元的运算能力系数c=2,那么在上述各个处理单元组被分别配置为处理图8中示出的包含8个卷积窗口的各行卷积窗口的情形中,输入数据子阵列在宽度方向W上的输入数据单元的数量Get_W=(2*4-1)*2+3=17,如图8所示,该输入数据子阵列在宽度方向W上的输入数据单元的数量为17。
在本申请的一些实施例中,将输入数据子阵列在宽度方向上的每一行输入数据单元或者输入数据子阵列在高度方向上的每一列输入数据单元称为一个输入数据组。例如,在图7中,将输入数据子阵列的一行输入数据单元d0.0至d0.9称为一个输入数据组,或者将输入数据子阵列的一列输入数据单元d0.0至d5.0称为一个输入数据组。又如,在图8中,将输入数据子阵列的一行输入数据单元d0.0至d0.16称为一个输入数据组,或者将输入数据子阵列的一列输入数据单元d0.0至d8.0称为一个输入数据组。
在本申请的一些实施例中,当输入数据组表示输入数据子阵列的一行输入数据单元时,输入数据组的数量等于输入数据子阵列在高度方向H上的输入数据单元的数量Get_H,每个输入数据组中包括的输入数据单元的数量等于输入数据子阵列在宽度方向W上的输入数据单元的数量Get_W。例如,在图7示出的输入数据子阵列中,当输入数据组表示一行输入数据单元时,输入数据组的数量为6,每个输入数据组包括的输入数据单元的数量为10。又如,在
图8示出的输入数据子阵列中,当输入数据组表示一行输入数据单元时,输入数据组的数量为9,每个输入数据组包括的输入数据单元的数量为17。
在本申请的一些实施例中,当输入数据组表示输入数据子阵列的一列输入数据单元时,输入数据组的数量等于输入数据子阵列在宽度方向W上的输入数据单元的数量Get_W,每个输入数据组中包括的输入数据单元的数量等于输入数据子阵列在高度方向H上的输入数据单元的数量Get_H。
例如,在图7示出的输入数据子阵列中,当输入数据组表示一列输入数据单元时,输入数据组的数量为10,每个输入数据组包括的输入数据单元的数量为6。又如,在图8示出的输入数据子阵列中,当输入数据组表示一行输入数据单元时,输入数据组的数量为17,每个输入数据组包括的输入数据单元的数量为9。
(4)控制单元根据每个处理单元阵列中处理单元组的数量P、每个处理单元组包括的处理单元的数量Q以及每个处理单元的运算能力系数c确定输入数据存储器库组的数量以及每个输入数据存储器库组中输入数据存储器库的数量。
在本申请的一些实施例中,将存储器集群2400中的至少一个输入数据存储器库划分为至少一个输入数据存储器库组,每个输入数据存储器库组包括至少一个输入数据存储器库,每个输入数据存储器组用于存储一个或多个输入数据组,每个输入数据存储器库用于存储一个或多个输入数据组的一个或多个输入数据。
在本申请的一些实施例中,当输入数据组表示输入数据子阵列的一行输入数据单元并且当处理单元阵列中的每个处理单元组被配置为同时处理图7和图8所示的一行卷积窗口的卷积运算时,输入数据存储器库组的数量(例如,数量G,G为正整数)可以与处理单元组的数量P相同,每个输入数据存储器库组中输入数据存储器库的数量(例如,数量B,B为正整数)可以为每个处理单元组包括的处理单元的数量P与处理单元的运算能力系数c的乘积。
图9示出了将图7中的输入子数据阵列以及沿高度方向选取的下一个输入数据子阵列写入图2的卷积加速器中的输入数据存储器库的一个示例,图10示出了将图7中的输入数据子阵列以及下一个输入数据阵列的一个输入数据子阵列写入图2中的卷积加速器中的输入数据存储器库的一个示例,图11示出了将图8中的输入数据子阵列以及沿高度方向选取的下一个输入子数据阵列写入图2的卷积加速器中的输入数据存储器库的一个示例,图12示出了将图8中的输入数据子阵列以及下一个输入数据阵列的一个输入数据子阵列写入图2的卷积加速器中的输入数据存储器库的一个示例。对于图7或图8中的输入数据子阵列,需要的输入数据存储器库组的数量G=4,例如,图9至图12中示出的4个输入数据存储器库组g0、g1、g2、g3,每个输入数据存储器库组中输入数据存储器库的数量B=4*2=8,例如,图9至图12中示出的8个输入数据存储器库b0、b1、b2、b3、b4、b5、b6、b7。
在本申请的另一些实施例中,当输入数据组表示输入数据子阵列的一行输入数据单元并且当每个处理单元组被配置为同时处理图7和图8所示的一列卷积窗口的卷积运算时,输入数据存储器库组的数量G可以为每个处理单元组包括的处理单元的数量P与处理单元的运算能力系数c的乘积,每个输入数据存储器库组中输入数据存储器库的数量B可以与处理单元组的数量P相同。
在本申请的另一些实施例中,当输入数据组表示输入数据子阵列的一列输入数据单元并且当每个处理单元组被配置为同时处理图7和图8所示的一行卷积窗口的卷积运算时,输入数据存储器库组的数量G可以为每个处理单元组包括的处理单元的数量P与处理单元的运算能力系数c的乘积,每个输入数据存储器库组中输入数据存储器库的数量B可以与处理单元组的数量P相同。
在本申请的另一些实施例中,当输入数据组表示输入数据子阵列的一列输入数据单元并且当每个处理单元组被配置为同时处理图7和图8所示的一列卷积窗口的卷积运算时,输入数据存储器库组的数量G可以与处理单元组的数量P相同,每个输入数据存储器库组中输入数据存储器库的数量B可以为每个处理单元组包括的处理单元的数量P与处理单元的运算能力系数c的乘积。
(5)控制单元控制DEMUX 2300将输入数据子阵列写入至少一个输入数据存储器库组的至少一个输入数据存储器库。
以下以输入数据组表示输入数据子阵列的一行输入数据单元并且每个处理单元组被配置为同时处理图7和图8所示的一行卷积窗口的卷积运算为例,描述输入数据子阵列的写入方法。可以理解的是,基于以下的描述,本领域技术人员可以显而易见地得出输入数据组表示输入数据子阵列的一列输入数据单元时或者每个处理单元组被配置为同时处理图7和图8所示的一列卷积窗口的卷积运算时,控制单元控制DEMUX 2300写入输入数据子阵列的方法。
在本申请的一些实施例中,从输入数据子阵列的第一个输入数据组以及第一个输入数据存储器库组开始,控制单元控制DEMUX 2300将一个输入数据组写入一个输入数据存储器库组,当已经在该输入数据存储器库组内写入Stride_H(Stride_H表示卷积核阵列沿输入数据子阵列的高度方向H滑移的步长)个输入数据组后,控制单元控制DEMUX 2300将下一个输入数据组写入下一个输入数据存储器库组,如果在最后一个输入数据存储器库组内写入Stride_H(Stride_H表示卷积核阵列沿输入数据子阵列的高度方向H滑移的步长)个输入数据组后还有未写入的输入数据组,则控制单元控制DEMUX 2300将下一个输入数据组写入第一个输入数据存储器库组,如此循环,直至控制单元控制DEMUX 2300将输入数据子阵列的所有输入数据组都写入输入数据存储器库组。
例如,对于图7中的输入数据子阵列,卷积核阵列沿输入数据子阵列的高度方向H滑移的步长Stride_H=1,那么如图9和图10中所示,控制单元控制DEMUX 2300将第1个输入数据组d0.0-d0.9写入第1个输入数据存储器库组g0,将第2个输入数据组d1.0-d1.9写入第2个输入数据存储器库组g1,将第3个输入数据组d2.0-d2.9写入第3个输入数据存储器库组g2,将第4个输入数据组d3.0-d3.9写入第4个输入数据存储器库组g3,至此还有第5、6个输入数据组没有被写入,因此重新从第1个输入数据存储器库组g0开始写入,将第5个输入数据组d4.0-d4.9写入第1个输入数据存储器库组g0,将第6个输入数据组d5.0-d5.9写入第2个输入数据存储器库组g1。
又如,对于图8中的输入数据子阵列,卷积核阵列沿输入数据子阵列的高度方向H滑移的步长Stride_H=2,那么如图11和图12中所示,控制单元控制DEMUX 2300将第1个输入数据组d0.0-d0.16和第2个输入数据组d1.0-d1.16写入第1个输入数据存储器库组g0,将第3个输入数据组d3.0-d3.16和第4个输入数据组d3.0-d3.16写入第2个输入数据存储器库组g1,将第5个输入数据组d4.0-d4.16和第6个输入数据组d5.0-d5.16写入第3个输入数据存储器库组g2,将第7个输入数据组d6.0-d6.16和第8个输入数据组d7.0-d7.16写入第4个输入数据存储器库组g3,至此还有第9个输入数据组d8.0-d8.16没有被写入,因此重新从第1个输入数据存储器库组g0开始写入,将第9个输入数据组d8.0-d8.16写入第1个输入数据存储器库组g0。
在本申请的一些实施例中,对于每次将Stride_H(Stride_H表示卷积核阵列沿输入数据子阵列的高度方向H滑移的步长)个输入数据组写入一个输入数据存储器库组,从该Stride_H(Stride_H表示卷积核阵列沿输入数据子阵列的高度方向H滑移的步长)个输入数据组的第一个输入数据以及第一个输入数据存储器库开始,控制单元控制DEMUX 2300将一个输入数据(在输入数据子阵列不包括输入通道方向的情况下,输入数据单元中包括的一个输入数据)或者多个输入数据(在输入数据子阵列包括输入通道方向的情况下,输入数据单元中包括的多个输入数据)写入一个输入数据存储器库,当已经在该输入数据存储器库内写入Stride_W(Stride_W表示卷积核阵列沿输入数据子阵列的宽度方向W滑移的步长)个输入数据(针对输入数据子阵列不包括输入通道方向的情况)或者Stride_W(Stride_W表示卷积核阵列沿输入数据子阵列的宽度方向W滑移的步长)的整数倍个输入数据(针对输入数据子阵列包括输入通道方向的情况,其中,该倍数等于每个输入数据单元中包括的输入数据的数量)后,控制单元控制DEMUX 2300将下一个输入数据(在输入数据子阵列不包括输入通道方向的情况下,下一个输入数据单元中包括的一个输入数据)或者之后的多个输入数据(在输入数据子阵列包括输入通道方向的情况下,下一个输入数据单元中包括的多个输入数据)写入下一个输入数据存储器库,如果在最后一个输入数据存储器库内写入Stride_W(Stride_W表示卷积核阵列沿输入数据子阵列的宽度方向W滑移的步长)个输入数据(针对输入数据子阵列不包括输入通道方向的情况)或者Stride_W(Stride_W表示卷积核阵列沿输入数据子阵列的宽度方向W滑移的步长)的整数倍个输入数据(针对输入数据子阵列包括输入通道方向的情况,其中,该倍数等于每个输入数据单元中包括的输入数据的数量)后还有未写入的输入数据,则控制单元控制DEMUX 2300将下一个输入数据(在输入数据子阵列不包括输入通道方向的情况下,下一个输入数据单元中包括的一个输入数据)或者之后的多个输入数据(在输入数据子阵列包括输入通道方向的情况下,下一个输入数据单元中包括的多个输入数据)写入第一个输入数据存储器库,如此循环,直至将Stride_H(Stride_H表示卷积核阵列沿输入数据子阵列的高度方向H滑移的步长)个输入数据组的输入数据都写入一个输入数据存储器库组。
在本申请的一些实施例中,当Stride_H(Stride_H表示卷积核阵列沿输入数据子阵列的高度方向H滑移的步长)个输入数据组中的一个输入数据组的最后一个输入数据被写入一个输入数据存储器库组的一个输入数据存储器库后,下一个输入数据组的输入数据从该输入数据存储器库的下一个输入数据存储器库开始写入。
在本申请的一些实施例中,当一个或多个输入数据组的最后一个输入数据被写入一个输入数据存储器库组的一个输入数据存储器库后,下一次向该输入数据存储器库组写入输入数据组时,可以从该输入数据存储器库的下一个输入数据存储器库开始写入,也可以从第1个输入数据存储器库开始写入,其中前一种方式可以最大化存储空间利用率。
例如,对于图7中的输入数据子阵列,卷积核阵列沿输入数据子阵列的高度方向H滑移的步长Stride_H=1,那么如图9和图10中所示,对输入数据存储器库组g0的第一次写入,控制单元控制DEMUX 2300将第1个输入数据组d0.0-d0.9的输入数据单元d0.0中的输入数据写入第1个输入数据存储器库b0,将输入数据单元d0.1中的输入数据写入第2个输入数据存储器库b1,将输入数据单元d0.2中的输入数据写入第3个输入数据存储器库b2,将输入数据单元d0.3中的输入数据写入第4个输入数据存储器库b3,将输入数据单元d0.4中的输入数据写入第5个输入数据存储器库b5,将输入数据单元d0.5中的输入数据写入第6个输入数据存储器库b5,将输入数据单元d0.6中的输入数据写入第7个输入数据存储器库b6,将输入数据单元d0.7中的输入数据写入第8个输入数据存储器库b7,至此还有输入数据单元d0.8、d0.9中的输入数据没有被写入,因此重新从第1个输入数据存储器库b0开始写入,将输入数据单元d0.8中的输入数据写入第1个输入数据存储器库b0,将输入数据单元d0.9中的输入数据写入第2个输入数据存储器库b1。对输入数据存储器库组g0的第二次写入,控制单元控制DEMUX 2300将第5个输入数据组d4.0-d4.9的输入数据单元d4.0中的输入数据写入第2个输入数据存储器库b1的下一个输入数据存储器库b2,将输入数据单元d4.1中的输入数据写入第4个输入数据存储器库b3,将输入数据单元d4.2中的输入数据写入第5个输入数据存储器库b4,将输入数据单元d4.3中的输入数据写入第6个输入数据存储器库b5,将输入数据单元d4.4中的输入数据写入第7个输入数据存储器库b6,将输入数据单元d4.5中的输入数据写入第8个输入数据存储器库b7,将输入数据单元d4.6中的输入数据写入第1个输入数据存储器库b0,将输入数据单元d4.7中的输入数据写入第2个输入数据存储器库b1,将输入数据单元d4.8中的输入数据写入第3个输入数据存储器库b2,将输入数据单元d4.9中的输入数据写入第4个输入数据存储器库b3。
又如,对于图8中的输入数据子阵列,卷积核阵列沿输入数据子阵列的高度方向H滑移的步长Stride_H=2,那么如图11和图12中所示,第一次向输入数据存储器库组g0写入第1个输入数据组d0.0-d0.16和第2个输入数据组d1.0-d1.16,控制单元控制DEMUX 2300将输入数据单元d0.0、d0.1中的输入数据写入第1个输入数据存储器库b0,将输入数据单元d0.2、d0.3中的输入数据写入第2个输入数据存储器库b1,将输入数据单元d0.4、d0.5中的输入数据写入第3个输入数据存储器库b2,将输入数据单元d0.6、d0.7中的输入数据写入第4个输入数据存储器库b3,将输入数据单元d0.8、d0.9中的输入数据写入第5个库输入数据存储器b5,将输入数据单元d0.10、d0.11中的输入数据写入第6个输入数据存储器库b5,将输入数据单元d0.12、d0.13中的输入数据写入第7个输入数据存储器库b6,将输入数据单元d0.14、d0.15中的输入数据写入第8个输入数据存储器库b7,至此第1个输入数据组d0.0-d0.16还有输入数据单元d0.16中的输入数据没有被写入,因此重新从第1个输入数据存储器库b0开始写入,将输入数据单元d0.16中的输入数据写入第1个输入数据存储器库b0。对于第2个输入数据组d1.0-d1.16,可以从第1个输入数据存储器库b0的下一个输入数据存储器库b1开始写入,如图11和图12中所示,控制单元控制DEMUX 2300将输入数据单元d1.0、d1.1中的输入数据写入第2个输入数据存储器库b1,将输入数据单元d1.2、d1.3中的输入数据写入第3个输入数据存储器库b2,将输入数据单元d1.4、d1.5中的输入数据写入第4个输入数据存储器库b3,将输入数据单元d1.6、d01.7中的输入数据写入第5个输入数据存储器库b4,将输入数据单元d1.8、d1.9中的输入数据写入第6个输入数据存储器库b5,将输入数据单元d1.10、d1.11中的输入数据写入第7个输入数据存储器库b6,将输入数据单元d1.12、d1.13中的输入数据写入第8个输入数据存储器库b7,至此还有输入数据单元d1.14-d1.16中的输入数据没有被写入,因此重新从第1个输入数据存储器库b0开始写入,将输入数据单元d1.14、d1.15中的输入数据写入第1个输入数据存储器库b0,将输入数据单元d1.16中的输入数据写入第2个输入数据存储器库b1。第二次向输入数据存储器库组g0写入第9个输入数据组d8.0-d8.16,可以从第2个输入数据存储器库b1的下一个输入数据存储器库b2开始写入,如图11和图12中所示,控制单元控制DEMUX2300将输入数据单元d8.0、d8.1中的输入数据写入第3个输入数据存储器库b2,将输入数据单元d8.2、d8.3中的输入数据写入第4个输入数据存储器库b3,将输入数据单元d8.4、d1.5中的输入数据写入第5个输入数据存储器库b4,将输入数据单元d8.6、d08.7中的输入数据写入第6个输入数据存储器库b5,将输入数据单元d8.8、d8.9中的输入数据写入第7个输入数据存储器库b6,将输入数据单元d8.10、d8.11中的输入数据写入第8个输入数据存储器库b7,至此还有输入数据单元d8.12-d8.16中的输入数据没有被写入,因此重新从第1个输入数据存储器库b0开始写入,将输入数据单元d8.12、d8.13中的输入数据写入第1个输入数据存储器库b0,将输入数据单元d8.14、d8.15中的输入数据写入第2个输入数据存储器库b1,将输入数据单元d8.16中的输入数据写入第3个输入数据存储器库b2。
上述对各个输入数据存储器库组的安排中,将输入数据子阵列高度方向上第一行卷积窗口内的前Stride_H(Stride_H表示卷积核沿该输入数据阵列的高度方向H滑移的步长)个输入数据组存储在第一个输入数据存储器库组中,而将之后的Stride_H(Stride_H表示卷积核沿该输入数据阵列的高度方向H滑移的步长)个输入数据组存储在第二个输入数据存储器库组中,其中,该之后的Stride_H(Stride_H表示卷积核沿该输入数据阵列的高度方向H滑移的步长)个输入数据组包括了在输入数据子阵列高度方向上与第一行卷积窗口相邻的第二行卷积窗口内的前Stride_H(Stride_H表示卷积核沿该输入数据阵列的高度方向H滑移的步长)个输入数据组,并且在该之后的Stride_H(Stride_H表示卷积核沿该输入数据阵列的高度方向H滑移的步长)个输入数据组中,存在该两行相邻的卷积窗口都包含的输入数据组,如此,在为负责第一行卷积窗口内输入数据的卷积运算的处理单元组从第一个输入数据存储器库组读取前Stride_H(Stride_H表示卷积核沿该输入数据阵列的高度方向H滑移的步长)个输入数据组的同时,可以为负责第二行卷积窗口内输入数据的卷积运算的处理单元组从第二个输入数据存储器库组中读取之后的Stride_H(Stride_H表示卷积核沿该输入数据阵列的高度方向H滑移的步长)个输入数据组,而在下一时段,在为负责第一行卷积窗口内输入数据的卷积运算的处理单元组从第二个输入数据存储器库组读取第一行卷积窗口内剩余的输入数据组的同时,可以为负责第二行卷积窗口内输入数据的卷积运算的处理单元组从存储之后的又一Stride_H(Stride_H表示卷积核沿该输入数据阵列的高度方向H滑移的步长)个输入数据组的第三个输入数据存储器库组读取第二行卷积窗口内剩余的输入数据组;由此可见,在本申请的实施例中,避免了重复存储相邻两行卷积窗口都包含的输入数据组,减少了内存占用;并且在本申请的实施例中,负责相邻两行卷积窗口内输入数据的卷积运算的两个处理单元组在不同的时刻使用相邻两行卷积窗口都包含的输入数据组,这种并行处理方式可以提高卷积运算的整体运算速度。
上述对每个输入数据存储器库组中各个输入数据存储器库的安排中,对于一个输入数据组,将其位于输入数据子阵列宽度方向上第一个卷积窗口内的前Stride_W(Stride_W表示卷积核沿该输入数据阵列的宽度方向W滑移的步长)个输入数据单元的输入数据存储在第一个输入数据存储器库中,而将之后的Stride_W(Stride_W表示卷积核沿该输入数据阵列的宽度方向W滑移的步长)个输入数据单元的输入数据存储在第二个输入数据存储器库中,其中,该之后的Stride_W(Stride_W表示卷积核沿该输入数据阵列的宽度方向W滑移的步长)个输入数据单元的输入数据包括了在输入数据子阵列宽度方向上与第一个卷积窗口相邻的第二个卷积窗口内的前Stride_W(Stride_W表示卷积核沿该输入数据阵列的宽度方向W滑移的步长)个输入数据单元的输入数据,并且在该之后的Stride_W(Stride_W表示卷积核沿该输入数据阵列的宽度方向W滑移的步长)个输入数据单元的输入数据中,存在该两个相邻的卷积窗口都包含的输入数据,如此,在为负责第一个卷积窗口内输入数据的卷积运算的处理单元从第一个输入数据存储器库读取前Stride_W(Stride_W表示卷积核沿该输入数据阵列的宽度方向W滑移的步长)个输入数据单元的输入数据的同时,可以为负责第二个卷积窗口内输入数据的卷积运算的处理单元从第二个输入数据存储器库中读取之后的Stride_W(Stride_W表示卷积核沿该输入数据阵列的宽度方向W滑移的步长)个输入数据单元的输入数据,而在下一时段,在为负责第一个卷积窗口内输入数据的卷积运算的处理单元从第二个输入数据存储器库读取第一个卷积窗口内剩余的输入数据的同时,可以为负责第二个卷积窗口内输入数据的卷积运算的处理单元从存储之后的又一Stride_W(Stride_W表示卷积核沿该输入数据阵列的宽度方向W滑移的步长)个输入数据单元的输入数据的第三个输入数据存储器库读取第二个卷积窗口内剩余的输入数据;由此可见,在本申请的实施例中,避免了重复存储相邻两个卷积窗口都包含的输入数据,减少了内存占用;并且在本申请中,负责相邻两个卷积窗口内输入数据的卷积运算的处理单元在不同的时刻使用相邻两个卷积窗口都包含的输入数据,这种并行处理方式可以提高卷积运算的整体运算速度。
在本申请的一些实施例中,如果将一个输入数据子阵列写入多个输入数据存储器库后,多个输入数据存储器库的存储空间还有剩余,那么控制单元2100可以控制DEMUX2300预先写入下一个输入数据子阵列的部分输入数据,如此,当该处理单元阵列处理完关于一个输入数据子阵列的卷积运算后,控制单元2100可以直接从多个输入数据存储器库为该处理单元阵列读取下一个输入数据子阵列的输入数据,卷积运算的整体运算速度将提高。
在本申请的一些实施例中,可以沿输入数据阵列的高度方向H或者宽度方向W选取下一个输入数据子阵列。在本申请的另一些实施例中,可以选取下一个输入数据阵列的一个输入数据子阵列,其中下一个输入数据阵列对应的一个或多个输入通道元素不同于当前输入数据阵列对应的一个或多个输入通道元素。
例如,对于图7中示出的输入数据阵列,当以浅色被标识出的输入数据子阵列被写入多个输入数据存储器库后,控制单元2100可以控制DEMUX 2300将该输入数据子阵列在输入数据阵列高度方向上的下一个输入数据子阵列的至少一个输入数据写入多个输入数据存储器库,如图9所示,控制单元2100控制DEMUX 2300将下一个输入数据阵列的第1个输入数据组d6.0-d6.9写入包含上一个输入数据子阵列最后一个输入数据组的输入数据存储器库组g1的下一个输入数据存储器库组g2中,将第2个输入数据组d7.0-7.9写入第4个输入数据存储器库组g3中,如果至此输入数据存储器库组g0-g4的存储空间还有剩余,那么还可以继续将下一输入数据子阵列的输入数据按照上述写入原则写入。
又如,对于图7中示出的输入数据阵列,当以浅色被标识出的输入数据子阵列被写入多个输入数据存储器库后,控制单元2100可以控制DEMUX 2300将下一个输入数据阵列的一个输入数据子阵列写入多个输入数据存储器库,如图9所示,控制单元2100控制DEMUX2300将下一个输入数据阵列的一个输入数据子阵列的第1个输入数据组d0.0-d0.9写入包含上一个输入数据子阵列最后一个输入数据组的输入数据存储器库组g1的下一个输入数据存储器库组g2中,将第2个输入数据组d1.0-1.9写入第4个输入数据存储器库组g3中,如果至此输入数据存储器库组g0-g4的存储空间还有剩余,那么还可以继续将下一输入数据阵列的一个输入数据子阵列的输入数据按照上述写入原则写入。
又如,对于图8中示出的输入数据阵列,当以浅色被标识出的输入数据子阵列被写入多个输入数据存储器库后,控制单元2100可以控制DEMUX 2300将该输入数据子阵列在输入数据阵列高度方向上的下一个输入数据子阵列的至少一个输入数据写入多个输入数据存储器库,如图11所示,控制单元2100控制DEMUX 2300将下一个输入数据子阵列的第1个输入数据组d9.0-d9.16、第2个输入数据组d10.0-d10.16写入包含上一个输入数据子阵列最后一个输入数据组的输入数据存储器库组g0的下一个输入数据存储器库组g1中,将第3个输入数据组d11.0-d11.16和第4个输入数据组d12.0-d12.16写入第3个输入数据存储器库组g2中,将第5个输入数据组d13.0-d13.16和第6个输入数据组d14.0-d14.16写入第4个输入数据存储器库组g3中,如果至此输入数据存储器库组g0-g4的存储空间还有剩余,那么还可以继续将下一输入数据子阵列的输入数据按照上述写入原则写入。
又如,对于图8中示出的输入数据阵列,当以浅色被标识出的输入数据子阵列被写入多个输入数据存储器库后,控制单元2100可以控制DEMUX 2300将下一个输入数据阵列的一个输入数据子阵列写入多个输入数据存储器库,如图12所示,控制单元2100控制DEMUX2300将下一个输入数据阵列的一个输入数据子阵列的第1个输入数据组d0.0-d0.16、第2个输入数据组d1.0-d1.16写入包含上一个输入数据阵列最后一个输入数据组的输入数据存储器库组g0的下一个输入数据存储器库组g1中,将第3个输入数据组d2.0-d2.16和第4个输入数据组d3.0-d3.16写入第3个输入数据存储器库组g2中,将第5个输入数据组d4.0-d4.16和第6个输入数据组d5.0-d5.16写入第4个输入数据存储器g3库组中,如果至此输入数据存储器库组g0-g4的存储空间还有剩余,那么还可以继续将下一输入数据阵列的一个输入数据子阵列的输入数据按照上述写入原则写入。
2.控制单元2100控制DEMUX 2300将卷积核写入卷积核存储器
在本申请的一些实施例中,存储器集群2400中卷积核存储器库的数量可以与处理单元集群2600中处理单元阵列的数量M相同,每个卷积核存储器库可以存储一个卷积核的权重。控制单元2100可以控制DEMUX 2300将M(处理单元阵列的数量)个卷积核分别写入M(处理单元阵列的数量)个卷积核存储器库。例如,如图2所示,当处理单元阵列的数量M=16时,图2中的16个卷积核被分别写入16个卷积核存储器库Bank0-Bank15。在这种情形下,每个处理单元阵列可以处理与同一个卷积核相关的多个卷积运算,并且各个处理单元阵列相对应的卷积核不同。
在本申请的一些实施例中,如果每个卷积核存储器库的存储空间不能存储一个卷积核的全部权重,可以为一个卷积核分配两个卷积核存储器库。控制单元2100可以控制DEMUX 2300将一个卷积核的权重乒乓写入对应该卷积核的两个卷积核存储器库,即,当控制单元2100控制MUX 2500为一个处理单元阵列从其中一个卷积核存储器库读取卷积核的权重时,控制单元2100可以控制DEMUX 2300将该处理单元阵列需要的下一部分权重写入另一个卷积核存储器库,如此,处理单元阵列处理卷积运算的速度将被提高。
在本申请的一些实施例中,如果每个卷积核存储器库的存储空间很大,可以在每个卷积核存储器库中存储至少一个卷积核,例如,每个卷积核存储器库可以存储数量c’个卷积核。在这种情形中,控制单元2100控制DEMUX 2300将c’(每个卷积核存储器库能存储的卷积核的数量)个卷积核写入一个卷积核存储器库。在这种情形下,对于控制单元2100控制MUX 2500每次读取的至少一个输入数据,当一个处理单元阵列处理完一个卷积核存储器库中一个卷积核与该至少一个输入数据的卷积运算时,该处理单元阵列接着处理该卷积核存储器库中下一个卷积核与该至少一个输入数据的卷积运算,如此,MUX 2500每次读取的输入数据的重用率得以提高,处理单元阵列处理卷积运算的速度也得以提高。
3.控制单元2100控制MUX 2500读取输入数据和卷积核的权重
在本申请的一些实施例中,卷积核阵列和一个卷积窗口内输入数据的卷积运算包括多个乘法子运算,因此,控制单元2100需要为一个处理单元阵列中的各个处理单元分多次读取输入数据子阵列的输入数据和卷积核的权重。例如,对于图3中示出的一个处理单元阵列,如果每个处理单元的运算能力系数c=1,那么如图中所示,控制单元2100控制MUX2500每次为图3中的每个处理单元读取一个输入数据和一个权重用于该处理单元负责的一个卷积窗口内输入数据的卷积运算,例如,控制单元2100控制MUX 2500每次为处理单元PU0读取一个输入数据和一个权重用于PU0负责的一个卷积窗口内输入数据的卷积运算;如果每个处理单元的运算能力系数c=2,那么控制单元2100控制MUX 2500每次为图3中的每个处理单元读取两个输入数据和两个权重分别用于该处理单元负责的两个卷积窗口内输入数据的卷积运算,例如,控制单元2100控制MUX 2500每次为处理单元PU0读取两个输入数据和两个权重分别用于PU0负责的两个卷积窗口内输入数据的卷积运算。又如,如图4所示,控制单元2100每次为每个处理单元阵列读取一个输入数据集和一个权重集,其中,该输入数据集包含了处理单元阵列中各个处理单元同时进行卷积运算的一个乘法子运算所需要的输入数据,该权重集包含了处理单元阵列中各个处理单元同时进行卷积运算的一个乘法子运算所需要的一个卷积核的权重。
在本申请的一些实施例中,对应于一个处理单元阵列,MUX 2500可以包含多个用于读取输入数据的MUX单元,其中,每个处理单元对应的MUX单元的数量等于该处理单元的运算能力系数c。例如,对于图3中示出的一个处理单元阵列,如果每个处理单元的运算能力系数c=1,那么图中的每个处理单元对应一个MUX单元,例如,图中的处理单元PU0对应一个MUX单元;如果每个处理单元的运算能力系数c=2,那么图中的每个处理单元对应两个MUX单元,例如,图中的处理单元PU0对应两个MUX单元。
在本申请的一些实施例中,MUX 2500中的每个MUX单元包括一个输出引脚和至少一个输入引脚,其中,输出引脚用于连接一个处理单元,每个输入引脚用于连接一个输入数据存储器库,输入引脚的数量可以与存储器集群2400中输入数据存储器库的数量相同。当控制单元2100每次为一个处理单元阵列中的一个处理单元读取一个卷积窗口内的一个输入数据时,控制单元2100控制每个MUX单元的每个输入引脚从每个输入数据存储器库中读取一个输入数据,并且根据该处理单元该次需要的输入数据控制该MUX单元的输出引脚的输出。根据本申请上述实施例中对输入数据子阵列的存储方式,当控制单元2100每次为一个处理单元阵列中的各个处理单元读取输入数据时,各个处理单元对应的MUX单元的输出引脚的输出互不相同,每个处理单元对应的c(处理单元的运算能力系数)个MUX单元的输出引脚的输出互不相同。
图13A示出了根据本申请实施例,用于处理关于图7中的输入数据子阵列的卷积运算的图3中的各组处理单元在不同时间段需要的输入数据在各个输入数据存储器库组中的分布示意图,图13B示出了根据本申请实施例,用于处理关于图7中的输入数据子阵列的卷积运算的图3中的第一组处理单元中的各个处理单元在不同时刻需要的输入数据在各个输入数据存储器库中的分布示意图。根据上述参考图3、图7和图9对图7中输入数据子阵列的描述,如图13A中所示,在关于图7中输入数据子阵列的卷积运算开始的T时间段内,图3中各个处理单元组中的各个处理单元处理卷积窗口中第一行输入数据单元(即第一个输入数据组)的卷积运算,其中,第一个处理单元组PU0-PU3所需要的输入数据存储在输入数据存储器库组g0中,第二个处理单元组PU4-PU7所需要的输入数据存储在输入数据存储器库组g1中,第三个处理单元组PU8-PU11所需要的输入数据存储在输入数据存储器库组g2中,第四个处理单元组PU12-PU15所需要的输入数据存储在输入数据存储器库组g3中。在T-2T时间段内,图3中各个处理单元组中的各个处理单元处理卷积窗口中第二行输入数据单元(即第二个输入数据组)的卷积运算,其中,第一个处理单元组PU0-PU3所需要的输入数据存储在输入数据存储器库组g1中,第二个处理单元组PU4-PU7所需要的输入数据存储在输入数据存储器库组g2中,第三个处理单元组PU8-PU11所需要的输入数据存储在输入数据存储器库组g3中,第四个处理单元组PU12-PU15所需要的输入数据存储在输入数据存储器库组g0中。在2T-3T时间段内,图3中各个处理单元组中的各个处理单元处理卷积窗口中第三行输入数据单元(即第三个输入数据组)的卷积运算,其中,第一个处理单元组PU0-PU3所需要的输入数据存储在输入数据存储器库组g2中,第二个处理单元组PU4-PU7所需要的输入数据存储在输入数据存储器库组g3中,第三个处理单元组PU8-PU11所需要的输入数据存储在输入数据存储器库组g0中,第四个处理单元组PU12-PU15所需要的输入数据存储在输入数据存储器库组g1中。
根据上述参考图3、图7和图9对图7中输入数据子阵列的描述,如图13B中所示,将T时间段分为3个时间段T’、2T’、3T’,在T’时间段内,图3中第一组处理单元PU0-PU3中各个处理单元处理卷积窗口中第一个输入数据单元包括的输入数据的卷积运算,其中,处理单元PU0所需要的输入数据单元包括的输入数据存储在输入数据存储器库b0、b1内,处理单元PU1所需要的输入数据单元包括的输入数据存储在输入数据存储器库b2、b3内,处理单元PU2所需要的输入数据单元包括的输入数据存储在输入数据存储器库b4、b5内,处理单元PU3所需要的输入数据单元包括的输入数据存储在输入数据存储器库b6、b7内。在T’至2T’时间段内,图3中第一组处理单元PU0-PU3中各个处理单元处理卷积窗口中第二个输入数据单元包括的输入数据的卷积运算,其中,处理单元PU0所需要的输入数据单元包括的输入数据存储在输入数据存储器库b2、b3内,处理单元PU1所需要的输入数据单元包括的输入数据存储在输入数据存储器库b4、b5内,处理单元PU2所需要的输入数据单元包括的输入数据存储在输入数据存储器库b6、b7内,处理单元PU3所需要的输入数据单元包括的输入数据存储在输入数据存储器库b0、b1内。在2T’至3T’时间段内,图3中第一组处理单元PU0-PU3中各个处理单元处理卷积窗口中第三个输入数据单元包括的输入数据的卷积运算,其中,处理单元PU0所需要的输入数据单元包括的输入数据存储在输入数据存储器库b4、b5内,处理单元PU1所需要的输入数据单元包括的输入数据存储在输入数据存储器库b6、b7内,处理单元PU2所需要的输入数据单元包括的输入数据存储在输入数据存储器库b0、b1内,处理单元PU3所需要的输入数据单元包括的输入数据存储在输入数据存储器库b2、b3内。控制单元2100可以根据图13A和13B示出的各个处理单元的需要控制每个MUX单元的输入引脚的输入与输出引脚的输出。
在本申请的一些实施例中,在每个卷积核存储器库可以存储数量c’个卷积核的情形中,对应于控制单元2100为一个处理单元阵列每次读取一个输入数据集,控制单元2100为该处理单元阵列从该处理单元阵列对应的卷积核存储器库读取一个卷积核的权重集,当该处理单元阵列处理完该输入数据集与该卷积核的权重集的卷积运算后,控制单元2100为该处理单元阵列读取该卷积核存储器库中下一个卷积核的权重集,直至该该处理单元阵列处理完该输入数据集与该卷积核存储器库中所有卷积核的权重集的卷积运算。
在本申请的一些实施例中,在处理单元集群2600包括M个处理单元阵列的情形中,对应于控制单元2100为一个处理单元阵列每次读取一个输入数据集,各个处理单元阵列共享该输入数据集,以处理该输入数据集与不同卷积核的卷积运算。例如,对于一个卷积运算的一个乘法子运算,图4中示出的处理单元阵列Array 1至Array 16共享相同的输入数据集,但每个处理单元阵列使用的权重集互不相同。
4.控制单元2100控制多个输入数据子阵列和多个卷积核的卷积运算
由于一个输入数据阵列可以包括多个输入数据子阵列,与输入数据阵列进行卷积运算的卷积核的数量可以多于至少一个卷积核存储器库能存储的卷积核的数量,因此控制单元2100需要通过多个嵌套循环控制多个输入数据子阵列与多个卷积核的卷积运算。
图14示出根据本申请的一些实施例,在一个卷积核存储器库存储一个卷积核的情况下,输出数据子阵列的输出次序,图15示出根据本申请的一些实施例,在一个卷积核存储器库存储两个卷积核的情况下,输出数据子阵列的输出次序,在图14和图15中,输出数据子阵列的标号表示输出的次序。在本申请的一些实施例中,将输入数据阵列与所有卷积核阵列的卷积运算的结果组合成一个输出数据阵列,并定义输出数据阵列的三个维度,其分别为宽度方向、高度方向以及输出通道方向,如图14和15所示,输出数据阵列包括宽度方向W、高度方向H和输出通道方向C’。从输出通道方向上看,输出数据阵列包括与多个输出通道元素对应的输出数据,在本申请的实施例中,输出通道元素与卷积核相对应,每个输出通道元素对应一个卷积核,不同的输出通道元素对应不同的卷积核,输出通道元素的数量与待处理的所有卷积核的数量相同。对于一个输出通道元素,其对应的输出数据包含在沿宽度方向W和高度方向H延伸的输出数据面中,其中输出数据面中的每个输出数据对应于一个卷积窗口内的输入数据和一个卷积核的卷积运算的运算结果。
在本申请的一些实施例中,在输出数据阵列中,将输入数据子阵列与M(处理单元阵列的数量)个卷积核阵列的卷积运算的结果的组合称为一个输出数据子阵列,如图14和图15中示出的各个小立方体。在图14和15中,每个输出数据子阵列包含图7中输入数据子阵列与16个卷积核阵列的卷积运算的运算结果,根据上述对图7的描述,每个输出数据子阵列(例如,标号为1的输出数据子阵列)在宽度方向上包括8个输出数据,在高度方向上包括4个输出数据,在输出通道方向上包括分别对应各个卷积核的16个输出数据。
在控制单元2100控制多个输入数据子阵列与多个卷积核的卷积运算需要的多个嵌套循环中,最内侧的第一个循环关于卷积核,每次循环,控制单元2100为M(处理单元阵列的数量)个处理单元阵列读取输入数据子阵列的一个输入数据集以及M(处理单元阵列的数量)个卷积核的M(处理单元阵列的数量)个权重集,M(处理单元阵列的数量)个处理单元阵列进行一个输入数据集与M(处理单元阵列的数量)个权重集的卷积运算,控制单元2100控制M(处理单元阵列的数量)个处理单元阵列的卷积运算结果的输出,直到M(处理单元阵列的数量)个卷积核存储器库中所有卷积核的一个权重集与该输入数据集的卷积运算全部完成,该循环结束。
在本申请的一些实施例中,嵌套第一个循环的第二个循环关于输入数据集,每次循环,控制单元2100为M(处理单元阵列的数量)个处理单元阵列读取一个输入数据子阵列的一个输入数据集,直到一个输入数据子阵列的所有输入数据被读取完,循环结束。例如,如图14所示,第二个循环结束后,标号为1的输出数据子阵列被输出。又如,如图15中的loop1所示,第二个循环结束后,标号为1和2的输出数据子阵列沿输出数据阵列的输出通道方向依次被输出。
嵌套第二个循环的第三个循环关于输入数据子阵列,每次循环,控制单元2100控制沿输入数据阵列的宽度方向和高度方向中的一个选取一个输入数据子阵列并写入输入数据存储器库,直到输入数据阵列在该方向上的输入数据子阵列全部被选取并写入,该循环结束。例如,在图14中,控制单元2100在第三个循环中控制沿输入数据阵列的高度方向选取输入数据子阵列,第三个循环结束后,如图14中的loop1所示,标号为1-4的输出数据子阵列沿输出数据阵列的高度方向依次被输出。又如,在图15中,控制单元2100第三个循环中控制沿输入数据阵列的高度方向选取输入数据子阵列,第三个循环结束后,如图15中的loop1和loop2所示,标号为1-8的输出数据子阵列沿输出数据阵列的输出通道方向和高度方向依次被输出。
嵌套第三个循环的第四个循环关于输入数据子阵列,每次循环,控制单元2100控制沿输入数据阵列的宽度方向和高度方向中的另一个选取输入数据阵列写入输入数据存储器阵列,直到输入数据阵列在该方向上的输入数据子阵列全部被选取并写入,该循环结束。例如,在图14中,控制单元2100在第四个循环中控制沿输入数据阵列的宽度方向选取输入数据子阵列,第四个循环结束后,如图14中的loop1和loop2所示,标号为1-16的输出数据子阵列沿输出数据阵列的高度方向和宽度方向依次被输出。又如,在图15中,控制单元2100在第四个循环中控制沿输入数据阵列的宽度方向选取输入数据子阵列,第四个循环结束后,如图15中的loop1、loop2和loop3所示,标号为1-31的输出数据子阵列沿输出数据阵列的输出通道方向、高度方向和宽度方向依次被输出。
嵌套第四个循环的第五个循环关于卷积核,每次循环,控制单元2100控制向M(处理单元阵列的数量)个权重数据存储器库写入卷积核,直到所有卷积核被写入,循环结束。例如,在图14中,第五个循环结束后,如图14中的loop1、loop2、loop3所示,输出数据子阵列沿输出数据阵列的高度方向、宽度方向、输入通道方向依次被输出。又如,在图15中,第五个循环结束后,如图15中的loop1、loop2、loop3、loop4所示,输出数据子阵列沿输出数据阵列的输出通道方向、高度方向和宽度方向依次被输出。
本申请还涉及一种用于多个卷积运算的数据读写方法,包括:
接收所述多个卷积运算所需的至少一个输入数据组;
将所述至少一个输入数据组写入至少一个存储器库组,其中,
将所述至少一个输入数据组中的一个或多个输入数据组写入所述至少一个存储器库组中的一个存储器库组中;和
在已将所述一个或多个输入数据组中的预定数量的输入数据写入所述一个存储器库组中的一个存储器库的情况下,将所述一个或多个输入数据组中的下一个输入数据写入所述一个存储器库组中的下一个存储器库,其中所述预定数量等于与所述多个卷积运算相关的卷积核沿着所述至少一个输入数据组的第一方向移动的第一步长,或者所述第一步长的整数倍。
根据本申请的一些实施例,所述数据读写方法还包括:
在已将第二预定数量的所述一个或多个输入数据组写入所述一个存储器库组中的情况下,将所述至少一个输入数据组中的下一个输入数据组写入所述至少一个存储器库组中的下一个存储器库组中,其中所述第二预定数量是所述卷积核沿着所述至少一个数据组的第二方向上移动的第二步长。
根据本申请的一些实施例,所述整数倍的数量与输入通道方向上的输入通道元素的数量相关。
根据本申请的一些实施例,所述数据读写方法还包括:
根据处理所述多个卷积运算的多个处理单元的数量,将所述多个处理单元分成至少一个处理单元组;
其中,所述至少一个存储器库组的数量与所述至少一个处理单元组的数量相同,而所述至少一个存储器库组中的每个存储器库组包括的所述存储器库的数量等于所述至少一个处理单元组中的每个处理单元组包括的所述处理单元的数量与所述处理单元的运算能力系数的乘积。
根据本申请的一些实施例,所述数据读写方法还包括:
根据处理所述多个卷积运算的多个处理单元的数量,将所述多个处理单元分成至少一个处理单元组;
其中所述至少一个存储器库组的数量等于所述至少一个处理单元组中的每个处理单元组包括的所述处理单元的数量与所述处理单元的运算能力系数的乘积,而所述至少一个存储器库组中的每个存储器库组包括的所述存储器库的数量与所述至少一个处理单元组的数量相同。
根据本申请的一些实施例,所述数据读写方法还包括:
按照下列公式,计算所述至少一个输入数据组的数量:
Get_H=(n-1)*Stride_H+Kernel_H,
其中,Get_H表示所述至少一个输入数据组的数量,Stride_H表示所述卷积核沿所述至少一个输入数据组的第二方向移动的第二步长,Kernel_H表示所述卷积核在所述至少一个输入数据组的所述第二方向上的大小,n表示所述至少一个处理单元组在所述至少一个输入数据组的所述第二方向上能够同时处理的所述卷积运算的数量。
根据本申请的一些实施例,所述数据读写方法还包括:
按照下列公式,计算所述至少一个输入数据组中的每个输入数据组包括的所述输入数据的数量:
Get_W=(m-1)*Stride_W+Kernel_W,
其中Get_W表示所述每个输入数据组包括的所述输入数据的数量,Stride_W表示所述卷积核沿所述至少一个输入数据组的所述第一方向移动的所述第一步长,Kernel_W表示所述卷积核在所述至少一个输入数据组的所述第一方向上的大小,m表示所述至少一个处理单元组在所述至少一个输入数据组的所述第一方向上能够同时处理的所述卷积运算的数量。
根据本申请的一些实施例,所述数据读写方法还包括:
按照下列公式,计算所述至少一个输入数据组的数量:
Get_W=(m-1)*Stride_W+Kernel_W,
其中Get_W表示所述每个输入数据组包括的所述输入数据的数量,Stride_W表示所述卷积核沿所述至少一个输入数据组的所述第一方向移动的所述第一步长,Kernel_W表示所述卷积核在所述至少一个输入数据组的所述第一方向上的大小,m表示所述至少一个处理单元组在所述至少一个输入数据组的所述第一方向上能够同时处理的所述卷积运算的数量。
根据本申请的一些实施例,所述数据读写方法还包括:
按照下列公式,计算所述至少一个输入数据组中的每个输入数据组包括的所述输入数据的数量:
Get_H=(n-1)*Stride_H+Kernel_H,
其中,Get_H表示所述至少一个输入数据组的数量,Stride_H表示所述卷积核沿所述至少一个输入数据组的第二方向移动的第二步长,Kernel_H表示所述卷积核在所述至少一个输入数据组的所述第二方向上的大小,n表示所述至少一个处理单元组在所述至少一个输入数据组的所述第二方向上能够同时处理的所述卷积运算的数量。
本申请还涉及一种用于多个卷积运算的数据读写方法,包括:
从多个存储器库中读取所述多个卷积运算所需的多个输入数据;和
从所述多个存储器库中的一个存储器库中读取所述多个卷积运算所需的多个卷积核,其中,所述多个卷积运算包括所述多个卷积核中的每个卷积核与所述多个输入数据的多次卷积运算。
根据本申请的一些实施例,所述数据读写方法还包括:将所述多个输入数据沿着输入通道、高度以及宽度方向排列。
根据本申请的一些实施例,所述从多个存储器库中读取所述多个卷积运算所需的多个输入数据,还包括:
从所述多个存储器库中读取与所述多个输入数据的输入通道方向相对应的输入数据阵列,其中,所述输入数据阵列包括沿着所述高度和所述宽度方向上排列的多个输入数据子阵列,其中所述多个输入数据子阵列中的每个输入数据子阵列包括至少一个处理单元同时处理所述多个卷积运算中的至少一个卷积运算所需的所述多个输入数据中的至少一个输入数据。
根据本申请的一些实施例,所述从所述多个存储器库中读取与所述多个输入数据的输入通道方向相对应的输入数据阵列,还包括:
沿着所述输入数据阵列的高度和宽度方向依次读取所述多个输入数据子阵列。
本申请还涉及一种用于多个卷积运算的数据读写方法,包括:
从至少一个存储器库组读取所述多个卷积运算所需的至少一个输入数据组,其中,
所述至少一个输入数据组中的一个或多个输入数据组存储在所述至少一个存储器库组中的一个存储器库组中;和
在所述一个存储器库组中的一个存储器库已存储所述一个或多个输入数据组中的预定数量的输入数据的情况下,所述一个或多个输入数据组中的下一个输入数据存储在所述一个存储器库组中的下一个存储器库,其中所述预定数量等于与所述多个卷积运算相关的卷积核沿着所述至少一个输入数据组的第一方向移动的第一步长,或者所述第一步长的整数倍。
本申请还涉及一种用于多个卷积运算的数据读写方法,包括:
接收所述多个卷积运算所需的多个输入数据;和
将与所述多个输入数据写入多个存储器库,其中,
在所述多个卷积运算中的两个卷积运算共享所述多个输入数据中的至少一个输入数据、所述两个卷积运算不共享所述多个输入数据中的至少两个输入数据、以及所述不共享的至少两个输入数据分别属于所述两个卷积运算的情况下,将所述共享的至少一个输入数据写入所述多个存储器库中的至少一个共享存储器库,并将所述不共享的至少两个输入数据写入所述多个存储器库中的至少一个不共享存储器库中,其中所述至少一个共享存储器库与至少一个不共享存储器库不同。
以下,将具体描述用于卷积运算的数据读写方法。
图16示出了一种计算输入数据子阵列与卷积核的卷积的方法,该方法包括:
框1601:控制单元2100或其他组件确定处理单元集群2600中可用的处理单元的数量以及每个处理单元的运算能力系数,具体可以参照以上参考图2-4对控制单元2100的相关描述,这里为了简洁性,不再赘述。
框1602:控制单元2100或其他组件确定每个处理单元阵列中处理单元组的数量以及每个处理单元组中处理单元的数量,具体可以参照以上参考图2-4对控制单元2100的相关描述,这里为了简洁性,不再赘述。
框1603:控制单元2100或其他组件根据处理单元组的数量P、每个处理单元组包括的处理单元的数量Q、每个处理单元的运算能力系数c、卷积核的大小、卷积核沿输入数据阵列的宽度方向W和高度方向H滑移的步长确定一个处理单元阵列的P(处理单元组的数量)个处理单元组同时处理卷积运算需要的输入数据子阵列的大小,具体可以参照以上参考图2-12对控制单元2100的相关描述,这里为了简洁性,不再赘述;
框1604:控制单元2100或其他组件根据每个处理单元阵列中处理单元组的数量P、每个处理单元组包括的处理单元的数量Q以及每个处理单元的运算能力系数c确定输入数据存储器库组的数量以及每个输入数据存储器库组中输入数据存储器库的数量,具体可以参照以上参考图2-12对控制单元2100的相关描述,这里为了简洁性,不再赘述;
框1605:控制单元2100或其他组件控制读写单元将输入数据子阵列写入至少一个输入数据存储器库组的至少一个输入数据存储器库,将卷积核写入至卷积核存储器,其中输入数据子阵列的写入可以参照以下对图17的描述,卷积核的写入具体可以参照以上参考图2-12对控制单元2100的相关描述,这里为了简洁性,不再赘述具体述;
框1606:控制单元2100或其他组件控制读写单元从至少一个输入数据存储器库读取输入数据,从卷积核存储器库读取权重,具体可以参照以上参考图2-13对控制单元2100的相关描述,这里为了简洁性,不再赘述;
框1607:控制单元2100或其他组件控制输出卷积结果。
图17以输入数据组表示输入数据子阵列的一行输入数据单元并且每个处理单元组被配置为同时处理输入数据阵列中一行卷积窗口的卷积运算为例,示出了将输入数据子阵列写入输入数据存储器库的方法的示例,如图17所示,该方法包括:
框1701:将表示输入数据存储器库组的变量Group置零;
框1702:将表示输入数据存储器库的变量Bank置零;
框1703:将输入数据子阵列中的一个输入数据组的Stride_W(Stride_W表示卷积核沿该输入数据子阵列的宽度方向W滑移的步长)个输入数据(针对输入数据子阵列不包括输入通道方向的情况)或者Stride_W(Stride_W表示卷积核沿该输入数据子阵列的宽度方向W滑移的步长)的整数倍个输入数据(针对输入数据子阵列包括输入通道方向的情况,其中,该倍数等于每个输入数据单元中包括的输入数据的数量)写入当前Bank的取值对应的输入数据存储器库;
框1704:判断对于当前的输入数据组,已写入的输入数据的数量是否达到Get_W(Get_W表示输入数据子阵列在宽度方向W上的输入数据单元的数量)个(针对输入数据子阵列不包括输入通道方向的情况)或者Get_W(Get_W表示输入数据子阵列在宽度方向W上的输入数据单元的数量)的整数倍个(针对输入数据子阵列包括输入通道方向的情况,其中,该倍数等于每个输入数据单元中包括的输入数据的数量),若是,则执行框1707,若否,则执行框1705;
框1705:将表示输入数据存储器库的变量Bank的值加1;
框1706:判断表示输入数据存储器库的变量Bank的值是否大于B-1(此处,B=c*Q,B表示输入数据存储器库的数量,c表示处理单元的运算能力系数,Q表示每个处理单元组中包括的处理单元的数量),若是,则返回执行框1702,若否,则返回执行框1703;
框1707:判断已写入的输入数据组的数量是否达到Stride_H(Stride_H表示卷积核沿该输入数据子阵列的高度方向H滑移的步长),若是,则执行框1709,若否,则执行框1708;
框1708:将表示输入数据存储器库的变量Bank的值加1,然后返回执行框1703进行下一个输入数据组的写入;
框1709:判断已写入的输入数据组的数量是否达到Get_H(Get_H表示输入数据子阵列在高度方向H上的输入数据单元的数量),若是,则流程结束,若否,则执行框1710;
框1710:将表示输入数据存储器库组的变量Group的值加1;
框1711:判断表示输入数据存储器库组的变量Group的值是否大于G-1(此处G=P,G表示输入数据存储器库组的数量,P表示处理单元组的数量),若是,则返回执行框1701进行下一个输入数据组的写入,若否,则返回执行框1702进行下一个输入数据组的写入。
由于一个输入数据阵列可以包括多个输入数据子阵列,与输入数据阵列进行卷积运算的卷积核的数量可以多于至少一个卷积核存储器库能存储的卷积核的数量,因此控制单元2100或者其他组件需要通过多个嵌套循环控制多个输入数据子阵列与多个卷积核的卷积运算。图18示出了根据本申请的一些实施例,一种计算一个输入数据阵列与多个卷积核的卷积的方法的一个示例,如图所示,该方法包括:
框1801:将c’*M个卷积核写入M个卷积核存储器库,每个卷积核存储器库中存放c’个卷积核,其中c’为每个卷积核存储器库能存储的卷积核的个数,M为处理单元阵列的数量;
框1802:将一个输入数据子阵列写入至少一个输入数据存储器库;
框1803:为一个处理单元阵列读取一个输入数据子阵列的一个输入数据集,该输入数据集包含了一个处理单元阵列中各个处理单元同时进行卷积运算的一个乘法子运算所需要的输入数据;
框1804:将输入数据集共享给其他的处理单元阵列;
框1805:为M(处理单元阵列的数量)个处理单元阵列中的每个处理单元阵列从相应的卷积核存储器库读取一个卷积核的一个权重集,该权重集包含了一个处理单元阵列中各个处理单元同时进行卷积运算的一个乘法子运算所需要的权重;
框1806:M个处理单元阵列同时进行卷积运算,并输出卷积运算结果;
框1807:判断每个卷积核存储器库是否还存在其他未读取的卷积核,若是,则返回执行框1805从M个卷积核存储器库读取另外M(处理单元阵列的数量)个卷积核的M(处理单元阵列的数量)个权重集,若否,则执行框1808;
框1808:判断输入数据子阵列是否读取完毕,若否,则返回执行框1803从输入数据存储器阵列读取输入数据子阵列的另一个输入数据集,若是,则执行框1809;
框1809:判断输入数据阵列的高度方向上是否还存在未写入的输入数据子阵列,若是,则执行框1810,若否,则执行框1811;
框1810:沿输入数据阵列的高度方向选取一个输入数据子阵列,然后返回执行框1802;
框1811:判断输入数据阵列的宽度方向上是否还存在未写入的输入数据子阵列,若是,则执行框1812,若否,则执行框1813;
框1812:沿输入数据阵列的宽度方向选取一个输入数据子阵列,然后返回执行框1802;
框1813:判断是否还存在未写入的卷积核,若是,则执行框1814,若否,则结束流程;
框1814:选取c’*M个卷积核,然后返回执行框1801。
本领域技术人员可以理解的是,图18中示出的框中的一些可以同时被执行,并且可以采用与图18中示出的不同的顺序执行各个框,也可以去除图18中示出的一个或多个框和/或补充另外的框。
图19示出了根据本申请的一个实施例的系统1900的框图。系统1900可以包括耦合到控制器中枢1903的一个或多个处理器1901。在一个实施例中,控制器中枢1903包括,但不局限于,图形存储器控制器中枢(GMCH)(未示出)和输入/输出中枢(IOH)(未示出)(其可以在分开的芯片上),其中GMCH包括存储器和图形控制器并与IOH耦合。系统1900还可包括耦合到控制器中枢1903的协处理器1902和存储器1904。或者,存储器和GMCH中的一个或两者可以被集成在处理器内,存储器1904和协处理器1902直接耦合到处理器1901以及控制器中枢1903,控制器中枢1903与IOH处于单个芯片中。
协处理器1902的任选性质用虚线表示在图19中。
存储器1904可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或这两者的组合。对于至少一个实施例,控制器中枢1903经由诸如前端总线(FSB)之类的多分支总线、诸如快速通道互连(QPI)之类的点对点接口、或者类似的连接1906与处理器1901进行通信。在存储器1904中存储有指令,该指令被处理器1901和/或协处理器1902运行以实施以上任意一种用于卷积运算的数据读写方法。
在一个实施例中,协处理器1902是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、或嵌入式处理器等等。在一个实施例中,控制器中枢1903可以包括集成图形加速器。
在一个实施例中,处理器1901执行控制一般类型的数据处理操作的指令。协处理器指令可嵌入在这些指令中。处理器1901将这些协处理器指令识别为应当由附连的协处理器1902执行的类型。因此,处理器1901在协处理器总线或者其他互连上将这些协处理器指令(或者表示协处理器指令的控制信号)发布到协处理器1902。协处理器1902接受并执行所接收的协处理器指令。
图20示出了根据本申请的一实施例的SoC 3000的框图,在图20中,互连单元3050被耦合至应用处理器3010;系统代理单元3080;总线控制器单元3090;集成存储器控制器单元3040;一组或一个或多个协处理器3020,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元3030;直接存储器存取(DMA)单元3060。在一个实施例中,协处理器3020包括专用处理器,诸如例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、或嵌入式处理器等等。在静态随机存取存储器(SRAM)单元3030中存储有指令,该指令被处理器3010和/或协处理器3020运行以实施以上任意一种用于卷积运算的数据读写方法。
本文公开的机制的各实施例可以被实现在硬件、软件、固件或这些实现方法的组合中。本申请的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
可将程序代码应用于输入指令,以执行本文描述的各功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器之类的处理器的任何系统。
程序代码可以用高级程序化语言或面向对象的编程语言来实现,以便与处理系统通信。在需要时,也可用汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制不限于任何特定编程语言的范围。在任一情形下,该语言可以是编译语言或解释语言。
至少一些实施例的一个或多个方面可以由存储在机器可读介质上的表示性指令来实现,指令表示处理器中的各种逻辑,指令在被机器读取时使得该机器制作用于执行本文所述的技术的逻辑。被称为“IP核”的这些表示可以被存储在有形的机器可读介质上,并被提供给多个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。
这样的机器可读存储介质可以包括但不限于通过机器或设备制造或形成的物品的非瞬态的有形安排,其包括存储介质,诸如:硬盘任何其它类型的盘,包括软盘、光盘、紧致盘只读存储器(CD-ROM)、紧致盘可重写(CD-RW)以及磁光盘;半导体器件,例如只读存储器(ROM)、诸如动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)之类的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM);相变存储器(PCM);磁卡或光卡;或适于存储电子指令的任何其它类型的介质。
因此,本申请的各实施例还包括非瞬态的有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(HDL),它定义本文中描述的结构、电路、装置、处理器和/或系统特征。这些实施例也被称为程序产品。
Claims (25)
1.一种用于多个卷积运算的数据读写装置,其特征在于,包括:
读写单元;和
控制单元,与所述读写单元耦合,用于控制所述读写单元将所述多个卷积运算所需的至少一个输入数据组写入至少一个存储器库组,其中,所述控制单元用于:
控制所述读写单元将所述至少一个输入数据组中的一个或多个输入数据组写入所述至少一个存储器库组中的一个存储器库组中;
在已将所述一个或多个输入数据组中的预定数量的输入数据写入所述一个存储器库组中的一个存储器库的情况下,控制所述读写单元将所述一个或多个输入数据组中的下一个输入数据写入所述一个存储器库组中的下一个存储器库,其中所述预定数量等于与所述多个卷积运算相关的卷积核沿着所述至少一个输入数据组的第一方向移动的第一步长,或者所述第一步长的整数倍;
其中,所述控制单元用于控制所述读写单元将所述至少一个输入数据组写入所述至少一个存储器库组,还用于:
根据处理所述多个卷积运算的多个处理单元的数量,将所述多个处理单元分成至少一个处理单元组,其中,所述至少一个存储器库组的数量与所述至少一个处理单元组的数量相同,而所述至少一个存储器库组中的每个存储器库组包括的所述存储器库的数量等于所述至少一个处理单元组中的每个处理单元组包括的所述处理单元的数量与所述处理单元的运算能力系数的乘积,或,
所述至少一个存储器库组的数量等于所述至少一个处理单元组中的每个处理单元组包括的所述处理单元的数量与所述处理单元的运算能力系数的乘积,而所述至少一个存储器库组中的每个存储器库组包括的所述存储器库的数量与所述至少一个处理单元组的数量相同。
2.如权利要求1所述的数据读写装置,其特征在于,所述控制单元用于控制所述读写单元将所述至少一个输入数据组写入所述至少一个存储器库组,还用于:
在已将第二预定数量的所述一个或多个输入数据组写入所述一个存储器库组中的情况下,控制所述读写单元将所述至少一个输入数据组中的下一个输入数据组写入所述至少一个存储器库组中的下一个存储器库组中,其中所述第二预定数量是所述卷积核沿着所述至少一个数据组的第二方向上移动的第二步长。
3.如权利要求1所述的数据读写装置,其特征在于,所述整数倍的数量与输入通道方向上的输入通道元素的数量相关。
4.如权利要求1所述的数据读写装置,其特征在于,所述至少一个输入数据组的数量,按照如下计算:
Get_H=(n-1)*Stride_H+Kernel_H,
其中,Get_H表示所述至少一个输入数据组的数量,Stride_H表示所述卷积核沿所述至少一个输入数据组的第二方向移动的第二步长, Kernel_H表示所述卷积核在所述至少一个输入数据组的所述第二方向上的大小,n表示所述至少一个处理单元组在所述至少一个输入数据组的所述第二方向上能够同时处理的所述卷积运算的数量。
5.如权利要求1所述的数据读写装置,其特征在于,所述至少一个输入数据组中的每个输入数据组包括的所述输入数据的数量,按照如下计算:
Get_W=(m-1)*Stride_W+Kernel_W,
其中Get_W表示所述每个输入数据组包括的所述输入数据的数量,Stride_W表示所述卷积核沿所述至少一个输入数据组的所述第一方向移动的所述第一步长, Kernel_W表示所述卷积核在所述至少一个输入数据组的所述第一方向上的大小,m表示所述至少一个处理单元组在所述至少一个输入数据组的所述第一方向上能够同时处理的所述卷积运算的数量。
6.如权利要求1所述的数据读写装置,其特征在于,所述至少一个输入数据组的数量,按照如下计算:
Get_W=(m-1)*Stride_W+Kernel_W,
其中Get_W表示所述每个输入数据组包括的所述输入数据的数量,Stride_W表示所述卷积核沿所述至少一个输入数据组的所述第一方向移动的所述第一步长, Kernel_W表示所述卷积核在所述至少一个输入数据组的所述第一方向上的大小,m表示所述至少一个处理单元组在所述至少一个输入数据组的所述第一方向上能够同时处理的所述卷积运算的数量。
7.如权利要求1所述的数据读写装置,其特征在于,所述至少一个输入数据组中的每个输入数据组包括的所述输入数据的数量,按照如下计算:
Get_H=(n-1)*Stride_H+Kernel_H,
其中,Get_H表示所述至少一个输入数据组的数量,Stride_H表示所述卷积核沿所述至少一个输入数据组的第二方向移动的第二步长, Kernel_H表示所述卷积核在所述至少一个输入数据组的所述第二方向上的大小,n表示所述至少一个处理单元组在所述至少一个输入数据组的所述第二方向上能够同时处理的所述卷积运算的数量。
8.一种用于多个卷积运算的数据读写装置,其特征在于,包括:
读写单元,用于从多个存储器库中读取所述多个卷积运算所需的多个输入数据,并从所述多个存储器库中的一个存储器库中读取所述多个卷积运算所需的多个卷积核,其中,所述多个卷积运算包括所述多个卷积核中的每个卷积核与所述多个输入数据的多次卷积运算;和
控制单元,用于控制所述读写单元从所述多个存储器库中读取所述多个输入数据和所述多个卷积核;
其中,所述控制单元还用于将所述多个输入数据沿着输入通道、高度以及宽度方向排列;
并且,所述控制单元用于控制所述读写单元从所述多个存储器库中读取所述多个输入数据和所述多个卷积核,还用于:
控制所述读写单元从所述多个存储器库中读取与所述多个输入数据的输入通道方向相对应的输入数据阵列,所述输入数据阵列包括沿着所述高度和所述宽度方向上排列的多个输入数据子阵列,其中所述多个输入数据子阵列中的每个输入数据子阵列包括至少一个处理单元同时处理所述多个卷积运算中的至少一个卷积运算所需的所述多个输入数据中的至少一个输入数据。
9.如权利要求8所述的数据读写装置,其特征在于,所述控制单元还用于控制所述读写单元沿着所述输入数据阵列的高度和宽度方向依次读取所述多个输入数据子阵列。
10.一种用于卷积运算的数据读写装置,其特征在于,包括:
读写单元;和
控制单元,与所述读写单元耦合,用于控制所述读写单元从至少一个存储器库组读取所述多个卷积运算所需的至少一个输入数据组,其中,
所述至少一个输入数据组中的一个或多个输入数据组存储在所述至少一个存储器库组中的一个存储器库组中;在所述一个存储器库组中的一个存储器库已存储所述一个或多个输入数据组中的预定数量的输入数据的情况下,所述一个或多个输入数据组中的下一个输入数据存储在所述一个存储器库组中的下一个存储器库,其中所述预定数量等于与所述多个卷积运算相关的卷积核沿着所述至少一个输入数据组的第一方向移动的第一步长,或者所述第一步长的整数倍;
其中,所述控制单元,还用于:
根据处理所述多个卷积运算的多个处理单元的数量,将所述多个处理单元分成至少一个处理单元组,其中,所述至少一个存储器库组的数量与所述至少一个处理单元组的数量相同,而所述至少一个存储器库组中的每个存储器库组包括的所述存储器库的数量等于所述至少一个处理单元组中的每个处理单元组包括的所述处理单元的数量与所述处理单元的运算能力系数的乘积,或,
所述至少一个存储器库组的数量等于所述至少一个处理单元组中的每个处理单元组包括的所述处理单元的数量与所述处理单元的运算能力系数的乘积,而所述至少一个存储器库组中的每个存储器库组包括的所述存储器库的数量与所述至少一个处理单元组的数量相同。
11.一种用于多个卷积运算的数据读写装置,其特征在于,包括:
读写单元;和
控制单元,与所述读写单元耦合,用于控制所述读写单元将所述多个卷积运算所需的多个输入数据写入多个存储器库,其中,所述控制单元用于:
在所述多个卷积运算中的两个卷积运算共享所述多个输入数据中的至少一个输入数据,所述两个卷积运算不共享所述多个输入数据中的至少两个输入数据,以及所述不共享的至少两个输入数据分别属于所述两个卷积运算的情况下,控制所述读写单元将所述共享的至少一个输入数据写入所述多个存储器库中的至少一个共享存储器库,并将所述不共享的至少两个输入数据写入所述多个存储器库中的至少一个不共享存储器库中,其中所述至少一个共享存储器库与至少一个不共享存储器库不同;
并且,所述控制单元,还用于:
根据处理所述多个卷积运算的多个处理单元的数量,将所述多个处理单元分成至少一个处理单元组,其中,所述至少一个存储器库组的数量与所述至少一个处理单元组的数量相同,而所述至少一个存储器库组中的每个存储器库组包括的所述存储器库的数量等于所述至少一个处理单元组中的每个处理单元组包括的所述处理单元的数量与所述处理单元的运算能力系数的乘积,或,
所述至少一个存储器库组的数量等于所述至少一个处理单元组中的每个处理单元组包括的所述处理单元的数量与所述处理单元的运算能力系数的乘积,而所述至少一个存储器库组中的每个存储器库组包括的所述存储器库的数量与所述至少一个处理单元组的数量相同。
12.一种卷积加速器,其特征在于,包括:
多个存储器库;
多个处理单元;和
如权利要求1-9以及11中任一项所述的用于多个卷积运算的数据读写装置,或者,权利要求10所述的用于卷积运算的数据读写装置。
13.一种用于多个卷积运算的数据读写方法,其特征在于,包括:
接收所述多个卷积运算所需的至少一个输入数据组;
将所述至少一个输入数据组写入至少一个存储器库组,其中,
将所述至少一个输入数据组中的一个或多个输入数据组写入所述至少一个存储器库组中的一个存储器库组中;
在已将所述一个或多个输入数据组中的预定数量的输入数据写入所述一个存储器库组中的一个存储器库的情况下,将所述一个或多个输入数据组中的下一个输入数据写入所述一个存储器库组中的下一个存储器库,其中所述预定数量等于与所述多个卷积运算相关的卷积核沿着所述至少一个输入数据组的第一方向移动的第一步长,或者所述第一步长的整数倍,
并且,根据处理所述多个卷积运算的多个处理单元的数量,将所述多个处理单元分成至少一个处理单元组,其中,所述至少一个存储器库组的数量与所述至少一个处理单元组的数量相同,而所述至少一个存储器库组中的每个存储器库组包括的所述存储器库的数量等于所述至少一个处理单元组中的每个处理单元组包括的所述处理单元的数量与所述处理单元的运算能力系数的乘积,或,
所述至少一个存储器库组的数量等于所述至少一个处理单元组中的每个处理单元组包括的所述处理单元的数量与所述处理单元的运算能力系数的乘积,而所述至少一个存储器库组中的每个存储器库组包括的所述存储器库的数量与所述至少一个处理单元组的数量相同。
14.如权利要求13所述的数据读写方法,其特征在于,还包括:
在已将第二预定数量的所述一个或多个输入数据组写入所述一个存储器库组中的情况下,将所述至少一个输入数据组中的下一个输入数据组写入所述至少一个存储器库组中的下一个存储器库组中,其中所述第二预定数量是所述卷积核沿着所述至少一个数据组的第二方向上移动的第二步长。
15.如权利要求14所述的数据读写方法,其特征在于,所述整数倍的数量与输入通道方向上的输入通道元素的数量相关。
16.如权利要求13所述的数据读写方法,其特征在于,还包括:
按照下列公式,计算所述至少一个输入数据组的数量:
Get_H=(n-1)*Stride_H+Kernel_H,
其中,Get_H表示所述至少一个输入数据组的数量,Stride_H表示所述卷积核沿所述至少一个输入数据组的第二方向移动的第二步长, Kernel_H表示所述卷积核在所述至少一个输入数据组的所述第二方向上的大小,n表示所述至少一个处理单元组在所述至少一个输入数据组的所述第二方向上能够同时处理的所述卷积运算的数量。
17.如权利要求13所述的数据读写方法,其特征在于,还包括:
按照下列公式,计算所述至少一个输入数据组中的每个输入数据组包括的所述输入数据的数量:
Get_W=(m-1)*Stride_W+Kernel_W,
其中Get_W表示所述每个输入数据组包括的所述输入数据的数量,Stride_W表示所述卷积核沿所述至少一个输入数据组的所述第一方向移动的所述第一步长, Kernel_W表示所述卷积核在所述至少一个输入数据组的所述第一方向上的大小,m表示所述至少一个处理单元组在所述至少一个输入数据组的所述第一方向上能够同时处理的所述卷积运算的数量。
18.如权利要求13所述的数据读写方法,其特征在于,还包括:
按照下列公式,计算所述至少一个输入数据组的数量:
Get_W=(m-1)*Stride_W+Kernel_W,
其中Get_W表示所述每个输入数据组包括的所述输入数据的数量,Stride_W表示所述卷积核沿所述至少一个输入数据组的所述第一方向移动的所述第一步长, Kernel_W表示所述卷积核在所述至少一个输入数据组的所述第一方向上的大小,m表示所述至少一个处理单元组在所述至少一个输入数据组的所述第一方向上能够同时处理的所述卷积运算的数量。
19.如权利要求13所述的数据读写方法,其特征在于,还包括:
按照下列公式,计算所述至少一个输入数据组中的每个输入数据组包括的所述输入数据的数量:
Get_H=(n-1)*Stride_H+Kernel_H,
其中,Get_H表示所述至少一个输入数据组的数量,Stride_H表示所述卷积核沿所述至少一个输入数据组的第二方向移动的第二步长, Kernel_H表示所述卷积核在所述至少一个输入数据组的所述第二方向上的大小,n表示所述至少一个处理单元组在所述至少一个输入数据组的所述第二方向上能够同时处理的所述卷积运算的数量。
20.一种用于多个卷积运算的数据读写方法,其特征在于,包括:
从多个存储器库中读取所述多个卷积运算所需的多个输入数据;和
从所述多个存储器库中的一个存储器库中读取所述多个卷积运算所需的多个卷积核,其中,所述多个卷积运算包括所述多个卷积核中的每个卷积核与所述多个输入数据的多次卷积运算;
其中,将所述多个输入数据沿着输入通道、高度以及宽度方向排列;
所述从多个存储器库中读取所述多个卷积运算所需的多个输入数据包括:
从所述多个存储器库中读取与所述多个输入数据的输入通道方向相对应的输入数据阵列,所述输入数据阵列包括沿着所述高度和所述宽度方向上排列的多个输入数据子阵列,其中所述多个输入数据子阵列中的每个输入数据子阵列包括至少一个处理单元同时处理所述多个卷积运算中的至少一个卷积运算所需的所述多个输入数据中的至少一个输入数据。
21.如权利要求20所述的数据读写方法,其特征在于,所述从所述多个存储器库中读取与所述多个输入数据的输入通道方向相对应的输入数据阵列,还包括:
沿着所述输入数据阵列的高度和宽度方向依次读取所述多个输入数据子阵列。
22.一种用于卷积运算的数据读写方法,其特征在于,包括:
从至少一个存储器库组读取所述多个卷积运算所需的至少一个输入数据组,其中,
所述至少一个输入数据组中的一个或多个输入数据组存储在所述至少一个存储器库组中的一个存储器库组中;和
在所述一个存储器库组中的一个存储器库已存储所述一个或多个输入数据组中的预定数量的输入数据的情况下,所述一个或多个输入数据组中的下一个输入数据存储在所述一个存储器库组中的下一个存储器库,其中所述预定数量等于与所述多个卷积运算相关的卷积核沿着所述至少一个输入数据组的第一方向移动的第一步长,或者所述第一步长的整数倍;
根据处理所述多个卷积运算的多个处理单元的数量,将所述多个处理单元分成至少一个处理单元组,其中,所述至少一个存储器库组的数量与所述至少一个处理单元组的数量相同,而所述至少一个存储器库组中的每个存储器库组包括的所述存储器库的数量等于所述至少一个处理单元组中的每个处理单元组包括的所述处理单元的数量与所述处理单元的运算能力系数的乘积,或,
所述至少一个存储器库组的数量等于所述至少一个处理单元组中的每个处理单元组包括的所述处理单元的数量与所述处理单元的运算能力系数的乘积,而所述至少一个存储器库组中的每个存储器库组包括的所述存储器库的数量与所述至少一个处理单元组的数量相同。
23.一种用于多个卷积运算的数据读写方法,其特征在于,包括:
接收所述多个卷积运算所需的多个输入数据;和
将与所述多个输入数据写入多个存储器库,其中,
在所述多个卷积运算中的两个卷积运算共享所述多个输入数据中的至少一个输入数据、所述两个卷积运算不共享所述多个输入数据中的至少两个输入数据、以及所述不共享的至少两个输入数据分别属于所述两个卷积运算的情况下,将所述共享的至少一个输入数据写入所述多个存储器库中的至少一个共享存储器库,并将所述不共享的至少两个输入数据写入所述多个存储器库中的至少一个不共享存储器库中,其中所述至少一个共享存储器库与至少一个不共享存储器库不同;
并且,根据处理所述多个卷积运算的多个处理单元的数量,将所述多个处理单元分成至少一个处理单元组,其中,所述至少一个存储器库组的数量与所述至少一个处理单元组的数量相同,而所述至少一个存储器库组中的每个存储器库组包括的所述存储器库的数量等于所述至少一个处理单元组中的每个处理单元组包括的所述处理单元的数量与所述处理单元的运算能力系数的乘积,或,
所述至少一个存储器库组的数量等于所述至少一个处理单元组中的每个处理单元组包括的所述处理单元的数量与所述处理单元的运算能力系数的乘积,而所述至少一个存储器库组中的每个存储器库组包括的所述存储器库的数量与所述至少一个处理单元组的数量相同。
24.一种非易失性存储介质,在所述存储介质上存储有用于多个卷积运算的数据读写程序,所述程序被计算机执行以实施权利要求13-21以及23中任意一项所述的用于多个卷积运算的数据读写方法,或者,权利要求22所述的用于卷积运算的数据读写方法。
25.一种用于多个卷积运算的数据读写设备,包括:
存储器,存储有计算机执行的用于多个卷积运算的数据读写程序;以及
处理器,连接至所述存储器,并且被配置为执行所述用于多个卷积运算的数据读写以实施权利要求13-21以及23中任意一项所述的用于多个卷积运算的数据读写方法,或者,权利要求22所述的用于卷积运算的数据读写方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910779660.7A CN110533177B (zh) | 2019-08-22 | 2019-08-22 | 一种数据读写装置、方法、设备、介质及卷积加速器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910779660.7A CN110533177B (zh) | 2019-08-22 | 2019-08-22 | 一种数据读写装置、方法、设备、介质及卷积加速器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110533177A CN110533177A (zh) | 2019-12-03 |
CN110533177B true CN110533177B (zh) | 2023-12-26 |
Family
ID=68664035
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910779660.7A Active CN110533177B (zh) | 2019-08-22 | 2019-08-22 | 一种数据读写装置、方法、设备、介质及卷积加速器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110533177B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111105026A (zh) * | 2019-12-25 | 2020-05-05 | 上海安路信息科技有限公司 | 数据读取方法及数据读取系统 |
WO2021179289A1 (zh) * | 2020-03-13 | 2021-09-16 | 深圳市大疆创新科技有限公司 | 卷积神经网络的运算方法、装置、设备和存储介质 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3035204A1 (en) * | 2014-12-19 | 2016-06-22 | Intel Corporation | Storage device and method for performing convolution operations |
CN107229598A (zh) * | 2017-04-21 | 2017-10-03 | 东南大学 | 一种面向卷积神经网络的低功耗电压可调卷积运算模块 |
CN108108809A (zh) * | 2018-03-05 | 2018-06-01 | 山东领能电子科技有限公司 | 一种针对卷积神经元网络进行推理加速的硬件架构及其工作方法 |
CN108133270A (zh) * | 2018-01-12 | 2018-06-08 | 清华大学 | 卷积神经网络加速方法及装置 |
CN108171317A (zh) * | 2017-11-27 | 2018-06-15 | 北京时代民芯科技有限公司 | 一种基于soc的数据复用卷积神经网络加速器 |
CN108182471A (zh) * | 2018-01-24 | 2018-06-19 | 上海岳芯电子科技有限公司 | 一种卷积神经网络推理加速器及方法 |
CN108241890A (zh) * | 2018-01-29 | 2018-07-03 | 清华大学 | 一种可重构神经网络加速方法及架构 |
CN108629411A (zh) * | 2018-05-07 | 2018-10-09 | 济南浪潮高新科技投资发展有限公司 | 一种卷积运算硬件实现装置及方法 |
CN108805266A (zh) * | 2018-05-21 | 2018-11-13 | 南京大学 | 一种可重构cnn高并发卷积加速器 |
CN109886395A (zh) * | 2019-03-06 | 2019-06-14 | 上海熠知电子科技有限公司 | 一种面向多核图像处理卷积神经网络的数据读取方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9613001B2 (en) * | 2013-12-20 | 2017-04-04 | Intel Corporation | Processing device for performing convolution operations |
-
2019
- 2019-08-22 CN CN201910779660.7A patent/CN110533177B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3035204A1 (en) * | 2014-12-19 | 2016-06-22 | Intel Corporation | Storage device and method for performing convolution operations |
CN107003988A (zh) * | 2014-12-19 | 2017-08-01 | 英特尔公司 | 用于执行卷积运算的存储设备和方法 |
CN107229598A (zh) * | 2017-04-21 | 2017-10-03 | 东南大学 | 一种面向卷积神经网络的低功耗电压可调卷积运算模块 |
CN108171317A (zh) * | 2017-11-27 | 2018-06-15 | 北京时代民芯科技有限公司 | 一种基于soc的数据复用卷积神经网络加速器 |
CN108133270A (zh) * | 2018-01-12 | 2018-06-08 | 清华大学 | 卷积神经网络加速方法及装置 |
CN108182471A (zh) * | 2018-01-24 | 2018-06-19 | 上海岳芯电子科技有限公司 | 一种卷积神经网络推理加速器及方法 |
CN108241890A (zh) * | 2018-01-29 | 2018-07-03 | 清华大学 | 一种可重构神经网络加速方法及架构 |
CN108108809A (zh) * | 2018-03-05 | 2018-06-01 | 山东领能电子科技有限公司 | 一种针对卷积神经元网络进行推理加速的硬件架构及其工作方法 |
CN108629411A (zh) * | 2018-05-07 | 2018-10-09 | 济南浪潮高新科技投资发展有限公司 | 一种卷积运算硬件实现装置及方法 |
CN108805266A (zh) * | 2018-05-21 | 2018-11-13 | 南京大学 | 一种可重构cnn高并发卷积加速器 |
CN109886395A (zh) * | 2019-03-06 | 2019-06-14 | 上海熠知电子科技有限公司 | 一种面向多核图像处理卷积神经网络的数据读取方法 |
Non-Patent Citations (2)
Title |
---|
Optimizing the Convolution Operation to Accelerate Deep Neural Networks on FPGA;Muhammad Abdullah Hanif 等;IEEE Transactions on Very Large Scale Integration (VLSI) Systems;全文 * |
基于FPGA的卷积人工神经网络加速方法与实现研究;王金兰;CNKI优秀硕士学位论文全文库;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110533177A (zh) | 2019-12-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7431913B2 (ja) | 畳み込みニューラルネットワークのための効率的データレイアウト | |
JP7329533B2 (ja) | 演算を加速するための方法および加速器装置 | |
US20200202198A1 (en) | Neural network processor | |
CN110050267B (zh) | 用于数据管理的系统和方法 | |
US11544559B2 (en) | System and method for executing convolution in a neural network | |
KR102492477B1 (ko) | 행렬 곱셈기 | |
US10394929B2 (en) | Adaptive execution engine for convolution computing systems | |
CN111258495A (zh) | 半导体存储器设备和操作该半导体存储器设备的方法 | |
JP2019109895A (ja) | ニューラルネットワークにおける畳み込み計算のための方法および電子デバイス | |
CN111465943B (zh) | 一种集成电路和用于神经网络处理的方法 | |
US20210019594A1 (en) | Convolutional neural network accelerating device and method | |
CN116541647A (zh) | 运算加速器、处理方法及相关设备 | |
CA2929403C (en) | Multi-dimensional sliding window operation for a vector processor | |
US20210157594A1 (en) | Data temporary storage apparatus, data temporary storage method and operation method | |
CN110533177B (zh) | 一种数据读写装置、方法、设备、介质及卷积加速器 | |
EP3844610B1 (en) | Method and system for performing parallel computation | |
CN113673701A (zh) | 神经网络模型的运行方法、可读介质和电子设备 | |
US20220253683A1 (en) | Implementing Fully-Connected Neural-Network Layers in Hardware | |
US20240004809A1 (en) | Accelerator, method of operating an accelerator, and electronic device including an accelerator | |
CN113076521A (zh) | 一种基于gpgpu可重构架构的方法及计算系统 | |
Fan et al. | DT-CGRA: Dual-track coarse-grained reconfigurable architecture for stream applications | |
CN114358237A (zh) | 多核硬件中神经网络的实现方式 | |
CN110414672B (zh) | 卷积运算方法、装置及系统 | |
KR20230081697A (ko) | 팽창 컨볼루션 계산 가속화 방법 및 장치 | |
CN113254359A (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 |