CN110751263A - 一种高并行度的卷积运算取数方法和电路 - Google Patents

一种高并行度的卷积运算取数方法和电路 Download PDF

Info

Publication number
CN110751263A
CN110751263A CN201910848453.2A CN201910848453A CN110751263A CN 110751263 A CN110751263 A CN 110751263A CN 201910848453 A CN201910848453 A CN 201910848453A CN 110751263 A CN110751263 A CN 110751263A
Authority
CN
China
Prior art keywords
unit
data
line
reading
cache
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201910848453.2A
Other languages
English (en)
Other versions
CN110751263B (zh
Inventor
廖裕民
郑柏春
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fuzhou Rockchip Electronics Co Ltd
Original Assignee
Fuzhou Rockchip Electronics Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fuzhou Rockchip Electronics Co Ltd filed Critical Fuzhou Rockchip Electronics Co Ltd
Priority to CN201910848453.2A priority Critical patent/CN110751263B/zh
Publication of CN110751263A publication Critical patent/CN110751263A/zh
Application granted granted Critical
Publication of CN110751263B publication Critical patent/CN110751263B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

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)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Neurology (AREA)
  • Image Processing (AREA)

Abstract

本发明提供了一种高并行度的卷积运算取数方法和电路,所述方法包括以下步骤:第一读数单元从主存储单元中读取第一数据,并将读取到的第一数据依次写入第一行缓存组中;第一重组控制单元在第一行缓存组被填满后,对第一行缓存组中的各缓存行缓存的第一数据进行组装,得到重组装后的单行第一数据,并将单行第一数据写入第一输出缓存单元中;第二读数单元和第二重组控制单元根据同样的方式从主存储单元中读取第二数据并写入第二输出缓存单元中;乘加阵列单元获取当前第一输出缓存单元中的第一数据和第二输出缓存单元中的第二数据,进行乘加运算后输出运算结果。上述方案可以有效提高数据读取并行度,进而提高卷积运算效率。

Description

