CN115859011B - 矩阵运算方法、装置及单元、电子设备 - Google Patents

矩阵运算方法、装置及单元、电子设备 Download PDF

Info

Publication number
CN115859011B
CN115859011B CN202211445382.XA CN202211445382A CN115859011B CN 115859011 B CN115859011 B CN 115859011B CN 202211445382 A CN202211445382 A CN 202211445382A CN 115859011 B CN115859011 B CN 115859011B
Authority
CN
China
Prior art keywords
matrix
target
mask
self
attention
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
CN202211445382.XA
Other languages
English (en)
Other versions
CN115859011A (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.)
Shanghai Tiantian Smart Core Semiconductor Co ltd
Original Assignee
Shanghai Tiantian Smart Core Semiconductor 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 Shanghai Tiantian Smart Core Semiconductor Co ltd filed Critical Shanghai Tiantian Smart Core Semiconductor Co ltd
Priority to CN202211445382.XA priority Critical patent/CN115859011B/zh
Publication of CN115859011A publication Critical patent/CN115859011A/zh
Application granted granted Critical
Publication of CN115859011B publication Critical patent/CN115859011B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本申请实施例提供一种矩阵运算方法、装置及单元、电子设备。其中,矩阵运算方法应用于矩阵运算单元,该方法包括:获取矩阵运算指令,矩阵运算指令包括掩码,掩码用于指示待运算的目标矩阵中的元素的运算参与范围;根据掩码所指示的运算参与范围,对目标矩阵中的元素执行矩阵运算指令对应的运算,获得矩阵运算结果。该方法通过在矩阵运算指令中加入掩码,使得矩阵运算单元在对目标矩阵中的元素执行矩阵运算指令对应的运算时,可以根据掩码所指示的运算参与范围进行有选择的、精细的运算,从而能够提高矩阵运算的效率,并降低矩阵运算单元进行矩阵运算时的功耗。

Description

