本发明涉及一种用于借助移位运算器(Bitshiftoperatoren)来计算乘法的计算单元。同样,本发明涉及一种方法和一种计算机程序,所述方法和所述计算机程序分别设立成,借助移位运算器来实施乘法。
背景技术
为了能够实时地实施神经网络,已开发出专用的硬件加速器。硬件加速器针对乘法采用硬件实施的乘法累加单元(MAC,Multiply-Accumulate-Einheiten)。已认识到,神经网络中的工作负荷几乎仅由乘法和加法组成。因此,硬件加速器通过大规模并行采用MAC单元来实现高的计算吞吐量。一般而言,网络在图形处理单元(GPUs,Graphical Processing Units)上被训练,由此网络权重和中间结果的表示格式对应于Float32。这种数字格式不太适合于在嵌入式系统中采用,因为相对应的嵌入式系统可能会必须使用Float32-MAC单元,与所述Float32-MAC单元伴随而来的是高的空间和能量需求。
技术实现要素:
本发明的优点
在下文建议了一种计算单元,该计算单元允许使用具有减小的字宽(例如4位)的数字格式,由此有利地省去硬件中的乘法器并且替代于此地可以使用位移(Bitshifts)。因为位移在ASIC实施方案中需要显著(10-20x)更小的芯片面积。因此,位移是更成本有利的。此外,采用位移导致与乘法相比减小的能量需求。除此以外,鉴于分辨率精度和高计算吞吐量,所建议的计算单元也提供了灵活性。神经网络尤其是可以是图像分类器的部分。相对应地,计算单元可以是特别合适的用于实施图像分类器的计算单元。
此外,计算单元可以操纵神经网络的不同层的经过不同量化的权重。因为计算单元可以根据权重的所使用的字宽而不同地运行。
上面所提到的加速器的已知的MAC单元使用经过线性量化的权重,并且因此不能以如所建议的计算单元那样的程度从简单位移的成本、能量和芯片面积节省中获益。
因而,利用所建议的计算单元,建议一种加速器,该加速器可以灵活地根据对数字格式的精确性、能量消耗和计算吞吐量的要求而被配置。
本发明的公开
在第一方面,建议了一种计算单元,用于使第一值x与第一被乘数w相乘,或者用于使第一值x分别与第二被乘数和第三被乘数相乘。计算单元收到值x和被乘数的对数数字格式的指数。以对数数字格式,分别通过对于可预先给定的底数的至少一个指数来表示被乘数。计算单元收到第一被乘数的第一对数数字格式(例如呈“two-hot”数字格式)的至少两个指数、,或者分别收到第二被乘数和第三被乘数的第二对数数字格式(例如呈“power-of-two(2的幂)”数字格式)的指数。可以说,要么给第一被乘数分配这些指数,要么给第二被乘数和第三被乘数分配这些指数。指数以及第一值x被量化,例如借助2、4或者8位来量化,或者借助多于8位来量化,并且可以作为二进制数存在。
计算单元包括第一寄存器,在该第一寄存器中,要么寄存有第一被乘数的两个指数、,要么寄存有第二被乘数的指数和第三被乘数的指数。存在配置位,该配置位表征,是第一被乘数的两个指数、还是第二被乘数的指数和第三被乘数的指数寄存在第一寄存器中。也可设想的是,配置位表征,是否给一个或者多于一个的被乘数分配有第一寄存器的所寄存的指数,或者是使用呈第一对数数字格式的指数,还是使用呈第二对数数字格式的指数。配置位可以是计算单元的寄存器或者存储器中的所设置的位,优选地是第一寄存器中的所设置的位。
此外,计算单元包括第一移位运算器和第二移位运算器。移位运算器设立成,根据可预先给定的(二进制)值,将二进制数向左(优选地以硬件)移动了可预先给定的值的位的数目。第一移位运算器将第一值x移动了如下数目的位:该数目对应于第一寄存器的所寄存的指数中的第一指数的值。第二移位运算器将第一值x移动了如下数目的位:该数目对应于第一寄存器的指数中的第二指数的值。此外,计算单元还包括加法器,该加法器对第一移位运算器和第二移位运算器的结果进行合计。此外,计算单元还设立成:当配置位表征在第一寄存器中寄存有第一被乘数时,那么输出加法器的结果(B);而当配置位表征在第一寄存器中寄存有第二被乘数和第三被乘数时,那么输出第二移位运算器的结果(A)和第一移位运算器的结果(C)。在加法器已实施了它的计算运算之后,在加法器的输出处存在结果(B)。结果(B)对应于值x与第一被乘数的乘法结果。结果(A)对应于值x与如下被乘数的乘法结果:给所述被乘数分配有已被用于第二移位运算器的位移的指数。相对应的内容适用于结果(C)。
一方面,计算单元的优点是,所建议的硬件把如下第一模式(例如“two-hot”数字格式)准备好:在可是由于移位运算器而较低的面积和能量需求的情况下,该第一模式优选地鉴于分辨率/数字表示而接近线性量化,并且因此可以非常精确地进行计算。另一方面,计算单元提供了其他模式(例如“power-of-two”数字格式),其中效率或者计算吞吐量很重要。如果总工作负荷保持恒定,则电路在该模式下消耗特别少的能量。如果总工作负荷是可变的,则这样在该模式下,计算吞吐量是两倍高。因而,计算单元不仅能够实现能量节省,而且可以被用于较高的数据吞吐量。计算单元也有如下优点:分辨率精度可通过两个模式来调节,并且由此支持针对神经网络的不同层的不同字宽。
建议了,计算单元包括其他的移位运算器,该其他的移位运算器将第一移位运算器的结果向左移动了可预先给定的数目的位。该可预先给定的数目对应于可预先给定的值,该可预先给定的值表征第一被乘数的两个指数的不同分辨率。加法器对第二移位运算器和其他的移位运算器的结果进行合计。
此外建议了,给第一寄存器中的指数分别分配有符号位(英语为,sign-bit),并且加法器根据该符号位对移位运算器的结果进行累计或者相减。符号位表征,相应的被乘数、尤其是分配给该被乘数的指数是正数还是负数。
此外建议了,计算单元包括第一累加器和第二累加器。当配置位表征第一被乘数寄存在第一寄存器中时,那么累加器之一只对加法器的结果(B)进行累加。当配置位表征第二被乘数和第三被乘数的指数寄存在第一寄存器中时,那么第一累加器对第二移位运算器的结果(A)进行累加,并且第二累加器对第一移位运算器的结果(C)进行累加。
累加可以被理解为,实施多次乘法,并对各个乘法的结果进行累计,例如: 。
累加器可以分别包括两个寄存器和一个累加寄存器和一个加法器。结果A、B或者C中的一个结果寄存在第一寄存器中。如下相应指数的符号位寄存在第二寄存器中:所述相应指数分配给被用于确定来自第一寄存器的结果的所属的被乘数。加法器根据来自第二寄存器的符号位对第一寄存器的内容与累加寄存器进行相加或者相减,并将结果储存在累加寄存器中。在这种情况下有利的是,由此可以非常高效地执行向量矩阵乘法。
此外建议了,根据分配给被用于第二移位运算器的那个指数的那个符号位,第一累加器对结果(A)进行累计或者相减;并且根据分配给被用于第一移位运算器的那个指数的那个符号位,第二累加器对结果(C)进行累计或者相减。优选地,符号位同样寄存在第一寄存器中。
此外建议了,计算单元此外设立成:当配置位改变时,那么将第一累加器和第二累加器进行复位(英语为reset)。复位可以被理解为,所存储的值或累加器(寄存器)的内容被设置到可预先给定的初始值,优选地被设置到值零。
此外建议了,第一对数数字格式和第二对数数字格式的被乘数的底数对应于值二。第一被乘数的两个指数的总字宽可以对应于第一被乘数和第二被乘数的两个指数的总字宽,或者正好相反。
在第二方面,建议了一种(尤其是计算机实施的)用于运行按照第一方面的计算单元的方法。该方法包括步骤:提供两个指数和值x和配置位,其中该配置位表征,指数是分配给恰好一个被乘数还是分别分配给一个被乘数。于是,跟着是实施将值x第一次位移了第一指数的位的数目和将值x第二次位移了第二指数的位的数目。于是,跟着是根据配置位输出移位运算器的结果;其中当配置位表征这两个指数都分配给一个被乘数时,那么移位运算器的结果被相加并且作为乘法的结果被输出;其中当配置位表征这两个指数分别分配给一个被乘数时,那么移位运算器的结果分别作为该值分别与被乘数之一的乘法的结果而输出。
在其他方面,建议了一种计算机程序。该计算机程序设立成,实施第二方面的方法。该计算机程序包括指令,当计算机程序在计算机上运行时,所述指令促使计算机,实施所提到的方法之一连带该方法的所有步骤。此外,建议了一种机器可读的存储模块,在所述机器可读的存储模块上存储有计算机程序。
附图说明
上面所提到的方面的实施例在附上的附图中示出,并且在随后的描述中更详细地予以阐述。在此:
图1示出了两个示意性曲线图,这些曲线图示出了神经网络的层的滤波器的经过线性量化的值和非量化值的分布;
图2示出了两个示意性曲线图,这些曲线图示出了神经网络的层的滤波器的不同对数量化过的值和非量化值的分布;
图3示出了乘法器的示意图;
图4示出了其他乘法器的示意图;
图5示出了用于使不同对数量化过的值相乘的方法的实施形式。
具体实施方式
图1示出了第一示意性曲线图(1),该第一示意性曲线图(1)示出了经过训练的神经网络的层的滤波器(conv3_3)的值、尤其是权重的分布(10)。分布(10)是呈Float32数字表示的量化值的频率分布。要注意的是,在第一示意性曲线图(1)中,所述值遵循单峰分布(einer mono-modalen Verteilung)。此外,在第一示意性曲线图(1)中,示出了分辨率为4位的量化值(11)。分辨率为4位的这些量化值(11)在这种情况下线性量化,并且布置在值0左右。
可是已观察到,滤波器的值、尤其是神经网络的权重遵循非均匀的频率分布(参见第二示意性曲线图(2))。因而,为了在非均匀分布的情况下尽可能好地量化滤波器的值,线性量化并不适合于低的位宽。因为如在第二示意性曲线图(2)中所示出的那样,在小位宽的情况下,利用线性量化可能只合理地量化第一模式(12a),而滤波器沿着第二模式(12b)的值在线性量化的情况下完全不予以考虑。这可导致高的量化误差。
在下文建议,借助非均匀分布的量化格式,操纵神经网络的层的值所遵循的分布(10,12a,12b)。优选地,对数数字表示被用于进行量化。对数数字表示被理解为,代替数字的值,仅使用对于预先给定的底数的指数的值。例如:值64以对数数字表示被储存为26=64、因此被储存为值6。
优选地,在下文使用对于底数2的数字表示,并且该数字表示被称为“Power-of-two(2 的幂)”数字格式。
如果神经网络的权重w或滤波器的值被量化为“Power-of-two”值,则相应层或该层的神经元的激活x与权重的乘法可以通过将激活x向左位移了位来进行:
。
在下文,指数用表示。要注意的是,值x和指数分别被量化,并且优选地作为二进制数存在。
已认识到,神经网络的权重的对数表示仅是有条件地适合的,因为尤其是针对双峰分布的情况,针对第二模式(参见第二示意性曲线图(2))仅有少量采样点可用,参见图2(b)。
因此建议,使用数字格式或者量化,其中神经网络的权重w通过两个“Power-of-two”值来表示:
。
按照方程式(2)通过两个“Power-of-two”值得到的数字格式在下文应被称为“two-hot”数字格式。
针对乘法,以“two-hot”数字格式得到:
。
在图2中,示例性示出通过针对第一示意性曲线图和第二示意性曲线图(1,2)的“Power-of-two”和“two-hot”数字格式的相对应的量化值。
在图2中变得清楚的是,针对双峰分布的“two-hot”格式为第二模式提供了更合理的采样值(21)。
为了在“two-hot”数字表示中集成针对硬件没有引起任何额外花费或者显著的附加成本的自由度,可以插入参数。参数表征两个值w1和w2的不同分辨率:
。
图3示意性地示出了用于使至少两个呈“two-hot”数字格式的数字相乘的计算单元(3)。
在该实施形式中,计算单元(3)包括乘法器(30),并且可选地包括累加器(35)。
作为输入值,乘法器(30)收到值x或激活x,并且收到呈“two-hot”数字格式的权重、亦即权重的指数和。此外,给指数和分别分配有符号位(英语为sign bit)s1、s2。指数和和优选地符号位寄存在第一寄存器(43)中。
输入值优选地有为8位的分辨率。可设想任意其他分辨率、优选地为16位或者小于4位的分辨率。
接着,按照方程式(4),根据指数和并且根据激活x,乘法器(30)通过移位运算器(31,32)计算乘法的结果。针对给出参数的情况,如在方程式(4)中那样,可以借助其他的移位运算器(33)将移位运算器(31)的结果向左移动了如下数目的位:所述数目的位通过参数来描述。
根据第一指数的符号位s1,那么两个移位运算器(31,32)的结果被累计或者被相减,优选地借助加法器(34)来累计或者相减,并且作为中间结果p被输出。
针对激活x应与不同的权重w多次相乘并且紧接着应关于各个乘法的所有结果被总计的情况,可以使用累加器(35)。一旦乘法器(30)已确定了中间结果(p),就可通过累加器(35)进一步处理该中间结果(p)。在这种情况下,根据中间结果p和指数的符号位s2并且根据累加器寄存器(acc_reg)的所存储的结果,累加器(35)确定最终结果q。
优选地,累加器(35)将中间结果p存储在寄存器(reg)中。于是,从其他寄存器(37)中读出符号位(sign_2),并且利用加法器(36),根据符号位(sign_2),寄存器(reg)的中间结果p和累加器寄存器(acc_reg)的内容被合计或者被相减。于是,加法器(36)的结果被存储在累加器寄存器(acc_reg)中,并且可选地作为结果q被输出。
图4示出了其他的计算单元(4)的示意图,该其他的计算单元(4)有利地既可以实施呈“two-hot”数字格式的乘法,又可以实施呈“power-of-two”数字格式的乘法。
通过配置位(40),计算单元(4)要么可以被置于第一模式、亦即根据“two-hot”数字格式的权重w中,要么可以被配置成,在第二模式下处理呈“power-of-two”数字格式的两个权重。
在此,在“two-hot”模式(第一模式)下,两个位移的结果被相加(或者被相减,取决于第一符号位(sign_l))。乘法结果在输出B处准备好,并且在第一累加器(35a)中根据第二符号位(sign_2)被累加。第二累加器(35b)的输出为0和/或没有被使用。在该模式下,权重的数字表示的分辨率高于在第二模式下的分辨率。
乘法器(30)的(在输出A、B、C处的)结果的转发通过开关(41、42)进行。这些开关根据配置位(40)将乘法器(30)的(在输出A、B、C处的)结果引导至相应的累加器(35a、35b)。这些开关分别可以是复用器。
替选地,针对第一模式,配置位(40)可以停用第二累加器(35b),或者丢弃在输出A和C处的结果。
在“power-of-two”模式(第二模式)下,两个不同的权重与输入值x并行地通过两个位移相乘。这两个乘法结果在输出A和C处准备好。
根据相对应的符号位(sign_1,sign_2),每个结果都被相加或者相减到第一和第二累加器(35a,35b)的累加器寄存器上。紧接着,两个结果在两个累加器输出处准备好。在该模式下,数字格式较粗略地对权重进行分辨。作为回报,计算单元(4)实现了两倍的计算吞吐量。
优选地,在“power-of-two”模式(第二模式)下,借助未在图4中示出的其他加法器,对第一累加器和第二累加器(35a、35b)的结果进行合计。优选地,当累加器中的所有结果都已被计算并且要输出关于所有乘法结果的总和时,那么实施这一点。
图5示意性地示出了用于运行计算单元(4)的流程图(5),所述计算单元(4)尤其是用于使值x与呈“two-hot”数字格式的被乘数相乘,或者用于使值x与呈“power-of-two”数字格式的2个被乘数相乘。
在第一步骤500中,提供值x、呈“two-hot”数字格式的被乘数的指数或者呈“power-of-two”数字格式的两个被乘数的指数。附加地,可以设置配置位,该配置位表征,这两个指数是分配给呈“two-hot”数字格式的一个被乘数,还是分配给呈“power-of-two”数字格式的两个被乘数。
在步骤500,那么,要么根据配置位,要么根据被乘数呈何种数字格式存在,判定是按照第一模式还是按照第二模式来实施乘法。
当已判定按照第一模式来实施乘法时,那么在步骤500之后,实施步骤510a。当在步骤500中已判定应按照第二模式实施乘法时,那么跟着是步骤510b。
在步骤510a中,按照方程式(3),使用呈“two-hot”数字格式的一个被乘数的指数:借助移位运算器和加法,确定乘法的结果。
在步骤510a已结束之后,跟着是步骤520a。在这种情况下,输出步骤510a的结果。附加地或者替选地,在步骤520a中,可以关于步骤510a的结果进行累加。
在步骤510b中,使用呈“power-of-two”数字格式的两个被乘数的指数,以便借助移动操作、例如借助两个移位运算器:和,将值x分别向左移动了指数的位的数目。
在步骤510b已结束之后,跟着是步骤520b。在这种情况下,步骤510b的相应的移动操作的结果彼此分开地被输出。附加地或者替选地,在步骤520b中,可以分别关于步骤510b的两个结果分开地进行累加。