
1.本发明涉及人工智能技术领域,具体涉及一种降低精度损失的装置及方法。
背景技术:2.当今时代,人工智能技术日新月异,澎湃发展,从各方面影响着人们的生产和生活,推动着世界的发展和进步。近几年,研究者们发现神经网络算法对处理非结构化数据非常有效,比如人脸识别,语音识别,图像分类等任务。随着这些非结构化数据的指数级增长,对处理器的算力提出巨大的需求。传统的中央处理器(cpu)和数字信号处理器(dsp)已不能满足需求,亟需专业的为神经网络算法定制的处理器。开发神经网络专用处理器,提升芯片应对各种人工智能的有效算力,并且节省功耗,成为人工智能芯片领域专家们共同努力的目标。
3.在神经网络计算中,采用低精度的参数进行计算,可极大的降低参数的存储消耗,减少乘加器的面积、功耗、和数据传输的消耗。然而,低精度的参数计算不可避免的带来计算误差。
技术实现要素:4.鉴于此,本发明提供了一种降低精度损失的装置,包括:
5.模块a,其执行乘加运算且至少设置一个,所述模块a具有输入x和y,并执行乘法运算产生乘积值xy,所述模块a将乘积值xy执行累加运算,输出乘加值σxy;
6.模块b,其执行累加运算且至少设置一个,所述模块b接收所述模块a的乘加值σxy,并执行累加运算,输出累加值。
7.可选的,所述装置包括一个模块a和一个模块b,所述模块a将乘加值传递给所述模块b后,所述模块a清零继续执行下一个乘加运算。
8.可选的,时钟1对所述模块a的乘加运算次数计数,时钟2对所述模块b的累加运算次数计数。
9.可选的,当所述模块a的乘加运算次数达到第一预设值后,所述模块a将乘加值传递给所述模块b,当所述模块b的累加运算次数达到第二预设值后,将所述模块b的累加值作为最终输出值。
10.可选的,所述装置包括n个模块a和一个模块b;
11.n个模块a通过选通器mux并联,所述选通器mux一次选通一个模块a,该模块a产生的乘加值被传递至所述模块b进行对位累加,最终输出n个累加值。
12.可选的,时钟i分别对n个模块a的乘加运算次数计数,其中,i表示序号,i=1,2,
…
,n,时钟m对所述模块b的累加运算次数计数。
13.可选的,一个运算周期内,当n个模块a的乘加运算次数分别达到第一预设值后,n个模块a依次被选通器mux选通并将乘加值传递给所述模块b进行对位累加,n个模块a进入下一个运算周期,当所述模块b的累加运算次数达到第二预设值后,将所述模块b的n个累加
值作为最终输出值。
14.可选的,所述装置包括n个模块a和z个模块b,z≤n;
15.n个模块a通过选通器mux并联,所述选通器mux一次选通z个模块a,n个模块a中产生的乘加值被分别传递至z个模块b进行对位累加,输出n个累加值。
16.可选的,时钟i对n个模块a的乘加运算次数计数,其中,i表示序号,i=1,2,
…
,n;时钟i
/
分别对z个模块b的累加运算次数计数,其中,i
/
表示序号,i
/
=1,2,
…
,z。
17.可选的,一个运算周期内,n个模块a的乘加运算次数分别达到第一预设值后,所述选通器mux一次选通z个模块a,并将n个模块a的乘加值传递给z个模块b进行对位累加,n个模块a进入下一个运算周期,当z个模块b的累加运算次数均达到第二预设值后,将z个模块b的n个累加值作为最终输出值。
18.本发明还提供了一种降低精度损失的方法,所述方法将c次乘加运算分成d个e次乘加运算,先依次进行e次乘加运算共获取d个乘加值,然后将d个乘加值进行累加运算,最后将累加值输出。
19.可选的,模块a执行一个e次乘加运算后,将乘加值传递给模块b,模块a清零,模块a继续执行下一个e次乘加运算,并将乘加值传递给模块b与上一个乘加值进行累加,模块a清零,依次执行后,完成d个e次乘加运算,将模块b的累加值输出。
20.可选的,所述模块a中的乘加运算次数达到第一预设值后,所述模块a将乘加值传递给所述模块b,当所述模块b的累加运算次数达到第二预设值后,将所述模块b的累加值作为最终输出值。
21.可选的,一个运算周期内,n个模块a分别执行一个e次乘加运算,n个模块a的乘加运算次数分别达到第一预设值后,一个模块a被选通器mux选通,该模块a产生的乘加值被传递至模块b进行对位累加,当所有模块a依次被选通后,n个模块a进入下一个运算周期,当所述模块b的累加运算次数达到第二预设值后,将所述模块b中的n个累加值输出。
22.可选的,一个运算周期内,n个模块a分别执行一个e次乘加运算,当n个模块a的乘加运算次数分别达到第一预设值后,z个模块a被选通器mux选通,n个模块a产生的乘加值被传递至z个模块b进行对位累加,n个模块a进入下一个运算周期,当z个模块b的累加运算次数均达到第二预设值后,将z个模块b的n个累加值作为最终输出值。
23.本发明还提供了一种神经网络处理芯片,所述神经网络处理芯片中内嵌所述的一种降低精度损失的装置。
24.本发明还提供了一种计算处理设备,所述计算处理设备存储执行所述的一种降低精度损失的方法的计算机程序指令。
25.本发明的有益效果:
26.本发明将大批量的乘加任务分拆成几个小批量的乘加任务,可极大的降低单层神经网络的计算误差。
附图说明
27.通过参照附图详细描述其示例实施例,本公开的上述和其它目标、特征及优点将变得更加显而易见。下面描述的附图仅仅是本公开的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
28.图1是针对半精度浮点的平均误差分析的示意图;
29.图2是本发明的一种降低精度损失的装置的示意图;
30.图3是将1024次乘加任务分成4个256次乘加小任务的示意图;
31.图4是本发明与普通乘加模式(半精度浮点)的相对标准偏差分析的示意图;
32.图5是本发明第一实施例所述的一种降低精度损失的装置的电路级示意图,该装置针对一个乘加单元;
33.图6是本发明第二实施例所述的一种降低精度损失的装置的电路级示意图,该装置针对多个乘加单元和一个累加单元;
34.图7是图6中一种降低精度损失的装置的改进装置的电路级示意图;
35.图8是本发明第四实施例所述的一种降低精度损失的装置的电路级示意图,该装置针对多个乘加单元和多个累加单元;
36.图9是图8中一种降低精度损失的装置的改进装置的电路级示意图。
具体实施方式
37.下面将参照附图更详细地描述本公开的示例性实施例。
38.虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员以使得本发明所属技术领域的技术人员能够容易实施。正如本发明所属技术领域的技术人员能够容易理解,将在后面描述的实施例在不脱离本发明的概念和范围的基础上可变形为多种形式。在附图中尽量将相同或相似的部分用相同的附图标记表示。
39.在此使用的专业术语只是用来说明特定实施例而提供的,并不是用来限制本发明。在此使用的单数形式在没有表示明确的相反含义的情况下也包含复数形式。在说明书中使用的“包含”的具体化了特定的特性、领域、常数、步骤、动作、要素及/或成分,并不排除其他特定的特性、领域、常数、步骤、动作、要素、成分及/或组的存在或附加。
40.将下面使用的技术用语及科学用语包括在内的所有用语具有与本发明所属技术领域的技术人员一般理解的含义相同的含义。在词典中所定义的用语被补充解释为与相关技术文献和当前公开的内容相符的含义,在没有定义的情况下,不能被解释为具有非常正式的含义。
41.如图2所示,本发明提供了一种降低精度损失的装置包括至少一个模块a和至少一个模块b。模块a执行乘加运算,具有输入x和y,并执行乘法运算产生乘积值xy,模块a将乘积值xy执行累加运算,输出乘加值。模块b执行累加运算,接收模块a的乘加值,并执行累加运算,输出累加值。模块a是标准的乘加单元,针对x和y两个输入,先进行乘法,然后在后半部进行累加。模块b是累加单元,将模块a输入的乘加值与上一个乘加值进行累加。
42.图1是针对半精度浮点的平均误差分析示意图。误差的计算方法采用欧式距离公式,比较半精度计算结果和全精度计算结果之间的相对平均误差。由图1可以看到,随着乘加次数的增加,平均误差在快速增大。当乘加次数达到1024次的时候,平均误差达到了0.7%;当乘加次数达到8196次的时候,平均误差则达到了21%。该误差会极大的影响单层神经网络的准确率,严重影响到神经网络的推理结果,甚至给出错误的结果。
43.通过本发明的装置,将乘加任务分拆成几个乘加小任务,可极大的降低单神经网络层计算误差,进而提高神经网络预测结果的准确度。如图3所示,比如将单神经网络层中的1024次乘加任务分成4个256次乘加小任务,先依次进行256次乘加运算,再将4个乘加结果相加。依靠这种拆分模式,可以将平均误差由0.7%(1024次乘加任务直接计算产生)降低为0.04%平均误差可缩小17倍。另外,每个乘加小任务中的乘加次数越少,平均误差越低。
44.本发明还提供了一种降低精度损失的方法,方法将c次乘加运算分成d个e次乘加运算,先依次进行e次乘加运算共获取d个乘加值,然后将d个乘加值进行累加运算,最后将累加值输出。例如将单神经网络层中的1024次乘加任务分成4个256次乘加小任务,先依次进行256次乘加运算,再将4个乘加结果进行累加运算。如图4所示,采用本发明的这种拆分方法,可以大大减小相对标准偏差。
45.实施例1,如图5所示,本发明的一种降低精度损失的装置,包括一个模块a和一个模块b。模块a执行一个乘加运算任务后,将乘加值传递给模块b,模块a清零,模块a继续执行下一个乘加运算任务,并将乘加值传递给模块b与上一个乘加值进行累加,模块a清零,依次执行后,完成多个乘加运算任务,将模块b的累加值输出。
46.在一种可能的实现方式中,模块a中的乘加值存储在寄存器1中,模块b中的累加值存储在寄存器2中。时钟1对模块a的乘加运算次数计数,时钟2对模块b的累加运算次数计数。
47.在一种可能的实现方式中,当模块a的乘加运算次数达到第一预设值(比如64次,128次等)后,模块a将乘加值传递给模块b(例如,将寄存器1中的乘加值传递给寄存器2),当模块b的累加运算次数达到第二预设值后,模块b中存储的累加值(例如存储在寄存器2中的累加值)作为最终输出值。
48.实施例2,如图6所示,本发明的一种降低精度损失的装置,包括n个模块a和一个模块b。
49.在一种可能的实现方式中,n个模块a中的乘加值分别存储在寄存器i中,其中,i表示序号,i=1,2,
…
,n。例如,第一模块a的乘加值存储在寄存器1中,第二模块a的乘加值存储在寄存器2中,
……
,第n模块a的乘加值存储在寄存器n中。
50.在一种可能的实现方式中,时钟i分别对n个模块a的乘加运算次数计数,其中,i表示序号,i=1,2,
…
,n。例如,时钟1对第一模块a的乘加运算次数计数,时钟2对第二模块a的乘加运算次数计数,
……
,时钟n对第n模块a的乘加运算次数计数。
51.在一种可能的实现方式中,n个模块a通过选通器mux并联,选通器mux的后面可共用一个加法器(即模块b),模块a所对应的寄存器i中的乘加值被传递至所述模块b进行对位累加,最终输出n个累加值。通过共用加法器,节省面积和开销。
52.在一种可能的实现方式中,一个运算周期内,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个累加值。
53.实施例3,如图7所示,本发明的一种降低精度损失的装置,包括n个模块a和一个模块b。与实施例2不同之处在于,装置还包括:寄存器l,其位于选通器mux之前,存储所有寄存器i存储的乘加值,选通器mux依次选通寄存器l中的乘加值并传递至模块b。在选通器mux插入额外的寄存器l,可以实现寄存器i的依次选通和无缝的子任务切换,简化乘加器阵列之中的时序控制,降低复杂度。
54.在一种可能的实现方式中,n个模块a可通过同一时钟i来对乘加运算次数计数(例如,时钟1、时钟2、
…
、时钟n均采用时钟1),n个模块a的乘加运算次数同时达到第一预设值后,n个模块a所对应的寄存器i中的值同时传递给寄存器l,各个寄存器i清零后立刻进行下一运算周期的计算。寄存器l中的乘加值通过选通器mux传递至模块b进行累加运算,累加后的值存入寄存器m中。时钟m对模块b的累加运算次数计数,当模块b的累加运算次数达到第二预设值后,寄存器m中的累加值作为最终输出值。
55.实施例4,如图8所示,本发明的一种降低精度损失的装置,包括n个模块a和z个模块b,z≤n。
56.n个模块a中的乘加值分别存储在寄存器i中,其中,i表示序号,i=1,2,
…
,n。例如,第一模块a的乘加值存储在寄存器1中,第二模块a的乘加值存储在寄存器2中,
……
,第n模块a的乘加值存储在寄存器n中。
57.时钟i对n个模块a的乘加运算次数计数,其中,i表示序号,i=1,2,
…
,n。例如,时钟1对第一模块a的乘加运算次数计数,时钟2对第二模块a的乘加运算次数计数,
……
,时钟n对第n模块a的乘加运算次数计数。
58.n个模块a通过选通器mux并联。每个运算周期内,会有z个模块a被选通器mux选通,n个模块a各自对应的寄存器i中的乘加值被分别传递至z个模块b,与模块b所对应的寄存器i
/
中的值进行对位累加。
59.z个模块b中的累加值分别存储在一个寄存器i
/
中,其中,i
/
表示序号,i
/
=1,2,
…
,z。例如,第一模块b的累加值存储在寄存器1
/
中,第二模块b的累加值存储在寄存器2
/
中,
…
,第z模块b的累加值存储在寄存器z
/
中。
60.时钟i
/
分别对z个模块b的累加运算次数计数,其中,i
/
表示序号,i
/
=1,2,
…
,z。例如,时钟1
/
对第一模块b的累加运算次数计数,时钟2
/
对第二模块b的累加运算次数计数,
…
,时钟z
/
对第z模块b的累加运算次数计数。
61.一个运算周期内,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个累加值。
62.实施例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个累加值作为最终输出值。
63.实施例6,本发明的一种神经网络处理芯片,内嵌一种降低精度损失的装置。在执行运算时,采用所述的一种装置降低精度损失,可以选用如实施例1、实施例2、实施例3、实施例4和实施例5的装置。该神经网络处理芯片可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为独立软件执行、部分在用户设备上执行部分在远程计算设备上执行、完全在远程计算设备或完全在服务器上执行等。
64.实施例7,一种降低精度损失的方法,针对一个乘加单元(即一个模块a)和一个累加单元(即一个模块b),模块a执行一个e次乘加运算后,将乘加值传递给模块b,模块a清零,模块a继续执行下一个e次乘加运算,并将乘加值传递给模块b与上一个乘加值进行累加,模块a清零,依次执行后,完成d个e次乘加运算,将模块b的累加值输出。
65.在一种可能的实现方式中,当模块a的乘加运算次数达到第一预设值(比如64次,128次等)后,模块a将乘加值传递给模块b(例如,将寄存器1中的乘加值传递给寄存器2),当模块b的累加运算次数达到第二预设值后,模块b中存储的累加值(例如存储在寄存器2中的累加值)作为最终输出值。例如将单神经网络层中的1024次乘加任务分成4个256次乘加小任务,先依次进行256次乘加运算,再将4个乘加结果进行累加运算。
66.实施例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个累加值。
67.实施例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中的累加值作为最终输出值。
68.实施例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的累加运算次数计数。
69.在一种可能的实现方式中,一个运算周期内,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个累加值。
70.实施例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个累加值作为最终输出值。
71.实施例12,本发明的一种计算处理设备,用于存储一种降低精度损失的方法的计算机程序指令。该计算机程序指令在被处理器运行时,使得处理器执行所述的一种降低精度损失的方法,例如可以选用实施例7、实施例8、实施例9、实施例10和实施例11的方法。该计算机程序指令可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为独立软件执行、部分在用户设备上执行部分在远程计算设备上执行、完全在远程计算设备或完全在服务器上执行等。
72.至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。
73.在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
74.类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
75.此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
76.至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。