一种高并行度的卷积运算取数方法和电路
技术领域
本发明涉及神经网络电路领域,特别涉及一种高并行度的卷积运算取数方法和电路。
背景技术
随着人工智能产业的快速发展,用户对神经网络的运算速度和运行功耗要求越来越高。而卷积神经网络作为最重要的一种神经网络类型,其核心的卷积运算占用了神经网络加速电路中的绝大部分,因此卷积运算的效率和电路面积将会直接影响到整个神经网络加速电路的最终效率和电路面积。然而现有技术中卷积运算电路还没有很好的处理高并行度下的高效率数据复用和低功耗设计问题,造成神经网络运算电路面积和功耗仍然较高且效率低下。
发明内容
为此,需要提供一种高并行度的卷积运算取数的技术方案,用以解决现有的卷积运算电路运算过程中数据读取效率低的问题。
为实现上述目的,发明人提供了一种高并行度的卷积运算取数电路,所述电路包括读数单元、重组单元、输出缓存单元和乘加阵列单元;所述读数单元包括第一读数单元和第二读数单元,所述重组单元包括第一重组单元和第二重组单元,所述输出缓存单元包括第一输出缓存单元和第二输出缓存单元;所述第一读数单元和第一重组单元连接,所述第一重组单元和第一输出缓存单元连接;所述第二读数单元和第二重组单元连接,所述第二重组单元和第二输出缓存单元连接;所述第一输出缓存单元和第二输出缓存单元分别与乘加阵列单元连接;
所述第一重组单元包括第一重组控制单元和第一行缓存组,所述第一行缓存组包括多个第一行缓存,各第一行缓存均与第一重组控制单元连接;所述第二重组单元包括第二重组控制单元和第二行缓存组,所述第二行缓存组包括多个第二行缓存,各第二行缓存均与第二重组控制单元连接;
所述第一读数单元用于从主存储单元中读取第一数据,并将读取到的第一数据依次写入第一行缓存组中;
所述第一重组控制单元用于在第一行缓存组被填满后,对第一行缓存组中的各缓存行缓存的第一数据进行组装,得到重组装后的单行第一数据,并将单行第一数据写入第一输出缓存单元中;
所述第二读数单元用于从主存储单元中读取第二数据,并将读取到的第二数据依次写入第二行缓存组中;
所述第二重组控制单元用于在第二行缓存组被填满后,对第二行缓存组中的各缓存行缓存的第二数据进行组装,得到重组装后的单行第二数据,并将单行第二数据写入第二输出缓存单元中;
所述乘加阵列单元用于在当接收到卷积运算启动信号后,获取当前第一输出缓存单元中的第一数据和第二输出缓存单元中的第二数据,进行乘加运算后输出运算结果。
进一步地,所述第一行缓存组和第二行缓存的数量为两个;
当一个第一行缓存组被第一数据填满时,第一读数单元用于从主存储单元中继续读取第一数据写入到另一个第一行缓存组中;
当一个第二行缓存组被第二数据填满时,第二读数单元用于从主存储单元中继续读取第二数据写入到另一个第二行缓存组中。
进一步地,所述电路还包括读取控制平衡单元;
所述读取控制平衡单元用于在判定两个第一行缓存组均已被第一数据填满且两个第二行缓存组中均未被第二数据填满时,控制所述第一读数单元停止从所述主存储单元中读取第一数据,以及在判定两个第二行缓存组中至少有一个被第二数据填满时,恢复第一读数单元继续从所述主存储单元中读取数据;
或者,所述读取控制平衡单元用于在判定两个第二行缓存组均已被第二数据填满且两个第一行缓存组中均未被第一数据填满时,控制所述第二读数单元停止从所述主存储单元中读取第二数据,以及在判定两个第一行缓存组中至少有一个被第二数据填满时,恢复第二读数单元继续从所述主存储单元中读取数据。
进一步地,所述电路还包括运算有效判断单元,所述运算有效判断单元分别与第一输出缓存单元、第二输出缓存单元、乘加阵列单元连接;
所述运算有效判断单元用于在接收到第一输出缓存单元发送的第一数据输出有效信号以及第二数据输出缓存单元发送的第二数据输出有效信号后,发送卷积运算启动信号至乘加阵列单元。
进一步地,所述电路还包括模式配置单元,所述模式配置单元分别与第一读数单元、第二读书单元连接;
所述模式配置单元用于根据模式配置信号对应调整参与运算的第一行缓存组中的第一缓存数量和第二行缓存组中的第二缓存数量,以及对应调整参与运算的第一输出缓存单元和第二输出缓存单元的存储长度范围。
发明人提供了一种高并行度的卷积运算取数方法,应用于高并行度的卷积运算取数电路,所述电路包括读数单元、重组单元、输出缓存单元和乘加阵列单元;所述读数单元包括第一读数单元和第二读数单元,所述重组单元包括第一重组单元和第二重组单元,所述输出缓存单元包括第一输出缓存单元和第二输出缓存单元;所述第一读数单元和第一重组单元连接,所述第一重组单元和第一输出缓存单元连接;所述第二读数单元和第二重组单元连接,所述第二重组单元和第二输出缓存单元连接;所述第一输出缓存单元和第二输出缓存单元分别与乘加阵列单元连接;
所述第一重组单元包括第一重组控制单元和第一行缓存组,所述第一行缓存组包括多个第一行缓存,各第一行缓存均与第一重组控制单元连接;所述第二重组单元包括第二重组控制单元和第二行缓存组,所述第二行缓存组包括多个第二行缓存,各第二行缓存均与第二重组控制单元连接;
所述方法包括以下步骤:
第一读数单元从主存储单元中读取第一数据,并将读取到的第一数据依次写入第一行缓存组中;
第一重组控制单元在第一行缓存组被填满后,对第一行缓存组中的各缓存行缓存的第一数据进行组装,得到重组装后的单行第一数据,并将单行第一数据写入第一输出缓存单元中;
第二读数单元从主存储单元中读取第二数据,并将读取到的第二数据依次写入第二行缓存组中;
第二重组控制单元在第二行缓存组被填满后,对第二行缓存组中的各缓存行缓存的第二数据进行组装,得到重组装后的单行第二数据,并将单行第二数据写入第二输出缓存单元中;
乘加阵列单元在当接收到卷积运算启动信号后,获取当前第一输出缓存单元中的第一数据和第二输出缓存单元中的第二数据,进行乘加运算后输出运算结果。
进一步地,所述第一行缓存组和第二行缓存的数量为两个;所述方法包括:
当一个第一行缓存组被第一数据填满时,第一读数单元从主存储单元中继续读取第一数据写入到另一个第一行缓存组中;
当一个第二行缓存组被第二数据填满时,第二读数单元从主存储单元中继续读取第二数据写入到另一个第二行缓存组中。
进一步地,所述电路还包括读取控制平衡单元;所述方法包括:
读取控制平衡单元在判定两个第一行缓存组均已被第一数据填满且两个第二行缓存组中均未被第二数据填满时,控制所述第一读数单元停止从所述主存储单元中读取第一数据,以及在判定两个第二行缓存组中至少有一个被第二数据填满时,恢复第一读数单元继续从所述主存储单元中读取数据;
或者,读取控制平衡单元在判定两个第二行缓存组均已被第二数据填满且两个第一行缓存组中均未被第一数据填满时,控制所述第二读数单元停止从所述主存储单元中读取第二数据,以及在判定两个第一行缓存组中至少有一个被第二数据填满时,恢复第二读数单元继续从所述主存储单元中读取数据。
进一步地,所述电路还包括运算有效判断单元,所述运算有效判断单元分别与第一输出缓存单元、第二输出缓存单元、乘加阵列单元连接;
所述运算有效判断单元用于在接收到第一输出缓存单元发送的第一数据输出有效信号以及第二数据输出缓存单元发送的第二数据输出有效信号后,发送卷积运算启动信号至乘加阵列单元。
进一步地,所述电路还包括模式配置单元,所述模式配置单元分别与第一读数单元、第二读书单元连接;
所述模式配置单元用于根据模式配置信号对应调整参与运算的第一行缓存组中的第一缓存数量和第二行缓存组中的第二缓存数量,以及对应调整参与运算的第一输出缓存单元和第二输出缓存单元的存储长度范围。
上述技术方案所述的高并行度的卷积运算取数方法和电路,所述方法包括以下步骤:第一读数单元从主存储单元中读取第一数据,并将读取到的第一数据依次写入第一行缓存组中;第一重组控制单元在第一行缓存组被填满后,对第一行缓存组中的各缓存行缓存的第一数据进行组装,得到重组装后的单行第一数据,并将单行第一数据写入第一输出缓存单元中;第二读数单元从主存储单元中读取第二数据,并将读取到的第二数据依次写入第二行缓存组中;第二重组控制单元在第二行缓存组被填满后,对第二行缓存组中的各缓存行缓存的第二数据进行组装,得到重组装后的单行第二数据,并将单行第二数据写入第二输出缓存单元中;乘加阵列单元在当接收到卷积运算启动信号后,获取当前第一输出缓存单元中的第一数据和第二输出缓存单元中的第二数据,进行乘加运算后输出运算结果。上述方案在保证卷积运算高并行度运算的基础上仍保持很高的运算效率和数据复用,大幅降低数据带宽需求和功耗消耗,从而降低了整个神经网络电路的面积和功耗。
附图说明
图1为本发明一实施例涉及的高并行度的卷积运算取数电路的示意图;
图2为本发明一实施例涉及的读数单元从主存储单元进行读数的示意图;
图3为本发明一实施例涉及的读数单元从主存储单元进行读数的示意图;
图4为本发明另一实施例涉及的高并行度的卷积运算取数电路的示意图;
图5为本发明一实施例涉及的高并行度的卷积运算取数方法的流程图;
图6为本发明一实施例涉及的Winograd算法的原理示意图;
图7为本发明一实施例涉及的乘加阵列单元的示意图;
图8为本发明一实施例涉及的第一矩阵运算单元的示意图;
附图标记说明:
10、高并行度的卷积运算取数电路;20、主存储单元;
101、第一读数单元;
102、第二读数单元;
103、第一重组单元;1031、第一重组控制单元;1032、第一行缓存组;
104、第二重组单元;1041、第二重组控制单元;1042、第二行缓存组;
105、第一输出缓存单元;
106、第二输出缓存单元;
107、乘加阵列单元;1071、第一矩阵运算单元;1072、第二矩阵运算单元;
108、读取控制平衡单元;
109、运算有效判断单元;
110、第一加法器;111、第二加法器;112、第一补码运算单元;113、第二补码运算单元。
具体实施方式
为详细说明技术方案的技术内容、构造特征、所实现目的及效果,以下结合具体实施例并配合附图详予说明。
请参阅图1,为本发明一实施例涉及的高并行度的卷积运算取数电路的示意图。所述电路10包括读数单元、重组单元、输出缓存单元和乘加阵列单元;所述读数单元包括第一读数单元101和第二读数单元102,所述重组单元包括第一重组单元103和第二重组单元104,所述输出缓存单元包括第一输出缓存单元105和第二输出缓存单元106;所述第一读数单元101和第一重组单元103连接,所述第一重组单元103和第一输出缓存单元105连接;所述第二读数单元102和第二重组单元104连接,所述第二重组单元104和第二输出缓存单元106连接;所述第一输出缓存单元105和第二输出缓存单元106分别与乘加阵列单元107连接;
所述第一重组单元103包括第一重组控制单元1031和第一行缓存组1032,所述第一行缓存组1032包括多个第一行缓存,各第一行缓存均与第一重组控制单元连接;所述第二重组单元104包括第二重组控制单元1041和第二行缓存组1042,所述第二行缓存组1042包括多个第二行缓存,各第二行缓存均与第二重组控制单元连接;
所述第一读数单元101用于从主存储单元20中读取第一数据,并将读取到的第一数据依次写入第一行缓存组1032中;
所述第一重组控制单元1031用于在第一行缓存组1032被填满后,对第一行缓存组1032中的各缓存行缓存的第一数据进行组装,得到重组装后的单行第一数据,并将单行第一数据写入第一输出缓存单元105中;
所述第二读数单元102用于从主存储单元20中读取第二数据,并将读取到的第二数据依次写入第二行缓存组1042中;
所述第二重组控制单元1041用于在第二行缓存组1042被填满后,对第二行缓存组1042中的各缓存行缓存的第二数据进行组装,得到重组装后的单行第二数据,并将单行第二数据写入第二输出缓存单元106中;
所述乘加阵列单元107用于在当接收到卷积运算启动信号后,获取当前第一输出缓存单元105中的第一数据和第二输出缓存单元106中的第二数据,进行乘加运算后输出运算结果。
在本实施方式中,所述主存储单元为存储有第一数据和第二数据的存储单元,优选为DDR。所述第一数据为卷积运算所需的权重数据,所述第二数据为卷积运算所需的特征数据,卷积运算即是对读取到的权重数据和特征数据进行乘加运算。当然,在另一些实施例中,第一数据也可以为特征数据,第二数据为权重数据。所述权重数据和特征数据可以为矩阵数据,如4x4矩阵,3x3矩阵等。
通过上述方案,当第一读数单元从主存储单元中读取第一数据后,会先将读取到的数据写入到第一行缓存组中进行缓存,第一重组控制单元待第一行缓存组被填满后,对第一行缓存组中的各缓存行缓存的第一数据进行组装,得到重组装后的单行第一数据,并将单行第一数据写入第一输出缓存单元中。第二读数单元和第二重组控制单元采用同样的方式处理以生成单行第二数据,并将第二数据写入第二输出缓存单元中。而后乘加阵列单元对当前第一输出缓存单元中的第一数据和第二输出缓存单元中的第二数据进行乘加运算,以输出卷积运算结果。由于乘加阵列单元获取的第一数据和第二数据都是被重组组装为单行,所有数据只需从输出缓存单元中逐个读取即可,相较于从多个行缓存读取数据的方式,有效提升了数据读取效率,进而提升了卷积运算效率。
在某些实施例中,所述第一行缓存组和第二行缓存的数量为两个。当一个第一行缓存组被第一数据填满时,第一读数单元用于从主存储单元中继续读取第一数据写入到另一个第一行缓存组中;当一个第二行缓存组被第二数据填满时,第二读数单元用于从主存储单元中继续读取第二数据写入到另一个第二行缓存组中。
如图1所示,第一缓存器组的数量为两个,包括第一缓存器组A和第一缓存器组B,第一读数单元101读取的数据会先写入到第一缓存组A中,等第一缓存组A被填满后,则第一读数单元101读取到的第一数据会被写入到第一缓存组B中。当第一缓存组B被填满且第一缓存组A的数据被重组装,第一读数单元101读取的第一数据可以继续写入到第一缓存组A中,以此类推,实现乒乓流水作业,从而提升第一数据读取效率。
同理,第二缓存组的数量为两个,包括第二缓存组A和第二缓存组B,第二读数单元102读取的数据会先写入到第二缓存组A中,等第二缓存组A被填满后,则第二读数单元102读取到的第二数据会被写入到第二缓存组B中。当第二缓存组B被填满且第二缓存组A的数据被重组装,第二读数单元102读取的第二数据可以继续写入到第二缓存组A中,以此类推,实现乒乓流水作业,从而提升第二数据读取效率。
卷积运算需要同步用到权重数据和特征数据,即第一数据和第二数据只有在同步输送给乘加阵列单元,乘加阵列单元才会开始卷积运算,为了保证第一数据和第二数据读取进度的平衡性,在某些实施例中,所述电路还包括读取控制平衡单元108:
所述读取控制平衡单元108用于在判定两个第一行缓存组均已被第一数据填满且两个第二行缓存组中均未被第二数据填满时,控制所述第一读数单元停止从所述主存储单元中读取第一数据,以及在判定两个第二行缓存组中至少有一个被第二数据填满时,恢复第一读数单元继续从所述主存储单元中读取数据;
或者,所述读取控制平衡单元108用于在判定两个第二行缓存组均已被第二数据填满且两个第一行缓存组中均未被第一数据填满时,控制所述第二读数单元停止从所述主存储单元中读取第二数据,以及在判定两个第一行缓存组中至少有一个被第二数据填满时,恢复第二读数单元继续从所述主存储单元中读取数据。
例如某一个行缓存组中包含4个4x16bit的寄存器,当这4个行缓存均被写满之后,第一重组控制单元将这4个4x16bit被并行读出,成为16x16bit(256bit)数据,放入并行缓存单元。并行缓存单元由memory构成,位宽就是16xNbit(N为一个数据的bit精度,此例中为16bit),深度为8(此深度可根据实际需要进行调整,深度越深,可缓存的数据越多,抗总线效率波动能力越强)。当并行缓存单元(即输出缓存单元)存在至少一个有效数据(即输出缓存单元被填入单行第一数据或单行第二数据)后,就会将输出的数据准备完毕信号拉高。当feature(特征数据)和weight(权重数据)各自对应的并行缓存单元(即第一输出缓存单元和第二输出缓存单元)的数据准备完毕信号都为高时,卷积乘加阵列单元开始进行卷积运算。每次都从feature和weight的并行缓存单元中读取16xNbit的数据完成一次卷积运算。卷积运算为神经网络运算领域很常规的运算,此处不再展开,优选的,本实施方式中的卷积运算可以采用winograd运算进行。
这样,只有在至少有一个第一缓存组和第二缓存组中都填满有数据时,乘加阵列单元才会获取数据开始乘加运算,可以有效避免第一重组单元或第二重组单元在另一个重组单元还未写入数据时,因自身的缓存组已被完全填满无法开始卷积运算却仍不断向总线发起读数据请求,占用总线信号带宽的问题。
在某些实施例中,所述电路还包括运算有效判断单元109,所述运算有效判断单元109分别与第一输出缓存单元105、第二输出缓存单元106、乘加阵列单元107连接;所述运算有效判断单元109用于在接收到第一输出缓存单元105发送的第一数据输出有效信号以及第二数据输出缓存单元发送的第二数据输出有效信号后,发送卷积运算启动信号至乘加阵列单元107。
优选的,第一数据输出有效信号是在第一输出缓存单元被填满时发送给运算有效判断单元的,第二数据输出有效信号是在第二输出缓存单元被填满时发送给运算有效判断单元的。这样,可以保证只有在第一输出缓存单元中存储有卷积运算需要的第一数据以及第二输出缓存单元中存储有卷积运算需要的第二数据时,乘加阵列单元才开始卷积运算,使得卷积运算有序进行。
在某种实时里中,所述电路还包括模式配置单元,所述模式配置单元分别与第一读数单元、第二读书单元连接;所述模式配置单元用于根据模式配置信号对应调整参与运算的第一行缓存组中的第一缓存数量和第二行缓存组中的第二缓存数量,以及对应调整参与运算的第一输出缓存单元和第二输出缓存单元的存储长度范围。
假设第一行缓存组包含的行缓存数量为4个,每一行缓存包括4个行缓存器,读数单元以4x4矩阵为单位从DDR中读取所需数据。当本发明电路在处理3x3矩阵时,数据读取顺序从4x4的从左到右,从上到下变为3x3的从左到右,从上到下(即取4x4矩阵左上角的3x3矩阵数据)。同时,各行缓存组中的4个4x16bit寄存器只使用其中的3个3x16bit。在该模式下,当3个3x16bit被写满则表示一个行缓存组被写满,即在4x4矩阵模式下行缓存有4行,只有4行均被写满才可以判定该行缓存组被写满。而3x3矩阵模式下行缓存虽然也有4行,但是被使用的部分只有3行,因而当3个行缓存被写满则可以判定该行缓存组被写满。此外,对应的输出缓存单元中只使用9xNbit(N为一个数据的bit精度,此例中为16bit),剩余的7xNbit都填0,以保证卷积运算时只有输出缓存单元的前9/16部分数据参与运算。其他3x3模式下的运算流程与4x4模式下运算的流程一致,此处不再赘述。
当然,在配置行缓存组的行缓存数量时,可以根据实际运算需要进行调整。例如当卷积运算最大需要进行8x8矩阵的运算时,则每一行缓存组包含8个行缓存,每个行缓存又包含8个数据缓存器,从而适用于8x8矩阵数据的写入。此外,电路可以通过模式配置单元来配置不同的运算模式,例如8x8矩阵数据可以通过配置来调整参与运算的行缓存数量,以使得电路除了能够处理8x8矩阵的卷积运算之外,还可以适用于6x6矩阵、4x4矩阵、3x3矩阵(NXN矩阵,N为正整数且小于8)等的卷积运算,从而有效提升电路运算的整体复用性。
如图2和3所示,第一读数单元或第二读数单元是根据时钟周期来从主存储单元中读取需要进行卷积运算的数据,例如当前权重数据或特征数据均为4x4矩阵,则第一读数单元或第二读数单元先按图2中箭头所示方向分别依次读取第一数据或第二数据。假设步进值为2,则当读数单元按照图2所示箭头方向读取完数据后,将按照图3所示箭头方向从主存储单元中读取各通道数据。
如图4所示,以第一数据为权重数据、第二数据为特征数据,且均为4x4矩阵为例,下面对本发明涉及的电路进行卷积运算取数的过程展开做进一步描述。
第一读数单元每次读取一个channel上的4个weight数据,每4次读取完成一个channel的weight读取;第二读数单元负责按照channel方向上读取feature_data数据(即特征数据),每次读取一个channel上的4个feature_data数据,每4次读取完成一个channel的feature_data读取。
weight重组单元(即第一重组单元)负责将每次读入的4个weight数据放入对应的第一行缓存中,第一行缓存有4个。当weight读控制单元的4次读取完成一个channel的16个weight读取后,4个行缓存也对应存放满了。此时weight重组单元会将16个weight数据重组为16个并行数据(即单行第一数据)一一填入weight并行输出缓存单元(即第一输出缓存单元)的16个并行输出缓存中。
weight并行输出缓存单元(即第一输出缓存单元)负责将缓存的16个weight数据并行送往乘加阵列单元进行乘加卷积运算,从而一次可以完成一个channel上4x4矩阵的winograd卷积运算。
feature_data重组单元(即第二重组单元)负责将每次读入的4个feature_data数据放入对应的第二行缓存中,第二行缓存有4个。当feature_data读控制单元的4次读取完成一个channel的16个feature_data读取后,4个行缓存也对应存放满了。此时feature_data重组单元会将16个feature_data数据重组为16个并行数据一一填入feature_data并行输出缓存单元的16个并行输出缓存中。
feature_data并行输出缓存单元(即第二输出缓存单元),负责将缓存的16个feature_data数据并行送往乘加阵列单元进行乘加卷积运算,从而一次可以完成一个channel上4x4矩阵的winograd卷积运算。
乘加阵列单元负责对weight数据和feature_data数据进行一个winograd 4x4矩阵的乘加操作完成卷积运算。
请参阅图6,为本发明一实施例涉及的Winograd算法的原理示意图。Winograd算法简单来说,就是用更多的加法计算来减少乘法计算。因此,一个前提就是,在处理器中,乘法计算的时钟周期数要大于加法计算的时钟周期。Winograd计算卷积需要完成的乘法的次数为:
μ(F(m×n,r×s))=(m+n-1)×(n+s-1)
r×s表示卷积核的大小,m×n表示输出大小。
所以,做一个简单的对比计算:3×3的卷积核,输出为2×2,那么,滑窗或者im2col需要的乘法计算次数为3×3×2×2=36,Winograd需要的乘法计算次数为(3+2-1)×(3+2-1)=16。
Winograd的证明方法较为复杂,要用到数论中的一些知识,但是,使用起来很简单。只需要按照如下公式计算:
Y=AT[[GgGT]⊙[BTdB]]A
其中,⊙表示element-wise multiplication(数组元素依次相乘)。A,G,B根据输出大小和卷积核大小不同有不同的定义,并且是提前确定了的。每种输出大小和卷积核的A,G,B具体是多少,可以通过https://github.com/andravin/wincnn的脚本计算。g表示的是卷积核,d表示要进行卷积计算的data,g的大小为r×r,d的大小为(m+r-1)×(m+r-1)。
以输入矩阵为4x4矩阵为例,在对该4x4矩阵进行卷积运算时,该算法的本质是可以进行4个3x3矩阵的卷积运算,并可以通过一个4x4矩阵卷积运算后再通过如图6所示的算法公式变为4个3x3卷积的结果。
进一步的,在如图6所示的算法中,左边(2行4列矩阵)和右边(4行2列矩阵)的矩阵分别为要做矩阵乘法的矩阵数据。中间为4x4矩阵是经过乘法器运算后的4x4矩阵运算结果,其中的数字0~15是数据位置编号,具体按照先从上到下、后从左到右的顺序排布。经过如图1所示的公式运算后,会得到一个2x2的矩阵结果,该结果中的每个数据都是原来4个3x3矩阵的卷积运算结果,具体如下:
2x2矩阵的第1行第1列数据对应“0、1、2、4、5、6、8、9、10”这9个数据组成的3x3矩阵(以下简称“矩阵1”)的运算结果;
2x2矩阵的第1行第2列数据对应“4、5、6、8、9、10、12、13、14”这9个数据组成的3x3矩阵(以下简称“矩阵2”)的运算结果;
2x2矩阵的第2行第1列数据对应“1、2、3、5、6、7、9、10、11”这9个数据组成的3x3矩阵(以下简称“矩阵3”)的运算结果;
2x2矩阵的第2行第2列数据对应“5、6、7、9、10、11、13、14、15”这9个数据组成的3x3矩阵(以下简称“矩阵4”)的运算结果。
为了实现上述算法的功能,以减少卷积运算的运算量,如图7所示,本发明提供了一种乘加阵列单元的结构示意图,所述乘加阵列单元包括乘法运算单元、矩阵运算单元、数据缓存单元;所述矩阵运算单元包括第一矩阵运算单元1071和第二矩阵运算单元1072;所述乘法运算单元包括多个乘法器;
所述第一矩阵运算单元1071用于接收与之连接的乘法器的第一运算结果,进行第一矩阵运算,得到第一矩阵运算结果,并将所述第一矩阵运算结果存储于对应的数据缓存单元中;
所述第二矩阵运算单元1072用于获取数据缓存单元的第一矩阵运算结果,进行第二矩阵运算,得到第二矩阵运算结果并输出。
优选的,在某些实施例中,进行卷积优化运算的矩阵为4x4矩阵,所述乘法器的数量为16个,所述第一矩阵运算单元的数量为4个,所述数据缓存单元的数量为8个,所述第二矩阵运算单元的数量为2个;每一个第一矩阵运算单元根据第一配置规则对应与4个乘法器连接以及对应与2个数据缓存单元连接;每一个第二数据运算单元根据第二配置规则对应与4个数据缓存单元连接。
例如图6中有编号为0至16共计16个乘法器,编号为A至D四个第一矩阵运算单元,第1行第1列至第2行第4列共计8个数据缓存单元。编号为a和b两个第二矩阵运算单元。乘法器0至乘法器3与第一矩阵运算单元A连接,乘法器4至乘法器7与第一矩阵运算单元B连接,乘法器8至乘法器11与第一矩阵运算单元C连接,乘法器12至乘法器15与第一矩阵运算单元D连接。各个第一矩阵运算单元经过第一矩阵运算后,会分别得到两个运算结果,这两个运算结果将分别被存储至与第一矩阵运算单元对应连接的两个数据缓存单元中。第二矩阵运算单元a分别接收第1行第1列、第1行第2列、第1行第3列、第1行第4列缓存单元中的数据,并对这四个数据进行第二矩阵运算,以得到矩阵1和矩阵2的运算结果;第二矩阵运算单元b分别接收第2行第1列、第2行第2列、第2行第3列、第2行第4列缓存单元中的数据,并对这四个数据进行第二矩阵运算,以得到矩阵3和矩阵4的运算结果。
如图8所示,在某些实施例中,所述矩阵运算单元包括加法运算单元和补码运算单元。所述补码运算单元用于对与之连接的乘法器的运算结果进行补码运算,并将补码运算结果传输至所述加法运算单元;所述加法运算单元用于对与之连接的乘法器的运算结果进行加法运算,或者用于对乘法器的运算结果和补码运算结果进行加法运算。
优选的,所述乘法器包括第一乘法器(即图7中的乘法器0)、第二乘法器(即图7中的乘法器1)、第三乘法器(即图7中的乘法器2)和第四乘法器(即图7中的乘法器3),所述第一乘法器、第二乘法器、第三乘法器和第四乘法器分别与第一矩阵运算单元连接;所述加法运算单元包括第一加法器110和第二加法器111;所述补码运算单元包括第一补码运算单元112和第二补码运算单元113;
所述第一乘法器、第二乘法器、第三乘法器分别与所述第一加法器连接,所述第二乘法器与第二加法器连接,所述第三乘法器与第一补码运算单元连接,所述第四乘法器与第二补码运算单元连接,所述第一补码运算单元和第二补码运算单元分别与第二加法器连接;
所述第一加法器110用于对第一乘法器、第二乘法器、第三乘法器输出的乘法运算结果进行第一加法运算,得到第一加法运算结果并输出;
所述第二加法器111用于对第二乘法器、第一补码运算单元、第二补码运算单元输出的运算结果进行第二加法运算,得到第二加法运算结果并输出。
所述补码运算为取反再加一,因为图1中的矩阵中涉及到元素“-1”的乘加运算,对于负数运算,可以将其转换为补码运算以提升处理效率,具体则是将该数转换为二进制数后每一位都进行取反(即原来是“0”的位数变成“1”,原来是“1”的位数变成“0”),再进行加1运算,以得到原数相应的补码,从而使得原来的两个数相减操作变为两个数的相加操作(即一个数减去另一个数,可以转换为一个数加上另一个数的补码)。
图8中的第一矩阵运算单元即图7中的第一矩阵运算单元a,其分别与乘法器0、1、2、3连接,第一加法器对乘法器0、1、2的乘法运算结果进行相加操作,得到的第一中间结果被存储于第1行第1列缓存中;而乘法器2和乘法器3的运算结果先在各自的补码运算单元进行了补码运算,补码运算结果被传输到第二加法器中,第二加法器将两个补码运算结果与乘法器1的乘法运算结果进行相加,得到第二中间结果,并将第二中间结果存储于第2行第1列缓存中。其他第一矩阵运算单元进行第一矩阵运算的方式,与第一矩阵运算单元A相似,只需满足将前三个乘法器的结果直接相加作为第一中间结果,将第二个乘法器的运算结果、第三个乘法器的补码运算结果以及第四个乘法器的补码运算结果相加得到第二中间结果。
对于第二矩阵运算单元a和b而言,其与第一矩阵运算单元A至D的结构类似,区别在于,第二矩阵运算单元a和b所获取的数据是数据缓存单元中所存储的数据,具体的,第二矩阵运算单元a所获取的是如图6中的第1行第1列缓存、第1行第2列缓存、第1行第3列缓存、第1行第4列缓存中的数据,第二矩阵运算单元b所获取的是第2行第1列缓存、第2行第2列缓存、第2行第3列缓存、第2行第4列缓存中的数据。
以第二矩阵运算单元a为例,其内部的第一加法器将获取第1行第1列缓存、第1行第2列缓存、第1行第3列缓存中的中间结果数据进行加法运算,从而得到“矩阵1”的卷积运算结果;其内部的第二加法器将对第1行第2列缓存的中间结果数据、第1行第3列缓存的数据进行补码运算后的数据、第1行第4列缓存的数据进行补码运算后的数据进行加法运算,从而得到“矩阵2”的卷积运算结果。
以第二矩阵运算单元b为例,其内部的第一加法器将获取第2行第1列缓存、第2行第2列缓存、第2行第3列缓存中的中间结果数据进行加法运算,从而得到“矩阵3”的卷积运算结果;其内部的第二加法器将对第2行第2列缓存的中间结果数据、第2行第3列缓存的数据进行补码运算后的数据、第2行第4列缓存的数据进行补码运算后的数据进行加法运算,从而得到“矩阵4”的卷积运算结果。
通过上述方案,乘法阵列单元能够在接收一个4x4矩阵的情况下,就可以输出4个3x3矩阵的卷积运算结果,相比于逐个运算的方式,极大提升了神经网络卷积运算效率。
为了使得本发明的乘法阵列单元不仅支持4x4矩阵的卷积运算,也能够支持3x3矩阵的卷积运算,在本实施方式中,所述乘法阵列单元还包括补零单元,当进行卷积优化运算的矩阵为3x3矩阵时,所述补零单元用于对所述3x3矩阵进行补零操作,以得到4x4矩阵。简言之,当输入为3x3矩阵时,就将该3x3矩阵的所有数据对应填充至图6中“矩阵1”所在位置,而对于除了矩阵1之外的区域全部数值设置为0,即乘法器0、1、2、4、5、6、8、9、10的输入数据被分别设置为3x3矩阵从上至下、从左至右的数据,而除了上述9个乘法器以外的乘法器的数据均被设置为0。这样,经过图7所示的乘法阵列单元进行运算后,得到的矩阵1的运算结果即为输入的3x3矩阵的卷积运算结果。
通过设置补零单元,使得本发明涉及的乘法阵列单元不仅可以处理4x4矩阵,以得到4个3x3矩阵的卷积运算结果,也可以直接处理3x3矩阵,以得到该3x3矩阵对应的卷积运算结果,从而有效提高乘法阵列单元运算电路的复用性。
如图5所示,发明人还提供了一种高并行度的卷积运算取数方法,应用于高并行度的卷积运算取数电路,所述电路包括读数单元、重组单元、输出缓存单元和乘加阵列单元;所述读数单元包括第一读数单元和第二读数单元,所述重组单元包括第一重组单元和第二重组单元,所述输出缓存单元包括第一输出缓存单元和第二输出缓存单元;所述第一读数单元和第一重组单元连接,所述第一重组单元和第一输出缓存单元连接;所述第二读数单元和第二重组单元连接,所述第二重组单元和第二输出缓存单元连接;所述第一输出缓存单元和第二输出缓存单元分别与乘加阵列单元连接;
所述第一重组单元包括第一重组控制单元和第一行缓存组,所述第一行缓存组包括多个第一行缓存,各第一行缓存均与第一重组控制单元连接;所述第二重组单元包括第二重组控制单元和第二行缓存组,所述第二行缓存组包括多个第二行缓存,各第二行缓存均与第二重组控制单元连接;
所述方法包括以下步骤:
首先进入步骤S501第一读数单元从主存储单元中读取第一数据,并将读取到的第一数据依次写入第一行缓存组中;
而后进入步骤S502第一重组控制单元在第一行缓存组被填满后,对第一行缓存组中的各缓存行缓存的第一数据进行组装,得到重组装后的单行第一数据,并将单行第一数据写入第一输出缓存单元中;
在进行步骤S501和步骤S502时,可以同步进行步骤S503第二读数单元从主存储单元中读取第二数据,并将读取到的第二数据依次写入第二行缓存组中;以及步骤S504第二重组控制单元在第二行缓存组被填满后,对第二行缓存组中的各缓存行缓存的第二数据进行组装,得到重组装后的单行第二数据,并将单行第二数据写入第二输出缓存单元中;
当步骤S503和步骤S504执行完毕后,可以进入步骤S505乘加阵列单元在当接收到卷积运算启动信号后,获取当前第一输出缓存单元中的第一数据和第二输出缓存单元中的第二数据,进行乘加运算后输出运算结果。
在某些实施例中,所述第一行缓存组和第二行缓存的数量为两个;所述方法包括:
当一个第一行缓存组被第一数据填满时,第一读数单元从主存储单元中继续读取第一数据写入到另一个第一行缓存组中;
当一个第二行缓存组被第二数据填满时,第二读数单元从主存储单元中继续读取第二数据写入到另一个第二行缓存组中。
在某些实施例中,所述电路还包括读取控制平衡单元;所述方法包括:
读取控制平衡单元在判定两个第一行缓存组均已被第一数据填满且两个第二行缓存组中均未被第二数据填满时,控制所述第一读数单元停止从所述主存储单元中读取第一数据,以及在判定两个第二行缓存组中至少有一个被第二数据填满时,恢复第一读数单元继续从所述主存储单元中读取数据;
或者,读取控制平衡单元在判定两个第二行缓存组均已被第二数据填满且两个第一行缓存组中均未被第一数据填满时,控制所述第二读数单元停止从所述主存储单元中读取第二数据,以及在判定两个第一行缓存组中至少有一个被第二数据填满时,恢复第二读数单元继续从所述主存储单元中读取数据。
在某些实施例中,所述电路还包括运算有效判断单元,所述运算有效判断单元分别与第一输出缓存单元、第二输出缓存单元、乘加阵列单元连接;所述方法包括:
运算有效判断单元在接收到第一输出缓存单元发送的第一数据输出有效信号以及第二数据输出缓存单元发送的第二数据输出有效信号后,发送卷积运算启动信号至乘加阵列单元。
在某些实施例中,所述电路还包括模式配置单元,所述模式配置单元分别与第一读数单元、第二读书单元连接;所述方法包括:
模式配置单元根据模式配置信号对应调整参与运算的第一行缓存组中的第一缓存数量和第二行缓存组中的第二缓存数量,以及对应调整参与运算的第一输出缓存单元和第二输出缓存单元的存储长度范围。
上述技术方案所述的高并行度的卷积运算取数方法和电路,所述方法包括以下步骤:第一读数单元从主存储单元中读取第一数据,并将读取到的第一数据依次写入第一行缓存组中;第一重组控制单元在第一行缓存组被填满后,对第一行缓存组中的各缓存行缓存的第一数据进行组装,得到重组装后的单行第一数据,并将单行第一数据写入第一输出缓存单元中;第二读数单元从主存储单元中读取第二数据,并将读取到的第二数据依次写入第二行缓存组中;第二重组控制单元在第二行缓存组被填满后,对第二行缓存组中的各缓存行缓存的第二数据进行组装,得到重组装后的单行第二数据,并将单行第二数据写入第二输出缓存单元中;乘加阵列单元在当接收到卷积运算启动信号后,获取当前第一输出缓存单元中的第一数据和第二输出缓存单元中的第二数据,进行乘加运算后输出运算结果。上述方案在保证卷积运算高并行度运算的基础上仍保持很高的运算效率和数据复用,大幅降低数据带宽需求和功耗消耗,从而降低了整个神经网络电路的面积和功耗。
需要说明的是,尽管在本文中已经对上述各实施例进行了描述,但并非因此限制本发明的专利保护范围。因此,基于本发明的创新理念,对本文所述实施例进行的变更和修改,或利用本发明说明书及附图内容所作的等效结构或等效流程变换,直接或间接地将以上技术方案运用在其他相关的技术领域,均包括在本发明的专利保护范围之内。

