技术领域
[0001] 本公开属于矩阵计算技术领域,具体涉及一种计算装置及计算方法。
相关背景技术
[0002] 在神经网络运算中,矩阵乘运算(包括卷积运算,因为卷积运算可以转换成矩阵乘运算)占了总运算量的大部分。要提高神经网络任务中的吞吐量,降低延时,同时降低功耗,其重点在于提升矩阵乘运算的速度和降低运算电路的功耗。
[0003] 如图1所示,M1是输入的第一矩阵,M2是输入的第二矩阵,M是输出矩阵。为了更好的提升矩阵计算的速度,提升数据利用的效率,很多时候会用计算单元阵列来实现矩阵的运算。以MxN(M>1,N>1)个计算单元组成的阵列为例,计算单元矩阵示意图2所示。通过计算单元阵列,能够使得数据得到充分的利用。例如,对于M1中的一个元素,可以同时被同一行中的N个计算单元复用,而对于M2中的一个元素,可以同时被同一列中的M个计算单元复用。每一次可以完成M1的一列元素和M2的一行元素的计算。
[0004] 但是,对于M1和M2中值为0的元素(在神经网络计算中,数据矩阵和参数矩阵可能是稀疏矩阵,也即矩阵中的0元素占比非常大),也会当成正常元素计算,这样会浪费功耗,增加芯片工作的温度,且会增加板级设计中散热设计的难度和成本。
具体实施方式
[0042] 为使本领域技术人员更好地理解本公开的技术方案,下面结合附图和具体实施方式对本公开作进一步详细描述。
[0043] 首先,参照图3来描述用于实现本公开实施例的计算装置及计算方法的示例电子设备。
[0044] 如图3所示,电子设备100包括一个或多个处理器110、一个或多个存储装置120、一个或多个输入装置130、一个或多个输出装置140等,这些组件通过总线系统150和/或其他形式的连接机构互连。应当注意,图3所示的电子设备的组件和结构只是示例性的,而非限制性的,根据需要,电子设备也可以具有其他组件和结构。
[0045] 处理器110可以是中央处理单元(CPU)、或者可以是由多个处理核构成、或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备100中的其他组件以执行期望的功能,处理器包括一个或多个计算装置。
[0046] 存储装置120可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器可以运行所述程序指令,以实现下文所述的本公开实施例中(由处理器实现)的客户端功能以及/或者其他期望的功能。在所述计算机可读存储介质中还可以存储各种应用程序和各种数据,例如,所述应用程序使用和/或产生的各种数据等。
[0047] 输入装置130可以是用户用来输入指令的装置,并且可以包括键盘、鼠标、麦克风和触摸屏等中的一个或多个。
[0048] 输出装置140可以向外部(例如用户)输出各种信息(例如图像或声音),并且可以包括显示器、扬声器等中的一个或多个。
[0049] 下面,将参考图4描述根据本公开一实施例的一种计算装置。
[0050] 如图4所示,一种计算装置,所述计算装置包括计算单元阵列(PU1,1,PU1,2…PU1,N…PUM,N)以及与所述计算单元阵列(PU1,1,PU1,2…PU1,N…PUM,N)相连的一个数据预处理单元Pre_P,其中,M为大于或等于2的整数,N为大于或等于2的整数。所述数据预处理单元Pre_P,用于读取输入矩阵的数据并根据所述数据生成控制信号,其中,所述控制信号用于指示对所述数据执行计算的计算单元的工作状态。
[0051] 需要说明的是,除了如图4所示的仅在第一输入矩阵M1和计算单元阵列(PU1,1,PU1,2…PU1,N…PUM,N)之间设置一个数据预处理单元Pre_P之外,还可以仅在第二输入矩阵M2和计算单元阵列(PU1,1,PU1,2…PU1,N…PUM,N)之间设置一个数据预处理单元Pre_P,用于读取第二输入矩阵M2的数据并进行预处理;或者,在第一输入矩阵M1和计算单元阵列(PU1,1,PU1,2…PU1,N…PUM,N)之间,以及第二输入矩阵M2和计算单元阵列(PU1,1,PU1,2…PU1,N…PUM,N)之间分别设置一个数据预处理单元Pre_P,分别用于读取第一输入矩阵M1和第二输入矩阵M2的数据及预处理。各个数据预处理单元Pre_P的工作原理相同,本公开实施例以图4所示的情况作为举例说明,对本公开进行详细的描述。
[0052] 示例性的,如图4所示,所述计算单元阵列(PU1,1,PU1,2…PU1,N…PUM,N)包括M×N个计算单元,分别为计算单元PU1,1、计算单元PU1,2、…、计算单元PU1,N、…、计算单元PUM,N,其中,M和N为大于或等于2的正整数,至于M和N的具体取值可以根据需要执行运算的第一输入矩阵M1和第二输入矩阵M2的大小决定,例如,如图5所示,第一输入矩阵M1大小为2×3,第二输入矩阵M2大小为3×2,输出矩阵M大小为2×2,一并结合图6,此时计算单元阵列大小应当至少为2×2。
[0053] 具体地,如图4所示,在利用计算装置进行矩阵乘运算时,数据预处理单元Pre_P逐个读取第一输入矩阵M1的各列数据,并根据读取到的数据生成控制信号,该控制信号用于指示对读取到的数据执行计算的计算单元的工作状态。
[0054] 本实施例的计算装置,通过在计算单元之前设置数据预处理单元,其根据读取到的输入矩阵的数据生成控制信号,该控制信号用于指示对所述数据执行计算的计算单元的工作状态,从而可以有效的降低矩阵运算过程中控制单元的能耗,降低芯片工作的温度,进而降低板级设计中散热设计的难度和成本,达到节省能源的目的。
[0055] 示例性的,如图4所示,数据预处理单元Pre_P可以在所述数据的数据值为第一预设值时,生成第一控制信号,所述第一控制信号用于指示对所述数据执行计算的所有所述计算单元执行计算。或者,数据预处理单元Pre_P也可以在所述数据的数据值为第二预设值时,生成第二控制信号,所述第二控制信号用于指示对所述数据执行计算的所有所述计算单元不执行计算。除此以外,数据预处理单元Pre_P也可以根据数据的其他一些参数来生成控制信号,例如,数据预处理单元Pre_P还可以根据该数据的高低电平信号生成控制信号等,本实施例对此并不限制。
[0056] 需要说明的是,数据预处理单元生成控制信号后,可以根据控制信号控制计算单元是否执行计算;或者,数据预处理单元生成控制信号后,由计算单元读取该控制信号,并根据该控制信号判断自己是否执行计算。
[0057] 示例性的,所述第一预设值可以为非零值,所述第二预设值可以为零值。当然,除此以外,本领域技术人员还可以根据实际需要,选择其他一些数据值,本实施例对此并不限制。
[0058] 本实施例的计算装置,通过所设置的数据预处理单元,在输入矩阵的数据值为非零值时生成第一控制信号,该第一控制信号指示对该非零数据执行计算的所有计算单元执行计算,以及,在输入矩阵的数据值为零值时生成第二控制信号,该第二控制信号指示对该零数据执行计算的所有计算单元不执行计算,从而可以有效的降低矩阵运算中的能耗,降低芯片工作的温度,进而降低板级设计中散热设计的难度和成本,达到节省能源的目的。
[0059] 较优地,本实施例的输入矩阵适用于稀疏矩阵,所谓的稀疏矩阵是指数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律,显然,对于稀疏矩阵的乘法运算,利用本公开实施例提供的计算装置执行计算,可以大大降低计算装置的功耗。
[0060] 示例性的,如图4所示,数据预处理单元Pre_P根据读取到的第一输入矩阵M1的数据生成控制信号,所述控制信号用于指示与所述数据对应行的所有计算单元的工作状态,例如,在读取到的第一输入矩阵M1的数据值为非零值时,生成第一控制信号,该第一控制信号指示与该数据对应行的所有计算单元执行计算,相反,在读取到的第一输入矩阵M1的数据值为零值时,生成第二控制信号,该第二控制信号指示与该数据对应行的所有计算单元不执行计算。
[0061] 此外,假设在第二输入矩阵M2和计算单元阵列之间设置数据预处理单元Pre_P,则该数据预处理单元Pre_P根据读取到的第二输入矩阵M2的数据生成控制信号,用于指示与所述数据对应列的所有计算单元的工作状态,具体地控制过程与第一输入矩阵M1类似,在此不作赘述。
[0062] 本实施例的计算装置,根据控制信号的指示,控制与数据对应行的所有计算单元或对应列的所有计算单元的工作状态,从而可以进一步有效降低矩阵运算中的能耗,降低芯片工作的温度,进而降低板级设计中散热设计的难度和成本,达到节省能源的目的。
[0063] 示例性的,如图4所示,在数据预处理单元Pre_P根据读取到的输入矩阵的数据生成控制信号之后,可以是该数据预处理单元Pre_P根据该控制信号控制对所述数据执行计算的计算单元的工作状态,或者,也可以是计算单元根据该控制信号控制自身的工作状态。也就是说,控制信号的执行主体可以是数据预处理单元Pre_P,也可以是计算单元,本实施例对此并不限制。
[0064] 示例性的,如图4所示,所述数据预处理单元Pre_P包括以列向量方式设置的多个零检测控制模块Z_Det,所述零检测控制模块Z_Det的个数与所述计算单元阵列的行数相同,每个所述零检测控制模块与对应行的计算单元相连。
[0065] 作为一个具体示例,如图4所示,数据预处理单元Pre_Pt用于对第一输入矩阵M1的数据进行预处理生成控制信号,则该数据预处理单元Pre_P可以包括以列向量方式设置的M个零检测控制模块Z_Det,每个零检测控制模块Z_Det用于读取第一输入矩阵M1的对应行的数据,并对应一行计算单元,从而可以利用每个零检测控制模块Z_Det控制对应行的计算单元的工作状态。
[0066] 相应的,数据预处理单元Pre_Pt用于对第二输入矩阵M2的数据进行预处理生成控制信号时,则该数据预处理单元Pre_Pt可以包括以行向量方式排列的N个零检测控制模块Z_Det,每个零检测控制模块Z_Det用于接收第二输入矩阵M2的对应列的数据,并对应一列计算单元,从而可以利用每个零检测控制模块Z_Det控制对应列的计算单元的工作状态。
[0067] 下文将以一个具体示例对本公开的计算装置在执行矩阵乘运算的过程进行详细说明。
[0068] 如图5所示,第一输入矩阵M1大小为2×3,第二输入矩阵M2大小为3×2,得到输出矩阵M大小为2×2。
[0069] 如图6所示,为了满足图5所示的第一输入矩阵M1和第二输入矩阵M2之间的乘运算,计算装置可以采用2×2的计算单元阵列,即该计算单元阵列包括计算单元PU0,0,PU0,1,PU1,0和PU1,1。数据预处理单元Pre_P包括与第一输入矩阵M1的行数相同数量的以列向量方式排列的两个零检测控制模块Z_Det,每个零检测控制模块Z_Det用于读取第一输入矩阵M1的一行数据,并控制对应行的计算单元的工作状态。
[0070] 在读取的第一输入矩阵M1的数据为零时,对应于该零数据的零检测控制模块Z_Det会生成一个控制信号D_Rx=“0”,在第一输入矩阵M1的数据为非零时,相应的零检测控制模块Z_Det会生成一个控制信号C_Rx=“1”,其中x代表数据在第一输入矩阵M1的行数。
[0071] 如图7a所示,在第一次计算时,第一输入矩阵M1第0列中每一个数据会分别被送到数据预处理单元Pre_P中对应的零检测控制模块Z_Det,零检测模块会根据数据的值是否为零来生成控制信号。由于第一输入矩阵M1第0列第0行的数据为1,与该数据对应的零检测控制模块Z_Det生成的控制信号C_Rx=“1”,该控制信号指示与该数据对应的那一行计算单元的每一个都执行计算,且此元素的数据将会被送到那一行计算单元中。由于M1第0列第1行的数据为0,与数据对应的零检测控制模块Z_Det生成的控制信号D_Rx=“0”,该控制信号指示与数据对应的那一行计算单元的每一个计算单元都将不执行计算,且此数据将不会被送到那一行计算单元中。
[0072] 需要说明的是,控制信号的指示方式,还包括:当零检测控制模块生成控制信号后,还可以是一行计算单元到零检测控制模块读取控制信号,并根据控制信号判断是否要从零检测控制模块中读取数据。采用控制信号的哪种指示方式,可以根据实际需要进行确定,在本发明中不做限定,下面均以零检测模块基于控制信号判断对应的一行计算单元是否需要工作,并基于需要执行计算的结果,向一行计算单元发送数据为例,进行描述。
[0073] 如图7b所示,根据控制信号的指示,第0行第0列的计算单元接收第一输入矩阵M1第0行第0列的数据“1”,并读取第二输入矩阵M2的第0行第0列数据“1”,执行1*1的计算得到中间结果1;第0行第1列的计算单元接收到第一输入矩阵M1第0行第0列的数据“1”,读取第二输入矩阵M2的第0行第1列数据“2”,执行1*2的计算得到中间结果2,得到的数据与原来的初始值0相加,从而得到输出矩阵M第0行的中间结果。根据控制信号的指示,图中阴影部分表示的M1的第0列第1行的数据的值是0,所以计算单元阵列的第1行的每一个计算单元都不工作,即不接收数据,不执行计算,因此,输出矩阵第1行的中间结果为初始值不变(0和0)。该中间结果用图中的中间矩阵M_temp表示。
[0074] 如图7c所示,在进行第二次计算时,由于第一输入矩阵M1的第1列第0行和第1行中的数据都是0,那么这两个数据对应的两行计算单元都不工作,而输出矩阵的中间结果保持不变,如图7d所示。具体计算过程参照图7a和7b的描述。
[0075] 如图7e所示,在进行第三次计算时,第一输入矩阵M1中第2列中每一个数据会分别被送到数据预处理单元Pre_P中对应的零检测控制模块Z_Det,零检测模块会根据数据的值是否为零来生成控制信号。由于第一输入矩阵M1的第2列第0行数据值是0,与该数据对应的零检测控制模块Z_Det生成的控制信号D_Rx=“0”,该控制信号指示与该数据对应的那一行计算单元的每一个都不执行计算,且此数据将不会被送到那一行计算单元中,所以计算单元阵列的第0行不执行计算,输出矩阵第0行的中间结果保持不变(1和2)。由于第一输入矩阵M1中第2列的第1行数据值为“2”,与该数据对应的零检测控制模块Z_Det生成的控制信号C_Rx=“1”,该控制信号指示与该数据对应的那一行计算单元的每一个都执行计算,且此元素的数据将会被送到那一行计算单元中,具体来说,根据控制信号的指示,第1行第0列的计算单元接收第一输入矩阵M1第1行第2列的数据“2”,并读取第二输入矩阵M2的第2行第0列的数据“1”,执行2*1的计算得到中间结果2,得到的数据与上一次计算的数据“0”相加,从而得到输出矩阵M的第1行第0列的输出结果“2”;第1行第1列的计算单元接收到第一输入矩阵M1的第1行第2列的数据“2”,读取第二输入矩阵M2的第2行第1列的数据“2”,执行2*2的计算得到中间结果4,得到的数据与上一次计算的数据“0”相加,得到输出矩阵M第1行第2列输出结果“4”,如图7f所示,矩阵计算完成,最后将输出矩阵的结果写入存储区,作为最后的计算结果。
[0076] 下面,将参考图8描述根据本公开另一实施例的一种计算方法。
[0077] 如图8所示,一种计算方法S100,该计算方法S100可以适用于前文记载的计算装置,下文未提及的相关内容可以参考前文相关记载,在此不作赘述。该计算方法S100包括:
[0078] S110、读取输入矩阵的数据。
[0079] S120、根据所述数据生成控制信号,其中,所述控制信号指示对所述数据执行计算的计算单元的工作状态。
[0080] 本实施例的计算方法,根据输入矩阵的数据生成控制信号并利用该控制信号控制对应的计算单元的工作状态,例如,可以在数据数值为零时,控制计算单元不工作,在数据数值为非零时,控制计算单元工作,从而可以有效的降低矩阵运算中的能耗,降低芯片工作的温度,进而降低板级设计中散热设计的难度和成本,达到节省能源的目的。
[0081] 在可选地一些实施方式中,所述根据所述数据生成控制信号,其中,所述控制信号指示对所述数据执行计算的计算单元的工作状态,包括:
[0082] 在所述数据的数据值为第一预设值时,生成第一控制信号,所述第一控制信号指示对所述数据执行计算的所有所述计算单元执行计算;或,
[0083] 在所述数据的数据值为第二预设值时,生成第二控制信号,所述第二控制信号指示对所述数据执行计算的所有所述计算单元不执行计算。
[0084] 在可选地一些实施方式中,所述第一预设值为非零值,所述第二预设值为零值。
[0085] 在可选地一些实施方式中,所述控制信号指示对所述数据执行计算的计算单元的工作状态,包括:
[0086] 所述控制信号指示与所述数据对应行的所有所述计算单元或对应列的所有所述计算单元的工作状态。
[0087] 本公开的另一个方面,提供一种电子设备,包括:至少一个如前文记载的计算装置;
[0088] 存储单元,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个计算装置执行时,能使得所述一个或多个计算装置实现根据前文记载的计算方法。
[0089] 本公开的另一个方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时能实现根据前文记载的所述的计算方法。
[0090] 其中,计算机可读介质可以是本公开的装置、设备、系统中所包含的,也可以是单独存在。
[0091] 其中,计算机可读存储介质可是任何包含或存储程序的有形介质,其可以是电、磁、光、电磁、红外线、半导体的系统、装置、设备,更具体的例子包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、光纤、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件,或它们任意合适的组合。
[0092] 其中,计算机可读存储介质也可包括在基带中或作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码,其具体的例子包括但不限于电磁信号、光信号,或它们任意合适的组合。
[0093] 本公开的另一个方面,提供一种计算机程序,所述计算机程序被处理器执行时能实现根据前文记载的所述的计算方法。
[0094] 可以理解的是,计算机程序可以存储于计算机存储介质中,如前文记载的随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)等等。
[0095] 可以理解的是,以上实施方式仅仅是为了说明本公开的原理而采用的示例性实施方式,然而本公开并不局限于此。对于本领域内的普通技术人员而言,在不脱离本公开的精神和实质的情况下,可以做出各种变型和改进,这些变型和改进也视为本公开的保护范围。