矩阵运算方法、装置及单元、电子设备
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种矩阵运算方法、装置及单元、电子设备。
背景技术
矩阵运算在通用计算、高性能计算、图形学、人工智能等领域扮演着核心的角色,很多复杂的算法最终都能转换为基本的矩阵运算,因此如何高效低功耗进行矩阵运算显得尤为重要。然而,目前的硬件单元在进行矩阵运算时,通常只是严格地按照矩阵运算的数学定义进行计算,而不考虑其中是否存在一些对于实际应用而言无效的计算,导致矩阵运算的效率不高,而且硬件功耗也难以降低。
发明内容
本申请实施例的目的在于提供一种矩阵运算方法、装置及单元、电子设备,以改善上述技术问题。
为实现上述目的,本申请提供如下技术方案:
第一方面,本申请实施例提供一种矩阵运算方法,应用于矩阵运算单元,所述矩阵运算单元为硬件单元,所述方法包括:获取矩阵运算指令,所述矩阵运算指令包括掩码,所述掩码用于指示待运算的目标矩阵中的元素的运算参与范围;根据所述掩码所指示的运算参与范围,对所述目标矩阵中的元素执行所述矩阵运算指令对应的运算,获得矩阵运算结果。
上述方法通过在矩阵运算指令中加入掩码,使得矩阵运算单元在对目标矩阵中的元素执行矩阵运算指令对应的运算时,可以根据掩码所指示的运算参与范围进行有选择的、精细的运算(例如,某些元素需要参与运算,某些元素的运算可以直接跳过等)。从而,有利于排除掉矩阵运算中存在的一些对于实际应用而言无效的计算,因此能够提高矩阵运算的效率,并降低矩阵运算单元进行矩阵运算时的功耗。
在第一方面的一种实现方式中,所述矩阵运算指令为线程组或线程束级别的指令。
线程组或线程束级别的指令是指由一批线程共同完成矩阵运算,这些线程共享矩阵数据,难以精确地区分每个线程到底负责目标矩阵中哪块区域的运算,但由于本申请方法中掩码是针对目标矩阵中的元素设置的,而并非是针对线程设置的,所以对于矩阵运算指令为线程组或线程束级别的指令的情况,仍然能够很好地控制矩阵运算的范围。
在第一方面的一种实现方式中,所述矩阵运算指令为矩阵乘法指令,所述目标矩阵包括待相乘的目标左矩阵和目标右矩阵;所述掩码包括以下至少一种:针对所述目标左矩阵的行设置的第一掩码、针对所述目标右矩阵的列设置的第二掩码、以及针对所述目标左矩阵的列和所述目标右矩阵的行设置的第三掩码。
对于矩阵乘法而言,一个元素要么位于目标左矩阵中,其位置可以根据目标左矩阵的行和目标左矩阵的列唯一确定,要么位于目标右矩阵中,其位置可以根据目标右矩阵的行和目标右矩阵的列唯一确定,而目标左矩阵的列和目标右矩阵的行是一一对应的(否则两个矩阵无法相乘),因此至多通过上述三种掩码可以有效描述目标左矩阵和目标右矩阵中的任意一个元素的运算参与范围,从而对矩阵乘法运算进行精细的控制。
在第一方面的一种实现方式中,所述掩码包括所述第一掩码、所述第二掩码以及所述第三掩码,所述第一掩码用于指示所述目标左矩阵中的每行是否为参与矩阵乘法运算的候选行,所述第二掩码用于指示所述目标右矩阵中的每列是否为参与矩阵乘法运算的候选列,所述第三掩码用于指示所述目标左矩阵中的每列是否为参与矩阵乘法运算的候选列,以及该列在所述目标右矩阵中对应的行是否为参与矩阵乘法运算的候选行;所述根据所述掩码所指示的运算参与范围,对所述目标矩阵中的元素执行所述矩阵运算指令对应的运算,获得矩阵运算结果,包括:对所述目标左矩阵中属于所述第一掩码所指示的候选行、且属于所述第三掩码所指示的候选列中的元素,以及所述目标右矩阵中属于所述第二掩码所指示的候选列、且属于所述第三掩码所指示的候选行中的元素执行矩阵乘法运算,获得所述矩阵运算结果。
在上述实现中,利用第一掩码和第三掩码之间的逻辑与关系,可以精确筛选出目标左矩阵中需要参与矩阵乘法运算的元素,利用第二掩码和第三掩码之间的逻辑与关系,可以精确筛选出目标右矩阵中需要参与矩阵乘法运算的元素,从而结合第一掩码、第二掩码和第三掩码可以对矩阵乘法运算进行精细的控制,避免其中一些对于实际应用而言无效的运算,因此能够提高矩阵乘法运算的效率,并降低矩阵运算单元进行矩阵乘法运算时的功耗。
在第一方面的一种实现方式中,原始左矩阵和原始右矩阵为待相乘的两个矩阵,所述目标左矩阵为所述原始左矩阵按照第一目标尺寸的整数倍进行分割后产生的矩阵,所述第一目标尺寸为符合所述矩阵乘法指令的运算要求的左矩阵尺寸,所述目标右矩阵为所述原始右矩阵按照第二目标尺寸的整数倍进行分割后产生的矩阵,所述第二目标尺寸为符合所述矩阵乘法指令的运算要求的右矩阵尺寸,所述第一目标尺寸的列数等于所述第二目标尺寸的行数;所述第一掩码用于指示所述目标左矩阵中的每行是否来源于所述原始左矩阵,若来源于所述原始左矩阵,则该行为参与矩阵乘法运算的候选行,否则不是参与矩阵乘法运算的候选行;所述第二掩码用于指示所述目标右矩阵中的每列是否来源于所述原始右矩阵,若来源于所述原始右矩阵,则该列为参与矩阵乘法运算的候选列,否则不是参与矩阵乘法运算的候选列;所述第三掩码用于指示所述目标左矩阵中的每列是否来源于所述原始左矩阵,以及该列在所述目标右矩阵中对应的行是否来源于所述原始右矩阵,若该列来源于所述原始左矩阵且该列对应的行来源于所述原始右矩阵,则该列为参与矩阵乘法运算的候选列且该列对应的行为参与矩阵乘法运算的候选行,否则该列不是参与矩阵乘法运算的候选列且该列对应的行不是参与矩阵乘法运算的候选行。
在上述实现方式中,为执行矩阵乘法指令,需要将原始左矩阵按照第一目标尺寸分割为若干个第一目标尺寸的目标左矩阵,由于原始左矩阵的尺寸不一定恰好是第一目标尺寸的整数倍,因为分割后可能会存在部分目标左矩阵中的部分行和/或列(不属于原始左矩阵的和/或列)需要填充数据的情况,但无论填充何种数据,这部分行和/或列中的元素都是无需参与矩阵乘法运算的。通过设置第一掩码和第三掩码,可以将这部分行和/或列中的元素从矩阵乘法运算中排除,只对目标左矩阵中剩余的元素进行矩阵乘法运算,从而有利于提高矩阵乘法运算的效率,并降低矩阵运算单元进行矩阵乘法运算时的功耗,而且也不会影响矩阵乘法运算的结果。对于目标右矩阵,也可以类似分析。
在第一方面的一种实现方式中,所述目标左矩阵为自注意力运算中的查询矩阵或所述查询矩阵分割后产生的矩阵,所述目标右矩阵为自注意力运算中的键值矩阵的转置矩阵或所述键值矩阵的转置矩阵分割后产生的矩阵,所述目标左矩阵和所述目标右矩阵中均包括至少一个自注意力运算窗口,且所述目标左矩阵和所述目标右矩阵中包括的自注意力运算窗口相同;所述掩码包括所述第一掩码以及所述第二掩码,所述第一掩码用于指示所述目标左矩阵中的每行所属的自注意力运算窗口,所述第二掩码用于指示所述目标右矩阵中每列所属的自注意力运算窗口;所述根据所述掩码所指示的运算参与范围,对所述目标矩阵中的元素执行所述矩阵运算指令对应的运算,获得矩阵运算结果,包括:根据所述第一掩码以及所述第二掩码确定属于同一自注意力运算窗口的所述目标左矩阵中的行以及所述目标右矩阵中的列;对属于同一自注力运算意窗口的所述目标左矩阵中的行中的元素、以及所述目标右矩阵中的列中的元素执行矩阵乘法运算,获得所述矩阵运算结果。
在上述实现方式中,自注意力运算(核心是查询矩阵和键值矩阵的转置矩阵的矩阵乘法运算)要求只在各个自注意力运算窗口内部进行,不应跨自注意力运算窗口进行。利用第一掩码和第二掩码之间的逻辑同或关系,可以精确筛选出属于同一自注意力运算窗口的目标左矩阵中的行以及目标右矩阵中的列,从而可以能够很好地将自注意力运算限制在自注意力运算窗口内,避免进行跨自注意力运算窗口的无效运算,从而有利于提高自注意力运算的效率,并降低矩阵运算单元进行自注意力运算时的功耗。
在第一方面的一种实现方式中,在所述查询矩阵中,属于相同自注意力运算窗口的行被整理为连续排列的行;和/或,在所述键值矩阵的转置矩阵中,属于相同自注意力运算窗口的列被整理为连续排列的列。
在上述实现方式中,将查询矩阵和/或键值矩阵的转置矩阵中属于相同自注意力运算窗口的元素整理在一起,使得属于相同自注意力运算窗口的矩阵元素能够集中进行运算,从而有利于减少生成的矩阵乘法指令的数量,或者,即使是在不减少矩阵乘法指令的数量的情况下,也有利于简化矩阵乘法运算的过程,提高矩阵乘法指令的执行效率。
第二方面,本申请实施例提供一种矩阵运算装置,配置于矩阵运算单元,所述矩阵运算单元为硬件单元,所述装置包括:指令获取模块,用于获取矩阵运算指令,所述矩阵运算指令包括掩码,所述掩码用于指示待运算的目标矩阵中的元素的运算参与范围;指令执行模块,用于根据所述掩码所指示的运算参与范围,对所述目标矩阵中的元素执行所述矩阵运算指令对应的运算,获得矩阵运算结果。
第三方面,本申请实施例提供一种矩阵运算单元,用于执行第一方面或第一方面的任意一种可能的实现方式提供的方法。
第四方面,本申请实施例提供一种电子设备,包括如第三方面所述的矩阵运算单元。
第五方面,本申请实施例提供一种计算机程序产品,包括计算机程序指令,所述计算机程序指令被矩阵运算单元执行时,实现如第一方面或第一方面的任意一种可能的实现方式提供的方法。
第六方面,本申请实施例提供一种存储介质,所述存储介质上存储有计算机程序指令,所述计算机程序指令被矩阵运算单元执行时,实现如第一方面或第一方面的任意一种可能的实现方式提供的方法。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了矩阵在分割过程中产生的填充数据;
图2示出了在神经网络中连续的自注意力层之间进行窗口移动的过程;
图3~图5示出了神经网络中的自注意力层基于移动后的窗口进行自注意力运算的过程;
图6示出了本申请实施例提供的矩阵运算方法可能包含的步骤;
图7中的(A)~(D)示出了矩阵运算方法中的掩码在矩阵分割场景下的设置及应用;
图8示出了矩阵运算方法中的掩码在自注意力运算场景下的设置及应用;
图9示出了在进行自注意力运算前通过数据整理减少需生成的矩阵运算指令的例子;
图10示出了本申请实施例提供的矩阵运算装置可能包含的功能模块。
具体实施方式
目前的硬件单元在进行矩阵运算时,通常只是严格地按照矩阵运算的数学定义进行计算(例如,矩阵的乘法、加法、求逆等运算都有严格的数学公式可以遵循),而不考虑其中是否存在一些对于实际应用而言无效的计算,导致矩阵运算的效率不高,而且硬件功耗也难以降低。下面通过两个关于矩阵运算的不同场景中例子说明这一问题:
例1:矩阵分割场景
硬件单元通过执行矩阵运算指令进行矩阵运算,然而由于硬件计算能力的限制,矩阵运算指令所能处理的矩阵尺寸是固定的,例如,只支持进行M×K(行×列,后文均按此表示)的左矩阵和K×N的右矩阵之间的矩阵乘法运算,其中,M、K、N均为正整数。但是在开发应用程序时,通常不会考虑底层的矩阵运算指令是如何设计的,只会根据实际业务的需求编写矩阵运算的代码,例如,应用程序中可能需要进行P×R的左矩阵A和R×Q的右矩阵B之间的矩阵乘法运算,其中,P、R、Q均为正整数,为便于说明问题,假设P>M、R>K且Q>N,实际中这3个大于条件只有一个或两个满足,甚至都不满足也可以。
显然,单一的矩阵运算指令无法对矩阵A和矩阵B进行运算,因此只能对这两个矩阵进行拆分后再运算。例如,可以将矩阵A拆分为 个M×K的左矩阵,以及,将矩阵B拆分为/>个K×N的右矩阵,然后生成多条矩阵指令对拆分后产生左右矩阵进行矩阵乘法运算,再汇总这些运算结果,最终得到矩阵A和矩阵B的矩阵乘法运算结果,其中,符号/>表示上取整运算。
然而,由于P不一定恰好是M的整数倍,R不一定恰好是K的整数倍,Q也不一定恰好是N的整数倍,为简单起见,以三者都不是整数倍的情况为例,上取整运算会导致矩阵A分割产生的左矩阵中,至少部分左矩阵需要填充数据(否则分割结果不是M×K的矩阵),填充量为P维度上填充行,R维度上填充/>列,同时,会导致矩阵B分割产生的右矩阵中,至少部分右矩阵需要填充数据(否则分割结果不是K×N的矩阵),填充量为R维度上填充/>行,Q维度上填充/>列。
在分割产生的矩阵中具体填充何种数据不限,例如,可以填充0,也可以填充随机值,等等。填充完数据后,所有分割产生的左矩阵尺寸都是M×K,所有分割产生的右矩阵尺寸都是K×N,从而可以执行矩阵运算指令对应的矩阵乘法运算。
图1示出在上述分割过程中产生的填充数据。参照图1,由于矩阵A的列数量和矩阵B的行数量都是R,且在矩阵乘法中二者是一一对应的,所以为简单起见,将矩阵A和B画在一起,形成图1中的一个P×R×Q的长方体(该长方体的边用虚线示出),而矩阵运算指令所支持处理的M×K的左矩阵和K×N的右矩阵也被画在一起,形成图1中的一个M×K×N的长方体。
在图1中,假定满足关系则P×R×Q的长方体可以被划分为2×2×2=8个M×K×N的长方体,也就是矩阵A可以被划分为4个M×K的左矩阵,且矩阵B可以被划分为4个K×N的右矩阵。
进一步的,8个M×K×N的长方体共同构成了一个 的更大的长方体,该长方体在P、R、Q三个维度上都超过P×R×Q的长方体,超出的部分也就是要填充数据的部分,在图1中以灰色示出。具体而言,需要在原长方体的P维度上填充2M-P行,R维度上填充2K-R列(或者说行),Q维度上填充2N-Q列,填充的数据最终将添加到分割产生的左矩阵和右矩阵中。
对于矩阵中的填充数据,由于其完全是由于矩阵分割产生的,并不是原来A矩阵和B矩阵中真实存在的数据,因此对其进行矩阵乘法运算是无意义的,应用程序也不需要填充数据对应的运算结果。然而,发明人研究后发现,目前的硬件单元在针对包含填充数据的矩阵执行矩阵乘法运算时,并不会区分其中的填充数据和非填充数据,直到后期才会将基于填充数据算出的结果排除掉,这种做法只会降低矩阵运算指令的执行效率,并造成硬件单元的功耗增加。
例2:自注意力运算场景
目前在图像处理中,大量使用神经网络执行各类任务,比如图像分类、目标检测、图像分割等任务。以图像分类任务为例,可以利用主干网络提取输入图像的特征,然后基于提取到的特征,利用分类网络给出分类结果。
为提高主干网络特征提取能力,一些主干网络中引入了自注意力机制(其原理可以参考现有技术,此处不详细解释),然而,自注意力运算的复杂度可达输入图像尺寸的平方量级。为降低运算复杂度,一些改进方案提出了基于窗口的自注意力运算。
参照图2,第L层和第L+1层为主干网络中连续的两个自注意力层(即会进行自注意力运算的网络层),图2左侧8×8(以灰色小方格为单位)的特征图可以视为第L层的输入,该特征图被划分为4个自注意力运算窗口,每个窗口尺寸为4×4,自注意力运算只应在特征图的这4个窗口内部进行,而不应跨窗口进行,使得运算复杂度可以与输入图像的尺寸维持线性关系。
进一步的,如果只进行第L层中的注意力运算,则各个窗口中的数据缺乏交互,使得提取到的特征表达能力较弱。为改善这一问题,又加入了第L+1层,并在第L层和第L+1层之间进行窗口移动。
继续参照图2,由于第L层只在自注意力运算窗口内部进行运算,因此其输出特征图可以认为和图2左侧形状相同,仍然分为4个窗口。现在将窗口的位置向右下方移动2个单位,得到划分有9个窗口的特征图,将此特征图作为第L+1层的输入特征图,如图2右侧所示。
需要注意的是,在该步骤中,移动的只是自注意力运算窗口的位置,特征图本身并未移动,比如在图2中,特征图中的树木、房屋的位置并未发生变化;或者也可以这样理解,窗口和特征图位于两个图层,窗口图层的移动并不影响特征图图层,但移动后可能改变特征图中窗口的个数、位置以及划分方式等。
在第L+1层中,自注意力运算将只在输入特征图的9个窗口内部进行,但由于这9个窗口可视为原先4个窗口的重组,从而在第L+1层中进行的自注意力运算实际上使得第L层的4个窗口中的数据产生了交互,从而有利于提高提取到的特征的表达能力。例如,第L+1层中心的4×4窗口,是第L层的4个窗口各贡献一个2×2的小块形成的,相当于使得第L层的4个窗口中的数据产生了交互。
进一步的,由于窗口个数从4增加到9,如果在第L+1层中直接进行9个窗内的自注意力运算,其计算复杂度相对于第L层会明显增加,为了解决这一问题,可以将第L+1层的输入特征图中位于9个窗口内的部分向右下方循环位移2个单位,注意,和上面只移动窗口不同,这里要切实移动特征图的位置。如果将第L+1层的输入特征图中的9个自注意力运算窗口依次编号为1~9,则循环位移的效果如图3最上方所示。循环位移的步骤既可以在第L+1层内部进行,也可以在特征图输入第L+1层之前就进行(为简单起见,仍然将位移前的特征图称为第L+1层的输入特征图)。
对于循环位移后的特征图,可以重新将其划分为4个窗口,其中,左上角的窗口包括原来的5号窗口,右上角的窗口包括原来的6号和4号窗口,左下角的窗口包括原来的8号和2号窗口,右下角的窗口包括原来的9号、7号、3号和1号窗口,如图3最上方所示。
从而,第L+1层后续的自注意力运算可以在划分出的4个新窗口内进行,但需要注意,实际的自注意力运算窗口仍然是1~9号窗口,新的4个窗口只是为了提高运算效率产生的,因此在新窗口内部进行的自注意力运算时,实际上仍然不应跨1~9号窗口进行。比如,对于右上角的新窗口,位于6号窗口内的数据仍然只应和6号窗口内的数据进行自注意力运算,位于4号窗口内的数据仍然只应和4号窗口内的数据进行自注意力运算,位于6号窗口内的数据不应和4号窗口内的数据进行自注意力运算。
图3下半部分示出了在4个新窗口内进行自注意力运算的过程。先看左上角的新窗口,将该窗口对应的特征图分成相同的4块(每块相当于图2中2×2的小块),按从左到右从上到下的顺序依次取出这4块并纵向排列,可以形成自注意力运算的查询矩阵(Query矩阵,简称Q矩阵),而将这4块横向排列,则可以形成自注意力运算的键值矩阵(Key矩阵,简称K矩阵)的转置矩阵(简称KT矩阵),将该Q矩阵与该KT矩阵相乘后(图3中矩阵乘法记为matmul),可以得到左上角的新窗口对应的自注意力运算结果。其中,Q矩阵与KT矩阵的矩阵乘法运算就是所谓的自注意力运算(严格来说,是自注意力运算的一部分),注意,例2中的Q和K分别是Query和Key的缩写,和例1中的Q和K无关。
由于左上角的新窗口只包含了原来5号窗口内的数据,因此,Q矩阵中每一行都可以和KT矩阵中的每一列进行运算,最终得到的运算结果也铺满了整个结果矩阵,用数字“5”表示(表明是5号窗口中的数据算出来的)。
第L+1层的输入特征图在左上角的新窗口内进行自注意力运算时,其通道维度的处理方式如图4所示,图4左侧表示输入特征图在左上角的新窗口内的部分,数字“5”表示5号窗口,图4与图3的区别只在于图3并未示出通道维度的情况。图4中的黑色小圆圈、白色小圆圈、黑色小方块、白色小方块代表特征图中的4个像素,在考虑通道维度时,这4个像素实际是4个一维向量(向量在图4左侧表示为沿通道维度延伸的直线),在Q矩阵中,将这4个向量按行方向展开,在KT矩阵中,将这4个向量按列方向展开。
对于图3中另外3个新窗口内的自注意力运算可以类似分析,下面只进行简单阐述:
对于右上角的新窗口,Q矩阵中的2个6号窗口块只应和KT矩阵中的2个6号窗口块进行运算,Q矩阵中的2个4号窗口块只应和KT矩阵中的2个4号窗口块进行运算,又由于在Q矩阵和KT矩阵中,6号窗口块和4号窗口块是交错排列的,因此得到的运算结果是棋盘式的8个小块。运算结果中的数字“6”所在的小块表明该块内的数据是Q矩阵和KT矩阵中的6号窗口块算出来的,运算结果中的数字“4”所在的小块表明该块内的数据是Q矩阵和KT矩阵中的4号窗口块算出来的,未标数字的位置表示该位置的运算结果无效,可以置为0。
对于左下角的新窗口,Q矩阵中的8号窗口块只应和KT矩阵中的8号窗口块进行运算,Q矩阵中的2号窗口块只应和KT矩阵中的2号窗口块进行运算,又由于在Q矩阵和KT矩阵中,8号窗口块和2号窗口块分布比较集中,因此得到的运算结果是呈对角线排列的2个较大的块。运算结果中的数字“8”所在的较大块表明该块内的数据是Q矩阵和KT矩阵中的8号窗口块算出来的,运算结果中的数字“2”所在的较大块表明该块内的数据是Q矩阵和KT矩阵中的2号窗口块算出来的,未标数字的位置表示该位置的运算结果无效,可以置为0。
对于右下角的新窗口,Q矩阵中的9号窗口块只应和KT矩阵中的9号窗口块进行运算,Q矩阵中的7号窗口块只应和KT矩阵中的7号窗口块进行运算,Q矩阵中的3号窗口块只应和KT矩阵中的3号窗口块进行运算,Q矩阵中的1号窗口块只应和KT矩阵中的1号窗口块进行运算,又由于在Q矩阵和KT矩阵中,9号窗口块、4号窗口块、7号窗口、3号窗口块各只有一个且均为小块,因此得到的运算结果是呈对角线排列的4个小块。运算结果中的数字“9”所在的小块表明该块内的数据是Q矩阵和KT矩阵中的9号窗口块算出来的,运算结果中的数字“7”所在的小块表明该块内的数据是Q矩阵和KT矩阵中的7号窗口块算出来的,运算结果中的数字“3”所在的小块表明该块内的数据是Q矩阵和KT矩阵中的3号窗口块算出来的,运算结果中的数字“1”所在的小块表明该块内的数据是Q矩阵和KT矩阵中的1号窗口块算出来的,未标数字的位置表示该位置的运算结果无效,可以置为0。
在完成了4个新窗口内的自注意力运算后,可以将运算结果汇总起来,如图5中的矩阵所示。但由于图5中的矩阵是第L+1层的输入特征图循环位移后算出的结果,所以还要将该结果反循环位移(例如,向左上方循环位移2个单位)才能得到最终的运算结果。
发明人分析发现,目前的硬件单元在执行图3中的自注意力运算时,并不会区分Q矩阵和KT矩阵中不同的自注意力运算窗口,直到运算完成后才会通过某些方法将运算结果中由来自不同窗口的数据算出的结果置零。然而,来自不同自注意力运算窗口的数据其实不应参与自注意力运算,对其进行自注意力运算只会降低矩阵运算指令的执行效率,并造成硬件单元的功耗增加。
本申请提出的矩阵运算方法、装置及单元、电子设备通过在矩阵运算指令中加入掩码对矩阵运算的范围进行精准控制,有利于排除掉矩阵运算中存在的一些对于实际应用而言无效的计算,因此能够提高矩阵运算的效率,并降低矩阵运算单元进行矩阵运算时的功耗。对于上述两个例子中的技术问题,本申请的某些实施例也能够提供对应的解决方案。
需要指出,除了本申请实施例提出的新方案之外,针对上述两个例子中技术问题的分析,也属于发明人的对本申请方案的贡献,而非现有技术中业已存在的内容。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
图6示出了本申请实施例提供的矩阵运算方法可能包含的步骤。该方法可由矩阵运算单元执行,矩阵运算单元为硬件单元,例如可以是擅长执行矩阵运算的硬件单元,比如图形处理器(Graphics Processing Unit,简称GPU)、现场可编程门阵列(FieldProgrammable Gate Array,简称FPGA)、设计有用于矩阵运算的协处理器或单元的中央处理器(Central Processing Unit,简称CPU),等等。另外需要注意,矩阵运算单元不一定只能进行矩阵运算,例如,矩阵运算单元可能只是在执行某一段程序的过程中需要进行矩阵运算。参照图1,矩阵运算方法包括:
步骤S110:获取矩阵运算指令。
矩阵运算单元可以从本地存储中读取矩阵运算指令(例如,GPU可以从GPU内存中读取矩阵运算指令),也可以从外部接收矩阵运算指令。矩阵运算指令可以包括操作指令以及掩码,但不排除还包括其他信息。
其中,操作指令用于指示矩阵运算指令对应的运算,例如矩阵乘法运算、矩阵加法运算、矩阵求逆运算等,后文主要以矩阵乘法运算为例。此外,操作指令还可以用于指示矩阵运算指令的操作数,即待运算的矩阵,后文中称为目标矩阵,例如,对于矩阵乘法运算而言,目标矩阵就是要相乘的两个矩阵,对于加法运算那而言,目标矩阵就是要相加的两个矩阵,等等。目标矩阵也可以保存在矩阵运算单元的本地存储中。
掩码用于指示目标矩阵中的元素的运算参与范围,所谓运算参与范围可以包括以下含义中的一项或几项:目标矩阵中的哪些元素要参与矩阵运算(步骤S120中的运算),目标矩阵中的哪些元素不参与矩阵运算,目标矩阵中参与运算的元素要和哪些元素进行运算,目标矩阵中参与运算的元素要不和哪些元素进行运算。掩码在形式上可以是二进制的信息(例如,由01构成的串),但也可以不是二进制的。
另外需要注意的是,可以针对目标矩阵中的每个元素都会设置独立的掩码,也可以目标矩阵中的一批元素(例如,一行、多行、一列、多列等)设置一个公用的掩码。可以针对目标矩阵中的所有元素都设置有掩码,也可以只针对目标矩阵中的部分元素设置有掩码。对于目标矩阵有多个的情况,还可以针对每个目标矩阵设置对应的掩码。
掩码可以在生成矩阵运算指令时确定,因为作为指令生成者,应当清楚矩阵运算要针对目标矩阵中的哪些元素进行,从而可以设置相应的掩码。掩码可以根据实际应用的需求来设置,后文会给出掩码设置的具体例子,此处暂不展开阐述。
步骤S120:根据掩码所指示的运算参与范围,对目标矩阵中的元素执行矩阵运算指令对应的运算,获得矩阵运算结果。
步骤S120即矩阵运算单元执行步骤S110中获取到的矩阵运算指令的过程,通过执行矩阵运算指令中的操作指令,可实现对目标矩阵中的元素的运算,同时在执行操作指令的过程中,需要依照掩码所指示的运算参与范围。
例如,只对目标矩阵中被指示为要参与运算的元素进行运算,对被指示为不参与运算的元素则跳过其运算。比如,对于例1中的情况,可以根据掩码的指示,只对分割后产生的矩阵中的非填充元素进行矩阵乘法运算,对于填充元素(前文称为填充数据)则跳过其运算。
又例如,对于目标矩阵中要参与运算的元素,也不是所有运算(指按照矩阵运算的数学定义其本该进行的运算)都要进行,可以根据运算参与范围的指示,只进行其中部分对于实际应用而言有意义的运算,其余运算则跳过。比如,对于例2中的情况,可以根据掩码的指示,只对Q矩阵和KT矩阵中位于相同的自注意力运算窗口内的元素进行矩阵乘法运算,对Q矩阵和KT矩阵中位于不同的自注意力运算窗口内的元素则跳过其运算。
步骤S120中获得的矩阵运算结果可以是矩阵,可以是向量,可以是数据,取决于矩阵运算指令具体进行何种的矩阵运算,对此本申请并不限定。
总结来说,图6中的矩阵运算方法通过在矩阵运算指令中加入掩码,使得矩阵运算单元在对目标矩阵中的元素执行矩阵运算指令对应的运算时,可以根据掩码所指示的运算参与范围进行有选择的、精细的运算。从而,有利于排除掉矩阵运算中存在的一些对于实际应用而言无效的计算,因此能够提高矩阵运算的效率,并降低矩阵运算单元进行矩阵运算时的功耗。
在一种实现方式中,矩阵运算方法中使用的矩阵运算指令为线程组(group)或线程束(warp)级别的指令,而非线程(thread)级别的指令。矩阵运算指令为线程组或线程束级别的指令,意思是由一批线程共同完成指令对应的矩阵运算,这些线程共享目标矩阵的数据,但难以精确地区分每个线程到底负责目标矩阵中哪块区域的运算。因此,对于这种情况,若针对每个线程设置掩码,并不能实现对矩阵运算的范围进行精确控制。但在于本申请提出的矩阵运算方法中,掩码是针对目标矩阵中的元素设置的,而并非是针对单个线程设置的,所以对于矩阵运算指令为线程组或线程束级别的指令的情况,仍然能够精确地控制矩阵运算的范围。
对于矩阵运算指令为矩阵乘法指令的情况,目标矩阵包括待相乘的目标左矩阵和目标右矩阵,若严格按照矩阵乘法的数学定义,目标左矩阵中的元素需要和目标右矩阵中的运算进行乘法和累加运算,得到最终的运算结果(也是一个矩阵),后文中为简单起见,将矩阵相乘时进行的乘法和累加运算称为矩阵乘法运算。下面在此前提下介绍掩码的一些设置方式,对于矩阵运算指令为其他运算的情况,亦可以参考下面提供的掩码设置方式:
在一种实现方式中,矩阵运算指令中的掩码包括以下至少一种:
针对目标左矩阵的行设置的第一掩码,用于指示目标左矩阵的行中的元素的运算参与范围;
针对目标右矩阵的列设置的第二掩码,用于指示目标左矩阵的行中的元素的运算参与范围;
针对目标左矩阵的列和目标右矩阵的行设置的第三掩码,用于指示目标左矩阵的列中的元素和目标右矩阵的行中的元素的运算参与范围。
对于矩阵乘法而言,一个元素要么位于目标左矩阵中,其位置可以根据目标左矩阵的行和目标左矩阵的列唯一确定,要么位于目标右矩阵中,其位置可以根据目标右矩阵的行和目标右矩阵的列唯一确定,而目标左矩阵的列和目标右矩阵的行是一一对应的(否则两个矩阵无法相乘),因此至多通过上述三种掩码可以有效描述目标左矩阵和目标右矩阵中的任意一个元素的运算参与范围,从而对矩阵乘法运算进行精细的控制。
当然,根据需求,以上三个掩码并非要同时实现,例如,若已经事先确定目标右矩阵中的每个元素都会参与矩阵乘法运算,则可以不设置第二掩码和第三掩码,只设置第一掩码。
下面继续介绍上述掩码实现方案(至多设置三种掩码)的一些具体实现方式:
方式1
矩阵乘法指令中的掩码同时包括第一掩码、第二掩码和第三掩码。其中,第一掩码用于指示目标左矩阵中的每行是否为参与矩阵乘法运算的候选行,第二掩码用于指示目标右矩阵中的每列是否为参与矩阵乘法运算的候选列,第三掩码用于指示目标左矩阵中的每列是否为参与矩阵乘法运算的候选列,以及该列在目标右矩阵中对应的行是否为参与矩阵乘法运算的候选行。
其中,目标矩阵的候选行中的元素可能、但不一定会参与矩阵乘法运算(因此称为“候选”),但不是候选行中的元素一定不会参与矩阵乘法运算;同理,目标矩阵的候选列中的元素可能、但不一定会参与矩阵乘法运算,但不是候选列中的元素一定不会参与矩阵乘法运算。
目标矩阵中的每个元素都既具有行维度又具有列维度,若目标矩阵中的某个元素属于一个掩码所指示的候选行,又属于另一个掩码所指示的候选列,则表明该元素确实需要参与矩阵乘法运算(无论从行维度上看还是从列维度上看该元素都属于候选),若目标矩阵中的某个元素不属于一个掩码所指示的候选行和/或不属于另一个掩码所指示的候选列,则表明该元素不需要参与矩阵乘法运算(至少从一个维度上看该元素不属于候选)。即,目标矩阵的一个元素是否需要参加矩阵乘法运算,与该目标矩阵对应的两个掩码所指示的候选行(或列)之间呈现出一种逻辑与的关系。
从而,利用第一掩码和第三掩码之间的逻辑与关系,可以精确筛选出目标左矩阵中需要参与矩阵乘法运算的元素,利用第二掩码和第三掩码之间的逻辑与关系,可以精确筛选出目标右矩阵中需要参与矩阵乘法运算的元素。
因此,步骤S120可以进一步实现为:对目标左矩阵中属于第一掩码所指示的候选行、且属于第三掩码所指示的候选列中的元素,以及目标右矩阵中属于第二掩码所指示的候选列、且属于第三掩码所指示的候选行中的元素执行矩阵乘法运算,获得矩阵运算结果。
可见,结合第一掩码、第二掩码和第三掩码可以对矩阵乘法运算进行精细的控制,避免其中一些对于实际应用而言无效的运算,因此能够提高矩阵乘法运算的效率,并降低矩阵运算单元进行矩阵乘法运算时的功耗。
例如,若目标左矩阵为M×K的矩阵,目标右矩阵为K×N的矩阵,则第一掩码可以是M个bit的串,其中的每个bit表示目标左矩阵中对应的行是否为参与矩阵乘法运算的候选行,比如1表示是候选行,0表示不是候选行,第二掩码可以是N个bit的串,其中的每个bit表示目标右矩阵中对应的列是否为参与矩阵乘法运算的候选列,比如1表示是候选列,0表示不是候选列,第三掩码可以是K个bit的串,其中的每个bit表示目标左矩阵中对应的列是否为参与矩阵乘法运算的候选列,以及该列在目标右矩阵中对应的行是否为参与矩阵乘法运算的候选行,比如1表示该列是候选列且该列对应的行也是候选行,0表示该列不是候选列且该列对应的行也不是候选行。
矩阵运算单元在执行步骤S120时,可以对第一掩码和第三掩码进行与运算,从而得到目标左矩阵中每个元素的运算参与情况,例如,对第一掩码的第2个bit和第三掩码的第5个bit进行与运算,可以得到目标左矩阵中第2行第5列的元素的运算参与情况,与运算结果为1表示需要参与矩阵乘法运算,为0表示不需要参与矩阵乘法运算。同理,可以对第二掩码和第三掩码进行与运算,从而得到目标右矩阵中每个元素的运算参与情况。
进而,矩阵运算单元可以只在目标左矩阵中需要参与矩阵乘法运算的元素和目标右矩阵中需要参与矩阵乘法运算的元素之间进行矩阵乘法运算,对于其余元素的运算一律跳过,从而相较于严格按照矩阵乘法的数学定义进行运算的方式,其运算效率显著提高,硬件功耗显著降低。
注意,上面的例子采用二进制串实现掩码,比较节约掩码的数据量,当然掩码也可以采用其他方式实现,不一定要采用二进制串。
方式1可以和例1中的矩阵分割场景相结合,此时目标左矩阵为原始左矩阵按照第一目标尺寸的整数倍进行分割后产生的矩阵,例如这里的原始左矩阵可以是例1中的矩阵A,其尺寸为P×R,第一目标尺寸为M×K,表示符合矩阵乘法指令的运算要求的左矩阵尺寸,将矩阵A的P维度以M为单位进行分割,R维度以K为单位进行分割,产生个M×K的目标左矩阵,但其中的部分目标左矩阵可能需要填充元素,取决于P是否恰好为M的整数倍以及R是否恰好为K的整数倍。
类似的,目标右矩阵为原始右矩阵按照第二目标尺寸的整数倍进行分割后产生的矩阵,这里的原始右矩阵可以是例1中的矩阵B,其尺寸为R×Q,第二目标尺寸为K×N(第二目标尺寸的行数应等于第一目标尺寸的列数),表示符合矩阵乘法指令的运算要求的右矩阵尺寸,将矩阵B的R维度以K为单位进行分割,Q维度以N为单位进行分割,产生个K×N的目标右矩阵,但其中的部分目标右矩阵可能需要填充元素,取决于R是否恰好为K的整数倍以及Q是否恰好为N的整数倍。
此时,第一掩码、第二掩码、第三掩码可以按照以下规则设置:
第一掩码用于指示目标左矩阵中的每行是否来源于原始左矩阵(来源于的含义稍后解释),若来源于原始左矩阵,则表明该行为参与矩阵乘法运算的候选行,否则不是参与矩阵乘法运算的候选行,即可以实现方式1中指出的“第一掩码用于指示目标左矩阵中的每行是否为参与矩阵乘法运算的候选行”。
其中,目标左矩阵中的某行来源于原始左矩阵,是指目标左矩阵的该行中的元素或者完全取自原始左矩阵,或者至少部分取自原始左矩阵(另一部分为填充)。
例如,原始左矩阵为8×8的矩阵C,第一目标尺寸为5×5,则原始左矩阵可以分割成4个尺寸均为5×5的目标左矩阵C1~C4。
C1=C(1:5,1:5),即矩阵C1取自原始左矩阵左上角5×5的部分,其中第一个1:5表示取C的1~5行,第二个1:5表示取C的1~5列,后面类似的记号不再重复说明;
即矩阵C2取自原始左矩阵左下角3×5的部分,并填充了2行0元素,矩阵O表示一个无限大的全0元素矩阵,这里引入矩阵O只是为了便于表达0元素的填充情况;
C3=[C(1:5,6:8)O(1:5,1:2)],即矩阵C3取自原始左矩阵右上角5×3的部分,并填充了2列0元素;
即矩阵C4取自原始左矩阵右下角3×3的部分,并填充了2行和2列0元素。
按照上面的定义,C1的5行均来源于C,C2只有前3行来源于C,C3的5行均来源于C(尽管这5行元素的后2列是填充的),C4只有前3行来源于C(尽管这3行元素的后2列是填充的)。从而,若第一掩码采用二进制串,则针对C1的第一掩码可以是11111,针对C2的第一掩码可以是11100,针对C3的第一掩码可以是11111,针对C4的第一掩码可以是11100。
第二掩码用于指示目标右矩阵中的每列是否来源于原始右矩阵(来源于的含义稍后解释),若来源于原始右矩阵,则表明该列为参与矩阵乘法运算的候选列,否则不是参与矩阵乘法运算的候选列,即可以实现方式1中指出的“第二掩码用于指示目标右矩阵中的每列是否为参与矩阵乘法运算的候选列”。
其中,目标右矩阵中的某列来源于原始右矩阵,是指目标右矩阵的该列中的元素或者完全取自原始右矩阵,或者至少部分取自原始右矩阵(另一部分为填充)。关于这里“来源于”的含义,可参照前文关于目标左矩阵的例子,不再重复阐述。
第三掩码用于指示目标左矩阵中的每列是否来源于原始左矩阵(来源于的含义稍后解释),以及该列在目标右矩阵中对应的行是否来源于原始右矩阵(的含义稍后解释),若该列来源于原始左矩阵且该列对应的行来源于原始右矩阵,则表明该列为参与矩阵乘法运算的候选列且该列对应的行为参与矩阵乘法运算的候选行,否则该列不是参与矩阵乘法运算的候选列且该列对应的行也不是参与矩阵乘法运算的候选行,即可以实现方式1中指出的“所述第三掩码用于指示目标左矩阵中的每列是否为参与矩阵乘法运算的候选列,以及该列在目标右矩阵中对应的行是否为参与矩阵乘法运算的候选行”。
其中,目标左矩阵中的某列来源于原始左矩阵,是指目标左矩阵的该列中的元素或者完全取自原始左矩阵,或者至少部分取自原始左矩阵(另一部分为填充);目标右矩阵中的某行来源于原始右矩阵,是指目标右矩阵的该行中的元素或者完全取自原始右矩阵,或者至少部分取自原始右矩阵(另一部分为填充)。关于这里“来源于”的含义,可参照前文关于目标左矩阵的例子,不再重复阐述。
结合方式1在步骤S120中对掩码的使用方式可知,通过设置第一掩码和第三掩码,可以将目标左矩阵中填充的元素从矩阵乘法运算中排除,只对目标左矩阵中剩余的、来自原始左矩阵的元素进行矩阵乘法运算,通过设置第二掩码和第三掩码,可以将目标右矩阵中填充的元素从矩阵乘法运算中排除,只对目标右矩阵中剩余的、来自原始右矩阵的元素进行矩阵乘法运算,从而有利于提高矩阵乘法运算的效率,并降低矩阵运算单元进行矩阵乘法运算时的功耗,而且也不会影响矩阵乘法运算的结果。
图7中的(A)~(D)示出了一些掩码在矩阵分割场景下的设置及应用的例子,这几张图中M=3,K=5,N=4:
参照图7中的(A),左下角为目标左矩阵,右上角为目标右矩阵,右下角为二者相乘的结果矩阵,目标左矩阵中,灰色的一行为分割时填充产生的,故第一掩码设置为110(灰色的一行对应0),而第二掩码和第三掩码都设置为全1,这样在进行矩阵乘法运算时,利用掩码与运算的结果,目标左矩阵中灰色的一行中的元素将跳过矩阵乘法运算,在结果矩阵与该行相关的运算结果中也表示为灰色,意思是无意义的运算结果,其取值无需关心。
参照图7中的(B),目标右矩阵中,灰色的一列为分割时填充产生的,故第二掩码设置为1110(灰色的一列对应0),而第一掩码和第三掩码都设置为全1,这样在进行矩阵乘法运算时,利用掩码与运算的结果,目标右矩阵中灰色的一列中的元素将跳过矩阵乘法运算,在结果矩阵与该列相关的运算结果中也表示为灰色,意思是无意义的运算结果,其取值无需关心。
图7中的(C)可视为图7中的(A)和图7中的(B)两张图的结合,第一掩码设置为110,第二掩码设置为1110,第三掩码设置为11111,这样在进行矩阵乘法运算时,利用掩码与运算的结果,目标左矩阵中灰色的一行和目标右矩阵中灰色的一列中的元素都将跳过矩阵乘法运算。
参照图7中的(D),目标左矩阵中灰色的两列为分割时填充产生的,同时,这两列在目标右矩阵中对应的两行也是分割时填充产生的,故可将第一掩码设置为111,第二掩码设置为1111,第三掩码设置为00111,这样在进行矩阵乘法运算时,利用掩码与运算的结果,目标左矩阵中灰色的两行和目标右矩阵中灰色的两行中的元素都将跳过矩阵乘法运算。
如此,通过应用方式1,就改善了矩阵分割场景中矩阵乘法运算效率低下,矩阵运算单元功耗难以降低的问题。
矩阵分割在很多实际场景中都有应用。例如,目前在图像处理领域,卷积神经网络应用得十分广泛,图像分类、目标检测、图像分割等任务都依赖于卷积神经网络进行特征提取。卷积神经网络的核心是卷积运算,用矩阵运算单元做卷积运算时,会把输入特征图根据卷积核的滑动窗口操作展开数据后再进行并行的矩阵运算,由于输入特征图尺寸和卷积核尺寸存在的不同组合,以及不同的卷积步长和卷积类型,往往最后展开的大尺寸矩阵并不能被均匀分为矩阵指令所需要的矩阵尺寸的整数倍,这就必然涉及数据填充的问题,从而对分割后产生的矩阵可以应用上面提到矩阵运算方法。
还需要指出,方式1并不限于和矩阵分割场景相结合,例如,若目标左矩阵和目标右矩阵均为稀疏矩阵,即其中存在大量的0元素,希望在进行矩阵乘法的时候跳过这些0元素,直接将其对应的运算结果赋0,则可以利用第一掩码、第二掩码以及第三掩码标明目标左矩阵和目标右矩阵中0元素和非0元素的位置,以便在执行矩阵乘法指令时跳过0元素,仅对非0元素进行矩阵乘法运算。
方式2
方式2可以针对例2中的自注意力运算场景,在该场景中,目标左矩阵可以为自注意力运算中的Q矩阵,目标右矩阵可以为自注意力运算中的KT矩阵,目标左矩阵和目标右矩阵中均包括至少一个自注意力运算窗口,且目标左矩阵和目标右矩阵中包括的自注意力运算窗口相同。
参照图8,图8和图3其实是对应的,也是在同样的4个窗口内进行自注意力运算,只是图8中加入了本申请方案新提出的掩码。对于左上角的窗口,目标左矩阵和目标右矩阵都只包括1个自注意力运算窗口,且都是5号窗口;对于右上角的窗口,目标左矩阵和目标右矩阵都包括2个自注意力运算窗口,且都是6号和4号窗口;对于左下角的窗口,目标左矩阵和目标右矩阵都包括2个自注意力运算窗口,且都是8号和2号窗口;对于右下角的窗口,目标左矩阵和目标右矩阵都包括4个自注意力运算窗口,且都是9号、7号、3号和1号窗口。应当理解,无论是图3还是图8,其中自注意力窗口的数量、位置以及划分方式都仅仅是示例而已。
在方式2中,矩阵乘法指令中的掩码同时包括第一掩码和第二掩码。其中,第一掩码用于指示目标左矩阵中的每行所属的自注意力运算窗口,第二掩码用于指示目标右矩阵中每列所属的自注意力运算窗口。
例如,第一掩码和第二掩码可以是自注意力运算窗口的编号,比如,目标左矩阵的某一行属于自注意力运算窗口6,则该行对应的第一掩码可以是6,若用二进制表示则需要3个bit(110)。
又例如,第一掩码和第二掩码只要能够区分目标矩阵中不同的自注意力运算窗口就行,在此基础上可以尽量减少掩码所需的bit数,下面结合图8解释。
参照图8,对于左上角的窗口,由于目标左矩阵和目标右矩阵中都只包含5号自注意力运算窗口,因此第一掩码针对目标左矩阵中的每行只设置1个bit即可,第二掩码针对目标右矩阵中的每列也只设置1个bit即可,在图8左上角中用该bit的取值0代表了5号窗口(当然用取值1也可以),第一掩码和第二掩码都是0000。
这里有一个问题需要解释,图8左上角的第一掩码0000只是一种简化的表示方式。以目标左矩阵为例,其实目标左矩阵并不一定只有4行,因此第一掩码中的4个0其实可能是更多个0(数量和目标左矩阵的行数相同),但由于在图8左上角中,目标左矩阵可以划分为4个小块,由于每个小块中各行对应的掩码都是相同的(都是0),所以可以简化表示为第一掩码中的一个bit,这样第一掩码总共就只有4个bit了。
总之,第一掩码中可以包括多个掩码单元,其数量和目标左矩阵的行数相同,每个掩码单元指示目标左矩阵中的一行所属的自注意力运算窗口,例如,对于图8左上角的情况,每个掩码单元为1bit(也可能包含更多bit,取决于目标左矩阵包含的自注意力运算窗口的数量),且取值为0。当然也不排除在某些可选方案中,将相邻且取值相同的掩码单元只保留一个,这种情况下得到只有4bit的第一掩码也是可能的(针对一个小块值保留一个掩码单元)。
对于图8中出现的其他掩码,都可以视为进行了简化表示,不再特别说明。
对于右上角的窗口,由于目标左矩阵和目标右矩阵中都包含6号和4号自注意力运算窗口,因此第一掩码针对目标左矩阵中的每行只设置1个bit即可,第二掩码针对目标右矩阵中的每列也只设置1个bit即可,利用该bit的两种取值(1或0)就可以区分这两个自注意力运算窗口,在图8右上角中用0代表6号自注意力运算窗口,1代表4号自注意力运算窗口,相较于上面用3个bit表示某行属于6号自注意力运算窗口的方案显著节约了bit数量,此时第一掩码为0101,第二掩码为0101。
对于左下角的窗口,由于目标左矩阵和目标右矩阵中都包含8号和2号自注意力运算窗口,因此第一掩码针对目标左矩阵中的每行只设置1个bit即可,第二掩码针对目标右矩阵中的每列也只设置1个bit即可,利用该bit的两种取值(1或0)就可以区分这两个自注意力运算窗口,在图8左下角中用0代表8号自注意力运算窗口,1代表2号自注意力运算窗口,此时第一掩码为0011,第二掩码为0011。
注意,在右上角和左下角的窗口中,掩码0代表的自注意力运算窗口不同,这是允许的,因为右上角和左下角的窗口会分别进行自注意力运算,二者的掩码不会产生干扰。
对于右下角的窗口,由于目标左矩阵和目标右矩阵中都包含9号、7号、3号和1号自注意力运算窗口,因此第一掩码针对目标左矩阵中的每行设置2个bit即可,第二掩码针对目标右矩阵中的每列也设置2个bit即可,利用这2个bit的四种取值(0、1、2、3)就可以区分这四个自注意力运算窗口,在图8右下角中用0代表9号自注意力运算窗口,1代表7号自注意力运算窗口,2代表3号自注意力运算窗口,3代表1号自注意力运算窗口。
按照上面介绍的方式设置好第一掩码和第二掩码后,步骤S120可以进一步实现为:根据第一掩码以及第二掩码确定属于同一自注意力运算窗口的目标左矩阵中的行以及目标右矩阵中的列;对属于同一自注力运算意窗口的目标左矩阵中的行中的元素、以及目标右矩阵中的列中的元素执行矩阵乘法运算,获得矩阵运算结果。
以图8中右上角的窗口为例,对第一掩码和第二掩码可以执行同或运算:若目标左矩阵中的一行在第一掩码中对应的bit和目标右矩阵中的一列在第二掩码中对应的bit均为0或者均为1,则同或运算结果为1,表明该行和该列属于同一个自注意力运算窗口,从而可以进行矩阵乘法运算,若这两个bit中一个为1一个为0,则同或运算结果为0,表明该行和该列不属于同一个自注意力运算窗口,从而不应进行矩阵乘法运算。
按照此规则,经同或运算后可知,第一掩码中第1个0在目标左矩阵中对应的行与第二掩码中第1个0和第3个0在目标右矩阵中对应的列是属于同一自注意力运算窗口的(6号窗口),从而它们之间可以进行矩阵乘法运算,得到结果矩阵中最上方的两个标有数字6的小块。以此类推,结果矩阵中所有标有数字的小块都可以按照上述规则计算得到,剩余未标数字的小块则可以用0填充。
对于图8的剩余3个窗口中的自注意力运算,可以类似分析,不再详细阐述,需要指出的是,对于右下角的窗口,由于目标矩阵中的每行或每列都对应2bit的掩码,因此严格来说其进行的只是逻辑意义上的同或运算(两个2bit掩码相同则结果为1,不相同则结果为0),而不是对应二进制位上的同或运算(例如,按对应二进制位进行同或运算,01和11的运算结果为01而不是0)。图8和图3的运算结果其实是相同的,只是运算过程不同(图3中未使用掩码)。
上面在介绍方式2时,假设目标左矩阵为G矩阵,目标右矩阵为KT矩阵,即图8中的每个窗口只对应一条矩阵乘法指令。但实际上,G矩阵和KT矩阵很有可能是尺寸比较大的矩阵,一条矩阵乘法指令无法对这样大尺寸的矩阵进行运算,需要对其进行分割后再进行运算,关于分割方法,在矩阵分割场景中已经介绍过,不再重复。在考虑矩阵分割时,方式2中的目标左矩阵也可以是G矩阵分割后产生的矩阵,目标右矩阵也可以是KT矩阵分割后产生的矩阵,但即使目标左矩阵不是完整的G矩阵,目标右矩阵也不是完整的KT矩阵,二者在掩码的设置上以及自注意力运算的方法上也和上面所介绍的相同。
比如,参照图9左侧,若将G矩阵等分为2个矩阵G1和G2(每个分割后产生的矩阵包括一个6号窗口块和一个4号窗口块),KT矩阵也等分为2个矩阵KT1和KT2(每个分割后产生的矩阵包括一个6号窗口块和一个4号窗口块),对G1和KT1、G1和KT2、G2与KT1以及G2与KT2分别进行矩阵乘法运算,可以产生4条矩阵乘法指令,分别是图9左侧的指令1~指令4,每条指令中掩码的设置及使用方式都与仅利用一条矩阵乘法指令将G矩阵和KT矩阵相乘的情况类似,不再重复说明。
进一步的,如果在分割G矩阵和KT矩阵的过程中遇到了无法整数倍分割的情况,则可以参考前文将方式1应用到矩阵分割场景时的处理方法,即方式1和方式2还可以进行一定程度的结合。
在方式2中,利用第一掩码和第二掩码之间的逻辑同或关系,可以精确筛选出属于同一自注意力运算窗口的目标左矩阵中的行以及目标右矩阵中的列,从而可以能够很好地将自注意力运算限制在自注意力运算窗口内,避免进行跨自注意力运算窗口的无效运算,从而有利于提高自注意力运算的效率,并降低矩阵运算单元进行自注意力运算时的功耗。
需要指出,方式2中进行的自注意力运算并不一定要和图像处理相结合,即G矩阵和KT矩阵不一定是基于特征图产生的,虽然在例2中它们是基于特征图产生的。
在一种可选方案中,在得到G矩阵后,可以先将其中属于相同自注意力运算窗口的行整理为连续排列的行,和/或,在得到KT矩阵后,可以先将其中属于相同自注意力运算窗口的列整理为连续排列的列,然后,再基于整理后的G矩阵和/或KT矩阵产生矩阵乘法指令并执行矩阵乘法指令。
该方案对G矩阵和/或KT矩阵中的元素进行整理后,使得属于相同自注意力运算窗口的矩阵元素能够集中进行矩阵乘法运算,从而有利于减少生成的矩阵乘法指令的数量,或者,即使是在不减少矩阵乘法指令的数量的情况下,也有利于简化矩阵乘法运算的过程,提高矩阵乘法指令的执行效率。
下面结合图9说明该方案的具体做法以及有益效果,参照图9左侧,假设每条矩阵乘法指令对应的目标左矩阵和目标右矩阵都的尺寸都只能是2个小块,则为了实现G矩阵和KT矩阵的矩阵乘法运算,需要将G矩阵等分为2个目标左矩阵(每个目标左矩阵包括一个6号窗口块和一个4号窗口块),KT矩阵也等分为2个目标右矩阵(每个目标右矩阵包括一个6号窗口块和一个4号窗口块)。由于任意一个目标左矩阵和任意一个目标右矩阵的组合中都包含6号窗口和4号窗口,从而都可以产生部分有效的运算结果,因此为了完成G矩阵和KT矩阵的矩阵乘法运算,必须生成4条矩阵乘法指令——指令1~指令4,每条矩阵乘法指令用于对一个目标左矩阵和一个目标右矩阵的组合进行矩阵乘法运算。
再参照图9右侧,若先将G矩阵中的两个6号窗口块和两个4号窗口块分别整理在一起,以及将KT矩阵中的两个6号窗口块和两个4号窗口块也分别整理在一起,然后再用和图9左侧同样的方式分割G矩阵和KT矩阵,则G矩阵分割产生的第一个目标左矩阵和KT矩阵分割产生的第二个目标右矩阵,以及,G矩阵分割产生的第二个目标左矩阵和KT矩阵分割产生的第一个目标右矩阵,都不会产生有效的运算结果,则针对这两种目标左矩阵和目标右矩阵的组合,可以不生成矩阵乘法指令,即只需对剩余的两种目标左矩阵和目标右矩阵的组合生成2条矩阵乘法指令,如图9右侧的指令1和指令2所示,从而使得生成矩阵乘法指令的数量相对于图9左侧直接减半。进一步的,对于不用生成矩阵乘法指令的目标左矩阵和目标右矩阵的组合,也无需计算其对应的掩码。
此外,在一种替代方案中,针对图9右侧的情况,也可以仍然生成4条矩阵乘法指令,但其中有2条矩阵乘法指令中的运算是全部跳过的,耗时较少,另外2条矩阵乘法指令则是满载运算,其掩码也十分简单(要么第一掩码和第二掩码都是00,要么第一掩码和第二掩码都是11),因此运算速度也比较快,综合来看,虽然都是4条指令,但其执行效率还是明显优于图9左侧的4条指令。
图10示出了本申请实施例提供的矩阵运算装置200可能包含的功能模块。矩阵运算装置200配置于矩阵运算单元,矩阵运算单元为硬件单元。
参照图10,矩阵运算装置200包括:
指令获取模块210,用于获取矩阵运算指令,所述矩阵运算指令包括掩码,所述掩码用于指示待运算的目标矩阵中的元素的运算参与范围;
指令执行模块220,用于根据所述掩码所指示的运算参与范围,对所述目标矩阵中的元素执行所述矩阵运算指令对应的运算,获得矩阵运算结果。
在矩阵运算装置200的一种实现方式中,所述矩阵运算指令为线程组或线程束级别的指令。
在矩阵运算装置200的一种实现方式中,所述矩阵运算指令为矩阵乘法指令,所述目标矩阵包括待相乘的目标左矩阵和目标右矩阵;所述掩码包括以下至少一种:针对所述目标左矩阵的行设置的第一掩码、针对所述目标右矩阵的列设置的第二掩码、以及针对所述目标左矩阵的列和所述目标右矩阵的行设置的第三掩码。
在矩阵运算装置200的一种实现方式中,所述掩码包括所述第一掩码、所述第二掩码以及所述第三掩码,所述第一掩码用于指示所述目标左矩阵中的每行是否为参与矩阵乘法运算的候选行,所述第二掩码用于指示所述目标右矩阵中的每列是否为参与矩阵乘法运算的候选列,所述第三掩码用于指示所述目标左矩阵中的每列是否为参与矩阵乘法运算的候选列,以及该列在所述目标右矩阵中对应的行是否为参与矩阵乘法运算的候选行;指令执行模块220根据所述掩码所指示的运算参与范围,对所述目标矩阵中的元素执行所述矩阵运算指令对应的运算,获得矩阵运算结果,包括:对所述目标左矩阵中属于所述第一掩码所指示的候选行、且属于所述第三掩码所指示的候选列中的元素,以及所述目标右矩阵中属于所述第二掩码所指示的候选列、且属于所述第三掩码所指示的候选行中的元素执行矩阵乘法运算,获得所述矩阵运算结果。
在矩阵运算装置200的一种实现方式中,原始左矩阵和原始右矩阵为待相乘的两个矩阵,所述目标左矩阵为所述原始左矩阵按照第一目标尺寸的整数倍进行分割后产生的矩阵,所述第一目标尺寸为符合所述矩阵乘法指令的运算要求的左矩阵尺寸,所述目标右矩阵为所述原始右矩阵按照第二目标尺寸的整数倍进行分割后产生的矩阵,所述第二目标尺寸为符合所述矩阵乘法指令的运算要求的右矩阵尺寸,所述第一目标尺寸的列数等于所述第二目标尺寸的行数;所述第一掩码用于指示所述目标左矩阵中的每行是否来源于所述原始左矩阵,若来源于所述原始左矩阵,则该行为参与矩阵乘法运算的候选行,否则不是参与矩阵乘法运算的候选行;所述第二掩码用于指示所述目标右矩阵中的每列是否来源于所述原始右矩阵,若来源于所述原始右矩阵,则该列为参与矩阵乘法运算的候选列,否则不是参与矩阵乘法运算的候选列;所述第三掩码用于指示所述目标左矩阵中的每列是否来源于所述原始左矩阵,以及该列在所述目标右矩阵中对应的行是否来源于所述原始右矩阵,若该列来源于所述原始左矩阵且该列对应的行来源于所述原始右矩阵,则该列为参与矩阵乘法运算的候选列且该列对应的行为参与矩阵乘法运算的候选行,否则该列不是参与矩阵乘法运算的候选列且该列对应的行不是参与矩阵乘法运算的候选行。
在矩阵运算装置200的一种实现方式中,所述目标左矩阵为自注意力运算中的查询矩阵或所述查询矩阵分割后产生的矩阵,所述目标右矩阵为自注意力运算中的键值矩阵的转置矩阵或所述键值矩阵的转置矩阵分割后产生的矩阵,所述目标左矩阵和所述目标右矩阵中均包括至少一个自注意力运算窗口,且所述目标左矩阵和所述目标右矩阵中包括的自注意力运算窗口相同;所述掩码包括所述第一掩码以及所述第二掩码,所述第一掩码用于指示所述目标左矩阵中的每行所属的自注意力运算窗口,所述第二掩码用于指示所述目标右矩阵中每列所属的自注意力运算窗口;指令执行模块220根据所述掩码所指示的运算参与范围,对所述目标矩阵中的元素执行所述矩阵运算指令对应的运算,获得矩阵运算结果,包括:根据所述第一掩码以及所述第二掩码确定属于同一自注意力运算窗口的所述目标左矩阵中的行以及所述目标右矩阵中的列;对属于同一自注意力运算窗口的所述目标左矩阵中的行中的元素、以及所述目标右矩阵中的列中的元素执行矩阵乘法运算,获得所述矩阵运算结果。
在矩阵运算装置200的一种实现方式中,在所述查询矩阵中,属于相同自注意力运算窗口的行被整理为连续排列的行;和/或,在所述键值矩阵的转置矩阵中,属于相同自注意力运算窗口的列被整理为连续排列的列。
本申请实施例提供的矩阵运算装置200可用于执行本申请实施例提供的矩阵运算方法,该装置的实现原理及产生的技术效果在前述方法实施例中已经介绍,为简要描述,装置实施例部分未提及之处,可参考方法实施例中相应内容。
本申请实施例还提供一种矩阵运算单元,用于执行本申请实施例提供的矩阵运算方法。例如,该矩阵运算单元可以是前文提到的GPU、FPGA、改进后的CPU等。
本申请实施例还提供一种电子设备,包括本申请实施例提供的矩阵运算单元。例如,该电子设备可以是服务器或服务器集群、PC机、嵌入式设备、机器人等。
本申请实施例还提供一种计算机程序产品,该计算机程序产品包括计算机程序指令,这些计算机程序指令被矩阵运算单元读取并运行时,执行本申请实施例提供的矩阵运算方法。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序指令,这些计算机程序指令被矩阵运算单元读取并运行时,执行本申请实施例提供的矩阵运算方法。
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (5)