Claims (10)

1.一种高并行度的卷积运算取数电路,其特征在于,所述电路包括读数单元、重组单元、输出缓存单元和乘加阵列单元;所述读数单元包括第一读数单元和第二读数单元,所述重组单元包括第一重组单元和第二重组单元,所述输出缓存单元包括第一输出缓存单元和第二输出缓存单元;所述第一读数单元和第一重组单元连接,所述第一重组单元和第一输出缓存单元连接;所述第二读数单元和第二重组单元连接,所述第二重组单元和第二输出缓存单元连接;所述第一输出缓存单元和第二输出缓存单元分别与乘加阵列单元连接;
所述第一重组单元包括第一重组控制单元和第一行缓存组,所述第一行缓存组包括多个第一行缓存,各第一行缓存均与第一重组控制单元连接;所述第二重组单元包括第二重组控制单元和第二行缓存组,所述第二行缓存组包括多个第二行缓存,各第二行缓存均与第二重组控制单元连接;
所述第一读数单元用于从主存储单元中读取第一数据,并将读取到的第一数据依次写入第一行缓存组中;
所述第一重组控制单元用于在第一行缓存组被填满后,对第一行缓存组中的各缓存行缓存的第一数据进行组装,得到重组装后的单行第一数据,并将单行第一数据写入第一输出缓存单元中;
所述第二读数单元用于从主存储单元中读取第二数据,并将读取到的第二数据依次写入第二行缓存组中;
所述第二重组控制单元用于在第二行缓存组被填满后,对第二行缓存组中的各缓存行缓存的第二数据进行组装,得到重组装后的单行第二数据,并将单行第二数据写入第二输出缓存单元中;
所述乘加阵列单元用于在当接收到卷积运算启动信号后,获取当前第一输出缓存单元中的第一数据和第二输出缓存单元中的第二数据,进行乘加运算后输出运算结果。
2.如权利要求1所述的高并行度的卷积运算取数电路,其特征在于,所述第一行缓存组和第二行缓存的数量为两个;
当一个第一行缓存组被第一数据填满时,第一读数单元用于从主存储单元中继续读取第一数据写入到另一个第一行缓存组中;
当一个第二行缓存组被第二数据填满时,第二读数单元用于从主存储单元中继续读取第二数据写入到另一个第二行缓存组中。
3.如权利要求2所述的高并行度的卷积运算取数电路,其特征在于,所述电路还包括读取控制平衡单元;
所述读取控制平衡单元用于在判定两个第一行缓存组均已被第一数据填满且两个第二行缓存组中均未被第二数据填满时,控制所述第一读数单元停止从所述主存储单元中读取第一数据,以及在判定两个第二行缓存组中至少有一个被第二数据填满时,恢复第一读数单元继续从所述主存储单元中读取数据;
或者,所述读取控制平衡单元用于在判定两个第二行缓存组均已被第二数据填满且两个第一行缓存组中均未被第一数据填满时,控制所述第二读数单元停止从所述主存储单元中读取第二数据,以及在判定两个第一行缓存组中至少有一个被第二数据填满时,恢复第二读数单元继续从所述主存储单元中读取数据。
4.如权利要求1所述的高并行度的卷积运算取数电路,其特征在于,所述电路还包括运算有效判断单元,所述运算有效判断单元分别与第一输出缓存单元、第二输出缓存单元、乘加阵列单元连接;
所述运算有效判断单元用于在接收到第一输出缓存单元发送的第一数据输出有效信号以及第二数据输出缓存单元发送的第二数据输出有效信号后,发送卷积运算启动信号至乘加阵列单元。
5.如权利要求1所述的高并行度的卷积运算取数电路,其特征在于,所述电路还包括模式配置单元,所述模式配置单元分别与第一读数单元、第二读书单元连接;
所述模式配置单元用于根据模式配置信号对应调整参与运算的第一行缓存组中的第一缓存数量和第二行缓存组中的第二缓存数量,以及对应调整参与运算的第一输出缓存单元和第二输出缓存单元的存储长度范围。
6.一种高并行度的卷积运算取数方法,其特征在于,应用于高并行度的卷积运算取数电路,所述电路包括读数单元、重组单元、输出缓存单元和乘加阵列单元;所述读数单元包括第一读数单元和第二读数单元,所述重组单元包括第一重组单元和第二重组单元,所述输出缓存单元包括第一输出缓存单元和第二输出缓存单元;所述第一读数单元和第一重组单元连接,所述第一重组单元和第一输出缓存单元连接;所述第二读数单元和第二重组单元连接,所述第二重组单元和第二输出缓存单元连接;所述第一输出缓存单元和第二输出缓存单元分别与乘加阵列单元连接;
所述第一重组单元包括第一重组控制单元和第一行缓存组,所述第一行缓存组包括多个第一行缓存,各第一行缓存均与第一重组控制单元连接;所述第二重组单元包括第二重组控制单元和第二行缓存组,所述第二行缓存组包括多个第二行缓存,各第二行缓存均与第二重组控制单元连接;
所述方法包括以下步骤:
第一读数单元从主存储单元中读取第一数据,并将读取到的第一数据依次写入第一行缓存组中;
第一重组控制单元在第一行缓存组被填满后,对第一行缓存组中的各缓存行缓存的第一数据进行组装,得到重组装后的单行第一数据,并将单行第一数据写入第一输出缓存单元中;
第二读数单元从主存储单元中读取第二数据,并将读取到的第二数据依次写入第二行缓存组中;
第二重组控制单元在第二行缓存组被填满后,对第二行缓存组中的各缓存行缓存的第二数据进行组装,得到重组装后的单行第二数据,并将单行第二数据写入第二输出缓存单元中;
乘加阵列单元在当接收到卷积运算启动信号后,获取当前第一输出缓存单元中的第一数据和第二输出缓存单元中的第二数据,进行乘加运算后输出运算结果。
7.如权利要求6所述的高并行度的卷积运算取数方法,其特征在于,所述第一行缓存组和第二行缓存的数量为两个;所述方法包括:
当一个第一行缓存组被第一数据填满时,第一读数单元从主存储单元中继续读取第一数据写入到另一个第一行缓存组中;
当一个第二行缓存组被第二数据填满时,第二读数单元从主存储单元中继续读取第二数据写入到另一个第二行缓存组中。
8.如权利要求7所述的高并行度的卷积运算取数方法,其特征在于,所述电路还包括读取控制平衡单元;所述方法包括:
读取控制平衡单元在判定两个第一行缓存组均已被第一数据填满且两个第二行缓存组中均未被第二数据填满时,控制所述第一读数单元停止从所述主存储单元中读取第一数据,以及在判定两个第二行缓存组中至少有一个被第二数据填满时,恢复第一读数单元继续从所述主存储单元中读取数据;
或者,读取控制平衡单元在判定两个第二行缓存组均已被第二数据填满且两个第一行缓存组中均未被第一数据填满时,控制所述第二读数单元停止从所述主存储单元中读取第二数据,以及在判定两个第一行缓存组中至少有一个被第二数据填满时,恢复第二读数单元继续从所述主存储单元中读取数据。
9.如权利要求6所述的高并行度的卷积运算取数方法,其特征在于,所述电路还包括运算有效判断单元,所述运算有效判断单元分别与第一输出缓存单元、第二输出缓存单元、乘加阵列单元连接;所述方法包括:
运算有效判断单元在接收到第一输出缓存单元发送的第一数据输出有效信号以及第二数据输出缓存单元发送的第二数据输出有效信号后,发送卷积运算启动信号至乘加阵列单元。
10.如权利要求6所述的高并行度的卷积运算取数方法,其特征在于,所述电路还包括模式配置单元,所述模式配置单元分别与第一读数单元、第二读书单元连接;所述方法包括:
模式配置单元根据模式配置信号对应调整参与运算的第一行缓存组中的第一缓存数量和第二行缓存组中的第二缓存数量,以及对应调整参与运算的第一输出缓存单元和第二输出缓存单元的存储长度范围。
CN201910848453.2A 2019-09-09 2019-09-09 一种高并行度的卷积运算取数方法和电路 Active CN110751263B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910848453.2A CN110751263B (zh) 2019-09-09 2019-09-09 一种高并行度的卷积运算取数方法和电路

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910848453.2A CN110751263B (zh) 2019-09-09 2019-09-09 一种高并行度的卷积运算取数方法和电路

