CN111222626B - 一种基于NOR Flash模块的神经网络的数据切分运算方法 - Google Patents

一种基于NOR Flash模块的神经网络的数据切分运算方法 Download PDF

Info

Publication number
CN111222626B
CN111222626B CN201911082357.8A CN201911082357A CN111222626B CN 111222626 B CN111222626 B CN 111222626B CN 201911082357 A CN201911082357 A CN 201911082357A CN 111222626 B CN111222626 B CN 111222626B
Authority
CN
China
Prior art keywords
storage array
neural network
data
storage
operated
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201911082357.8A
Other languages
English (en)
Other versions
CN111222626A (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.)
Hengshuo Semiconductor Hefei Co ltd
Original Assignee
Hengshuo Semiconductor Hefei 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 Hengshuo Semiconductor Hefei Co ltd filed Critical Hengshuo Semiconductor Hefei Co ltd
Priority to CN201911082357.8A priority Critical patent/CN111222626B/zh
Publication of CN111222626A publication Critical patent/CN111222626A/zh
Application granted granted Critical
Publication of CN111222626B publication Critical patent/CN111222626B/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)
  • General Health & Medical Sciences (AREA)
  • General Physics & Mathematics (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Artificial Intelligence (AREA)
  • Neurology (AREA)
  • Read Only Memory (AREA)
  • Image Analysis (AREA)

Abstract

本发明公开了一种基于NOR Flash模块的神经网络的数据切分运算方法、单芯片、多芯片实现神经网络的运算方法、神经网络的IP核运算架构,包括:在神经网络预置参数中获取待运算数据信息,以及神经网络各层的权值信息;判断待运算数据信息、以及神经网络各层的权值信息是否超过存储阵列的规模参数;当超过时,根据存储阵列的规模参数对待运算数据信息、以及神经网络各层的权值信息进行切分;将切分后的待运算数据信息对应的加载在存储阵列的输入端,且根据神经网络各层的权值信息,设置各存储单元的阈值电压;并根据待运算数据信息通过输入信号生成电路转换后的电压以及存储单元的阈值电压进行运算处理;通过存储阵列运算后的输出信号进行累加完成后输出。

Description

一种基于NOR Flash模块的神经网络的数据切分运算方法
技术领域
本发明涉及半导体集成电路领域,特别涉及一种基于NOR Flash模块的神经网络的数据切分运算方法、单芯片实现神经网络的运算方法、多芯片实现神经网络的运算方法、神经网络的IP核运算架构。
背景技术
闪存作为一种非易失性存储技术被广泛使用,通常的实现方式为使用浮栅(Floating Gate)或者电荷捕获结构(Charge Trap)在场效应晶体管(Field EffectTransistor,FET)中存储电荷,构成存储单元,存储单元构成阵列用于储存大量数据。
根据阵列结构的不同,闪存可分两种:NAND型和NOR型。NOR型闪存(NOR Flash)的存储单元以并联的方式连接。NOR Flash可以对其每一个存储单元进行独立的读写操作,并且相对于NAND Flash具有更低的读延时。
神经网络作为一种人工智能(Artificial Intelligence,AI)算法被广泛用于图像识别、语音识别等诸多领域,而且效果甚佳。以图像识别的AlexNet为例,神经网络主要有如下操作,分别为(1)输入层像素块和卷积核之间的卷积操作,(2)为引入非线性而进行的激活操作,(3)为减少特征值而对特征图进行的下采样操作(即池化),以及(4)卷积之后的全连接操作。其中,绝大部分运算量都在卷积层和全连接层。
大型的神经网络,以其庞大的参数集和运算量,及其复杂的网络类型(CNN,RNN,DNN等),为AI芯片的设计带来了重重阻碍。其中两个问题尤为明显,一是运算的带宽对运算速度的限制,二是频繁的数据访存对功耗的要求。
不同的神经网络,其网络结构、网络规模和参数设置都不尽相同,这要求硬件系统能够进行合理地配置和数据调度,以兼容不同的神经网络模型和算法。
基于以上存在技术问题,本申请提供解决技术问题的技术方案。
发明内容
本发明的目的是提供一种基于NOR Flash模块的神经网络的数据切分运算方法、单芯片实现神经网络的运算方法、多芯片实现神经网络的运算方法、神经网络的IP核运算架构,实现了基于NOR Flash存储单元的神经网络运算,同时提高了神经网络的运算速度,并进一步降低了功耗。
本发明提供的技术方案如下:
一种基于NOR Flash模块的神经网络的数据切分运算方法,所述NOR Flash模块包括:输入信号生成电路,输出信号测量电路,以及由若干个存储单元,和/或电流镜构成的存储阵列,在所述NOR Flash模块中设置至少一个存储阵列;其特征在于,包括:在神经网络预置参数中获取待运算数据信息,以及神经网络各层的权值信息;判断所述待运算数据信息、以及神经网络各层的权值信息是否超过所述存储阵列的规模参数;当超过时,根据存储阵列的规模参数对所述待运算数据信息、以及神经网络各层的权值信息进行切分;将切分后的所述待运算数据信息对应的加载在所述存储阵列的输入端,且根据所述神经网络各层的权值信息,设置所述存储阵列中各存储单元的阈值电压;并根据所述待运算数据信息通过输入信号生成电路转换后的电压以及所述存储单元的阈值电压进行运算处理;将所述存储阵列中各所述存储单元运算后的输出信号,通过所述输出信号测量模块进行测量后经由累加模块进行累加和/或拼接;或通过数据总线进行传输后经由所述累加模块进行累加和/或拼接;累加和/或拼接完成后输出。
进一步优选的,包括:获取参与运算的权值阵列尺寸以及参与运算的所述存储阵列规模;当所述参与运算的权值阵列尺寸大于所述存储阵列的规模时,所述参与运算的权值阵列根据所述存储阵列的规模切分成多组权值子阵列;根据切分后对应的每一个参与运算的权值子阵列尺寸对参与运算的所述待运算数据信息切分,并通过所述输入信号生成电路对应的加载在参与运算的所述存储阵列的输入端进行运算;将每个所述存储阵列运算后的输出结果进行累加和/或拼接,将累加和/或拼接后的结果设置为所述输出信号。
进一步优选的,包括:当所述NOR Flash模块中设置一个或多个数据缓存单元,在所述NOR Flash模块中进行卷积层切分运算包括:获取卷积核的尺寸以及参与运算的所述存储阵列的规模;当所述卷积核的尺寸大于所述存储阵列的规模时,将所述卷积核根据所述存储阵列的规模切分成多组;根据切分后对应的每一个所述卷积核的尺寸进一步的将所述待运算数据信息切分成多组,将切分后对应的各组所述待运算数据信息通过所述输入信号生成电路,对应的加载在参与运算的所述存储阵列的输入端并进行卷积运算;将每个所述存储阵列运算后的输出结果进行累加和/或拼接,将累加和/或拼接后的结果设置为所述输出信号。
进一步优选的,包括:当所述NOR Flash模块中设置一个或多个数据缓存单元,在所述NOR Flash模块中进行卷积层切分运算包括:获取卷积核的尺寸以及参与运算的所述存储阵列的规模;当切分后的所述卷积核的尺寸等于所述存储阵列的规模时,将所述待运算数据信息通过所述输入信号生成电路一一对应的加载在每个所述存储阵列的输入端,并进行运算处理。
进一步优选的,包括:当所述NOR Flash模块中设置一个或多个数据缓存单元,在所述NOR Flash模块中进行卷积层切分运算包括:获取卷积核的尺寸以及参与运算的所述存储阵列的规模;当切分后的所述卷积核的尺寸小于所述存储阵列的规模时,根据预设运算规则在所述存储阵列中选取满足对应位置关系的所述存储单元参加运算;将未被选取的所述存储单元进行编程处理,并设置为高阈值状态,同时将所述输入信号生成电路对应的输入端输入的所述待运算数据信息设置为0。
进一步优选的,包括:当所述NOR Flash模块中设置一个数据缓存单元,并通过一个所述存储阵列对切分后的所述卷积核进行运算处理,则进行单通道运算具体包括:获取卷积核的尺寸以及参与运算的所述存储阵列的规模;当所述卷积核的尺寸大于所述存储阵列的规模时,将所述卷积核根据所述存储阵列的规模切分成多组;设置切分后的每组所述卷积核的运算顺序;根据运算顺序通过所述存储阵列进行运算,当每一组运算完成后,对所述存储阵列中的存储单元的阈值电压进行重新编程,并对应的设置所述存储单元的阈值;将每次运算后的结果进行累加,和/或拼接。
进一步优选的,包括:当所述NOR Flash模块中设置多个数据缓存单元以及多个运算通道,运算通道的数量与所述数据缓存单元的数量一一对应,并通过一个所述存储阵列对切分后的所述卷积核进行运算处理,具体包括:获取每个运算通道的运算后的结果;并将每个运算后的结果进行累加,和/或拼接。
进一步优选的,包括:当所述NOR Flash模块中设置一个数据缓存单元以及一个运算通道时,通过多个所述存储阵列对切分后的所述卷积核进行运算处理具体包括:根据各所述存储阵列的规模将所述卷积核切分成多组;根据切分后的多组所述卷积核的权值大小,对应的设置所述存储阵列中各存储单元的阈值电压;并对每个卷积核对应的所述存储阵列进行运算处理;将运算后的结果进行累加,和/或拼接。
进一步优选的,包括:当所述NOR Flash模块中设置多个数据缓存单元以及多个运算通道,所述运算通道的数量与所述数据缓存单元的数量一一对应,并通过多个所述存储阵列对切分后的所述卷积核进行运算处理包括:每个所述运算通道设置对应多个所述存储阵列;将每个运算通道对应的所述数字缓存单元输出的所述待运算数据信息对应的输入至所述存储阵列的输入端;并将切分后的所述卷积核的各权值根据预设规则对应的存储在每个所述存储阵列中,并对应编程为所述存储单元的阈值;当每个运算通道中的各所述存储阵列运算完成后,将对应的输出结果,按照每个所述运算通道进行累加处理。
进一步优选的,包括:当所述NOR Flash模块中未设置数据缓存单元,在所述NORFlash模块中进行卷积层切分运算包括:获取卷积核的尺寸、所述待运算数据信息的规模以及参与运算的所述存储阵列的规模;当所述待运算数据信息的规模,和/或卷积核的尺寸大于所述存储阵列的规模时,将所述待运算数据信息,和/或卷积核根据所述存储阵列的规模,切分成多组;将切分后的卷积核编程到存储阵列,然后把切分后的待运算数据信息通过输入信号生成电路,并通过所述输入信号生成电路对应的加载在参与运算的所述存储阵列的输入端进行卷积运算;将每个所述存储阵列运算后的输出结果进行累加和/或拼接,将累加后的结果设置为所述输出信号。
进一步优选的,包括:当所述NOR Flash模块中未设置数据缓存单元,在所述NORFlash模块中进行卷积层切分运算包括:获取卷积核的尺寸、待运算数据信息的规模以及参与运算的所述存储阵列的规模;当切分后的计算所需存储阵列的尺寸等于所述存储阵列的规模时,将所述切分后的卷积核编程到所述存储阵列,所述切分后的待运算数据信息通过所述输入信号生成电路一一对应的加载在每个所述存储阵列的输入端,并进行运算处理。
进一步优选的,包括:当所述NOR Flash模块中未设置数据缓存单元,在所述NORFlash模块中进行卷积层切分运算包括:获取卷积核的尺寸、待运算数据信息的规模以及参与运算的所述存储阵列的规模;当切分后的计算所需存储阵列的尺寸小于所述存储阵列的规模时,根据预设运算规则在所述存储阵列中选取满足对应位置关系的所述存储单元参加运算;将未被选取的所述存储单元进行编程处理,并设置为高阈值状态,同时将所述输入信号生成电路对应的输入端输入的所述待运算数据信息设置为0。
进一步优选的,包括:当所述NOR Flash模块中未设置数据缓存单元,且所述NORFlash模块中只含有一个所述存储阵列进行切分运算包括:获取所述待运算数据信息的规模的输入个数,以及输出个数;当输入个数,以及输出个数至少有一个大于所述存储阵列的输入端个数以及输出端个数时,根据所述存储阵列的输入端个数以及输出端个数对所述待运算数据信息以及所述参与运算的权值阵列进行切分成多组,使其切分后的每组所述待运算数据信息以及所述参与运算的权值阵列的输入个数,以及输出个数不大于所述存储阵列的输入端个数以及输出端个数;设置切分后的每组所述待运算数据信息运算顺序;根据运算顺序分别将切分后的每组所述待运算数据信息加载至所述存储阵列中,并进行运算处理;当每一组运算完成后,通过在所述NOR Flash模块中设置的存储模块存储运算结果,对所述存储阵列中的存储单元进行重新编程,并对应的设置所述存储单元的阈值;将每次运算后的结果进行累加,和/或拼接。
进一步优选的,包括:当所述NOR Flash模块中未设置缓存单元时,且通过多个所述存储阵列进行卷积运算包括:获取所述待运算数据信息的规模的输入个数,以及输出个数;当所述待运算数据信息的规模的输入个数,以及输出个数至少有一个大于所述存储阵列的输入端个数以及输出端个数时,根据每个所述存储阵列的输入端个数以及输出端个数,将待运算数据信息以及所述参与运算的权值阵列对应的切分成多组,且切分后的所述待运算数据信息,以及所述运算的权值阵列与每个所述存储矩阵对应设置;使其切分后的每组所述待运算数据信息的输入个数,以及输出个数不大于所述存储阵列的输入端个数以及输出端个数;将切分后的所述待运算数据信息对应的加载在所述存储阵列的输入端,并将所述参与运算的权值阵列对应的编程为对应存储单元的阈值电压,并获取每个所述存储阵列的输出结果;将每个所述存储阵列的输出结果与所述待运算数据信息的输出个数对应,将每次运算后的结果进行累加,和/或拼接。
进一步优选的,包括:当所述NOR Flash模块中通过一个或多个所述存储阵列进行全连接运算包括:获取全连接层的权值参数矩阵以及参与运算的所述存储阵列的规模;当全连接层的权值参数矩阵的规模大于所述存储阵列的规模时,将全连接层的权值参数矩阵根据所述存储阵列的规模切分成多组;并根据切分后的权值参数矩阵设置存储阵列中各存储单元的阈值电压;根据切分后对应的每一个所述全连接层的权值参数矩阵的规模进一步的切分所述待运算数据信息,并通过所述输入信号生成电路对应的加载在参与运算的所述存储阵列的输入端进行全连接层运算;将每个所述存储阵列运算后的输出结果进行累加和/或拼接,将累加和/或拼接后的结果设置为所述输出信号。
进一步优选的,包括:当所述NOR Flash模块中通过一个或多个所述存储阵列进行全连接运算包括:获取全连接层的权值参数矩阵的规模以及参与运算的所述存储阵列的规模;当切分后的所述全连接层的权值参数矩阵的规模等于所述存储阵列的规模时,将所述切分后的权值参数矩阵编程到存储阵列,所述切分后的待运算数据信息通过所述输入信号生成电路一一对应的加载在每个所述存储阵列的输入端,并进行运算处理。
进一步优选的,包括:当所述NOR Flash模块中通过一个或多个所述存储阵列进行全连接运算包括:获取全连接层的权值参数矩阵的规模以及参与运算的所述存储阵列的规模;当切分后的所述全连接层的权值参数矩阵的规模小于所述存储阵列的规模时,根据预设运算规则在所述存储阵列中选取满足对应位置关系的所述存储单元参加运算;将未被选取的所述存储单元进行编程处理,并设置为高阈值状态,同时将所述输入信号生成电路对应的输入端输入的所述待运算数据信息设置为0。
进一步优选的,包括:当所述NOR Flash模块中通过一个所述存储阵列进行全连接运算包括:获取全连接层的权值参数矩阵的规模以及参与运算的所述存储阵列的规模;当全连接层的权值参数矩阵的规模大于所述存储阵列的规模时,根据所述存储阵列的输入端个数以及输出端个数将所述待运算数据信息以及权值参数矩阵进行切分成多组,使其切分后的每组所述待运算数据信息以及权值参数矩阵的输入个数,以及输出个数小于或等于所述存储阵列的输入端个数以及输出端个数;设置切分后的每组所述待运算数据信息运算顺序;根据运算顺序分别将切分后的每组所述待运算数据信息加载至所述存储阵列中,并进行运算处理;当每一组运算完成后,通过在所述NOR Flash模块中设置的存储模块存储运算结果,对所述存储阵列中的存储单元进行重新编程,并对应的设置所述存储单元的阈值;将每次运算后的结果进行累加,和/或拼接。
进一步优选的,包括:当所述NOR Flash模块中设置通过多个所述存储阵列进行全连接运算包括:获取全连接层的权值参数矩阵的规模以及参与运算的所述存储阵列的规模;当全连接层的权值参数矩阵的规模大于所述存储阵列的规模时,根据每个所述存储阵列的输入端个数以及输出端个数将所述待运算数据信息以及权值参数矩阵切分成多组,且与每个所述存储矩阵对应切分后的所述待运算数据信息对应设置;使其切分后的每组所述待运算数据信息以及权值参数矩阵的输入个数,以及输出个数不大于所述存储阵列的输入端个数以及输出端个数;将切分后的所述权值参数矩阵编程到所述存储阵列,切分后的所述待运算数据信息对应的加载在所述存储阵列的输入端,并获取每个所述存储阵列的输出结果;将每个所述存储阵列的输出结果与所述待运算数据信息的输出个数对应,将每次运算后的结果进行累加,和/或拼接。
一种基于单芯片实现神经网络的运算方法,包括:可执行上述任一所述的基于NORFlash模块的神经网络的数据切分运算方法;还包括:在芯片中进行神经网络运算包括:卷积层运算,全连接运算,和/或池化运算,以及互联运算;
所述卷积层进行运算之后,通过互联运算操作将所述卷积层以及所述全连接层进行逻辑固化运算;
具体包括:
所述卷积层的运算可执行上述任一所述的基于NOR Flash模块的神经网络的数据切分运算方法;
所述全连接层的运算可执行上述任一所述的基于NOR Flash模块的神经网络的数据切分运算方法。
进一步优选的,一种基于单芯片实现神经网络的运算方法,包括:
判断芯片的存储容量;当芯片的存储容量不小于完整映射神经网络的运算所需的存储容量时;具体为:根据神经网络中卷积层的层数及其预置参数、全连接层的层数与预置参数、以及池化层的预置参数和激活函数的预置参数,并对所述存储阵列中计算模块位置,以及互联的节点进行排布;进一步的根据排布后的位置关系对输入信号生成模块,输出信号测量模块,以及对存储单元固化设置;固化设置完成后根据输入的待运算的特征值,以及存储单元中设置的阈值电压进行运算处理。
进一步优选的,一种基于单芯片实现神经网络的运算方法,包括:判断芯片的存储容量;当芯片的存储容量小于完整映射神经网络的运算所需的存储容量时;通过复用存储单元进行运算处理;
具体为:
获取的神经网络中预设的卷积层的层数,以及全连接层数;根据设定运算顺序对卷积层,或者对全连接层进行运算;每一个卷积层,或者全连接层运算完成后,重新设置存储阵列中存储单元的阈值电压;将互联的上一层输出特征值转换成满足互联的下一层输入的特征值;运算完成后,输出运算结果。
一种基于多芯片实现神经网络的运算方法,包括,可执行权要求上述任一所述的基于NOR Flash模块的神经网络的数据切分运算方法;获取预设神经网络的运算架构;根据预设切分规则将预设神经网络的运算架构的数据流或工作任务对应的切分到各芯片中,并进行互联处理;
具体包括;
在芯片中进行神经网络运算包括:卷积层运算,全连接运算,和/或池化运算,以及互联运算;所述卷积层进行运算之后,通过互联运算操作将所述卷积层以及所述全连接层进行逻辑固化运算;
进一步具体包括:
所述卷积层的运算可执行上述所述的基于NOR Flash模块的神经网络的数据切分运算方法;所述全连接层的运算可执行上述所述的基于NOR Flash模块的神经网络的数据切分运算方法。
进一步优选的,一种基于多芯片实现神经网络的运算方法,包括:
对预设神经网络的运算架构进行切分处理;将切分处理后的神经网络的运算架构参数映射到对应的每个芯片中;将多个芯片按照预设神经网络的运算架构的运算数据流顺序进行排序级联;按照对各芯片的设置顺序,从排序中的最后一个芯片的输出端中获取运算结果。
进一步优选的,包括:获取预设神经网络的运算架构,根据对应工作任务进行切分处理;将切分后的同一工作任务的参数信息映射到同一个芯片中;将不同的工作任务的芯片并联在数据通信总线上;通过数据通信总线获取所述预设神经网络的运算架构进行运算的输出结果。
一种基于神经网络的IP核运算架构,包括:可执行上述所述的基于NOR Flash模块的神经网络的数据运算方法;
所述IP核运算架构还包括:
控制模块,存储模块,计算模块,DMA模块;所述存储模块,用于实现神经网络的数据存储;所述DMA模块,用于参加运算搬运数据信息;所述计算模块,用于对待运算数据信息进行运算,所述控制模块,用于控制神经网络中IP核内各个功能模块的运行状态。
进一步优选的,一种基于神经网络的IP核运算架构,包括:
所述控制模块从所述神经网络模型中提取预置参数;根据提取预置参数中的权值对于所述Flash存储阵列进行编程,设置所述Flash存储阵列中存储单元的阈值电压;根据提取预置参数中的权值对所述Flash存储阵列进行运算,获取所述Flash存储阵列的输出参数。
进一步优选的,一种基于神经网络的IP核运算架构,包括:当在所述神经网络中IP核设置一个Flash存储阵列时,
具体的运算为:
当芯片的存储容量小于完整映射神经网络的运算所需的存储容量时,将预设神经网络的运算架构的预置参数完整地映射到所述Flash存储阵列的存储单元中;进一步控制所述Flash存储阵列进行运算,获取所述Flash存储阵列的运算结果,并将所述Flash存储阵列的运算结果发送至所述控制模块。
进一步优选的,一种基于神经网络的IP核运算架构,包括:当在所述神经网络中IP核设置一个Flash存储阵列时,
具体的运算为:
将预设神经网络的运算架构按照运算数据流进行参数提取;将提取后的参数按照运算数据流的运算节点进行切分设置,根据切分各节点对应的数据参数,对应的映射至所述Flash存储阵列的存储单元中;根据运算数据流的运算节点顺序,控制当前运算节点的运算参数对所述存储阵列进行运算,运算完成后,重新设置所述Flash存储阵列中存储单元的阈值电压;根据运算数据流的运算节点顺序依次获取所述Flash存储阵列的运算结果,并将所述Flash存储阵列的运算结果发送至所述控制模块。
进一步优选的,一种基于神经网络的IP核运算架构,包括:在所述神经网络中IP核设置多个所述Flash存储阵列时:具体的运算为:
将预设神经网络的运算架构按照运算数据流进行参数提取;将提取后的参数按照运算数据流的运算节点进行切分设置,根据切分各节点对应的数据参数,映射至对应的所述Flash存储阵列的存储单元中;根据运算数据流的运算节点顺序,依次的将相邻两个所述Flash存储阵列中前一所述Flash存储阵列输出的运算结果,作为后一所述Flash存储阵列的输入特征值;根据运算数据流的运算节点顺序获取最后一个运算节点对应的所述Flash存储阵列的输出结果,并设置为所述预设神经网络的运算架构的运算输出结果,并将运算输出结果发送至所述控制模块;
或,获取每个运算数据流的运算节点对应的所述Flash存储阵列的输出结果;并将每个所述Flash存储阵列的输出结果通过数据总线发送至所述控制模块,并进行下一步处理。
本发明提供的一种基于NOR Flash模块的神经网络的数据切分运算方法、单芯片、多芯片实现神经网络的运算方法、神经网络的IP核运算架构,,能够带来以下至少一种有益效果:
在本发明中,基于NOR Flash实现在内存运算(In Memory Computing),进行神经网络运算,可以实现比传统冯诺依曼结构更高的性能及更低的功耗,实现需要的资源也大大降低。因此,实现基于NOR Flash的高速低功耗的神经网络运算在技术上具有极大的重要性。
在本发明中,与传统的设计相比较,本设计将神经网络在存储芯片内实现,大大节省了运算单元(如CPU)和存储器之间的通讯开销,实现了高性能、低功耗的运算。
附图说明
下面将以明确易懂的方式,结合附图说明优选实施方式,对一种基于NOR Flash模块的神经网络的数据切分运算方法、单芯片实现神经网络的运算方法、多芯片实现神经网络的运算方法、神经网络的IP核运算架构的上述特性、技术特征、优点及其实现方式予以进一步说明。
图1是本发明基于NOR Flash模块的神经网络的数据切分运算方法实施例的流程图;
图2是本发明基于NOR Flash模块的神经网络的数据切分运算方法实施例的一结构图;
图3是本发明基于NOR Flash模块的神经网络的数据切分运算方法实施例的另一结构图;
图4是本发明基于NOR Flash模块的神经网络的数据切分运算方法实施例的另一结构图;
图5是本发明基于NOR Flash模块的神经网络的数据切分运算方法实施例的另一结构图;
图6是本发明基于NOR Flash模块的神经网络的数据切分运算方法实施例的另一结构图;
图7是本发明基于NOR Flash模块的神经网络的数据切分运算方法实施例的另一结构图;
图8是本发明基于NOR Flash模块的神经网络的数据切分运算方法实施例的另一结构图;
图9是本发明基于NOR Flash模块的神经网络的数据切分运算方法实施例的另一结构图;
图10是本发明基于NOR Flash模块的神经网络的数据切分运算方法实施例的另一结构图;
图11是本发明基于NOR Flash模块的神经网络的数据切分运算方法实施例的结构图;
图12是本发明基于NOR Flash模块的神经网络的数据切分运算方法实施例的另一结构图;
图13是本发明基于NOR Flash模块的神经网络的数据切分运算方法实施例的另一结构图;
图14是本发明基于NOR Flash模块的神经网络的数据切分运算方法实施例的另一结构图;
图15是本发明一种基于单芯片实现神经网络的运算方法实施例的一结构图;
图16是本发明一种基于单芯片实现神经网络的运算方法实施例的另一结构图;
图17是本发明一种基于多芯片实现神经网络的运算方法实施例的一结构图;
图18是本发明一种基于多芯片实现神经网络的运算方法实施例的另一结构图;
图19是本发明一种基于神经网络的IP核运算架构实施例的一结构图;
图20是本发明一种基于神经网络的IP核运算架构实施例的另一结构图;
图21是本发明一种基于神经网络的IP核运算架构实施例的另一结构图。
具体实施方式
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对照附图说明本发明的具体实施方式。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,并获得其他的实施方式。
为使图面简洁,各图中只示意性地表示出了与本实用新型相关的部分,它们并不代表其作为产品的实际结构。另外,以使图面简洁便于理解,在有些图中具有相同结构或功能的部件,仅示意性地绘示了其中的一个,或仅标出了其中的一个。在本文中,“一个”不仅表示“仅此一个”,也可以表示“多于一个”的情形。
参考图1所示,本发明提供了一种基于NOR Flash模块的神经网络的数据切分运算方法的第1实施例,所述NOR Flash模块包括:输入信号生成电路100,输出信号测量电路200,累加模块300,以及由若干个存储单元,和/或电流镜构成的存储阵列400,在所述NORFlash模块中设置至少一个存储阵列;包括:
步骤S100在神经网络预置参数中获取待运算数据信息,以及神经网络各层的权值信息;
步骤S200判断所述待运算数据信息、以及神经网络各层的权值信息是否超过所述存储阵列的规模参数;
步骤S300当超过时,根据存储阵列的规模参数对所述待运算数据信息、以及神经网络各层的权值信息进行切分;
步骤S400将切分后的所述待运算数据信息对应的加载在所述存储阵列的输入端,且将切分后的所述神经网络各层的权值信息设置为所述存储阵列中各存储单元的阈值电压;并根据所述待运算数据信息通过输入信号生成电路转换后的电压以及所述存储单元的阈值电压进行运算处理;
步骤S500将所述存储阵列中各所述存储单元运算后的输出信号,通过所述输出信号测量模块进行测量后经由累加模块进行累加,和/或拼接,;
或通过数据总线进行传输后经由所述累加模块进行累加,和/或拼接,;
步骤S600累加,和/或拼接,完成后输出。
优选的,包括:获取参与运算的权值阵列尺寸以及参与运算的所述存储阵列规模;当所述参与运算的权值阵列尺寸大于所述存储阵列的规模时,将所述参与运算的权值阵列根据所述存储阵列的规模切分成多组权值子阵列;同时根据权值子阵列的切分方法,相应地对参与运算的所述待运算数据信息进行切分,并通过所述输入信号生成电路对应的加载在参与运算的所述存储阵列的输入端进行运算;将每个所述存储阵列运算后的输出结果进行累加,将累加后的结果设置为所述输出信号。之后通过所述输出信号测量模块进行测量后,经由数据总线传输至累加模块进行累加,或直接通过累加模块进行累加。
具体的,在本申请中基于NOR Flash模块为载体,实现数据的存储,矩阵-矩阵乘法,矩阵-向量乘法等相关的运算,实现了硬件加速器的功能;特别是神经网络全连接层的权值较多,很难用一个矩阵实现全部的全连接层运算,在不同神经网络中,存在着各操作所针对的相关的输入参数规模变化比较大,也即为矩阵和向量对象,大小不尽相同的情况。同时,由于存在矩阵运算规模过大的情形,若采用相同规模的存储阵列进行运算,会随着阵列规模的扩大,相应的噪声、连线电阻等因素引起的误差也随之增大,针对这种情况,本申请中对输入的运算数据信息,以及权值阵列信息,根据NOR Flash模块中用于运算的存储阵列的规模,对输入待运算数据信息以及权值信息进行多组切分运算,使其满足存储阵列的规模要求;由于输入的待运算数据信息,以及权值信息都是以矩阵的形式参与运算的;例如参与运算的存储阵列为5×5的矩阵;而待运算数据信息为15×15的矩阵,权值信息7×7的矩阵;因此当前存储阵列无法一次性完成卷积运算,此时需要根据存储阵列5×5大小对权值信息以及待运算数据信息进行切分,使其满足大小为5×5存储阵列的规模要求;故通过使用大小核的方法对数据进行切分;
具体的,在本申请的神经网络运算过程中,包括卷积层运算、池化层运算、激活函数、以及全连接层的运算;因此在本申请中对其各层进行运算,根据层与层之间的互联实现整个神经网络运算;神经网络中的卷积层运算是基于NOR Flash模块实现的;因此,进行卷积运算前,先根据卷积核(kernel)的值,利用编程/擦除控制模块,将Nor Flash运算阵列中相应存储单元的阈值电压设置到对应值。在本申请中在运算时,将所要进行运算的图像(特征值)按照先从左到右,再从上到下的顺序,每次向数字缓存单元中,输入一个像素点的值。该数字缓存单元会根据已输入的像素点和自身的设置,将需要进行卷积操作的值及相应控制信号,输出至输入信号生成电路。在每次有效运算中,输入信号生成电路,会根据来自数字缓存单元的数据,生成相应幅值/脉宽的输入信号,提供给Nor Flash运算阵列的输入端,以进行运算。同时,存储单元的输出端,会根据各存储单元的阈值电压和输入信号,运算出相应的结果;每个存储单元的运算的方法参见;本申请的申请人的在先专利201810193765.X的运算方法。在Nor Flash模块运算阵列的输出端,会对每个存储单元,或电流镜输出的数据参数进行相应运算结果的累加,并提供给输出信号测量电路,进行最终结果的测量。
在本实施例中,在进行运算之前,需要将待运算数据信息进行设定格式的转换,由于Nor Flash模块中在进行运算时,是以存储阵列为载体实现的,因此通过存储阵列获取运算结果时,输入的参数应该是以向量的形式进行输入,因此需要将输入的待运算数据信息全部转换成与存储阵列对应形式的输入参数形式;输入信号生成电路是用于将输入的数字信号转换成模拟信号,并将转换后的模拟信号加载至存储阵列的输入端。
在大小核的使用上,参见图2所示;将Flash阵列,切分成不同大小的子阵列,分别为kL1*kL2,kM1*kM2,kS1*kS2的规模,子阵列规模由大到小,不同的规模,对应于大、中、小的核。
若要求的存储阵列规模较小或适中,可以用大、中、小的子阵列在一个阵列中直接实现,可选取一个合适的子阵列,或多个小型的子阵列进行拼接,以完成计算。
例如,以大小核规模对应于10*10,5*5,3*3为例,神经网络的卷积核大小为7,则可以使用一个10*10的子阵列用于实现,如图3;也可以使用5*5以及3*3的卷积核进行拼接,以获得更高的资源利用率。当使用的子阵列或拼接后的阵列规模,和待计算的矩阵规模相同时,则不需特殊处理;若稍大,则将多余的部分编程到高阈值状态,对应于“0”,此时该部分输出为0,对计算结果无影响。
若要求的存储阵列规模较大,对最大规模的子阵列也不能在一个阵列中直接实现。则使用不同大小的子矩阵,进行拼接。
如图4所示,以大小核规模对应于10*10,5*5,3*3为例,神经网络所需的存储阵列规模为25,则可以使用4个10*10和9个5*5的子阵列拼接完成。
拼接后,各子矩阵的计算结果,通过两种方式进行累加。一种是将各子阵列,对应需要累加的行/列,直接互联,此时各子阵列输出的模拟结果,会在连线上直接累加,再经过测量电路,以得到最终的结果。由于拼接后,不同阵列间的计算,可能需要将输出的模拟信号直接进行累加,故其SL/BL需要连接到一起,故不同大小的核需进行合理的布置。否则,反而会降低芯片的性能和资源利用。
另一种方式是,参考图5所示;将各子阵列的结果分别用测量电路进行测量,再将得到的各结果,进行数字/模拟累加。可以利用互联总线,通过上层进行数据的管理和调度。
以上的技术方案,通过对NOR Flash模块中参与运算的待运算数据信息,以及权值信息,根据参与运算的存储阵列的规模进行切分,使其满足存储阵列的规模的运算,可以有效的提高运算速度。
针对于本申请中的切分运算,一是在进行卷积运算时进行切分运算,还有是针对于全连接运算的切分运算;针对不同的层的运算,本申请给出以下的实施方式;
本申请提供了一种基于NOR Flash模块的神经网络的数据切分运算方法的第2个实施例,包括:在本实施例中,当所述NOR Flash模块中设置一个或多个数据缓存单元,在所述NOR Flash模块中进行卷积层切分运算包括:
获取卷积核的尺寸以及参与运算的所述存储阵列的规模;
当所述卷积核的尺寸大于所述存储阵列的规模时,将所述卷积核根据所述存储阵列的规模切分成多组;
根据切分后对应的每一个所述卷积核的尺寸进一步的将所述待运算数据信息切分成多组,将切分后对应的各组所述待运算数据信息通过所述输入信号生成电路,对应的加载在参与运算的所述存储阵列的输入端并进行卷积运算;
将每个所述存储阵列运算后的输出结果进行累加和/或拼接,将累加和/或拼接后的结果设置为所述输出信号。
本申请提供了一种基于NOR Flash模块的神经网络的数据切分运算方法的第3个实施例,包括:当所述NOR Flash模块中设置一个或多个数据缓存单元,在所述NOR Flash模块中进行卷积层切分运算包括:
获取卷积核的尺寸以及参与运算的所述存储阵列的规模;
当切分后的所述卷积核的尺寸等于所述存储阵列的规模时,将所述待运算数据信息通过所述输入信号生成电路一一对应的加载在每个所述存储阵列的输入端,并进行运算处理。
本申请提供了一种基于NOR Flash模块的神经网络的数据切分运算方法的第4个实施例,包括:
当所述NOR Flash模块中设置一个或多个数据缓存单元,在所述NOR Flash模块中进行卷积层切分运算包括:
获取卷积核的尺寸以及参与运算的所述存储阵列的规模;
当切分后的所述卷积核的尺寸小于所述存储阵列的规模时,根据预设运算规则在所述存储阵列中选取满足对应位置关系的所述存储单元参加运算;
将未被选取的所述存储单元进行编程处理,并设置为高阈值状态,同时将所述输入信号生成电路对应的输入端输入的所述待运算数据信息设置为0。
基于上述的第2~4实施例,具体的实施方式包括:
在NOR Flash模块中使用数字缓存器结构时:以1个channel,2个2*2的卷积核为例。其中存储子阵列在输入端的规模为3,输出端不限制。可以看到,卷积运算所需输入端的运算规模为4,而此时存储子阵列输入端的规模,仅为3,不足以进行完整的卷积运算。此时,可以将单个channel的运算通过两个运算阵列完成。如图6所示,可对卷积层进行切分,将每个卷积核切分成2个2*1的运算,并在两个存储子阵列中分别实现各自的运算。运算完成后,通过ADC进行测量,并将结果输入累加电路进行累加输出。或通过总线,将测量结果输入到外部数字电路进行累加,以进行下一步运算。此时,由于卷积核被切分,两个运算阵列所需要的输入值,也需要相应的切分到两个运算阵列中。故两个数字缓冲器需要能将切分后的相应待运算数据,输入至DAC中。
由于切分后的所需运算规模可能小于存储子阵列的规模,对存储子阵列中,多余的存储单元,应进行编程处理,使得其阈值电压处于高阈值状态,不会影响最终的运算结果。相应的,多余的DAC也应将其输入置为0。
在运算前,对卷积核进行切分,待运算数据的输入也要相应变化。同时对数字缓冲器进行设置,使得其转换的待运算数据与切分后的卷积核情形相匹配。运算时,将待运算数据,按照合适的顺序,输入各数字缓冲器中,缓冲器会将其转换为所需要格式,输入至存储阵列中进行运算。通过输出信号测量电路对各存储阵列的运算结果进行测量,并将测量后的结果通过累加模块进行相应的累加。则最终的运算结果即为卷积层的运算结果。
在上述的技术方案中,在NOR Flash模块设置有至少一个数据缓存单元的情况,根据切分后的卷积核的尺寸包括等于,以及小于存储阵列的规模时,针对不同切分情况提供了对应的不同的运算方式。
本申请提供了一种基于NOR Flash模块的神经网络的数据切分运算方法的第5个实施例,包括:当所述NOR Flash模块中设置一个数据缓存单元,并通过一个所述存储阵列对切分后的所述卷积核进行运算处理,则进行单通道运算具体包括:获取卷积核的尺寸以及参与运算的所述存储阵列的规模;当所述卷积核的尺寸大于所述存储阵列的规模时,将所述卷积核根据所述存储阵列的规模切分成多组;设置切分后的每组所述卷积核的运算顺序;
根据运算顺序通过所述存储阵列进行运算,当每一组运算完成后,对所述存储阵列中的存储单元的阈值电压进行重新编程,并对应的设置所述存储单元的阈值;通过输入信号生成模块,输入下一组待运算数据,进行计算。将每次运算后的结果进行累加和/或拼接。
本申请提供了一种基于NOR Flash模块的神经网络的数据切分运算方法的第6个实施例,包括:当所述NOR Flash模块中设置多个数据缓存单元以及多个运算通道,运算通道的数量与所述数据缓存单元的数量一一对应,并通过一个所述存储阵列对切分后的所述卷积核进行运算处理,具体包括:获取每个运算通道的运算后的结果;并将每个运算后的结果进行累加和/或拼接。
具体的,在本申请的第5和第6个实施例中,根据每个芯片的设计的内部结构不同,当在NOR Flash模块中设置一个数据缓存单元和一个运算通道,以及多个数据缓存单元和多个运算通道的实施方式为:
当为第5实施例的情况时;运算时,同样是根据上述第2-4实施例中需比较卷积核,存储阵列,以及待运算数据信息的大小以及规模,并依此进行切分,但是在芯片的结构上进行改变,只是设置了一个数据缓存单元和一个运算通道,在进行运算时分为多个步骤进行,先将切分后的第一组运算,通过存储子阵列实现运算,其运算结果通过输出信号测量电路进行测量并存储;然后根据卷积核的不同对该存储子阵列重新进行编程操作,并利用该存储子阵列完成第二组切分后的运算,其运算结果测量完成后,与第一组结果,根据运算规则进行累加和/或拼接,如果切分成对多组时,后续的进行依次累加和/或拼接,即可得到最终的卷积层运算结果。
例如:参考图7,该电路中,仅有1个数字缓存单元和1个存储子阵列,以图6实现的计算为例,可以利用仅有的1个数字缓存单元和1个存储子阵列,先后实现图6中两部分的计算,再将各部分的结果,按照运算规则,进行累加,和/或拼接。相当于将原有的卷积计算,切分为两部分,并使用图7的电路分别计算各部分,再将各部分的结果进行累加和/或拼接。则最终累加和/或拼接的结果即为卷积层计算结果。
当为第6实施例的情况时,运算时,同样是根据上述第2-4实施例中需比较卷积核,存储阵列,以及待运算数据信息的大小以及规模,并依此进行切分,但是在芯片的结构上进行改变,设置了多个数据缓存单元和多个运算通道,多通道时,结合上述内容,以及前述的多通道的卷积层实现情形即可。具体地,若使用单个子阵列进行复用,则按照上述单通道的切分方法,分别运算多个通道各自的输出结果,最终将多个通道的运算结果相应地进行累加和/或拼接即可。
若可以使用多个子阵列,则按照上述单通道的切分方法,将多个通道分别进行切分,并利用多个存储子阵列实现各个通道的运算。最终将所有使用的存储子阵列结果进行相应的累加和/或拼接,即可以完成多通道卷积层的运算。
本申请提供了一种基于NOR Flash模块的神经网络的数据切分运算方法的第7个实施例,包括:包括:当所述NOR Flash模块中设置一个数据缓存单元以及一个运算通道时,通过多个所述存储阵列对切分后的所述卷积核进行运算处理具体包括:根据各所述存储阵列的规模将所述卷积核切分成多组;(切卷积核)根据切分后的多组所述卷积核的权值大小,对应的设置所述多个存储阵列中各存储单元的阈值电压;所述待运算数据相应地输入到各存储阵列中,对每个卷积核对应的所述存储阵列进行运算处理;将运算后的结果进行累加,和/或拼接。
本申请提供了一种基于NOR Flash模块的神经网络的数据切分运算方法的第8个实施例,包括:当所述NOR Flash模块中设置多个数据缓存单元以及多个运算通道,所述运算通道的数量与所述数据缓存单元的数量一一对应,并通过多个所述存储阵列对切分后的所述卷积核进行运算处理包括:
每个所述运算通道设置对应多个所述存储阵列;在第7个实施例的基础上,将每个运算通道对应的所述数字缓存单元输出的所述待运算数据信息对应的输入至所述存储阵列的输入端;并将切分后的所述卷积核的各权值根据预设规则对应的存储在每个所述存储阵列中,并对应编程所述存储单元的阈值;当每个运算通道中的各所述存储阵列运算完成后,将对应的输出结果,按照每个所述运算通道进行累加处理。
具体的,在本申请的第7和第8个实施例中,根据每个芯片的设计的内部结构不同,当在NOR Flash模块中设置一个数据缓存单元和一个运算通道,以及多个数据缓存单元和多个运算通道时,但是一个数据缓存单元对应的是多个存储阵列,针对该种情况的运算方式为:
例如:参考图8,以2个channel,每个channel为2*2的卷积核,卷积核有2个;单个阵列输入端有3个,在输出端不作限制,可以看到,此次计算被展开到了三个存储子阵列中。在三个子阵列中,每个子阵列的WL1均存储第一个卷积核的权值,WL2均存储第二个卷积核的权值,各相应WL上的值共同涵盖了channel_1和channel_2以及偏移量的各值;同样地,输入端也共同涵盖了两个数字缓存单元以及1的各值。相当于将原有的卷积计算,切分到3个小规模存储阵列中,分别计算原有计算的一部分,再进行累加。则最终累加结果即为卷积层计算结果。
计算时,各channel的数字缓存单元的输出分别依次对应到各阵列的输入端,并将卷积核各值相应编程到对应的存储单元中。其中,channel_1的特征值输入数字缓存单元1中,channel_2的特征值输入数字缓存单元2中。若阵列中有没有使用到的存储单元和DAC,则分别将其存储状态对应为0值并将其输入值置为0,即可。在上述的第2~8实施例中在NORFlash模块中都设置了不等数量的数据缓存单元,以及不同的运算通道。与此同时,也存在没有设置数据缓存单元的情况,针对于没有设置数据缓存单元的切分运算方式为下述提供的实施例。
本申请提供了一种基于NOR Flash模块的神经网络的数据切分运算方法的第9个实施例,包括:当所述NOR Flash模块中未设置数据缓存单元,在所述NOR Flash模块中进行卷积层切分运算包括:获取卷积核的尺寸、所述待运算数据信息的规模以及参与运算的所述存储阵列的规模;当所述待运算数据信息的规模,和/或卷积核的尺寸大于所述存储阵列的规模时,将所述待运算数据信息,和/或所述卷积核根据所述存储阵列的规模切分成多组;(对待运算数据进行切分)将切分后的所述卷积核编程到所述存储阵列,进一步的将切分后的所述待运算数据信息通过所述输入信号生成电路对应的加载在参与运算的所述存储阵列的输入端进行卷积运算;将每个所述存储阵列运算后的输出结果进行累加和/或拼接,将累加后的结果设置为所述输出信号。根据切分后对应的每一个所述待运算数据信息的规模的尺寸进一步的切分所述待运算数据信息,
本申请提供了一种基于NOR Flash模块的神经网络的数据切分运算方法的第10个实施例,包括:当所述NOR Flash模块中未设置数据缓存单元,在所述NOR Flash模块中进行卷积层切分运算包括:获取卷积核的尺寸、待运算数据信息的规模以及参与运算的所述存储阵列的规模;当切分后的所述运算所需存储阵列的尺寸等于所述存储阵列的规模时,将所述待运算数据信息通过所述输入信号生成电路一一对应的加载在每个所述存储阵列的输入端,并进行运算处理。
本申请提供了一种基于NOR Flash模块的神经网络的数据切分运算方法的第11个实施例,包括:当所述NOR Flash模块中未设置数据缓存单元,在所述NOR Flash模块中进行卷积层切分运算包括:获取卷积核的尺寸、待运算数据信息的规模以及参与运算的所述存储阵列的规模;当切分后的所述待运算数据信息的规模小于所述存储阵列的规模时,根据预设运算规则在所述存储阵列中选取满足对应位置关系的所述存储单元参加运算;将未被选取的所述存储单元进行编程处理,并设置为高阈值状态,同时将所述输入信号生成电路对应的输入端输入的所述待运算数据信息设置为0。
具体的,当不设置数据缓存单元时,以11*11的待运算数据信息,3*3的卷积核为例(不进行padding,无偏移量),不失一般性的,可以假设存储阵列由10*10的存储单元组成。此时,根据运算规则,将待运算数据信息展开为一维向量,即大小为121的一维向量,映射到存储阵列的输入端,另一方面,由于11*11的待运算数据信息经3*3的卷积计算后,输出结果应为9*9的大小,故将输出结果也展开并映射到存储阵列的输出端,即81个输出端。即此时需要121*81规模的存储单元组成的存储阵列进行计算,其中,在81个输出端各自对应的121个存储单元中,根据卷积的运算规则,仅有对应的9个位置的存储单元,与3*3卷积核的各权值对应,其余存储单元均置于0。故此121*81的矩阵中,存在大规模的元素为0的情况。
由于存储阵列的规模小于所需阵列的规模,故可以将121切分为12组10个待运算信息的和1组1个待运算信息的,将81切分为8组10个输出结果的和1组1个输出结果的。此时,需要96个10*10规模的,8个1*10规模的,12个10*1规模的,和1个1*1规模的运算,均可以在10*10的存储阵列中分别实现。其中,当进行96个10*10规模运算时,由于运算规模与存储阵列规模相等,将各权值的位置,与存储阵列各存储单元的位置对应,进行映射即可。当进行其余运算规模的运算时,由于运算规模小于存储阵列规模,故需将已有的子矩阵根据位置,相应映射到存储阵列中,对没有映射到的单元及输入端,将其置于0对应的状态。注意到,切分之后的运算可能存在10*10矩阵中,各元素均为0的情况,此时,该次运算可以直接跳过,以节省阵列面积和计算时间。
本申请提供了一种基于NOR Flash模块的神经网络的数据切分运算方法的第12个实施例,包括:当所述NOR Flash模块中未设置数据缓存单元,且所述NOR Flash模块中只含有一个所述存储阵列进行切分运算包括:获取所述待运算数据信息的规模的输入个数,以及输出个数;当输入个数,以及输出个数至少有一个大于所述存储阵列的输入端个数以及输出端个数时,根据所述存储阵列的输入端个数以及输出端个数对所述待运算数据信息进行切分成多组,使其切分后的每组所述待运算数据信息的输入个数,以及输出个数不大于所述存储阵列的输入端个数以及输出端个数;设置切分后的每组所述待运算数据信息运算顺序;根据运算顺序分别将切分后的每组所述待运算数据信息加载至所述存储阵列中,并进行运算处理;当每一组运算完成后,通过在所述NOR Flash模块中设置的存储模块存储运算结果,对所述存储阵列中的存储单元进行重新编程,并对应的设置所述存储单元的阈值;将每次运算后的结果进行累加,和/或拼接。
本申请提供了一种基于NOR Flash模块的神经网络的数据切分运算方法的第13个实施例,包括:当所述NOR Flash模块中未设置缓存单元时,且通过多个所述存储阵列进行卷积运算包括:获取所述待运算数据信息的规模的输入个数,以及输出个数;当所述待运算数据信息的规模的输入个数,以及输出个数分别大于所述存储阵列的输入端个数以及输出端个数时,根据每个所述存储阵列的输入端个数以及输出端个数,将所述待运算数据信息以及所述参与运算的权值阵列对应的切分成多组,且切分后的所述待运算数据信息,以及所述运算的权值阵列与每个所述存储矩阵对应设置;使其切分后的每组所述待运算数据信息的输入个数,以及输出个数不大于所述存储阵列的输入端个数以及输出端个数;将切分后的所述待运算数据信息对应的加载在所述存储阵列的输入端,并根据所述参与运算的权值阵列对应的编程对应存储单元的阈值电压,并获取每个所述存储阵列的输出结果;将每个所述存储阵列的输出结果与所述待运算数据信息的输出个数对应,将每次运算后的结果进行累加,和/或拼接。
具体的,在本申请的第9~第14的各实施例的中,是针对在进行卷积切分运算过程中,在NOR Flash模块中尚未设置有数据缓存单元;在进行运算过程中需要将待运算数据信息进行展开,依次的输入至存储阵列中,例如输入的数据为:3*3的矩阵[(f11,f12,f13),(f21,f22,f23),(f31,f32,f33)],在未设置有数据缓存单元时,3*3的待运算数据信息输入过程中,直接将3*3全部转换为1维形式输入至存储阵列上,其展开的顺序为:[f11,f12,f13,f21,f22,f23,f31,f32,f33],并结合与卷积核之间的对应位置关系,进行运算。如图9所示,以单通道的2*2卷积核[(w11,w12),(w21,w22)]的卷积(不使用padding,没有偏移量)计算为例,该运算的输出结果为2*2的矩阵。由于待运算数据进行了一维展开,故卷积核也需要进行相应的展开,以对应相应的待运算数据。考虑存储阵列足够大的情况,至少需9个输入端和4个输出端。可以使用BL输入,SL输出的方案,此时需4条SL,各SL上的9个存储单元分别存储
(w11,w12,0,w21,w22,0,0,0,0),(0,w11,w12,0,w21,w22,0,0,0),(0,0,0,w11,w12,0,w21,w22,0)和(0,0,0,0,w11,w12,0,w21,w22)以获得2*2矩阵中的4个值。
当存储单元不够大时,不失一般性地,以存储阵列的输入端为3个,输出端为2个为例(仅为便于说明,不对应真实情况)。此时上述所需的9*4阵列规模远超了现在的存储阵列规模。为了实现卷积运算,此处需进行切分,以使用存储阵列进行运算。将原有计算进行切分,可以将9*4切分成6次3*2规模的运算。
如图10所示,当使用单个阵列进行运算时,需要复用该阵列,以完成各次计算。可以将图9中SL1,SL2存储阵列中的权值信息切分成[(w11,w12,0,),(0,w11,w12)],[(w21,w22,0),(0,w21,w22)]和[(0,0,0),(0,0,0)]三组,其输入端的待运算信息分别对应(f11,f12,f13),(f21,f22,f23)和(f31,f32,f33)。将该三组记为第1~3次运算,同理,得到SL3,SL4对应的第4~6次运算。先根据第1次运算的权值信息对所述单个阵列进行编程,使对应的阈值电压满足要求。再在输入端输入对应的待运算信息,使用该单个阵列进行运算,并通过数据测量模块进行测量,并进行存储。之后对存储阵列进行重新编程,以进行第2次运算,以此类推,直至完成切分后的所有运算。其中,第1~3次和第4~6次的运算结果会分别进行累加,最终拼接为所需的4个计算结果。
如图11所示,当可以使用多个3*2的存储阵列时,使用上述同样的切分方式,但同时使用6个存储阵列,分别进行第1~6次运算。计算完成后,可以将相应的输出端进行联结,再通过ADC进行测量。也可以先通过ADC,测量得到各阵列的输出结果,再通过总线,将结果传输到累加模块,对结果进行累加,和或拼接。
在上述的第2~14实施例中是针对于基于NOR Flash模块的神经网络的数据切分运算方法中卷积层的切分运算,在神经网络运算过程中,不仅仅需要卷积层运算,还涉及到池化运算,以及全连接运算;同样进行全连接运算过程中参与运算的存储阵列存在不能满足实际需求的情况,因此,需要对输入的待运算数据信息和权值矩阵进行切分处理,具体的实施方式参加以下的各个实施例。
本申请提供了一种基于NOR Flash模块的神经网络的数据切分运算方法的第15个实施例包括:当所述NOR Flash模块中通过一个或多个所述存储阵列进行全连接运算包括:获取全连接层的权值参数矩阵以及参与运算的所述存储阵列的规模;当全连接层的权值参数矩阵的规模大于所述存储阵列的规模时,将全连接层的权值参数矩阵根据所述存储阵列的规模切分成多组;根据切分后对应的每一个所述全连接层的权值参数矩阵的规模进一步的切分所述待运算数据信息,并通过所述输入信号生成电路对应的加载在参与运算的所述存储阵列的输入端进行全连接层运算;将每个所述存储阵列运算后的输出结果进行累加和/或拼接,将累加后的结果设置为所述输出信号。
本申请提供了一种基于NOR Flash模块的神经网络的数据切分运算方法的第16个实施例包括:当所述NOR Flash模块中通过一个或多个所述存储阵列进行全连接运算包括:获取全连接层的权值参数矩阵的规模以及参与运算的所述存储阵列的规模;当切分后的所述全连接层的权值参数矩阵的规模等于所述存储阵列的规模时,将切分后的所述待运算数据信息通过所述输入信号生成电路一一对应的加载在每个所述存储阵列的输入端,并进行运算处理。
本申请提供了一种基于NOR Flash模块的神经网络的数据切分运算方法的第17个实施例包括:当所述NOR Flash模块中通过一个或多个所述存储阵列进行全连接运算包括:获取全连接层的权值参数矩阵的规模以及参与运算的所述存储阵列的规模;当切分后的所述全连接层的权值参数矩阵的规模小于所述存储阵列的规模时,根据预设运算规则在所述存储阵列中选取满足对应位置关系的所述存储单元参加运算;将未被选取的所述存储单元进行编程处理,并设置为高阈值状态,同时将所述输入信号生成电路对应的输入端输入的所述待运算数据信息设置为0。
具体的,在上述的第15~17实施例中,在进行全连接运算时,通过将输入一维向量和输出一维向量进行切分,使得切分后的各部分能够在一个NOR Flash阵列中完成运算。
例如,如图12所示,以存储阵列规模为10*10的存储单元为例,即该阵列的输入端和输出端均为10个。当进行一个输入特征值数为96,输出特征值数为48的全连接层计算时,即完成96*48规模的权值矩阵对应的向量矩阵运算时,由于输入特征值数和输出特征值数均大于存储阵列的规模,故单个阵列不能在一次计算中完成所有的计算。此时,可以将输入特征值切分为9组10个输入特征值和1组6个输入特征值,输出特征值切分为4组10个输出特征值和1组8个输出特征值,相应的,此时96*48的权值矩阵被切分为36个10*10的权值子矩阵,4个6*10的权值子矩阵,9个10*8的权值子矩阵和一个6*8的权值子矩阵。
将上述切分后的输入特征值,输出特征值和权值子矩阵,分别映射到10*10的存储阵列中进行计算,可得到各部分的结果。并对所有的结果根据切分前的关系,进行累加或拼接。即可得到最终全连接层的计算结果。
其中,当进行36个10*10的权值子矩阵的运算时,由于子矩阵与存储阵列规模相等,将子矩阵中各权值位置,与存储阵列各存储单元的位置对应,进行映射即可。当进行其余权值子矩阵的运算时,由于子矩阵的规模小于存储阵列规模,故需将已有的子矩阵根据位置,相应映射到存储阵列中,对没有映射到的单元及输入端,将其置于0对应的状态。
若切分后的各部分运算只能在一个阵列中完成,则还需一个额外的存储和累加模块,能够将单次计算的结果进行存储,并在单次计算完成后,将本次计算的结果与此前计算中,对应的值进行累加,直至全连接层的计算完成。单次计算过程中,需要先对阵列中各存储单元重新进行擦除/编程操作,使得各存储单元的存储状态对应于当次计算中的权值,然后再将对应切分后的输入向量施加在NOR Flash阵列的输入端,进行乘加计算。待所有计算完成后,最终的累加和/或拼接的结果,即为全连接层的计算结果。针对于当切分后的所述全连接层的权值参数矩阵的规模与所述存储阵列的规模进行比较,根据比较的结果进行不同方式的处理。
本申请提供了一种基于NOR Flash模块的神经网络的数据切分运算方法的第18个实施例包括:当所述NOR Flash模块中通过一个所述存储阵列进行全连接运算包括:获取参与全连接运算的所述待运算数据信息,从所述待运算数据信息中获取输入个数,以及输出个数;当所述待运算数据信息的输入个数,以及输出个数至少一个大于所述存储阵列的输入端个数以及输出端个数时,根据所述存储阵列的输入端个数以及输出端个数将所述待运算数据信息进行切分成多组,使其切分后的每组所述待运算数据信息的输入个数,以及输出个数小于或等于所述存储阵列的输入端个数以及输出端个数;设置切分后的每组所述待运算数据信息运算顺序;根据运算顺序分别将切分后的每组所述待运算数据信息加载至所述存储阵列中,并进行运算处理;当每一组运算完成后,通过在所述NOR Flash模块中设置的存储模块存储运算结果,对所述存储阵列中的存储单元进行重新编程,并对应的设置所述存储单元的阈值;将每次运算后的结果进行累加,和/或拼接。
具体的,例如,参考图13所示;此处以输入为(f1,f2,f3,f4,f5),输出为(c1,c2,c3,c4)为例,设单个矩阵的输入端仅有3个,输出端仅有2个,则由于输入输出过多,需要进行切分。可以将输入分为2部分(f1,f2,f3)和(f4,f5,1),输出分为两部分(c1,c2)和(c3,c4),共需要进行4次单次操作。第一次计算,先分别将1,2,3,4,5,6的存储单元编程到对应于w11,w12,w13,w21,w22,w23的状态,然后在IN1,IN2,IN3分别施加(f1,f2,f3)对应的输入信号,并将使能信号置为1,让阵列进行计算。计算完成后,两个ADC分别输出c11和c21,并被存储起来。第二次计算,需将1,2,3,4,5,6的存储单元编程到对应于w14,w15,b1,w24,w25,b2的状态,然后在IN1,IN2,IN3分别施加(f4,f5,f6)对应的输入信号,并将使能信号置为1,让阵列进行计算。此时计算结果为c12和c22,累加模块,会将其与对应的c11和c21进行累加,累加结果即为c1和c2。类似地,第三次和第四次计算,累加后会得到c3和c4,并与c1,c2进行拼接。此时,将c1~c4输出,此即全连接层的计算结果。
本申请提供了一种基于NOR Flash模块的神经网络的数据切分运算方法的第19个实施例包括:当所述NOR Flash模块中设置通过多个所述存储阵列进行全连接运算包括:获取参与全连接运算的所述待运算数据信息,从所述待运算数据信息中获取输入个数,以及输出个数;当从所述待运算数据信息中获取输入个数,以及输出个数分别大于所述存储阵列的输入端个数以及输出端个数时,根据每个所述存储阵列的输入端个数以及输出端个数将所述待运算数据信息切分成多组,且与每个所述存储矩阵对应切分后的所述待运算数据信息对应设置;使其切分后的每组所述待运算数据信息的输入个数,以及输出个数不大于所述存储阵列的输入端个数以及输出端个数;将切分后的所述待运算数据信息对应的加载在所述多个存储阵列的各输入端,并获取每个所述存储阵列的输出结果;将每个所述存储阵列的输出结果与所述待运算数据信息的输出个数对应,将每次运算后的结果进行累加,和/或拼接。
具体的,基于实施例18、19,针对于输入端以及输出的个数的不同,其实施方式为,若切分后的各部分运算可以在不同阵列中完成,则可以使用多个阵列,分别计算各部分的计算结果。最终将各阵列中对应的计算结果进行累加和/或拼接,即为最终的全连接层计算结果。计算前,需要先对各阵列中各存储单元进行擦除/编程操作,使得各存储单元的存储状态可以表征对应切分后的子矩阵的权值。计算时,向各阵列的输入端施加对应的输入信号,各阵列会在输出端输出各阵列内的乘加运算结果。最后将各阵列对应的输出,输入到累加模块,进行累加运算,输出的结果即为全连接层的结果。
例如,如图14所示,此处以输入为(f1,f2,f3,f4,f5),输出为(c1,c2,c3,c4)为例,设单个矩阵的输入端仅有3个,输出端仅有2个,则由于输入输出过多,需要进行切分。可以将输入分为2部分(f1,f2,f3)和(f4,f5,1),输出分为两部分(c1,c2)和(c3,c4),共需要4个阵列进行运算。与单个阵列实现的配置类似,只是这里使用4个阵列分别计算,将运算后的结果进行累加后输出。
在上述的技术方案中,针对于在于NOR Flash模块的硬件结构上进行不同设置,由于硬件结构已经固化,因此当进行运算时,输入的待运算数据信息规模过大时,需要根据存储阵列的大小进行切分,同时也需要对于权重进行切分,根据切分后的规模不同,设置的结构不同,并进行相应的运算,在以上的技术方案中,通过切分运算,使其神经网络以NORFlash模块为载体,使其提高神经网络的计算性能,缓解了输入数据量过大的问题。
在本申请中,在以下的第20~26实施例,将实现神经网络运算在芯片中实现时,使用单个芯片实现,也可以使用多个芯片实现。
本申请提供的第20个实施例,一种基于单芯片实现神经网络的运算方法的实施例,可执行实施例1~20任一种基于NOR Flash模块的神经网络的数据切分运算方法;还包括:在芯片中进行神经网络运算包括:卷积层运算,全连接运算,和/或池化运算,以及互联运算;所述卷积层进行运算之后,通过互联运算操作将所述卷积层以及所述全连接层进行逻辑固化运算;具体包括:所述卷积层的运算可执行实施例2-14任一所述的基于NOR Flash模块的神经网络的数据切分运算方法;所述全连接层的运算可执行实施例15-20任一所述的基于NOR Flash模块的神经网络的数据切分运算方法。
本申请提供的第21个实施例,一种基于单芯片实现神经网络的运算方法的实施例,包括:判断芯片的存储容量;当芯片的存储容量不小于完整映射神经网络的运算所需的存储容量时;具体为:根据神经网络中卷积层的层数及其预置参数、全连接层的层数与预置参数、以及池化层的预置参数和激活函数的预置参数,并对所述存储阵列中运算模块位置,以及互联的节点进行排布;进一步的根据排布后的位置关系对输入信号生成模块,输出信号测量模块,以及对存储单元固化设置;固化设置完成后根据输入的待运算的特征值,以及存储单元中设置的阈值电压进行运算处理。
本申请提供的第22个实施例,一种基于单芯片实现神经网络的运算方法的实施例,包括:判断芯片的存储容量;当芯片的存储容量小于完整映射神经网络的运算所需的存储容量时;通过复用存储单元进行运算处理;具体为:获取的神经网络中预设的卷积层的层数,以及全连接层数;根据设定运算顺序对卷积层,或者对全连接层进行运算;每一个卷积层,或者全连接层运算完成后,重新设置存储阵列中存储单元的阈值电压;将互联的上一层输出特征值转换成满足互联的下一层输入的特征值;运算完成后,输出运算结果。
具体的,在本申请的一种基于单芯片实现神经网络的运算方法的各实施例,针对于神经网络的运算方法的实施例可参见申请号为:CN201910056832.8,名称为:一种基于NOR Flash模块的神经网络的数据运算方法未授权;基于单芯片运算方法的实施,在单个芯片中设置各个功能模块,若Flash芯片的资源和面积充足,则将各计算模块均置于芯片中,固化各模块的位置和互联,再进行计算即可,在进行运算过程中根据输入的数据量的规模,将神经网络在芯片上完全展开,根据输入的数据量进行卷积切分运算,以及全连接的切分运算,以及相关的池化运算。例如图15所示,以AlexNet为例,可以将第一层卷积层的红绿蓝三个通道和第二层的96个通道等等神经网络操作,完整地映射到Flash芯片中,进行神经网络运算。
还包括一种通过单芯片复用的实施方式,参见图16所示,若Flash芯片的资源和面积不足以搭载整个网络,则可将AlexNet进行切分,每次单个Flash芯片,仅完成AlexNet的某一层(卷积/全连接),待该层计算完成后,将下一层的计算网络,重新编程入Flash芯片中,再将上一层的计算结果,传输到数据输入模块,进行下一层的计算。其中,池化操作等中间操作,可以使用专利申请号为:CN201910056832.8专利中的方式利用模拟电路进行运算,也可以使用数字电路进行计算。全连接层由于参数较大,但计算量较小,可以使用Flash阵列进行计算,也可以使用数字电路计算。本申请提供的第23个实施例,一种基于多芯片实现神经网络的运算方法的实施例,包括:可执行实施例1-20任一种基于NOR Flash模块的神经网络的数据切分运算方法;在获取预设神经网络的运算架构的数据流;根据预设切分规则将预设神经网络的运算架构的数据流对应的切分到各芯片中,并进行级联运算处理;
具体包括:在芯片中进行神经网络运算包括:卷积层运算,全连接运算,和/或池化运算,以及互联运算;所述卷积层进行运算之后,通过互联运算操作将所述卷积层以及所述全连接层进行逻辑固化运算;具体包括:所述卷积层的运算可执行实施例2-14任一所述的基于NOR Flash模块的神经网络的数据切分运算方法;所述全连接层的运算可执行实施例15-20任一所述的基于NOR Flash模块的神经网络的数据切分运算方法。
本申请提供的第24个实施例,一种基于多芯片实现神经网络的运算方法的实施例,包括:对预设神经网络的运算架构进行切分处理;将切分处理后的神经网络的运算架构参数映射到对应的每个芯片中;将多个芯片按照预设神经网络的运算架构的运算数据流顺序进行排序级联;按照对各芯片的设置顺序,从排序中的最后一个芯片的输出端中获取运算结果。
参考图17所示,对采用多片Flash Chip的方法,可以使用多片Flash芯片级联的方式,将整个神经网络按数据流进行切分。以AlexNet为例,可以将其按数据流进行切分,分为5层卷积层和3层全连接层。可以使用8块Flash芯片,完成整个神经网络的运算。进行计算前,先将AlexNet进行切分,分别将各层的参数以及网络,编程到相应的Flash芯片上,编程完成后,等待计算数据的输入。并将各Flash芯片按照对应数据流的顺序,进行级联。使得上一层的输出,会在下一层作为输入进入Flash芯片中。计算时,将计算数据在第一块Flash芯片的输入端进行传输,开始第一层卷积层的计算。计算完成后,对计算结果进行池化(如果需要)等中间操作运算,并传输至下一块Flash芯片中,进行下一层的卷积/全连接计算;依次类推,直至完成整个神经网络的计算。最终,在最后一块Flash芯片的输出端,可以得到神经网络的输出结果。其中,全连接层和中间操作,视具体情况,可以改用数字电路进行运算。其中,上例各芯片之间,是通过直连进行通讯。同样地,也可以通过互联总线进行级联间的数据通讯。
本申请提供的第25个实施例,一种基于多芯片实现神经网络的运算方法,包括:获取预设神经网络的运算架构,根据对应工作任务进行切分处理;将切分后的同一工作任务的参数信息映射到同一个芯片中;将不同的工作任务的芯片并联在数据通信总线上;通过数据通信总线获取所述预设神经网络的运算架构进行运算的输出结果。
具体的,实施例第22~25针对于多芯片实施例方式,结合图18所示;使用多片Flash芯片挂在同一条互联总线共同实现神经网络计算的方法。将整个神经网络按计算任务进行切分,分配到各个Flash芯片中,按照切分到的任务对各Flash芯片进行相应编程,之后,将数据根据分配的方式,输入对应的各Flash芯片中,并在各个Flash芯片中分别完成神经网络的一部分运算,待计算完成后,各芯片将结果通过总线传回,并准备进行下一阶段的运算。
将计算任务进行切分,分配到各个Flash芯片中,并根据分配方式,将神经网络及其参数从存储器中读出,通过总线和对应的并行接口,编程到相应的Flash芯片中。进行计算时,根据此前的分配方式,由CPU控制DMA将内存中待计算的数据通过总线发送到相应的Flash芯片中,或者由各个Flash芯片控制DMA或者直接访问内存读取数据;获取到相应的数据后,各个Flash芯片进行所需计算;计算完成后,由CPU控制DMA将计算结果通过总线取回内存,或者由各个Flash芯片控制DMA或者直接访问内存写回计算结果到内存,准备进行下一步的计算或存储。其后,各Flash芯片则进行下一次计算,或者进行针对另一计算任务的重新编程并进行计算。
上述过程,会一直持续到整个神经网络计算完成,或当前计算任务完成。
在本申请中,在以下的第26~30实施例,将用于计算的Flash阵列作为IP,参与AI芯片中神经网络计算的方法;本申请中,可实现单个Flash阵列的IP参与计算,也可使用多个IP同时进行计算。
本申请提供的第26个实施例,一种基于神经网络的IP核运算架构,包括:可执行实施例1-20任一所述的基于NOR Flash模块的神经网络的数据切分运算方法;所述IP核运算架构还包括:控制模块,存储模块,运算模块,DMA模块;所述存储模块,用于实现神经网络的数据存储;所述DMA模块,用于参加运算搬运数据信息;所述运算模块,用于对待运算数据信息进行运算,所述控制模块,用于控制神经网络中IP核内各个功能模块的运行状态。
本申请提供的第27个实施例,一种基于神经网络的IP核运算架构,包括:所述控制模块从所述神经网络模型中提取预置参数;根据提取预置参数中的权值对于所述Flash存储阵列进行编程,设置所述Flash存储阵列中存储单元的阈值电压;根据提取预置参数中的权值对所述Flash存储阵列进行运算,获取所述Flash存储阵列的输出参数。
具体的,如图19,在计算时,控制模块会根据神经网络以及当前的计算,先对IP内Flash阵列进行编程操作,使得IP可以完成相应的计算。编程完成后,控制模块会对待计算的特征值以及中间值,进行合理的调度和处理。若需要进入IP进行模拟计算,则将数据通过互联总线发送给DAC,将数据转换为施加在Flash阵列上的模拟电信号进行计算。待计算完成后,可将计算结果输入下一个Flash模块进行进一步计算;也可对其进行测量,通过ADC将其转化为数字值,以进行进一步计算,或发送到别处进行存储等操作。
若需要进入数字计算,则将数据通过互联总线发送到数字计算模块即可。计算完成后,可以通过总线进行存储,或者进一步的计算。对Flash IP而言,在一次计算完成后,此IP会等待下一次输入数据的到来,或重新进行编程,以满足之后的计算需要。
本申请提供的第28个实施例,一种基于神经网络的IP核运算架构,包括:当在所述神经网络中IP核设置一个Flash存储阵列时,具体的运算为:(完全展开)当芯片的存储容量不小于完整映射神经网络的运算所需的存储容量时,将预设神经网络的运算架构的预置参数完整地映射到所述Flash存储阵列的存储单元中;进一步控制所述Flash存储阵列进行运算,获取所述Flash存储阵列的运算结果,并将所述Flash存储阵列的运算结果发送至所述控制模块。
具体的,在本实施例中,当使用单个IP时,若能够将神经网络完全在IP内展开,则可以使用完全展开的方法;当在IP内完全展开神经网络进行计算时,需要先对神经网络进行分析,将神经网络各部分写入Flash模块的IP中,合理分配资源,并进行合适的布局,使得IP能够彻底完成神经网络的运算。编程完成后,将特征值输入IP即可进行计算。最终IP的输出,即为最终神经网络计算的结果。
本申请提供的第29个实施例,一种基于神经网络的IP核运算架构,包括:当在所述神经网络中IP核设置一个Flash存储阵列时,具体的运算为:
将预设神经网络的运算架构按照运算数据流进行参数提取;将提取后的参数按照运算数据流的运算节点进行切分设置,根据切分各节点对应的数据参数,对应的映射至所述Flash存储阵列的存储单元中;根据运算数据流的运算节点顺序,控制当前运算节点的运算参数对所述存储阵列进行运算,运算完成后,重新设置所述Flash存储阵列中存储单元的阈值电压;根据运算数据流的运算节点顺序依次获取所述Flash存储阵列的运算结果,并将所述Flash存储阵列的运算结果发送至所述控制模块。
具体的,在本实施例中,当对IP进行复用时,以实施例26~29为基础,按照数据流对网络进行切分,并使用该IP分别完成沿数据流方向的各部分计算,最终计算结果即为神经网络的计算结果。在各部分计算前,控制模块需要根据该部分神经网络对Flash进行编程,使得IP上的运算,对应于相应的网络运算;编程完成后,控制模块会将数据输入IP中进行计算,待计算完成后,将结果进行测量,并作为中间值进行存储。进行下一部分运算时,需要提前对IP进行重新编程,以对应于下一部分的神经网络,并将待计算的上一层的中间值以及原数据,输入IP中,进行运算。以此类推,直至完成所有的神经网络运算。
本申请提供的第30个实施例,一种基于神经网络的IP核运算架构,包括:在所述神经网络中IP核设置多个所述Flash存储阵列时:具体的运算为:将预设神经网络的运算架构按照运算数据流进行参数提取;将提取后的参数按照运算数据流的运算节点进行切分设置,根据切分各节点对应的数据参数,映射至对应的所述Flash存储阵列的存储单元中;根据运算数据流的运算节点顺序,依次的将相邻两个所述Flash存储阵列中前一所述Flash存储阵列输出的运算结果,作为后一所述Flash存储阵列的输入特征值;根据运算数据流的运算节点顺序获取最后一个运算节点对应的所述Flash存储阵列的输出结果,并设置为所述预设神经网络的运算架构的运算输出结果,并将运算输出结果发送至所述控制模块;
或,
获取每个运算数据流的运算节点对应的所述Flash存储阵列的输出结果;并将每个所述Flash存储阵列的输出结果通过数据总线发送至所述控制模块,并进行下一步处理。
具体的,多个IP之间可以使用级联的方式,按照数据流,依次完成神经网络的各部分运算。如图20所示,仍以AlexNet为例,进行计算前,先将AlexNet进行切分,分别将各层的参数以及网络,编程到相应的IP上,编程完成后,等待计算数据的输入。并将各IP按照对应数据流的顺序,进行级联。使得上一层的输出,会在下一层作为输入进入IP中。计算时,将计算数据在第一个IP的输入端进行传输,开始第一层卷积层的计算。计算完成后,对计算结果进行池化(如果需要)等中间操作,并传输至下一个IP中,进行下一层的卷积/全连接计算;依次类推,直至完成整个神经网络的计算。最终,在最后一个IP的输出端,可以得到神经网络的输出结果。其中,全连接层和中间操作,视具体情况,可以改用数字电路进行运算。
其中,上例各IP之间,是通过直连进行通讯。同样地,也可以通过互联总线进行级联间的数据通讯。
还提出了另一种,使用多个IP挂在同一条互联总线共同实现神经网络计算的方法。如图21所示,将整个神经网络按计算任务进行切分,分配到各个IP中,按照切分到的任务对各IP进行相应编程,之后,将数据根据分配的方式,输入对应的各IP中,并在各个IP中分别完成神经网络的一部分运算,待计算完成后,各IP将结果通过总线传回,并准备进行下一阶段的运算。
将计算任务进行切分,分配到各个IP中,并根据分配方式,将神经网络及其参数从存储器中读出,通过总线和对应的并行接口,编程到相应的IP中。进行计算时,根据此前的分配方式,由CPU控制DMA将内存中待计算的数据通过总线发送到相应的IP中,或者由各个IP控制DMA或者直接访问内存读取数据;获取到相应的数据后,各个IP进行所需计算;计算完成后,由CPU控制DMA将计算结果通过总线取回内存,或者由各个IP控制DMA或者直接访问内存写回计算结果到内存,准备进行下一步的计算或存储。其后,各IP则进行下一次计算,或者进行针对另一计算任务的重新编程并进行计算。
上述过程,会一直持续到整个神经网络计算完成,或当前计算任务完成。
在本发明中,存储阵列由所述电流镜构成时包括:电流镜由MOS管和存储单元构成;具体的存储阵列的构成方式,以及相关的运算方法公开在在先专利中。
应当说明的是,上述实施例均可根据需要自由组合。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (28)

1.一种基于NOR Flash模块的神经网络的数据切分运算方法,所述NOR Flash模块包括:输入信号生成电路,输出信号测量电路,以及由若干个存储单元,和/或电流镜构成的存储阵列,在所述NOR Flash模块中设置至少一个存储阵列;其特征在于,包括:
在神经网络预置参数中获取待运算数据信息,以及神经网络各层的权值信息;
判断所述待运算数据信息、以及神经网络各层的权值信息是否超过所述存储阵列的规模参数;
当超过时,根据存储阵列的规模参数对所述待运算数据信息、以及神经网络各层的权值信息进行切分;
将切分后的所述待运算数据信息对应的加载在所述存储阵列的输入端,且根据所述神经网络各层的权值信息,设置所述存储阵列中各存储单元的阈值电压;并根据所述待运算数据信息通过输入信号生成电路转换后的电压以及所述存储单元的阈值电压进行运算处理;
将所述存储阵列中各所述存储单元运算后的输出信号,通过所述输出信号测量模块进行测量后经由累加模块进行累加和/或拼接;或通过数据总线进行传输后经由所述累加模块进行累加和/或拼接;累加和/或拼接完成后输出;
其中,所述在神经网络预置参数中获取待运算数据信息,以及神经网络各层的权值信息;
判断所述待运算数据信息、以及神经网络各层的权值信息是否超过所述存储阵列的规模参数;
当超过时,根据存储阵列的规模参数对所述待运算数据信息、以及神经网络各层的权值信息进行切分具体包括:
获取参与运算的权值阵列尺寸以及参与运算的所述存储阵列的规模参数;
当所述参与运算的权值阵列尺寸大于所述存储阵列的规模参数时,将所述参与运算的权值阵列根据所述存储阵列的规模参数切分成多组权值子阵列;
根据切分后对应的每一个参与运算的权值子阵列尺寸对参与运算的所述待运算数据信息切分,并通过所述输入信号生成电路对应的加载在参与运算的所述存储阵列的输入端进行运算;
将每个所述存储阵列运算后的输出结果进行累加和/或拼接,将累加和/或拼接后的结果设置为所述输出信号。
2.根据权利要求1所述的基于NOR Flash模块的神经网络的数据切分运算方法,其特征在于,包括:
当所述NOR Flash模块中设置一个或多个数据缓存单元,在所述NOR Flash模块中进行卷积层切分运算包括:
获取卷积核的尺寸以及参与运算的所述存储阵列的规模参数;
当所述卷积核的尺寸大于所述存储阵列的规模参数时,将所述卷积核根据所述存储阵列的规模参数切分成多组;
根据切分后对应的每一个所述卷积核的尺寸进一步的将所述待运算数据信息切分成多组,将切分后对应的各组所述待运算数据信息通过所述输入信号生成电路,对应的加载在参与运算的所述存储阵列的输入端并进行卷积运算。
3.根据权利要求2所述的基于NOR Flash模块的神经网络的数据切分运算方法,其特征在于,包括:
当切分后的所述卷积核的尺寸等于所述存储阵列的规模参数时,将所述待运算数据信息通过所述输入信号生成电路一一对应的加载在每个所述存储阵列的输入端,并进行运算处理。
4.根据权利要求2所述的基于NOR Flash模块的神经网络的数据切分运算方法,其特征在于,包括:
当切分后的所述卷积核的尺寸小于所述存储阵列的规模参数时,根据预设运算规则在所述存储阵列中选取满足对应位置关系的所述存储单元参加运算;
将未被选取的所述存储单元进行编程处理,并设置为高阈值状态,同时将所述输入信号生成电路对应的输入端输入的所述待运算数据信息设置为0。
5.根据权利要求2所述的基于NOR Flash模块的神经网络的数据切分运算方法,其特征在于,包括:
当所述NOR Flash模块中设置一个数据缓存单元,并通过一个所述存储阵列对切分后的所述卷积核进行运算处理,则进行单通道运算具体包括:
获取卷积核的尺寸以及参与运算的所述存储阵列的规模参数;
当所述卷积核的尺寸大于所述存储阵列的规模参数时,将所述卷积核根据所述存储阵列的规模参数切分成多组;
设置切分后的每组所述卷积核的运算顺序;
根据运算顺序通过所述存储阵列进行运算,当每一组运算完成后,对所述存储阵列中的存储单元的阈值电压进行重新编程,并对应的设置所述存储单元的阈值;
将每次运算后的结果进行累加,和/或拼接。
6.根据权利要求2所述的基于NOR Flash模块的神经网络的数据切分运算方法,其特征在于,包括:
当所述NOR Flash模块中设置多个数据缓存单元以及多个运算通道,运算通道的数量与所述数据缓存单元的数量一一对应,并通过一个所述存储阵列对切分后的所述卷积核进行运算处理,具体包括:
获取每个运算通道的运算后的结果;
并将每个运算后的结果进行累加,和/或拼接。
7.根据权利要求2所述的基于NOR Flash模块的神经网络的数据切分运算方法,其特征在于,包括:
当所述NOR Flash模块中设置一个数据缓存单元以及一个运算通道时,通过多个所述存储阵列对切分后的所述卷积核进行运算处理具体包括:
根据各所述存储阵列的规模参数将所述卷积核切分成多组;
根据切分后的多组所述卷积核的权值大小,对应的设置所述存储阵列中各存储单元的阈值电压;并对每个卷积核对应的所述存储阵列进行运算处理;
将运算后的结果进行累加,和/或拼接。
8.根据权利要求2所述的基于NOR Flash模块的神经网络的数据切分运算方法,其特征在于,包括:
当所述NOR Flash模块中设置多个数据缓存单元以及多个运算通道,所述运算通道的数量与所述数据缓存单元的数量一一对应,并通过多个所述存储阵列对切分后的所述卷积核进行运算处理包括:
每个所述运算通道设置对应多个所述存储阵列;
将每个运算通道对应的所述数据缓存单元输出的所述待运算数据信息对应的输入至所述存储阵列的输入端;
并将切分后的所述卷积核的各权值根据预设规则对应的存储在每个所述存储阵列中,并对应编程为所述存储单元的阈值;
当每个运算通道中的各所述存储阵列运算完成后,将对应的输出结果,按照每个所述运算通道进行累加处理。
9.根据权利要求1所述的基于NOR Flash模块的神经网络的数据切分运算方法,其特征在于,包括:
当所述NOR Flash模块中未设置数据缓存单元,在所述NOR Flash模块中进行卷积层切分运算包括:
获取卷积核的尺寸、所述待运算数据信息的规模以及参与运算的所述存储阵列的规模参数;
当所述待运算数据信息的规模,和/或卷积核的尺寸大于所述存储阵列的规模参数时,将所述待运算数据信息,和/或卷积核根据所述存储阵列的规模参数,切分成多组;
将切分后的卷积核编程到存储阵列,然后把切分后的待运算数据信息通过输入信号生成电路,并通过所述输入信号生成电路对应的加载在参与运算的所述存储阵列的输入端进行卷积运算。
10.根据权利要求9所述的基于NOR Flash模块的神经网络的数据切分运算方法,其特征在于,包括:
当切分后的计算所需存储阵列的尺寸等于所述存储阵列的规模参数时,将所述切分后的卷积核编程到所述存储阵列,所述切分后的待运算数据信息通过所述输入信号生成电路一一对应的加载在每个所述存储阵列的输入端,并进行运算处理。
11.根据权利要求9所述的基于NOR Flash模块的神经网络的数据切分运算方法,其特征在于,包括:
当切分后的计算所需存储阵列的尺寸小于所述存储阵列的规模参数时,根据预设运算规则在所述存储阵列中选取满足对应位置关系的所述存储单元参加运算;
将未被选取的所述存储单元进行编程处理,并设置为高阈值状态,同时将所述输入信号生成电路对应的输入端输入的所述待运算数据信息设置为0。
12.根据权利要求1所述的基于NOR Flash模块的神经网络的数据切分运算方法,其特征在于,包括:
当所述NOR Flash模块中未设置数据缓存单元,且所述NOR Flash模块中只含有一个所述存储阵列进行切分运算包括:
获取所述待运算数据信息的规模的输入个数,以及输出个数;
当输入个数,以及输出个数至少有一个大于所述存储阵列的输入端个数以及输出端个数时,
根据所述存储阵列的输入端个数以及输出端个数对所述待运算数据信息以及所述参与运算的权值阵列进行切分成多组,使其切分后的每组所述待运算数据信息以及所述参与运算的权值阵列的输入个数,以及输出个数不大于所述存储阵列的输入端个数以及输出端个数;设置切分后的每组所述待运算数据信息运算顺序;
根据运算顺序分别将切分后的每组所述待运算数据信息加载至所述存储阵列中,并进行运算处理;
当每一组运算完成后,通过在所述NOR Flash模块中设置的存储模块存储运算结果,对所述存储阵列中的存储单元进行重新编程,并对应的设置所述存储单元的阈值;
将每次运算后的结果进行累加,和/或拼接。
13.根据权利要求1所述的基于NOR Flash模块的神经网络的数据切分运算方法,其特征在于,包括:
当所述NOR Flash模块中未设置缓存单元时,且通过多个所述存储阵列进行卷积运算包括:
获取所述待运算数据信息的规模的输入个数,以及输出个数;
当所述待运算数据信息的规模的输入个数,以及输出个数至少有一个大于所述存储阵列的输入端个数以及输出端个数时,
根据每个所述存储阵列的输入端个数以及输出端个数,将所述待运算数据信息以及所述参与运算的权值阵列对应的切分成多组,且切分后的所述待运算数据信息,以及所述运算的权值阵列与每个所述存储矩阵对应设置;
使其切分后的每组所述待运算数据信息的输入个数,以及输出个数不大于所述存储阵列的输入端个数以及输出端个数;
将切分后的所述待运算数据信息对应的加载在所述存储阵列的输入端,并将所述参与运算的权值阵列对应的编程为对应存储单元的阈值电压,并获取每个所述存储阵列的输出结果;
将每个所述存储阵列的输出结果与所述待运算数据信息的输出个数对应,将每次运算后的结果进行累加,和/或拼接。
14.根据权利要求1所述的基于NOR Flash模块的神经网络的数据切分运算方法,其特征在于,包括:
当所述NOR Flash模块中通过一个或多个所述存储阵列进行全连接运算包括:
获取全连接层的权值参数矩阵以及参与运算的所述存储阵列的规模参数;
当全连接层的权值参数矩阵的规模大于所述存储阵列的规模参数时,将全连接层的权值参数矩阵根据所述存储阵列的规模参数切分成多组;并根据切分后的权值参数矩阵设置存储阵列中各存储单元的阈值电压;
根据切分后对应的每一个所述全连接层的权值参数矩阵的规模进一步的切分所述待运算数据信息,并通过所述输入信号生成电路对应的加载在参与运算的所述存储阵列的输入端进行全连接层运算。
15.根据权利要求14所述的基于NOR Flash模块的神经网络的数据切分运算方法,其特征在于,包括:
当切分后的所述全连接层的权值参数矩阵的规模等于所述存储阵列的规模参数时,将所述切分后的权值参数矩阵编程到存储阵列,所述切分后的待运算数据信息通过所述输入信号生成电路一一对应的加载在每个所述存储阵列的输入端,并进行运算处理。
16.根据权利要求14所述的基于NOR Flash模块的神经网络的数据切分运算方法,其特征在于,包括:
当切分后的所述全连接层的权值参数矩阵的规模小于所述存储阵列的规模参数时,根据预设运算规则在所述存储阵列中选取满足对应位置关系的所述存储单元参加运算;
将未被选取的所述存储单元进行编程处理,并设置为高阈值状态,同时将所述输入信号生成电路对应的输入端输入的所述待运算数据信息设置为0。
17.根据权利要求14所述的基于NOR Flash模块的神经网络的数据切分运算方法,其特征在于,包括:
当所述NOR Flash模块中通过一个所述存储阵列进行全连接运算包括:
获取全连接层的权值参数矩阵的规模以及参与运算的所述存储阵列的规模参数;
当全连接层的权值参数矩阵的规模大于所述存储阵列的规模参数时,根据所述存储阵列的输入端个数以及输出端个数将所述待运算数据信息以及权值参数矩阵进行切分成多组,使其切分后的每组所述待运算数据信息以及权值参数矩阵的输入个数,以及输出个数小于或等于所述存储阵列的输入端个数以及输出端个数;
设置切分后的每组所述待运算数据信息运算顺序;
根据运算顺序分别将切分后的每组所述待运算数据信息、以及权值参数矩阵加载至所述存储阵列中,并进行运算处理;
当每一组运算完成后,通过在所述NOR Flash模块中设置的存储模块存储运算结果,对所述存储阵列中的存储单元进行重新编程,并对应的设置所述存储单元的阈值电压;
将每次运算后的结果进行累加,和/或拼接。
18.根据权利要求14所述的基于NOR Flash模块的神经网络的数据切分运算方法,其特征在于,包括:
当所述NOR Flash模块中设置通过多个所述存储阵列进行全连接运算包括:
获取全连接层的权值参数矩阵的规模以及参与运算的所述存储阵列的规模参数;
当全连接层的权值参数矩阵的规模大于所述存储阵列的规模参数时,根据每个所述存储阵列的输入端个数以及输出端个数将所述待运算数据信息以及权值参数矩阵切分成多组,且与每个所述存储矩阵对应切分后的所述待运算数据信息对应设置;
使其切分后的每组所述待运算数据信息以及权值参数矩阵的输入个数,以及输出个数不大于所述存储阵列的输入端个数以及输出端个数;
将切分后的所述权值参数矩阵编程到所述存储阵列,切分后的所述待运算数据信息对应的加载在所述存储阵列的输入端,并获取每个所述存储阵列的输出结果;
将每个所述存储阵列的输出结果与所述待运算数据信息的输出个数对应,将每次运算后的结果进行累加,和/或拼接。
19.一种基于单芯片实现神经网络的运算方法,其特征在于,包括:可执行权利 要求1-18任一所述的基于NOR Flash模块的神经网络的数据切分运算方法;还包括:
在芯片中进行神经网络运算包括:卷积层运算,全连接运算,和/或池化运算,以及互联运算;
所述卷积层进行运算之后,通过互联运算操作将所述卷积层以及全连接层进行逻辑固化运算;具体包括:
所述卷积层的运算可执行权利 要求2-13任一所述的基于NOR Flash模块的神经网络的数据切分运算方法;
所述全连接层的运算可执行权利 要求14-18任一所述的基于NOR Flash模块的神经网络的数据切分运算方法。
20.根据权利要求19所述的一种基于单芯片实现神经网络的运算方法,其特征在于,包括:
判断芯片的存储容量;
当芯片的存储容量不小于完整映射神经网络的运算所需的存储容量时;
具体为:根据神经网络中卷积层的层数及其预置参数、全连接层的层数与预置参数、以及池化层的预置参数和激活函数的预置参数,并对所述存储阵列中计算模块位置,以及互联的节点进行排布;
进一步的根据排布后的位置关系对输入信号生成模块,输出信号测量模块,以及对存储单元固化设置;
固化设置完成后根据输入的待运算的特征值,以及存储单元中设置的阈值电压进行运算处理。
21.根据权利要求19所述的一种基于单芯片实现神经网络的运算方法,其特征在于,包括:
判断芯片的存储容量;
当芯片的存储容量小于完整映射神经网络的运算所需的存储容量时;通过复用存储单元进行运算处理;
具体为:
获取的神经网络中预设的卷积层的层数,以及全连接层数;
根据设定运算顺序对卷积层,或者对全连接层进行运算;
每一个卷积层,或者全连接层运算完成后,重新设置存储阵列中存储单元的阈值电压;
将互联的上一层输出特征值转换成满足互联的下一层输入的特征值;
运算完成后,输出运算结果。
22.一种基于多芯片实现神经网络的运算方法,其特征在于,包括:包括,可执行权利要求1-18任一所述的基于NOR Flash模块的神经网络的数据切分运算方法;
获取预设神经网络的运算架构;
根据预设切分规则将预设神经网络的运算架构的数据流或工作任务对应的切分到各芯片中,并进行互联处理;
具体包括;
在芯片中进行神经网络运算包括:卷积层运算,全连接运算,和/或池化运算,以及互联运算;所述卷积层进行运算之后,通过互联运算操作将所述卷积层以及全连接层进行逻辑固化运算;具体包括:
所述卷积层的运算可执行权利 要求2-13任一所述的基于NOR Flash模块的神经网络的数据切分运算方法;
所述全连接层的运算可执行权利 要求14-18任一所述的基于NOR Flash模块的神经网络的数据切分运算方法。
23.根据权利要求22所述的一种基于多芯片实现神经网络的运算方法,其特征在于,包括:
对预设神经网络的运算架构进行切分处理;
将切分处理后的神经网络的运算架构参数映射到对应的每个芯片中;
将多个芯片按照预设神经网络的运算架构的运算数据流顺序进行排序级联;
按照对各芯片的设置顺序,从排序中的最后一个芯片的输出端中获取运算结果。
24.根据权利要求22所述的一种基于多芯片实现神经网络的运算方法,其特征在于,包括:
获取预设神经网络的运算架构,根据对应工作任务进行切分处理;
将切分后的同一工作任务的参数信息映射到同一个芯片中;
将不同的工作任务的芯片并联在数据通信总线上;
通过数据通信总线获取预设神经网络的运算架构进行运算的输出结果。
25.一种基于神经网络的IP核,其特征在于,包括:可执行权利 要求1-18任一所述的基于NOR Flash模块的神经网络的数据切分运算方法;所述IP核还包括:控制模块,存储模块,计算模块,DMA模块;
所述存储模块,用于实现神经网络的数据存储;
所述DMA模块,用于参加运算搬运数据信息;
所述计算模块,用于对待运算数据信息进行运算;
所述控制模块,用于控制神经网络中IP核内各个功能模块的运行状态;其中,所述控制模块从所述神经网络模型中提取预置参数;
根据提取预置参数中的权值对于Flash存储阵列进行编程,设置所述Flash存储阵列中存储单元的阈值电压;
根据提取预置参数中的权值对所述Flash存储阵列进行运算,获取所述Flash存储阵列的输出参数。
26.根据权利要求25所述的一种基于神经网络的IP核,其特征在于,包括:当在所述神经网络中IP核设置一个Flash存储阵列时,具体的运算为:
当芯片的存储容量小于完整映射神经网络的运算所需的存储容量时,将预设神经网络的运算架构的预置参数完整地映射到所述Flash存储阵列的存储单元中;
进一步控制所述Flash存储阵列进行运算,获取所述Flash存储阵列的运算结果,并将所述Flash存储阵列的运算结果发送至所述控制模块。
27.根据权利要求25所述的一种基于神经网络的IP核,其特征在于,包括:当在所述神经网络中IP核设置一个Flash存储阵列时,具体的运算为:
将预设神经网络的运算架构按照运算数据流进行参数提取;
将提取后的参数按照运算数据流的运算节点进行切分设置,根据切分各节点对应的数据参数,对应的映射至所述Flash存储阵列的存储单元中;
根据运算数据流的运算节点顺序,控制当前运算节点的运算参数对所述存储阵列进行运算,运算完成后,重新设置所述Flash存储阵列中存储单元的阈值电压;
根据运算数据流的运算节点顺序依次获取所述Flash存储阵列的运算结果,并将所述Flash存储阵列的运算结果发送至所述控制模块。
28.根据权利要求27所述的一种基于神经网络的IP核,其特征在于,包括:在所述神经网络中IP核设置多个所述Flash存储阵列时:具体的运算为:
将预设神经网络的运算架构按照运算数据流进行参数提取;
将提取后的参数按照运算数据流的运算节点进行切分设置,根据切分各节点对应的数据参数,映射至对应的所述Flash存储阵列的存储单元中;
根据运算数据流的运算节点顺序,依次的将相邻两个所述Flash存储阵列中前一所述Flash存储阵列输出的运算结果,作为后一所述Flash存储阵列的输入特征值;
根据运算数据流的运算节点顺序获取最后一个运算节点对应的所述Flash存储阵列的输出结果,并设置为所述预设神经网络的运算架构的运算输出结果,并将运算输出结果发送至所述控制模块;
或,
获取每个运算数据流的运算节点对应的所述Flash存储阵列的输出结果;
并将每个所述Flash存储阵列的输出结果通过数据总线发送至所述控制模块,并进行下一步处理。
CN201911082357.8A 2019-11-07 2019-11-07 一种基于NOR Flash模块的神经网络的数据切分运算方法 Active CN111222626B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911082357.8A CN111222626B (zh) 2019-11-07 2019-11-07 一种基于NOR Flash模块的神经网络的数据切分运算方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911082357.8A CN111222626B (zh) 2019-11-07 2019-11-07 一种基于NOR Flash模块的神经网络的数据切分运算方法

Publications (2)

Publication Number Publication Date
CN111222626A CN111222626A (zh) 2020-06-02
CN111222626B true CN111222626B (zh) 2021-08-10

Family

ID=70830570

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911082357.8A Active CN111222626B (zh) 2019-11-07 2019-11-07 一种基于NOR Flash模块的神经网络的数据切分运算方法

Country Status (1)

Country Link
CN (1) CN111222626B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113159309B (zh) * 2021-03-31 2023-03-21 华南理工大学 一种基于nand闪存的低功耗神经网络加速器存储架构
WO2022222068A1 (en) * 2021-04-21 2022-10-27 Shanghaitech University Methods and systems for multiplier sharing in neural networks
CN113672854B (zh) * 2021-08-25 2024-02-06 恒烁半导体(合肥)股份有限公司 一种基于电流镜和存储单元的存内运算方法、装置及其应用
CN116306855B (zh) * 2023-05-17 2023-09-01 之江实验室 一种基于存算一体系统的数据处理方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108805270A (zh) * 2018-05-08 2018-11-13 华中科技大学 一种基于存储器的卷积神经网络系统
CN109800876A (zh) * 2019-01-18 2019-05-24 合肥恒烁半导体有限公司 一种基于NOR Flash模块的神经网络的数据运算方法
WO2019177687A1 (en) * 2018-03-14 2019-09-19 Silicon Storage Technology, Inc. Method and apparatus for data refresh for analog non-volatile memory in deep learning neural network

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019177687A1 (en) * 2018-03-14 2019-09-19 Silicon Storage Technology, Inc. Method and apparatus for data refresh for analog non-volatile memory in deep learning neural network
CN108805270A (zh) * 2018-05-08 2018-11-13 华中科技大学 一种基于存储器的卷积神经网络系统
CN109800876A (zh) * 2019-01-18 2019-05-24 合肥恒烁半导体有限公司 一种基于NOR Flash模块的神经网络的数据运算方法

Also Published As

Publication number Publication date
CN111222626A (zh) 2020-06-02

Similar Documents

Publication Publication Date Title
CN111222626B (zh) 一种基于NOR Flash模块的神经网络的数据切分运算方法
US20220012593A1 (en) Neural network accelerator and neural network acceleration method based on structured pruning and low-bit quantization
US11934480B2 (en) NAND block architecture for in-memory multiply-and-accumulate operations
US10846591B2 (en) Configurable and programmable multi-core architecture with a specialized instruction set for embedded application based on neural networks
CN109409510B (zh) 神经元电路、芯片、系统及其方法、存储介质
CN110348574B (zh) 一种基于zynq的通用卷积神经网络加速结构及设计方法
US20210406437A1 (en) Programmable chip, design method and device
KR20150016089A (ko) 신경망 컴퓨팅 장치 및 시스템과 그 방법
US20220253716A1 (en) Neural network comprising matrix multiplication
CN111095300A (zh) 使用半导体存储元件的神经网络运算电路
CN111047045B (zh) 机器学习运算的分配系统及方法
CN113837373A (zh) 数据处理装置以及数据处理方法
CN113448538A (zh) 可重新配置数字信号处理(dsp)向量引擎
Yang et al. A flexible processing-in-memory accelerator for dynamic channel-adaptive deep neural networks
CN114003201A (zh) 矩阵变换方法、装置及卷积神经网络加速器
CN110766136B (zh) 一种稀疏矩阵与向量的压缩方法
CN111949405A (zh) 资源调度方法、硬件加速器及电子设备
CN114239816B (zh) 一种卷积神经网络-图卷积神经网络可重构硬件加速架构
US20230021204A1 (en) Neural network comprising matrix multiplication
CN116050492A (zh) 一种扩展单元
CN116013309A (zh) 基于轻量化Transformer网络的语音识别系统及方法
CN112862079B (zh) 一种流水式卷积计算架构设计方法及残差网络加速系统
Ji et al. Hubpa: High utilization bidirectional pipeline architecture for neuromorphic computing
CN115374395A (zh) 一种通过算法控制单元进行调度计算的硬件结构
WO2020051918A1 (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
CB02 Change of applicant information

Address after: 230000 building 11, alumni enterprise innovation park, Luyang University of science and technology, northwest of the intersection of Tianshui road and Taihe Road, Luyang District, Hefei City, Anhui Province

Applicant after: Hengshuo semiconductor (Hefei) Co.,Ltd.

Address before: 230041 building 11, alumni Innovation Park, Luyang University of science and technology, northwest of the intersection of Tianshui road and Taihe Road, Luyang District, Hefei City, Anhui Province

Applicant before: ZBIT SEMICONDUCTOR Ltd.

GR01 Patent grant
GR01 Patent grant