1.一种矩阵运算方法,其特征在于,应用于矩阵运算单元,所述矩阵运算单元为硬件单元,所述方法包括:
获取矩阵运算指令,所述矩阵运算指令包括掩码,所述掩码用于指示待运算的目标矩阵中的元素的运算参与范围;
根据所述掩码所指示的运算参与范围,对所述目标矩阵中的元素执行所述矩阵运算指令对应的运算,获得矩阵运算结果;
其中,所述矩阵运算指令为矩阵乘法指令,所述目标矩阵包括待相乘的目标左矩阵和目标右矩阵,所述目标左矩阵为自注意力运算中的查询矩阵或所述查询矩阵分割后产生的矩阵,所述目标右矩阵为自注意力运算中的键值矩阵的转置矩阵或所述键值矩阵的转置矩阵分割后产生的矩阵,所述目标左矩阵和所述目标右矩阵中均包括至少一个自注意力运算窗口,且所述目标左矩阵和所述目标右矩阵中包括的自注意力运算窗口相同;在所述查询矩阵中,属于相同自注意力运算窗口的行被整理为连续排列的行,在所述键值矩阵的转置矩阵中,属于相同自注意力运算窗口的列被整理为连续排列的列;
所述掩码包括第一掩码以及第二掩码,所述第一掩码用于指示所述目标左矩阵中的每行所属的自注意力运算窗口,所述第二掩码用于指示所述目标右矩阵中每列所属的自注意力运算窗口;
所述根据所述掩码所指示的运算参与范围,对所述目标矩阵中的元素执行所述矩阵运算指令对应的运算,获得矩阵运算结果,包括:
根据所述第一掩码以及所述第二掩码确定属于同一自注意力运算窗口的所述目标左矩阵中的行以及所述目标右矩阵中的列;
对属于同一自注意力运算窗口的所述目标左矩阵中的行中的元素、以及所述目标右矩阵中的列中的元素执行矩阵乘法运算,获得所述矩阵运算结果。
2.根据权利要求1所述的矩阵运算方法,其特征在于,所述矩阵运算指令为线程组或线程束级别的指令。
3.一种矩阵运算装置,其特征在于,配置于矩阵运算单元,所述矩阵运算单元为硬件单元,所述装置包括:
指令获取模块,用于获取矩阵运算指令,所述矩阵运算指令包括掩码,所述掩码用于指示待运算的目标矩阵中的元素的运算参与范围;
指令执行模块,用于根据所述掩码所指示的运算参与范围,对所述目标矩阵中的元素执行所述矩阵运算指令对应的运算,获得矩阵运算结果;
其中,所述矩阵运算指令为矩阵乘法指令,所述目标矩阵包括待相乘的目标左矩阵和目标右矩阵,所述目标左矩阵为自注意力运算中的查询矩阵或所述查询矩阵分割后产生的矩阵,所述目标右矩阵为自注意力运算中的键值矩阵的转置矩阵或所述键值矩阵的转置矩阵分割后产生的矩阵,所述目标左矩阵和所述目标右矩阵中均包括至少一个自注意力运算窗口,且所述目标左矩阵和所述目标右矩阵中包括的自注意力运算窗口相同;在所述查询矩阵中,属于相同自注意力运算窗口的行被整理为连续排列的行,在所述键值矩阵的转置矩阵中,属于相同自注意力运算窗口的列被整理为连续排列的列;
所述掩码包括第一掩码以及第二掩码,所述第一掩码用于指示所述目标左矩阵中的每行所属的自注意力运算窗口,所述第二掩码用于指示所述目标右矩阵中每列所属的自注意力运算窗口;
所述指令执行模块根据所述掩码所指示的运算参与范围,对所述目标矩阵中的元素执行所述矩阵运算指令对应的运算,获得矩阵运算结果,包括:根据所述第一掩码以及所述第二掩码确定属于同一自注意力运算窗口的所述目标左矩阵中的行以及所述目标右矩阵中的列;对属于同一自注意力运算窗口的所述目标左矩阵中的行中的元素、以及所述目标右矩阵中的列中的元素执行矩阵乘法运算,获得所述矩阵运算结果。
4.一种矩阵运算单元,其特征在于,所述矩阵运算单元为硬件单元,用于执行如权利要求1-2中任一项所述的方法。
5.一种电子设备,其特征在于,包括如权利要求4所述的矩阵运算单元。
CN202211445382.XA 2022-11-18 2022-11-18 矩阵运算方法、装置及单元、电子设备 Active CN115859011B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211445382.XA CN115859011B (zh) 2022-11-18 2022-11-18 矩阵运算方法、装置及单元、电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211445382.XA CN115859011B (zh) 2022-11-18 2022-11-18 矩阵运算方法、装置及单元、电子设备

