CN113033798B - 一种降低精度损失的装置及方法 - Google Patents
一种降低精度损失的装置及方法 Download PDFInfo
- Publication number
- CN113033798B CN113033798B CN201911345467.9A CN201911345467A CN113033798B CN 113033798 B CN113033798 B CN 113033798B CN 201911345467 A CN201911345467 A CN 201911345467A CN 113033798 B CN113033798 B CN 113033798B
- Authority
- CN
- China
- Prior art keywords
- module
- modules
- multiplication
- value
- addition
- 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 27
- 238000009825 accumulation Methods 0.000 claims abstract description 76
- 238000013528 artificial neural network Methods 0.000 claims abstract description 19
- 238000012545 processing Methods 0.000 claims description 11
- 238000004364 calculation method Methods 0.000 abstract description 14
- 239000002356 single layer Substances 0.000 abstract description 3
- 238000013473 artificial intelligence Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 238000004590 computer program Methods 0.000 description 4
- 239000010410 layer Substances 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/082—Learning methods modifying the architecture, e.g. adding, deleting or silencing nodes or connections
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Life Sciences & Earth Sciences (AREA)
- Molecular Biology (AREA)
- Artificial Intelligence (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Complex Calculations (AREA)
- Feedback Control In General (AREA)
Abstract
本发明提供一种降低精度损失的装置,包括至少一个模块A和至少一个模块B,模块A执行乘加运算,具有输入X和Y,并执行乘法运算产生乘积值XY,模块A将乘积值XY执行累加运算,输出乘加值。模块B执行累加运算,接收模块A的乘加值,并执行累加运算,输出累加值。本发明还提供了一种降低精度损失的方法。通过该装置和方法,将大批量的乘加任务分拆成几个小批量的乘加任务,可极大的降低单层神经网络的计算误差。
Description
技术领域
本发明涉及人工智能技术领域,具体涉及一种降低精度损失的装置及方法。
背景技术
当今时代,人工智能技术日新月异,澎湃发展,从各方面影响着人们的生产和生活,推动着世界的发展和进步。近几年,研究者们发现神经网络算法对处理非结构化数据非常有效,比如人脸识别,语音识别,图像分类等任务。随着这些非结构化数据的指数级增长,对处理器的算力提出巨大的需求。传统的中央处理器(CPU)和数字信号处理器(DSP)已不能满足需求,亟需专业的为神经网络算法定制的处理器。开发神经网络专用处理器,提升芯片应对各种人工智能的有效算力,并且节省功耗,成为人工智能芯片领域专家们共同努力的目标。
在神经网络计算中,采用低精度的参数进行计算,可极大的降低参数的存储消耗,减少乘加器的面积、功耗、和数据传输的消耗。然而,低精度的参数计算不可避免的带来计算误差。
发明内容
鉴于此,本发明提供了一种降低精度损失的装置,包括:
模块A,其执行乘加运算且至少设置一个,所述模块A具有输入X和Y,并执行乘法运算产生乘积值XY,所述模块A将乘积值XY执行累加运算,输出乘加值ΣXY;
模块B,其执行累加运算且至少设置一个,所述模块B接收所述模块A的乘加值ΣXY,并执行累加运算,输出累加值。
可选的,所述装置包括一个模块A和一个模块B,所述模块A将乘加值传递给所述模块B后,所述模块A清零继续执行下一个乘加运算。
可选的,时钟1对所述模块A的乘加运算次数计数,时钟2对所述模块B的累加运算次数计数。
可选的,当所述模块A的乘加运算次数达到第一预设值后,所述模块A将乘加值传递给所述模块B,当所述模块B的累加运算次数达到第二预设值后,将所述模块B的累加值作为最终输出值。
可选的,所述装置包括N个模块A和一个模块B;
N个模块A通过选通器MUX并联,所述选通器MUX一次选通一个模块A,该模块A产生的乘加值被传递至所述模块B进行对位累加,最终输出N个累加值。
可选的,时钟i分别对N个模块A的乘加运算次数计数,其中,i表示序号,i=1,2,…,N,时钟M对所述模块B的累加运算次数计数。
可选的,一个运算周期内,当N个模块A的乘加运算次数分别达到第一预设值后,N个模块A依次被选通器MUX选通并将乘加值传递给所述模块B进行对位累加,N个模块A进入下一个运算周期,当所述模块B的累加运算次数达到第二预设值后,将所述模块B的N个累加值作为最终输出值。
可选的,所述装置包括N个模块A和Z个模块B,Z≤N;
N个模块A通过选通器MUX并联,所述选通器MUX一次选通Z个模块A,N个模块A中产生的乘加值被分别传递至Z个模块B进行对位累加,输出N个累加值。
可选的,时钟i对N个模块A的乘加运算次数计数,其中,i表示序号,i=1,2,…,N;时钟i/分别对Z个模块B的累加运算次数计数,其中,i/表示序号,i/=1,2,…,Z。
可选的,一个运算周期内,N个模块A的乘加运算次数分别达到第一预设值后,所述选通器MUX一次选通Z个模块A,并将N个模块A的乘加值传递给Z个模块B进行对位累加,N个模块A进入下一个运算周期,当Z个模块B的累加运算次数均达到第二预设值后,将Z个模块B的N个累加值作为最终输出值。
本发明还提供了一种降低精度损失的方法,所述方法将C次乘加运算分成D个E次乘加运算,先依次进行E次乘加运算共获取D个乘加值,然后将D个乘加值进行累加运算,最后将累加值输出。
可选的,模块A执行一个E次乘加运算后,将乘加值传递给模块B,模块A清零,模块A继续执行下一个E次乘加运算,并将乘加值传递给模块B与上一个乘加值进行累加,模块A清零,依次执行后,完成D个E次乘加运算,将模块B的累加值输出。
可选的,所述模块A中的乘加运算次数达到第一预设值后,所述模块A将乘加值传递给所述模块B,当所述模块B的累加运算次数达到第二预设值后,将所述模块B的累加值作为最终输出值。
可选的,一个运算周期内,N个模块A分别执行一个E次乘加运算,N个模块A的乘加运算次数分别达到第一预设值后,一个模块A被选通器MUX选通,该模块A产生的乘加值被传递至模块B进行对位累加,当所有模块A依次被选通后,N个模块A进入下一个运算周期,当所述模块B的累加运算次数达到第二预设值后,将所述模块B中的N个累加值输出。
可选的,一个运算周期内,N个模块A分别执行一个E次乘加运算,当N个模块A的乘加运算次数分别达到第一预设值后,Z个模块A被选通器MUX选通,N个模块A产生的乘加值被传递至Z个模块B进行对位累加,N个模块A进入下一个运算周期,当Z个模块B的累加运算次数均达到第二预设值后,将Z个模块B的N个累加值作为最终输出值。
本发明还提供了一种神经网络处理芯片,所述神经网络处理芯片中内嵌所述的一种降低精度损失的装置。
本发明还提供了一种计算处理设备,所述计算处理设备存储执行所述的一种降低精度损失的方法的计算机程序指令。
本发明的有益效果:
本发明将大批量的乘加任务分拆成几个小批量的乘加任务,可极大的降低单层神经网络的计算误差。
附图说明
通过参照附图详细描述其示例实施例,本公开的上述和其它目标、特征及优点将变得更加显而易见。下面描述的附图仅仅是本公开的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是针对半精度浮点的平均误差分析的示意图;
图2是本发明的一种降低精度损失的装置的示意图;
图3是将1024次乘加任务分成4个256次乘加小任务的示意图;
图4是本发明与普通乘加模式(半精度浮点)的相对标准偏差分析的示意图;
图5是本发明第一实施例所述的一种降低精度损失的装置的电路级示意图,该装置针对一个乘加单元;
图6是本发明第二实施例所述的一种降低精度损失的装置的电路级示意图,该装置针对多个乘加单元和一个累加单元;
图7是图6中一种降低精度损失的装置的改进装置的电路级示意图;
图8是本发明第四实施例所述的一种降低精度损失的装置的电路级示意图,该装置针对多个乘加单元和多个累加单元;
图9是图8中一种降低精度损失的装置的改进装置的电路级示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。
虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员以使得本发明所属技术领域的技术人员能够容易实施。正如本发明所属技术领域的技术人员能够容易理解,将在后面描述的实施例在不脱离本发明的概念和范围的基础上可变形为多种形式。在附图中尽量将相同或相似的部分用相同的附图标记表示。
在此使用的专业术语只是用来说明特定实施例而提供的,并不是用来限制本发明。在此使用的单数形式在没有表示明确的相反含义的情况下也包含复数形式。在说明书中使用的“包含”的具体化了特定的特性、领域、常数、步骤、动作、要素及/或成分,并不排除其他特定的特性、领域、常数、步骤、动作、要素、成分及/或组的存在或附加。
将下面使用的技术用语及科学用语包括在内的所有用语具有与本发明所属技术领域的技术人员一般理解的含义相同的含义。在词典中所定义的用语被补充解释为与相关技术文献和当前公开的内容相符的含义,在没有定义的情况下,不能被解释为具有非常正式的含义。
如图2所示,本发明提供了一种降低精度损失的装置包括至少一个模块A和至少一个模块B。模块A执行乘加运算,具有输入X和Y,并执行乘法运算产生乘积值XY,模块A将乘积值XY执行累加运算,输出乘加值。模块B执行累加运算,接收模块A的乘加值,并执行累加运算,输出累加值。模块A是标准的乘加单元,针对X和Y两个输入,先进行乘法,然后在后半部进行累加。模块B是累加单元,将模块A输入的乘加值与上一个乘加值进行累加。
图1是针对半精度浮点的平均误差分析示意图。误差的计算方法采用欧式距离公式,比较半精度计算结果和全精度计算结果之间的相对平均误差。由图1可以看到,随着乘加次数的增加,平均误差在快速增大。当乘加次数达到1024次的时候,平均误差达到了0.7%;当乘加次数达到8196次的时候,平均误差则达到了21%。该误差会极大的影响单层神经网络的准确率,严重影响到神经网络的推理结果,甚至给出错误的结果。
通过本发明的装置,将乘加任务分拆成几个乘加小任务,可极大的降低单神经网络层计算误差,进而提高神经网络预测结果的准确度。如图3所示,比如将单神经网络层中的1024次乘加任务分成4个256次乘加小任务,先依次进行256次乘加运算,再将4个乘加结果相加。依靠这种拆分模式,可以将平均误差由0.7%(1024次乘加任务直接计算产生)降低为0.04%平均误差可缩小17倍。另外,每个乘加小任务中的乘加次数越少,平均误差越低。
本发明还提供了一种降低精度损失的方法,方法将C次乘加运算分成D个E次乘加运算,先依次进行E次乘加运算共获取D个乘加值,然后将D个乘加值进行累加运算,最后将累加值输出。例如将单神经网络层中的1024次乘加任务分成4个256次乘加小任务,先依次进行256次乘加运算,再将4个乘加结果进行累加运算。如图4所示,采用本发明的这种拆分方法,可以大大减小相对标准偏差。
实施例1,如图5所示,本发明的一种降低精度损失的装置,包括一个模块A和一个模块B。模块A执行一个乘加运算任务后,将乘加值传递给模块B,模块A清零,模块A继续执行下一个乘加运算任务,并将乘加值传递给模块B与上一个乘加值进行累加,模块A清零,依次执行后,完成多个乘加运算任务,将模块B的累加值输出。
在一种可能的实现方式中,模块A中的乘加值存储在寄存器1中,模块B中的累加值存储在寄存器2中。时钟1对模块A的乘加运算次数计数,时钟2对模块B的累加运算次数计数。
在一种可能的实现方式中,当模块A的乘加运算次数达到第一预设值(比如64次,128次等)后,模块A将乘加值传递给模块B(例如,将寄存器1中的乘加值传递给寄存器2),当模块B的累加运算次数达到第二预设值后,模块B中存储的累加值(例如存储在寄存器2中的累加值)作为最终输出值。
实施例2,如图6所示,本发明的一种降低精度损失的装置,包括N个模块A和一个模块B。
在一种可能的实现方式中,N个模块A中的乘加值分别存储在寄存器i中,其中,i表示序号,i=1,2,…,N。例如,第一模块A的乘加值存储在寄存器1中,第二模块A的乘加值存储在寄存器2中,……,第N模块A的乘加值存储在寄存器N中。
在一种可能的实现方式中,时钟i分别对N个模块A的乘加运算次数计数,其中,i表示序号,i=1,2,…,N。例如,时钟1对第一模块A的乘加运算次数计数,时钟2对第二模块A的乘加运算次数计数,……,时钟N对第N模块A的乘加运算次数计数。
在一种可能的实现方式中,N个模块A通过选通器MUX并联,选通器MUX的后面可共用一个加法器(即模块B),模块A所对应的寄存器i中的乘加值被传递至所述模块B进行对位累加,最终输出N个累加值。通过共用加法器,节省面积和开销。
在一种可能的实现方式中,一个运算周期内,N个模块A的乘加运算次数分别达到第一预设值后,N个模块A依次被选通器MUX选通并将乘加值传递给模块B进行对位累加,在每个循环中,所有N个模块A被遍历一遍,然后N个模块A继续进入下一个运算周期。时钟M对模块B的累加运算次数计数,当累加运算次数达到第二预设值后,模块B对应的寄存器M中的N个累加值作为最终输出值。例如,将1024次乘加任务拆为4个256次乘加小任务。第一个256次乘加运算周期内,N个模块A分别执行256次乘加运算,各模块A的寄存器均存储256次乘加运算得到的乘加值,N个模块A依次被选通器MUX选通,256次乘加运算得到的乘加值传递到模块B(例如,存储在模块B的寄存器中),模块B共存了N个累加值。下一个256次乘加运算周期,依旧是N个模块A分别执行256次乘加运算,各模块A的寄存器存储256次乘加运算得到的乘加值,N个模块A依次被选通器MUX选通,256次乘加运算得到的乘加值传递到模块B,按照第一模块A到第N模块A对应和上一运算周期的N个累加值进行累加。一直到4次累加运算结束后,模块B输出N个累加值。
实施例3,如图7所示,本发明的一种降低精度损失的装置,包括N个模块A和一个模块B。与实施例2不同之处在于,装置还包括:寄存器L,其位于选通器MUX之前,存储所有寄存器i存储的乘加值,选通器MUX依次选通寄存器L中的乘加值并传递至模块B。在选通器MUX插入额外的寄存器L,可以实现寄存器i的依次选通和无缝的子任务切换,简化乘加器阵列之中的时序控制,降低复杂度。
在一种可能的实现方式中,N个模块A可通过同一时钟i来对乘加运算次数计数(例如,时钟1、时钟2、…、时钟N均采用时钟1),N个模块A的乘加运算次数同时达到第一预设值后,N个模块A所对应的寄存器i中的值同时传递给寄存器L,各个寄存器i清零后立刻进行下一运算周期的计算。寄存器L中的乘加值通过选通器MUX传递至模块B进行累加运算,累加后的值存入寄存器M中。时钟M对模块B的累加运算次数计数,当模块B的累加运算次数达到第二预设值后,寄存器M中的累加值作为最终输出值。
实施例4,如图8所示,本发明的一种降低精度损失的装置,包括N个模块A和Z个模块B,Z≤N。
N个模块A中的乘加值分别存储在寄存器i中,其中,i表示序号,i=1,2,…,N。例如,第一模块A的乘加值存储在寄存器1中,第二模块A的乘加值存储在寄存器2中,……,第N模块A的乘加值存储在寄存器N中。
时钟i对N个模块A的乘加运算次数计数,其中,i表示序号,i=1,2,…,N。例如,时钟1对第一模块A的乘加运算次数计数,时钟2对第二模块A的乘加运算次数计数,……,时钟N对第N模块A的乘加运算次数计数。
N个模块A通过选通器MUX并联。每个运算周期内,会有Z个模块A被选通器MUX选通,N个模块A各自对应的寄存器i中的乘加值被分别传递至Z个模块B,与模块B所对应的寄存器i/中的值进行对位累加。
Z个模块B中的累加值分别存储在一个寄存器i/中,其中,i/表示序号,i/=1,2,…,Z。例如,第一模块B的累加值存储在寄存器1/中,第二模块B的累加值存储在寄存器2/中,…,第Z模块B的累加值存储在寄存器Z/中。
时钟i/分别对Z个模块B的累加运算次数计数,其中,i/表示序号,i/=1,2,…,Z。例如,时钟1/对第一模块B的累加运算次数计数,时钟2/对第二模块B的累加运算次数计数,…,时钟Z/对第Z模块B的累加运算次数计数。
一个运算周期内,N个模块A的乘加运算次数分别达到第一预设值后,选通器MUX一次选通Z个模块A,并将N个模块A的乘加值传递给Z个模块B进行对位累加,然后N个模块A再继续进入下一个运算周期,当Z个模块B的累加运算次数均达到第二预设值后,将Z个模块B的N个累加值作为最终输出值。例如,将1024次乘加任务拆为4个256次乘加小任务。第一个256次乘加运算周期内,N个模块A分别执行256次乘加运算,各模块A的寄存器均存储256次乘加运算得到的乘加值,选通器MUX一次选通Z个模块A,N个模块A分别对应的256次乘加运算得到的乘加值分别传递到Z个模块B进行对位累加,Z个模块B共存了N个累加值。下一个256次乘加运算周期,依旧是N个模块A分别执行256次乘加运算,各模块A的寄存器存储256次乘加运算得到的乘加值,选通器MUX一次选通Z个模块A,N个模块A分别对应的256次乘加运算得到的乘加值分别传递到Z个模块B,按照第一模块A到第N模块A对应和上一运算周期的N个累加值进行累加。一直到4次累加运算结束后,模块B输出N个累加值。
实施例5,如图9所示,本发明的一种降低精度损失的装置,包括N个模块A和Z个模块B,Z≤N。与实施例4不同之处在于,所述装置还包括:寄存器L,其位于选通器MUX之前,存储所有寄存器i存储的乘加值,选通器MUX一次选通寄存器L中的N个乘加值并分别传递至Z个模块B。在选通器MUX插入额外的寄存器L,可以实现寄存器i的依次选通和无缝的子任务切换,简化乘加器阵列之中的时序控制,降低复杂度。N个模块A可通过同一时钟i来对乘加运算次数计数(也即时钟1、时钟2、…、时钟N均采用时钟1),N个模块A的乘加运算次数同时达到第一预设值后,N个模块A所对应的寄存器i中的值同时传递给寄存器L,各个寄存器i清零后立刻进行下一运算周期的计算。寄存器L中的乘加值通过选通器MUX传递至Z个模块B进行对位累加运算,时钟i/分别对Z个模块B的累加运算次数计数,当Z个模块B的累加运算次数均达到第二预设值后,Z个模块B各自对应的寄存器i/中的N个累加值作为最终输出值。
实施例6,本发明的一种神经网络处理芯片,内嵌一种降低精度损失的装置。在执行运算时,采用所述的一种装置降低精度损失,可以选用如实施例1、实施例2、实施例3、实施例4和实施例5的装置。该神经网络处理芯片可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为独立软件执行、部分在用户设备上执行部分在远程计算设备上执行、完全在远程计算设备或完全在服务器上执行等。
实施例7,一种降低精度损失的方法,针对一个乘加单元(即一个模块A)和一个累加单元(即一个模块B),模块A执行一个E次乘加运算后,将乘加值传递给模块B,模块A清零,模块A继续执行下一个E次乘加运算,并将乘加值传递给模块B与上一个乘加值进行累加,模块A清零,依次执行后,完成D个E次乘加运算,将模块B的累加值输出。
在一种可能的实现方式中,当模块A的乘加运算次数达到第一预设值(比如64次,128次等)后,模块A将乘加值传递给模块B(例如,将寄存器1中的乘加值传递给寄存器2),当模块B的累加运算次数达到第二预设值后,模块B中存储的累加值(例如存储在寄存器2中的累加值)作为最终输出值。例如将单神经网络层中的1024次乘加任务分成4个256次乘加小任务,先依次进行256次乘加运算,再将4个乘加结果进行累加运算。
实施例8,一种降低精度损失的方法,针对多个乘加单元(即N个模块A)和一个累加单元(即一个模块B),N个模块A分别执行一个E次乘加运算,寄存器i对应存储N个模块A的乘加值(其中,i表示序号,i=1,2,…,N。例如,第一模块A的乘加值存储在寄存器1中,第二模块A的乘加值存储在寄存器2中,……,第N模块A的乘加值存储在寄存器N中。),时钟i分别对N个模块A的乘加运算次数计数(,其中,i表示序号,i=1,2,…,N。例如,时钟1对第一模块A的乘加运算次数计数,时钟2对第二模块A的乘加运算次数计数,……,时钟N对第N模块A的乘加运算次数计数。)。一个运算周期内,N个模块A的乘加运算次数分别达到第一预设值后,依次被选通器MUX选通并将乘加值传递给模块B进行对位累加,在每个循环中,所有N个模块A需被遍历一遍,然后N个模块A继续进入下一个运算周期。时钟M对模块B的累加运算次数计数,当累加运算次数达到第二预设值后,模块B(对应的寄存器M)中的N个累加值作为最终输出值。例如,将1024次乘加任务拆为4个256次乘加小任务。第一个256次乘加运算周期内,N个模块A分别执行256次乘加运算,各模块A的寄存器均存储256次乘加运算得到的乘加值,N个模块A依次被选通器MUX选通,256次乘加运算得到的乘加值传递到模块B(例如,存在模块B的寄存器中),共存了N个累加值。下一个256次乘加运算周期,依旧是N个模块A分别执行256次乘加运算,各模块A的寄存器存储256次乘加运算得到的乘加值,N个模块A依次被选通器MUX选通,256次乘加运算得到的乘加值传递到模块B,按照第一模块A到第N模块A对应和上一运算周期的N个累加值进行累加。一直到4次累加运算结束后,模块B输出N个累加值。
实施例9,一种降低精度损失的方法,针对多个乘加单元(即N个模块A)和一个累加单元(即一个模块B),与实施例8不同之处在于,在选通器MUX插入额外的寄存器L,可以实现寄存器i的依次选通和无缝的子任务切换,简化乘加器阵列之中的时序控制,降低复杂度。N个模块A通过时钟i来对乘加运算次数计数(也即时钟1、时钟2、…、时钟N均采用时钟1),N个模块A的乘加运算次数同时达到第一预设值后,N个模块A所对应的寄存器i中的值同时传递给寄存器L,各个寄存器i清零后立刻进行下一周期的计算。寄存器L中的乘加值通过选通器MUX传递至模块B进行累加运算,累加后的值存入寄存器M中。时钟M对模块B的累加运算次数计数,当模块B的累加运算次数达到第二预设值后,寄存器M中的累加值作为最终输出值。
实施例10,一种降低精度损失的方法,针对多个乘加单元(即N个模块A)和多个累加单元(Z个模块B)。N个模块A分别执行一个E次乘加运算,一个寄存器i对应存储一个模块A的乘加值(其中,i表示序号,i=1,2,…,N。例如,第一模块A的乘加值存储在寄存器1中,第二模块A的乘加值存储在寄存器2中,……,第N模块A的乘加值存储在寄存器N中。),时钟i对N个模块A的乘加运算次数计数(其中,i表示序号,i=1,2,…,N。例如,时钟1对第一模块A的乘加运算次数计数,时钟2对第二模块A的乘加运算次数计数,……,时钟N对第N模块A的乘加运算次数计数。),每个运算周期内,Z个模块A被选通器MUX选通,N个模块A各自对应的寄存器i中的乘加值被传递至Z个模块B,与Z个模块B各自对应的寄存器i/内存储的值进行对位累加。Z个模块B中的累加值分别存储在一个寄存器i/中,其中,i/表示序号,i/=1,2,…,Z。(例如,第一模块B的累加值存储在寄存器1/中,第二模块B的累加值存储在寄存器2/中,…,第Z模块B的累加值存储在寄存器Z/中。)时钟i/分别对Z个模块B的累加运算次数计数,其中,i/表示序号,i/=1,2,…,Z。例如,时钟1/对第一模块B的累加运算次数计数,时钟2/对第二模块B的累加运算次数计数,…,时钟Z/对第Z模块B的累加运算次数计数。
在一种可能的实现方式中,一个运算周期内,N个模块A的乘加运算次数分别达到第一预设值后,选通器MUX一次选通Z个模块A,并将N个模块A的乘加值分别传递给Z个模块B,然后N个模块A再继续进入下一个运算周期,当Z个模块B的累加运算次数均达到第二预设值后,将Z个模块B的N个累加值作为最终输出值。例如,将1024次乘加任务拆为4个256次乘加小任务。第一个256次乘加运算周期内,N个模块A分别执行256次乘加运算,各模块A的寄存器均存储256次乘加运算得到的乘加值,选通器MUX一次选通3个模块A,N个模块A分别对应的256次乘加运算得到的乘加值分别传递到3个模块B,3个模块B共存了N个累加值。下一个256次乘加运算周期,依旧是N个模块A分别执行256次乘加运算,各模块A的寄存器存储256次乘加运算得到的乘加值,选通器MUX一次选通3个模块A,N个模块A分别对应的256次乘加运算得到的乘加值分别传递到3个模块B,按照第一模块A到第N模块A对应和上一运算周期的N个累加值进行对位累加。一直到4次累加运算结束后,3个模块B输出N个累加值。
实施例11,一种降低精度损失的方法,针对多个乘加单元(即N个模块A)和多个累加单元(Z个模块B),与实施例10不同之处在于,在选通器MUX插入额外的寄存器L,可以实现寄存器i的依次选通和无缝的子任务切换,简化乘加器阵列之中的时序控制,降低复杂度。N个模块A可通过同一时钟i来对乘加运算次数计数(也即时钟1、时钟2、…、时钟N均采用时钟1),N个模块A的乘加运算次数同时达到第一预设值后,N个模块A所对应的寄存器i中的值同时传递给寄存器L,各个寄存器i清零后立刻进行下一运算周期的计算。寄存器L中的乘加值通过选通器MUX传递至Z个模块B进行累加运算,时钟i/分别对Z个模块B的累加运算次数计数,当Z个模块B的累加运算次数均达到第二预设值后,Z个模块B各自对应的寄存器i/中的N个累加值作为最终输出值。
实施例12,本发明的一种计算处理设备,用于存储一种降低精度损失的方法的计算机程序指令。该计算机程序指令在被处理器运行时,使得处理器执行所述的一种降低精度损失的方法,例如可以选用实施例7、实施例8、实施例9、实施例10和实施例11的方法。该计算机程序指令可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为独立软件执行、部分在用户设备上执行部分在远程计算设备上执行、完全在远程计算设备或完全在服务器上执行等。
至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。
Claims (16)
1.一种降低精度损失的装置,其特征在于,包括:
模块A,其执行乘加运算且至少设置一个,所述模块A具有输入X和Y,并执行乘法运算产生乘积值XY,所述模块A将乘积值XY执行累加运算,输出乘加值;
模块B,其执行累加运算且至少设置一个,所述模块B接收所述模块A的乘加值,并执行累加运算,输出累加值;
模块A执行一个E次乘加运算后,将乘加值传递给模块B,模块A清零,模块A继续执行下一个E次乘加运算,并将乘加值传递给模块B与上一个乘加值进行累加,模块A清零,依次执行后,完成D个E次乘加运算,将模块B的累加值输出。
2.如权利要求1所述的一种降低精度损失的装置,其特征在于,所述装置包括一个模块A和一个模块B,所述模块A将乘加值传递给所述模块B后,所述模块A清零继续执行下一个乘加运算。
3.如权利要求1所述的一种降低精度损失的装置,其特征在于,时钟1对所述模块A的乘加运算次数计数,时钟2对所述模块B的累加运算次数计数。
4.如权利要求1所述的一种降低精度损失的装置,其特征在于,当所述模块A的乘加运算次数达到第一预设值后,所述模块A将乘加值传递给所述模块B,当所述模块B的累加运算次数达到第二预设值后,将所述模块B的累加值作为最终输出值。
5.如权利要求1所述的一种降低精度损失的装置,其特征在于,所述装置包括N个模块A和一个模块B;
N个模块A通过选通器MUX并联,所述选通器MUX一次选通一个模块A,模块A产生的乘加值被传递至所述模块B进行对位累加,最终输出N个累加值。
6.如权利要求5所述的一种降低精度损失的装置,其特征在于,时钟i分别对N个模块A的乘加运算次数计数,其中,i表示序号,i=1,2,…,N,时钟M对所述模块B的累加运算次数计数。
7.如权利要求5所述的一种降低精度损失的装置,其特征在于,一个运算周期内,当N个模块A的乘加运算次数分别达到第一预设值后,N个模块A依次被选通器MUX选通并将乘加值传递给所述模块B进行对位累加,N个模块A进入下一个运算周期,当所述模块B的累加运算次数达到第二预设值后,将所述模块B的N个累加值作为最终输出值。
8.如权利要求1所述的一种降低精度损失的装置,其特征在于,所述装置包括N个模块A和Z个模块B,Z≤N;
N个模块A通过选通器MUX并联,所述选通器MUX一次选通Z个模块A,N个模块A产生的乘加值被传递至Z个模块B进行对位累加,Z个模块B输出N个累加值。
9.如权利要求7所述的一种降低精度损失的装置,其特征在于,时钟i对N个模块A的乘加运算次数计数,其中,i表示序号,i=1,2,…,N;时钟i/分别对Z个模块B的累加运算次数计数,其中,i/表示序号,i/=1,2,…,Z。
10.如权利要求7所述的一种降低精度损失的装置,其特征在于,一个运算周期内,N个模块A的乘加运算次数分别达到第一预设值后,所述选通器MUX一次选通Z个模块A,并将N个模块A的乘加值传递给Z个模块B进行对位累加,N个模块A进入下一个运算周期,当Z个模块B的累加运算次数均达到第二预设值后,将Z个模块B的N个累加值作为最终输出值。
11.一种降低精度损失的方法,其特征在于,所述方法将C次乘加运算分成D个E次乘加运算,先依次进行E次乘加运算共获取D个乘加值,然后将D个乘加值进行累加运算,最后将累加值输出;
模块A执行一个E次乘加运算后,将乘加值传递给模块B,模块A清零,模块A继续执行下一个E次乘加运算,并将乘加值传递给模块B与上一个乘加值进行累加,模块A清零,依次执行后,完成D个E次乘加运算,将模块B的累加值输出;
其中,模块A,其执行乘加运算且至少设置一个,所述模块A具有输入X和Y,并执行乘法运算产生乘积值XY,所述模块A将乘积值XY执行累加运算,输出乘加值;
模块B,其执行累加运算且至少设置一个,所述模块B接收所述模块A的乘加值,并执行累加运算,输出累加值。
12.如权利要求11所述的一种降低精度损失的方法,其特征在于,所述模块A中的乘加运算次数达到第一预设值后,所述模块A将乘加值传递给所述模块B,当所述模块B的累加运算次数达到第二预设值后,将所述模块B的累加值作为最终输出值。
13.如权利要求11所述的一种降低精度损失的方法,其特征在于,一个运算周期内,N个模块A分别执行一个E次乘加运算,N个模块A的乘加运算次数分别达到第一预设值后,一个模块A被选通器MUX选通,该模块A产生的乘加值被传递至模块B进行对位累加,当所有模块A依次被选通后,N个模块A进入下一个运算周期,当所述模块B的累加运算次数达到第二预设值后,将所述模块B中的N个累加值输出。
14.如权利要求11所述的一种降低精度损失的方法,其特征在于,一个运算周期内,N个模块A分别执行一个E次乘加运算,当N个模块A的乘加运算次数分别达到第一预设值后,Z个模块A被选通器MUX选通,N个模块A产生的乘加值被传递至Z个模块B进行对位累加,N个模块A进入下一个运算周期,当Z个模块B的累加运算次数均达到第二预设值后,将Z个模块B的N个累加值作为最终输出值。
15.一种神经网络处理芯片,其特征在于,所述神经网络处理芯片中内嵌如权利要求1-10中任意一项所述的一种降低精度损失的装置。
16.一种计算处理设备,包括处理器及其存储器,所述存储器存储计算机指令程序,其特征在于,所述计算机指令程序在被所述处理器执行时实现权利要求11-14 中任一项方法步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911345467.9A CN113033798B (zh) | 2019-12-24 | 2019-12-24 | 一种降低精度损失的装置及方法 |
PCT/CN2020/138905 WO2021129718A1 (zh) | 2019-12-24 | 2020-12-24 | 神经网络运算的方法及装置、芯片和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911345467.9A CN113033798B (zh) | 2019-12-24 | 2019-12-24 | 一种降低精度损失的装置及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113033798A CN113033798A (zh) | 2021-06-25 |
CN113033798B true CN113033798B (zh) | 2023-11-24 |
Family
ID=76451547
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911345467.9A Active CN113033798B (zh) | 2019-12-24 | 2019-12-24 | 一种降低精度损失的装置及方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN113033798B (zh) |
WO (1) | WO2021129718A1 (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102629189A (zh) * | 2012-03-15 | 2012-08-08 | 湖南大学 | 基于fpga的流水浮点乘累加方法 |
CN107844826A (zh) * | 2017-10-30 | 2018-03-27 | 中国科学院计算技术研究所 | 神经网络处理单元及包含该处理单元的处理系统 |
CN107862374A (zh) * | 2017-10-30 | 2018-03-30 | 中国科学院计算技术研究所 | 基于流水线的神经网络处理系统和处理方法 |
CN108108150A (zh) * | 2017-12-19 | 2018-06-01 | 北京云知声信息技术有限公司 | 乘累加运算方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9846623B2 (en) * | 2015-08-20 | 2017-12-19 | Qsigma, Inc. | Simultaneous multi-processor apparatus applicable to acheiving exascale performance for algorithms and program systems |
CN108960414B (zh) * | 2018-07-20 | 2022-06-07 | 中国人民解放军国防科技大学 | 一种基于深度学习加速器实现单广播多运算的方法 |
-
2019
- 2019-12-24 CN CN201911345467.9A patent/CN113033798B/zh active Active
-
2020
- 2020-12-24 WO PCT/CN2020/138905 patent/WO2021129718A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102629189A (zh) * | 2012-03-15 | 2012-08-08 | 湖南大学 | 基于fpga的流水浮点乘累加方法 |
CN107844826A (zh) * | 2017-10-30 | 2018-03-27 | 中国科学院计算技术研究所 | 神经网络处理单元及包含该处理单元的处理系统 |
CN107862374A (zh) * | 2017-10-30 | 2018-03-30 | 中国科学院计算技术研究所 | 基于流水线的神经网络处理系统和处理方法 |
CN108108150A (zh) * | 2017-12-19 | 2018-06-01 | 北京云知声信息技术有限公司 | 乘累加运算方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113033798A (zh) | 2021-06-25 |
WO2021129718A1 (zh) | 2021-07-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10621486B2 (en) | Method for optimizing an artificial neural network (ANN) | |
US10891109B2 (en) | Arithmetic processor, arithmetic processing apparatus including arithmetic processor, information processing apparatus including arithmetic processing apparatus, and control method for arithmetic processing apparatus | |
US10691996B2 (en) | Hardware accelerator for compressed LSTM | |
US20180046903A1 (en) | Deep processing unit (dpu) for implementing an artificial neural network (ann) | |
US20210157549A1 (en) | Systolic array component combining multiple integer and floating-point data types | |
Sledevic | Adaptation of convolution and batch normalization layer for CNN implementation on FPGA | |
KR20190084705A (ko) | 근사 곱셈기를 구비하는 뉴럴 네트워크 처리 장치 및 이를 포함하는 시스템온 칩 | |
US11599779B2 (en) | Neural network circuitry having approximate multiplier units | |
EP3816866A1 (en) | Operation method and apparatus for network layer in deep neural network | |
JP2019139338A (ja) | 情報処理装置、情報処理方法、およびプログラム | |
Pradeep et al. | Edgenet: Squeezenet like convolution neural network on embedded fpga | |
Zhang et al. | A low-latency FPGA implementation for real-time object detection | |
Que et al. | Efficient weight reuse for large LSTMs | |
Li et al. | Dynamic dataflow scheduling and computation mapping techniques for efficient depthwise separable convolution acceleration | |
Zhang et al. | Implementation and optimization of the accelerator based on FPGA hardware for LSTM network | |
Baischer et al. | Learning on hardware: A tutorial on neural network accelerators and co-processors | |
Shu et al. | High energy efficiency FPGA-based accelerator for convolutional neural networks using weight combination | |
Zong-ling et al. | The design of lightweight and multi parallel CNN accelerator based on FPGA | |
CN113033798B (zh) | 一种降低精度损失的装置及方法 | |
CN110135561B (zh) | 一种实时在线飞行器ai神经网络系统 | |
Zhu et al. | Taming unstructured sparsity on GPUs via latency-aware optimization | |
Li et al. | ABM-SpConv-SIMD: Accelerating convolutional neural network inference for industrial IoT applications on edge devices | |
CN112836793B (zh) | 浮点可分离卷积计算加速装置、系统以及图像处理方法 | |
CN116090511A (zh) | 卷积神经网络的预处理方法和加速方法、加速系统和介质 | |
Ueki et al. | Learning accelerator of deep neural networks with logarithmic quantization |
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 |