Publications (2)

Publication Number Publication Date
CN110751263A true CN110751263A (zh) 2020-02-04
CN110751263B CN110751263B (zh) 2022-07-01

Family

ID=69276273

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910848453.2A Active CN110751263B (zh) 2019-09-09 2019-09-09 一种高并行度的卷积运算取数方法和电路

Country Status (1)

Country Link
CN (1) CN110751263B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111142808A (zh) * 2020-04-08 2020-05-12 浙江欣奕华智能科技有限公司 存取设备及存取方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108629411A (zh) * 2018-05-07 2018-10-09 济南浪潮高新科技投资发展有限公司 一种卷积运算硬件实现装置及方法
CN108805266A (zh) * 2018-05-21 2018-11-13 南京大学 一种可重构cnn高并发卷积加速器
CN109858622A (zh) * 2019-01-31 2019-06-07 福州瑞芯微电子股份有限公司 深度学习神经网络的数据搬运电路和方法
WO2019165989A1 (zh) * 2018-03-01 2019-09-06 华为技术有限公司 一种用于神经网络的数据处理电路

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019165989A1 (zh) * 2018-03-01 2019-09-06 华为技术有限公司 一种用于神经网络的数据处理电路
CN108629411A (zh) * 2018-05-07 2018-10-09 济南浪潮高新科技投资发展有限公司 一种卷积运算硬件实现装置及方法
CN108805266A (zh) * 2018-05-21 2018-11-13 南京大学 一种可重构cnn高并发卷积加速器
CN109858622A (zh) * 2019-01-31 2019-06-07 福州瑞芯微电子股份有限公司 深度学习神经网络的数据搬运电路和方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
胡飞: "基于忆阻器交叉阵列的卷积神经网络电路设计", 《计算机研究与发展》 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111142808A (zh) * 2020-04-08 2020-05-12 浙江欣奕华智能科技有限公司 存取设备及存取方法