Publications (2)

Publication Number Publication Date
CN115859011A CN115859011A (zh) 2023-03-28
CN115859011B true CN115859011B (zh) 2024-03-15

Family

ID=85664072

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211445382.XA Active CN115859011B (zh) 2022-11-18 2022-11-18 矩阵运算方法、装置及单元、电子设备

Country Status (1)

Country Link
CN (1) CN115859011B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116107636B (zh) * 2023-04-06 2023-06-27 之江实验室 一种硬件加速方法、装置、存储介质及电子设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108664447A (zh) * 2017-03-31 2018-10-16 华为技术有限公司 一种矩阵与矢量的乘法运算方法及装置
CN110377876A (zh) * 2019-07-19 2019-10-25 广东省新一代通信与网络创新研究院 矩阵乘法运算方法、装置及计算机可读存储介质
CN110704024A (zh) * 2019-09-28 2020-01-17 深圳芯英科技有限公司 一种矩阵处理装置、方法及处理设备
CN112991142A (zh) * 2021-03-31 2021-06-18 腾讯科技(深圳)有限公司 图像数据的矩阵运算方法、装置、设备及存储介质
CN115328439A (zh) * 2022-07-19 2022-11-11 中国人民解放军国防科技大学 一种面向hpc/ai应用的增量式矩阵乘加速器

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108664447A (zh) * 2017-03-31 2018-10-16 华为技术有限公司 一种矩阵与矢量的乘法运算方法及装置
CN110377876A (zh) * 2019-07-19 2019-10-25 广东省新一代通信与网络创新研究院 矩阵乘法运算方法、装置及计算机可读存储介质
CN110704024A (zh) * 2019-09-28 2020-01-17 深圳芯英科技有限公司 一种矩阵处理装置、方法及处理设备
CN112991142A (zh) * 2021-03-31 2021-06-18 腾讯科技(深圳)有限公司 图像数据的矩阵运算方法、装置、设备及存储介质
CN115328439A (zh) * 2022-07-19 2022-11-11 中国人民解放军国防科技大学 一种面向hpc/ai应用的增量式矩阵乘加速器