Also Published As

Publication number Publication date
CN110751263B (zh) 2022-07-01

Similar Documents

Publication Publication Date Title
CN109886400B (zh) 基于卷积核拆分的卷积神经网络硬件加速器***及其计算方法
CN108182471B (zh) 一种卷积神经网络推理加速器及方法
CN109948774B (zh) 基于网络层捆绑运算的神经网络加速器及其实现方法
CN111897579B (zh) 图像数据处理方法、装置、计算机设备和存储介质
CN116541647A (zh) 运算加速器、处理方法及相关设备
CN110163338B (zh) 具有运算阵列的芯片运算方法、装置、终端及芯片
WO2022007266A1 (zh) 一种卷积神经网络的加速方法及装置
CN111767994B (zh) 一种神经元计算装置
CN110580519B (zh) 一种卷积运算装置及其方法
CN112486901A (zh) 基于乒乓缓冲的存内计算***及方法
CN112836813A (zh) 一种用于混合精度神经网络计算的可重构脉动阵列***
CN111768458A (zh) 一种基于卷积神经网络的稀疏图像处理方法
CN110751263B (zh) 一种高并行度的卷积运算取数方法和电路
CN115423081A (zh) 一种基于fpga的cnn_lstm算法的神经网络加速器
CN110490308B (zh) 加速库的设计方法、终端设备及存储介质
WO2023065701A1 (zh) 内积处理部件、任意精度计算设备、方法及可读存储介质
CN114519425A (zh) 一种规模可扩展的卷积神经网络加速***
CN115238863A (zh) 一种卷积神经网络卷积层的硬件加速方法、***及应用
CN107368459B (zh) 基于任意维数矩阵乘法的可重构计算结构的调度方法
CN111814972B (zh) 一种基于fpga的神经网络卷积运算加速方法
CN109948787B (zh) 用于神经网络卷积层的运算装置、芯片及方法
CN111860819A (zh) 一种可拼接、可分段的全连接神经网络推理加速器及其加速方法
CN116702851A (zh) 适用于权重复用神经网络的脉动阵列单元及脉动阵列结构
JPH076146A (ja) 並列データ処理システム
CN113627587A (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
CB02 Change of applicant information

Address after: 350003 building 18, No.89, software Avenue, Gulou District, Fuzhou City, Fujian Province

Applicant after: Ruixin Microelectronics Co.,Ltd.

Address before: 350003 building 18, No.89, software Avenue, Gulou District, Fuzhou City, Fujian Province

Applicant before: FUZHOU ROCKCHIP ELECTRONICS Co.,Ltd.

CB02 Change of applicant information
GR01 Patent grant
GR01 Patent grant