Also Published As

Publication number Publication date
CN115859011A (zh) 2023-03-28

Similar Documents

Publication Publication Date Title
US11580377B2 (en) Method and device for optimizing neural network
CN109543830B (zh) 一种用于卷积神经网络加速器的拆分累加器
KR102476343B1 (ko) 자리수가 비교적 적은 고정 소수점 수치의 신경망 연산에 대한 지원 장치와 방법
KR101298393B1 (ko) 그래픽 처리 유닛 상에서 콘볼루션 신경망을 트레이닝하는방법
CN106599900B (zh) 一种识别图像中的字符串的方法和装置
US8996846B2 (en) System, method and computer program product for performing a scan operation
CN109791628B (zh) 神经网络模型分块压缩方法、训练方法、计算装置及系统
EP3179415A1 (en) Systems and methods for a multi-core optimized recurrent neural network
WO2022166199A1 (zh) 量子纠错解码系统、方法、容错量子纠错系统及芯片
CN110516810B (zh) 一种量子程序的处理方法、装置、存储介质和电子装置
US20230068450A1 (en) Method and apparatus for processing sparse data
CN115859011B (zh) 矩阵运算方法、装置及单元、电子设备
Alawad et al. Stochastic-based deep convolutional networks with reconfigurable logic fabric
KR20220114519A (ko) 양자 오류 정정 디코딩 시스템 및 방법, 내결함성 양자 오류 정정 시스템 및 칩
CN115186802A (zh) 基于卷积神经网络的块稀疏方法、装置及处理单元
CN112633470A (zh) 优化神经网络卷积残差结构的方法、系统、设备及介质
CN103871086B (zh) 基于fpga构建的分层次栅格转矢量处理方法
Catarci The assignment heuristic for crossing reduction
CN110009644B (zh) 一种特征图行像素分段的方法和装置
CN111381968A (zh) 一种高效运行深度学习任务的卷积运算优化方法及系统
CN111047654A (zh) 一种基于色彩信息的高清高速视频背景建模方法
CN115017773A (zh) 一种三维网格模型的降维方法、电子设备和介质
CN113705784A (zh) 一种基于矩阵共享的神经网络权重编码方法及硬件系统
Honda et al. Simple and fast parallel algorithms for the Voronoi map and the Euclidean distance map, with GPU implementations
Li et al. Memory saving method for enhanced convolution of deep neural network

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