通用矩阵乘计算优化方法、装置及处理器与流程
未命名
10-21
阅读:67
评论:0
1.本技术涉及硬件计算技术领域,特别是涉及一种通用矩阵乘计算优化方法、装置及处理器。
背景技术:
2.通用矩阵乘(gemm)、卷积等类似的计算是深度学习领域主要的计算内容。高性能处理器的在计算gemm时能接近其设计的理论峰值吞吐量,但这需要在算子设计时尽可能多地占用底层物理计算核心。即使高性能处理器的算术逻辑单元(alu)宽度和寄存器数量在不断扩展,但面对大语言模型等场景下的大规模gemm问题仍旧需要启动数量巨大的alu迭代计算与访存操作,若在并行策略中考虑同步等待,将造成巨大的性能损耗。对于simd架构的处理器,乘累加(mac)迭代单元的处理往往不能和算子内核相适配,这导致大量的计算资源空置和大量的数据内存块拼接工作,导致硬件资源利用率较低,数据访存开销较大。
3.针对现有的通用矩阵乘计算中存在的硬件资源利用率较低,数据访存开销较大的问题,目前还没有提出有效的解决方案。
技术实现要素:
4.在本实施例中提供了一种通用矩阵乘计算优化方法、装置及处理器,以解决相关技术中存在的通用矩阵乘计算中硬件资源利用率较低,数据访存开销较大的问题。
5.第一个方面,在本实施例中提供了一种通用矩阵乘计算优化方法,所述方法应用于处理器,所述处理器包括至少一个计算核心,所述计算核心包括算术逻辑单元、数据缓存和寄存器,所述方法包括:基于所述算术逻辑单元的宽度、所述寄存器的数量、所述数据缓存的容量,以及预先确定的用于构成通用矩阵乘算子内核的计算核心数量,确定所述通用矩阵乘算子内核的尺寸;基于所述通用矩阵乘算子内核的尺寸、预先确定的基本块矩阵的尺寸,以及待执行通用矩阵乘的左矩阵、右矩阵的尺寸,优化并行计算的计算核心数量;基于所述并行计算的计算核心数量、所述基本块矩阵的尺寸,以及所述左矩阵、右矩阵的尺寸,对所述数据缓存中通用矩阵乘计算区域的分块计算进行优化。
6.在其中的一些实施例中,所述基于所述并行计算的计算核心数量、所述基本块矩阵的尺寸,以及所述左矩阵、右矩阵的尺寸,对所述数据缓存中通用矩阵乘计算区域的分块计算进行优化包括:基于所述左矩阵、右矩阵的尺寸和所述基本块矩阵的尺寸,以及所述并行计算的计算核心数量,确定计算核心的迭代次数、所述计算区域非规约维的初始分块数量和初始分块的迭代次数;在所述计算核心的迭代次数大于所述初始分块的迭代次数的情况下,对所述初始分块进行规约维的合并计算和拆分计算,以构成目标分块,所述目标分块的迭代次数等于
所述计算核心的迭代次数。
7.在其中的一些实施例中,对所述初始分块进行规约维的合并计算和拆分计算,以构成目标分块包括:基于各初始分块在所述通用矩阵乘计算区域中的排列顺序,依次对各所述初始分块进行迭代计算;在对所述初始分块进行合并计算时,对合并的至少两个初始分块的迭代计算值累加;在对所述初始分块进行拆分计算时,将所述初始分块被拆分的第一分块的迭代计算值与前一初始分块的迭代计算值累加,将被拆分的第二分块的迭代计算值与后一初始分块的迭代计算值累加。
8.在其中的一些实施例中,所述基于所述左矩阵、右矩阵的尺寸和所述基本块矩阵的尺寸,以及所述并行计算的计算核心数量,确定计算核心的迭代次数、所述计算区域非规约维的初始分块数量和初始分块的迭代次数包括:基于所述左矩阵、右矩阵的尺寸和所述基本块矩阵的尺寸,确定计算区域非规约维的初始分块数量、初始分块的迭代次数和总迭代次数;基于所述并行计算的计算核心数量和所述总迭代次数,确定计算核心的迭代次数。
9.在其中的一些实施例中,所述基于所述通用矩阵乘算子内核的尺寸、预先确定的基本块矩阵的尺寸,以及待执行通用矩阵乘的左矩阵、右矩阵的尺寸,优化并行计算的计算核心数量包括:基于所述左矩阵、右矩阵的尺寸和所述基本块矩阵的尺寸,获取总迭代次数;基于所述总迭代次数、所述通用矩阵乘算子内核的规约维尺寸和所述基本块矩阵的规约维尺寸,对预先设置的并行计算的计算核心数量进行优化,得到所述计算核心数量的最优值。
10.在其中的一些实施例中,所述基于所述总迭代次数、所述通用矩阵乘算子内核的规约维尺寸和所述基本块矩阵的规约维尺寸,对预先设置的并行计算的计算核心数量进行优化,得到所述计算核心数量的最优值包括:基于所述总迭代次数和预先设置的并行计算的计算核心数量,确定所述计算核心的迭代次数;确定所述计算核心的迭代次数是否满足预先设置的约束条件,所述约束条件由所述通用矩阵乘算子内核的规约维尺寸和所述基本块矩阵的规约维尺寸确定;在不满足所述约束条件的情况下,调整所述并行计算的计算核心数量,直至对应的计算核心的迭代次数满足所述约束条件。
11.在其中的一些实施例中,所述约束条件用下述等式表示:
12.其中,为计算核心的迭代次数,为所述基本块矩阵的规约维尺寸,为所述通用矩阵乘算子内核的规约维尺寸,c为预先确定的缩放系数,n为所述计算区域按照规约维分块的分块数量取值,n的取值范围用下式表示:
。
13.在其中的一些实施例中,所述基于所述算术逻辑单元的宽度、所述寄存器的数量、所述数据缓存的容量,以及预先确定的用于构成通用矩阵乘算子内核的计算核心数量,确定所述通用矩阵乘算子内核的尺寸包括:基于所述算术逻辑单元的宽度、所述寄存器的数量,确定所述计算核心每次迭代处理的数据量;基于所述计算核心数量和所述计算核心每次迭代处理的数据量,确定所述通用矩阵乘算子内核的非规约维尺寸;基于所述左矩阵、右矩阵对应的数据缓存的容量和所述非规约维尺寸,确定所述通用矩阵乘算子内核的规约维尺寸。
14.第二个方面,在本实施例中提供了一种通用矩阵乘计算优化装置,所述装置应用于处理器,所述处理器包括至少一个计算核心,所述计算核心包括算术逻辑单元、数据缓存和寄存器,所述装置包括:第一确定模块,用于基于所述算术逻辑单元的宽度、所述寄存器的数量、所述数据缓存的容量,以及预先确定的用于构成通用矩阵乘算子内核的计算核心数量,确定所述通用矩阵乘算子内核的尺寸;第一优化模块,用于基于所述通用矩阵乘算子内核的尺寸、预先确定的基本块矩阵的尺寸,以及待执行通用矩阵乘的左矩阵、右矩阵的尺寸,优化并行计算的计算核心数量;第二优化模块,用于基于所述并行计算的计算核心数量、所述基本块矩阵的尺寸,以及所述左矩阵、右矩阵的尺寸,对所述数据缓存中通用矩阵乘计算区域的分块计算进行优化。
15.第三个方面,在本实施例中提供了一种处理器,所述处理器包括如第二个方面所述的通用矩阵乘计算优化装置,以及至少一个计算核心,所述计算核心包括算术逻辑单元、数据缓存和寄存器。
16.与相关技术相比,在本实施例中提供的通用矩阵乘计算优化方法,通过基于处理器计算核心的算术逻辑单元的宽度、寄存器的数量、数据缓存的容量,以及预先确定的用于构成通用矩阵乘算子内核的计算核心数量,确定通用矩阵乘算子内核的尺寸,从逻辑上拓宽了算术逻辑单元的宽度,通过组合计算资源提高了硬件计算资源的利用率;通过基于通用矩阵乘算子内核的尺寸、预先确定的基本块矩阵的尺寸,以及待执行通用矩阵乘的左矩阵、右矩阵的尺寸,优化并行计算的计算核心数量,保证并行计算的每个计算核心上的乘累加过程与组合算子内核的规约维度相匹配,使得每次迭代均可实现规约维度上算子内核的全载计算,减少了切分导致的碎片化计算问题和访存消耗;通过基于并行计算的计算核心数量、基本块矩阵的尺寸,以及左矩阵、右矩阵的尺寸,对数据缓存中通用矩阵乘计算区域的分块计算进行优化,提升了计算核心的吞吐量,避免了计算资源的浪费,提高了数据缓存和寄存器的访问效率,解决了相关技术中存在的通用矩阵乘计算硬件资源利用率较低,数据访存开销较大的问题。
17.本技术的一个或多个实施例的细节在以下附图和描述中提出,以使本技术的其他
特征、目的和优点更加简明易懂。
附图说明
18.此处所说明的附图用来提供对本技术的进一步理解,构成本技术的一部分,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:图1是本技术一些实施例的通用矩阵乘计算优化方法的处理器计算核心结构示意图;图2是本技术一些实施例的通用矩阵乘计算优化方法的流程图;图3是本技术一些实施例的通用矩阵乘计算过程示意图;图4是本技术一些实施例的通用矩阵乘计算区域的分块计算优化的流程图;图5是本技术一些实施例的通用矩阵乘计算区域的初始分块示意图;图6是本技术一些实施例的通用矩阵乘计算区域的目标分块示意图;图7是本技术一些实施例的合并和拆分初始分块以构成目标分块的流程图;图8是本技术一些实施例的并行计算的计算核心数量的优化方法的流程图;图9是本技术一些实施例的获取计算核心数量的最优值的流程图;图10是本技术一些实施例的确定通用矩阵乘算子内核尺寸的流程图;图11是本技术一些优选实施例的通用矩阵乘计算优化方法的流程图;图12是本技术一些实施例的通用矩阵乘计算优化装置的结构框图。
具体实施方式
19.为更清楚地理解本技术的目的、技术方案和优点,下面结合附图和实施例,对本技术进行了描述和说明。应当理解,此处描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
20.除另作定义外,本技术所涉及的技术术语或者科学术语应具有本技术所属技术领域具备一般技能的人所理解的一般含义。在本技术中的“一”、“一个”、“一种”、“该”、“这些”等类似的词并不表示数量上的限制,它们可以是单数或者复数。在本技术中所涉及的术语“包括”、“包含”、“具有”及其任何变体,其目的是涵盖不排他的包含;例如,包含一系列步骤或模块(单元)的过程、方法和系统、产品或设备并未限定于列出的步骤或模块(单元),而可包括未列出的步骤或模块(单元),或者可包括这些过程、方法、产品或设备固有的其他步骤或模块(单元)。在本技术中所涉及的“连接”、“相连”、“耦接”等类似的词语并不限定于物理的或机械连接,而可以包括电气连接,无论是直接连接还是间接连接。在本技术中所涉及的“多个”是指两个或两个以上。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,“a和/或b”可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。通常情况下,字符“/”表示前后关联的对象是一种“或”的关系。在本技术中所涉及的术语“第一”、“第二”、“第三”等,只是对相似对象进行区分,并不代表针对对象的特定排序。
21.本技术实施例提供的通用矩阵乘计算优化方法,可以在服务器、计算机、终端或者类似的运算装置的处理器中执行。图1是本技术一些实施例的通用矩阵乘计算优化方法的处理器计算核心结构示意图。如图1所示,图中示出的处理器包括4个计算核心11,每个计算核心11包括算术逻辑单元、数据缓存、指令缓存和寄存器。其中,算术逻辑单元的宽度为8,
寄存器总数量为12,其中进行编译器优化后的累加寄存器数量为4。例如,图1所示的4个计算核心11中,右下方计算核心11的累加寄存器为第0、4、7、a个寄存器。算术逻辑单元的宽度为8,即每次可以处理8个数据的计算,该数据可以是浮点数,每个浮点数的位数可基于计算机的硬件结构确定,如32位、64位等。对于通用矩阵乘计算来说,8位算术逻辑单元可同时进行8
×
8的矩阵乘计算。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述处理器的结构造成限制。例如,处理器还可包括比图1中所示更多或者更少的计算核心,或者计算核心中的寄存器和算术逻辑单元具有与图1所示出的不同配置。
22.上述处理器所在的计算机还可以包括用于存储数据的存储器,还可以包括用于通信功能的传输设备以及输入输出设备。存储器可用于存储计算机程序,如在本实施例中的通用矩阵乘计算优化方法对应的计算机程序,通过运行存储在存储器内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实施例中,存储器可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
23.在本实施例中提供了一种通用矩阵乘计算优化方法,图2是本技术一些实施例的通用矩阵乘计算优化方法的流程图,如图2所示,该流程包括如下步骤:步骤s201,基于算术逻辑单元的宽度、寄存器的数量、数据缓存的容量,以及预先确定的用于构成通用矩阵乘算子内核的计算核心数量,确定通用矩阵乘算子内核的尺寸。
24.算子是指构成深度学习算法的不同类型的计算函数,例如卷积层中的卷积算子、全连接层中的权值求和算子、relu算子等。用于通用矩阵乘计算的计算函数可称为通用矩阵乘算子。对于矩阵乘法运算:c(m,n)=a(m,k)
×
b(k,n),矩阵c(m行n列)由左矩阵a(m行k列)与右矩阵b(k行n列)相乘得到。通用矩阵乘算子内核的尺寸是指处理器一次从存储器中读取矩阵a、b的数据到寄存器中进行处理的最大数量,包括算子内核的非规约维(即m和n所在的维度)尺寸和规约维(即k所在的维度)尺寸。例如,假设通用矩阵乘算子内核的尺寸为=16、=8、=16,即处理器一次从存储器中最多可读取矩阵a的16
×
8个数据和矩阵b的8
×
16个数据进行计算。算子内核的尺寸越大,完成整个通用矩阵乘计算所需的存储器访问次数越少。
25.在基于通用矩阵乘算子执行矩阵乘计算时,图3是本技术一些实施例的通用矩阵乘计算过程示意图,如图3所示,假设预先确定的用于构成通用矩阵乘算子内核的计算核心数量为4个。通用矩阵乘算子内核可由4个计算核心上的计算组合而成,图3左侧为内核结果矩阵,图3右侧则分别为左矩阵和右矩阵的内核大小和计算方向。假设组合算子内核如下所示:
26.其中为
×
的矩阵块,为
×
的矩阵块,为
×
的矩阵块。可以根据各计算核心中算术逻辑单元的宽度、寄存器的数量、数据缓存的容量,以及用于构成通用矩阵乘算子内核的计算核心数量,确定出资源利用率最高的算子内核尺寸,即、、的值。
27.步骤s202,基于通用矩阵乘算子内核的尺寸、预先确定的基本块矩阵的尺寸,以及待执行通用矩阵乘的左矩阵、右矩阵的尺寸,优化并行计算的计算核心数量。
28.正常情况下,完成一次矩阵乘计算需要从存储器中进行2
×m×n×
k次读操作和m
×
n次写操作,当矩阵a、b比较大时,大量的访存操作使得通用矩阵乘效率较低。在这种情况下,可以使用分块计算的方式进行通用矩阵乘计算,即把矩阵a、b以及结果矩阵分为多个基本块矩阵,并将需要进行计算的基本块矩阵从存储器转移到数据缓存中,处理器进行计算时可以直接从数据缓存中读取数据,以提高读取速度并减少访存次数。基本块矩阵的尺寸是指对矩阵a、b和结果矩阵分块后每个分块小矩阵的大小,可以用、、表示。每次取左矩阵a中一个维度为
×
的基本块矩阵和右矩阵b中一个维度为
×
的基本块矩阵放入数据缓存并进行计算,称为一次迭代。
29.另一方面,还可以通过多个计算核心并行计算的方式,分摊迭代次数,提高计算效率。在实际应用中,通常会设置一个并行计算的计算核心数量的初始值,但该初始值不一定是使计算性能最大化的最优值。基于计算性能最大化考虑,对于最优值的优化方向为:根据待执行通用矩阵乘的左矩阵、右矩阵的尺寸和基本块矩阵的尺寸,可以得到总迭代次数和每个计算核心的迭代次数;根据该迭代次数、通用矩阵乘算子内核的尺寸,以及基本块矩阵的尺寸,确定该计算核心数量的初始值是否为最优值;如果不是最优值,则综合上述参数对初始值进行调整,得到并行计算的计算核心数量的优化值。
30.步骤s203,基于并行计算的计算核心数量、基本块矩阵的尺寸,以及左矩阵、右矩阵的尺寸,对数据缓存中通用矩阵乘计算区域的分块计算进行优化。
31.在步骤s202得到的优化后的并行计算的计算核心数量的基础上,对矩阵a、b的通用矩阵乘分块计算进行优化。通常的通用矩阵乘分块计算是在非规约维度(即m和n所在的维度)上,根据基本块矩阵的尺寸进行分块。而该分块方案与数据缓存的容量、并行计算的计算核心数量并不一定适配,往往会限制硬件资源的利用率,且可能无法一次并行完成所有计算量。而本实施例中的并行计算的计算核心数量已经经过优化,根据该计算核心数量,以及左矩阵a、右矩阵b的尺寸和基本块矩阵的尺寸,对原有的分块方案进行优化,优化方式是在原有分块方案基础上,利用在矩阵乘计算累加维度(reduce)上对原有分块进行拆分和合并,构成新的分块,实现一次并行完成所有计算量。
32.通过上述步骤s201~s203,通过基于处理器计算核心的算术逻辑单元的宽度、寄存器的数量、数据缓存的容量,以及预先确定的用于构成通用矩阵乘算子内核的计算核心数量,确定通用矩阵乘算子内核的尺寸,从逻辑上拓宽了算术逻辑单元的宽度,通过组合计算资源提高了硬件计算资源的利用率;通过基于通用矩阵乘算子内核的尺寸、预先确定的基本块矩阵的尺寸,以及待执行通用矩阵乘的左矩阵、右矩阵的尺寸,优化并行计算的计算核心数量,保证并行计算的每个计算核心上的乘累加过程与组合算子内核的规约维度相匹配,使得每次迭代均可实现规约维度上算子内核的全载计算,减少了切分导致的碎片化计算问题和访存消耗;通过基于并行计算的计算核心数量、基本块矩阵的尺寸,以及左矩阵、右矩阵的尺寸,对数据缓存中通用矩阵乘计算区域的分块计算进行优化,提升了计算核心的吞吐量,避免了计算资源的浪费,提高了数据缓存和寄存器的访问效率,解决了相关技术中存在的通用矩阵乘计算硬件资源利用率较低,数据访存开销较大的问题。
33.在一些实施例中,图4是本技术一些实施例的通用矩阵乘计算区域的分块计算优
化的流程图,如图4所示,该流程包括如下步骤:步骤s401,基于左矩阵、右矩阵的尺寸和基本块矩阵的尺寸,以及并行计算的计算核心数量,确定计算核心的迭代次数、计算区域非规约维的初始分块数量和初始分块的迭代次数。
34.根据基本块矩阵在三个维度上的尺寸,以及待计算的左矩阵、右矩阵在三个维度上的尺寸,可以对计算区域进行拆分获得初始分块,该初始分块可以是以非规约维m和n为拆分维度的。由于每个基本块矩阵的迭代次数等于1,因此可根据拆分出来的初始分块的数量,以及每个初始分块中的基本块矩阵的数量,得到总迭代次数、初始分块数量和初始分块迭代次数;然后根据并行计算的计算核心数量,得到每个计算核心的迭代次数。
35.具体地,该流程可包括如下步骤:步骤s4011,基于左矩阵、右矩阵的尺寸和基本块矩阵的尺寸,确定计算区域非规约维的初始分块数量、初始分块的迭代次数和总迭代次数。
36.通用矩阵乘的结果矩阵c(m行n列)由左矩阵a(m行k列)与右矩阵b(k行n列)相乘得到,其中左矩阵a对应的基本块矩阵维度为
×
,右矩阵b对应的基本块矩阵维度为
×
。根据在m、n、k三个维度上的基本块矩阵的尺寸,可以通过下式得到该通用矩阵乘计算的总迭代次数:
37.其中,为总迭代次数,表示向上取整运算。
38.图5是本技术一些实施例的通用矩阵乘计算区域的初始分块示意图,假设m=384,n=384,k=128,基本块矩阵的=128,=128,=4,则通常的通用矩阵乘分块方式如图5所示,将通用矩阵乘的计算区域按照非规约维m、n维度平均分成384/128=3份,k维度(图中未示出)则分为128/4=32份。即从m、n维度看,将结果矩阵分为序号为0~8的9个初始分块进行小规模的通用矩阵乘计算,再进行数据的内存重排,若考虑分布式,则需要9个相互独立的计算核心去同时处理,一次完成计算。而在实际应用中,进行分块并行计算的计算核心的数量可能小于初始分块数量,无法实现一次完成计算。
39.根据上述公式可知,总迭代次数=3
×3×
32=288,每个初始分块的迭代次数为32。
40.步骤s4012,基于并行计算的计算核心数量和总迭代次数,确定计算核心的迭代次数。
41.假设优化后的并行计算的计算核心数量为4,则每个计算核心的迭代次数为288/4=72。根据并行计算的计算核心数量和初始分块数量可知,该初始分块方案无法满足一次并行完成所有计算量的要求。
42.步骤s402,在计算核心的迭代次数大于初始分块的迭代次数的情况下,对初始分块进行规约维的合并计算和拆分计算,以构成目标分块,该目标分块的迭代次数等于计算核心的迭代次数。
43.如果计算核心的迭代次数大于初始分块的迭代次数,即优化后的并行计算的计算核心数量小于初始分块数量,本实施例通过对初始分块在规约维度上进行合并计算和拆分
计算优化初始分块方案,构成目标分块,使目标分块的迭代次数等于计算核心的迭代次数,即目标分块的数量等于并行计算的计算核心数量。
44.仍以步骤s301中的实施例为例,图6是本技术一些实施例的通用矩阵乘计算区域的目标分块示意图,如图6所示,优化后的并行计算的计算核心分别为g1~g4,每个计算核心对应的目标分块如图中黑色加粗方框所示。例如,计算核心g1对应的目标分块包括初始分块0、初始分块1、初始分块2的一部分;计算核心g2对应的目标分块包括初始分块2的一部分、初始分块3、初始分块4的一部分等。需要说明的是,图6中被拆分的初始分块并不是在m和n维度上进行拆分,而是在规约维k维度上进行拆分(图5中k维度及k维度的拆分没有示出)。图6中初始分块2、4、6被拆分后的面积差异,可认为是k维度上拆分的基本块数量或迭代次数差异。
45.以计算核心g1对应的目标分块为例,初始分块0、1上以k维度进行划分分别有32次迭代,两个初始分块共64次迭代;另外还从初始分块2的k维度分块中拆分出8次迭代,一共72次迭代,满足了计算核心g1的迭代数量;以此类推,依次对初始分块0~8进行拆分与合并,使得每个计算核心都能分配到与自身的迭代次数一致的目标分块,且该目标分块的迭代次数等于计算核心的迭代次数。
46.固定拆分规约维的并行执行策略使得通用矩阵乘全局的访存开销与矩阵规模无关,而是随规约维拆分数量的增加而增大。另一方面,在初始分块数量大于并行计算核心数量时,每个初始分块被多个计算核心的计算结果覆盖,因此可在计算和累加过程进行流水并行处理(算子内核的计算核心数量小于并行计算核心数量),可以完全省略掉同一初始分块上的同步等待耗时。
47.通过上述步骤s401~s402,通过基于左矩阵、右矩阵的尺寸和基本块矩阵的尺寸,以及并行计算的计算核心数量,确定计算核心的迭代次数、计算区域的初始分块数量和初始分块的迭代次数,获得结果矩阵的初始分块方案,并确定该初始分块方案是否满足一次并行完成所有计算量的要求;通过在计算核心的迭代次数大于初始分块的迭代次数的情况下,对初始分块进行合并计算和拆分计算,以构成目标分块,即在初始分块方案不满足该需求的情况下,通过对初始分块在规约维度上的重新拆分得到目标分块方案,实现一次并行完成所有计算量,提高了硬件资源的利用率和计算核心的吞吐量。
48.在一些实施例中,图7是本技术一些实施例的合并和拆分初始分块以构成目标分块的流程图,如图7所示,该流程包括如下步骤:步骤s701,基于各初始分块在通用矩阵乘计算区域中的排列顺序,依次对各初始分块进行迭代计算。
49.在具体的程序实现中,可以将通用矩阵乘算法的最外层循环展开,分别放在g1~g4四个计算核心上进行计算,以结果矩阵的分块索引对各计算核心在各个初始分块中的迭代计算进行位置标记,以实际乘累加计算的起始和终止索引作为该初始分块是否为部分和的判断标记。按照各初始分块0~8在整个计算区域中的排列顺序,依次执行迭代计算,并根据该计算核心的起始和终止索引确定目标分块的起始位置和终止位置。
50.步骤s702,在对初始分块进行合并计算时,对合并的至少两个初始分块的迭代计算值累加。
51.由于每个计算核心的迭代次数大于每个初始分块的迭代次数,因此需要将合并的
至少两个相邻的初始分块的部分和进行累加,即需要额外的“计算核心数量减1”次的内存访存以处理由于跨越初始分块带来的部分和累加。
52.步骤s703,在对初始分块进行拆分计算时,将初始分块被拆分的第一分块的迭代计算值与前一初始分块的迭代计算值累加,将被拆分的第二分块的迭代计算值与后一初始分块的迭代计算值累加。
53.根据目标分块的起始位置和终止位置,确定需要被拆分的初始分块,且可以确定任一个初始分块最多可被拆分为两个分块。按照k维度的排序,将第一分块的迭代计算值与前一初始分块的迭代计算值累加,用于得到前一个计算核心的累加结果;将第二分块的迭代计算值与后一初始分块的迭代计算值累加,用于得到后一个计算核心的累加结果。
54.通过上述步骤s701~s703,通过基于各初始分块在通用矩阵乘计算区域中的排列顺序,依次对各初始分块进行迭代计算,获得每个基本块矩阵的计算结果,为乘累加提供基础数据,并通过索引标识目标分块的起始和终止位置;通过在对初始分块进行合并计算时,对合并的至少两个初始分块的迭代计算值累加,以及在对初始分块进行拆分计算时,将初始分块被拆分的第一分块的迭代计算值与前一初始分块的迭代计算值累加,将被拆分的第二分块的迭代计算值与后一初始分块的迭代计算值累加,实现以计算核心数量作为拆分份数的拆分策略以及基于目标分块的乘累加计算,从全局控制总的内存消耗,以超参数形式完成矩阵形状在存储上的线性映射,避免了因矩阵形状差异导致的缓存访存消耗波动带来的算子性能下降。
55.在一些实施例中,图8是本技术一些实施例的并行计算的计算核心数量的优化方法的流程图,如图8所示,该流程包括如下步骤:步骤s801,基于左矩阵、右矩阵的尺寸和基本块矩阵的尺寸,获取总迭代次数。
56.根据前述实施例中的计算公式,可以根据左矩阵、右矩阵的尺寸和基本块矩阵的尺寸,计算得到该通用矩阵乘的总迭代次数。
57.步骤s802,基于总迭代次数、通用矩阵乘算子内核的规约维尺寸和基本块矩阵的规约维尺寸,对预先设置的并行计算的计算核心数量进行优化,得到计算核心数量的最优值。
58.并行计算的计算核心数量是对计算区域的初始分块进行优化的主要参数,决定了目标分块的数量、每个目标分块的迭代次数,以及哪些位置的基本块矩阵进行乘累加。而每个计算核心的乘累加过程需要与算子内核的规约维度相匹配,否则在规约维拆分的过程中可能导致碎片化计算问题和过多的访存消耗。因此,可以先确定该预先设置的并行计算的计算核心数量是否与通用矩阵乘算子内核的规约维尺寸相匹配,如果不匹配则根据通用矩阵乘算子内核的规约维尺寸、基本块矩阵的规约维尺寸,以及总迭代次数对计算核心数量进行优化,直至得到与算子内核的规约维尺寸匹配的计算核心数量的最优值。
59.通过上述步骤s801~s802,通过基于左矩阵、右矩阵的尺寸和基本块矩阵的尺寸,获取总迭代次数,作为判定并行计算核心数量与算子内核的规约维尺寸是否匹配的参数;通过基于总迭代次数、通用矩阵乘算子内核的规约维尺寸和基本块矩阵的规约维尺寸,对预先设置的并行计算的计算核心数量进行优化,得到计算核心数量的最优值,以保证在每个计算核心上的乘累加过程与算子内核的规约维度相匹配,即对于两次迭代中产生的部分和所累加的k维维度总是算子内核规约维的整数倍,从而使得在每次迭代中能够实现规约
维上算子内核的全载计算,极大的减少了k维切分导致的碎片化计算问题与访存消耗,进而提升算子性能。
60.在一些实施例中,图9是本技术一些实施例的获取计算核心数量的最优值的流程图,如图9所示,该流程包括如下步骤:步骤s901,基于总迭代次数和预先设置的并行计算的计算核心数量,确定计算核心的迭代次数。
61.根据总迭代次数和预先设置的并行计算的计算核心数量g,可用下述算式确定每个计算核心的迭代次数:
62.步骤s902,确定计算核心的迭代次数是否满足预先设置的约束条件,该约束条件由通用矩阵乘算子内核的规约维尺寸和基本块矩阵的规约维尺寸确定。
63.在使用规约维对计算区域进行拆分的情况下,总迭代次数是规约维度上拆分的基本块矩阵数量的整数倍。而要实现算子性能最大化,需要使每个计算核心所对应的规约维维度累加值是算子内核规约维尺寸的整数倍。即根据通用矩阵乘算子内核的规约维尺寸和基本块矩阵的规约维尺寸设置约束条件,确定计算核心的迭代次数是否满足该约束条件。如果满足则说明计算核心的数量为最优值;如果不满足则调整计算核心的数量,进而改变计算核心的迭代次数以满足该约束条件。
64.进一步地,该约束条件可用下面等式表示:
65.其中,为每个计算核心的迭代次数,为基本块矩阵的规约维尺寸,为通用矩阵乘算子内核的规约维尺寸,c为预先确定的缩放系数,n为计算区域按照规约维拆分的分块数量取值,n的取值范围用下式表示:
66.表示向上取整运算,本实施例中c=1。
67.在、、n、c和均已知的情况下,代入上述等式,验证等式两边的值是否相等。此处n的值是一个取值范围,每个n值都代入该等式进行验证。如果均满足该等式,则确定该计算核心数量g为最优值。
68.步骤s903,在不满足约束条件的情况下,调整并行计算的计算核心数量,直至对应的计算核心的迭代次数满足约束条件。
69.如果不满足约束条件,则根据处理器的硬件资源调整并行计算的计算核心数量,并计算得到对应的迭代次数,代入上述等式进行验证,直至满足约束条件,得到对应的计算核心数量的最优值。
70.通过上述步骤s901~s903,通过基于总迭代次数和预先设置的并行计算的计算核心数量,确定计算核心的迭代次数,为后续判断计算核心数量是否最优提供基础数据;通过确定计算核心的迭代次数是否满足预先设置的约束条件,确定计算核心数量是否为最优
值;通过在不满足约束条件的情况下,调整并行计算的计算核心数量,直至对应的计算核心的迭代次数满足约束条件,提供了优化计算核心数量的计算方式,优化后的计算核心数量可保证在每个核心上的乘累加过程与算子内核的规约维尺寸相匹配,即对于跨越初始分块产生的部分和累加的规约维尺寸总是算子内核规约维尺寸的整数倍,从而使得在每次迭代中能够实现规约维上算子内核的全载计算,极大的减少了规约维切分导致的碎片化计算问题与访存消耗,进而提升算子性能。
71.在一些实施例中,图10是本技术一些实施例的确定通用矩阵乘算子内核尺寸的流程图,如图10所示,该流程包括如下步骤:步骤s1001,基于算术逻辑单元的宽度、寄存器的数量,确定计算核心每次迭代处理的数据量。
72.根据算术逻辑单元的宽度可以确定单个计算核心运算时一次可处理的数据量;根据算术逻辑单元的宽度与寄存器数量的乘积,可以确定单个计算核心一次迭代处理的数据量。一次迭代处理是指该计算核心利用多个寄存器进行数据累加,完成一次矩阵乘迭代的过程。
73.步骤s1002,基于计算核心数量和计算核心每次迭代处理的数据量,确定通用矩阵乘算子内核的非规约维尺寸。
74.根据计算核心数量与每个计算核心每次迭代处理的数据量的乘积,得到组合后的算子内核的非规约维尺寸。例如,对于每个计算核心来说,假设可以并行使用的寄存器数量是4,算术逻辑单元的宽度为8,则在一次循环迭代中最大限度的计算量为4个8
×
8的结果矩阵。如果计算核心数量为4,4个计算核心组合成的矩阵乘算子内核处理的数据量为4
×4×8×
8,即可确定矩阵乘算子内核的非规约维尺寸
×
=32
×
32。
75.如果在单个计算核心上对左矩阵进行全载(可参考图3中左矩阵的一列),则计算结果为结果矩阵内核的一列(对应图3中结果矩阵的一列);同理若在单核上对右矩阵进行全载(可参考图3中右矩阵的一行),则计算结果为结果矩阵内核的一行(对应图3中结果矩阵的一行)。如何选择数据加载方式取决于矩阵的存储方式是以列主序还是行主序存储的,这样可以避免大量的内存重排操作,减少内存访问操作的数量,从而提升算子性能。
76.步骤s1003,基于左矩阵、右矩阵对应的数据缓存的容量和非规约维尺寸,确定通用矩阵乘算子内核的规约维尺寸。
77.单个计算核心的数据缓存容量可用下式表示:
78.其中,buf是数据可用的总缓存容量,bufo、buf
l
、bufr分别指结果矩阵、左矩阵、右矩阵的缓存容量。
79.算子内核的规约维尺寸可通过下述算式计算:
80.其中,为内存对齐函数,用于对变量取整;、为通用矩阵乘算子内核的非规约维尺寸;buf
l
为左矩阵的缓存容量,bufr为右矩阵的缓存容量;为通用矩阵乘算子内核的规约维尺寸;s为算子内核中计算核心的数量;两种计算方式分别对应列主存加载数
据和行主存加载数据。
81.通过上述步骤s1001~s1003,通过基于算术逻辑单元的宽度、寄存器的数量,确定计算核心每次迭代处理的数据量,得到每个计算核心的处理能力参数;通过基于计算核心数量和计算核心每次迭代处理的数据量,确定通用矩阵乘算子内核的非规约维尺寸,以及基于左矩阵、右矩阵对应的数据缓存的容量和非规约维尺寸,确定通用矩阵乘算子内核的规约维尺寸,确定了算子内核的尺寸,通过多计算核心组合的方式获取最大资源利用率。
82.下面通过优选实施例对本实施例进行描述和说明。图11是本技术一些优选实施例的通用矩阵乘计算优化方法的流程图,该方法应用于处理器,处理器包括至少一个计算核心,计算核心包括算术逻辑单元、数据缓存和寄存器。如图11所示,该流程包括如下步骤:步骤s1101,基于计算核心中算术逻辑单元的宽度、寄存器的数量,以及预先确定的用于构成通用矩阵乘算子内核的计算核心数量三者的乘积,确定通用矩阵乘算子内核的非规约维尺寸;步骤s1102,基于左矩阵、右矩阵对应的数据缓存的容量和非规约维尺寸,确定通用矩阵乘算子内核的规约维尺寸;算子内核的规约维尺寸可通过下述算式计算:
83.其中,为内存对齐函数,用于对变量取整;、为通用矩阵乘算子内核的非规约维尺寸;buf
l
为左矩阵的缓存容量,bufr为右矩阵的缓存容量;为通用矩阵乘算子内核的规约维尺寸;s为算子内核中计算核心的数量;两种计算方式分别对应列主存加载数据和行主存加载数据。
84.步骤s1103,基于左矩阵、右矩阵的尺寸和预先确定的基本块矩阵的尺寸,获取总迭代次数;步骤s1104,基于总迭代次数和预先设置的并行计算的计算核心数量,确定每个计算核心的迭代次数;步骤s1105,确定该迭代次数是否满足下述等式的约束条件:
85.其中,为计算核心的迭代次数,为基本块矩阵的规约维尺寸,为通用矩阵乘算子内核的规约维尺寸,c为预先确定的缩放系数,n为计算区域按照规约维分块的分块数量取值,n的取值范围用下式表示:。
86.步骤s1106,如果满足该约束条件,确定该迭代次数对应的计算核心数量为最优值;步骤s1107,如果不满足该约束条件,调整计算核心数量,直至对应的迭代次数满足该约束条件,得到计算核心数量的最优值;步骤s1108,基于左矩阵、右矩阵的尺寸和基本块矩阵的尺寸,确定计算区域非规约维的初始分块数量、初始分块的迭代次数;
步骤s1109,基于计算核心数量的最优值和总迭代次数,确定每个计算核心的迭代次数;步骤s1110,在计算核心的迭代次数大于初始分块的迭代次数的情况下,基于各初始分块在通用矩阵乘计算区域中的排列顺序,依次对各初始分块进行迭代计算并累计迭代次数;步骤s1111,在各初始分块规约维的累计迭代次数等于计算核心的迭代次数时,将各初始分块规约维的迭代计算结果累加,得到目标分块的迭代计算结果,并对累计迭代次数重新计数;步骤s1112,重复步骤s1110~s1111,直至所有初始分块都完成迭代计算的结果累加,得到各目标分块的迭代计算结果。
87.通过上述步骤s1101~s1112,根据每个计算核心的处理能力参数和用于组合成为通用矩阵乘算子内核的计算核心数量,确定算子内核的尺寸,通过多计算核心组合的方式获取最大资源利用率;通过约束条件等式确定给定的并行计算核心的数量是否为最优值,在不是最优值的情况下,调整并行计算的计算核心数量,直至获取计算核心数量的最优值,优化后的计算核心数量可保证在每个核心上的乘累加过程与算子内核的规约维尺寸相匹配,极大的减少了规约维切分导致的碎片化计算问题与访存消耗,提升算子性能;通过对初始分块的规约维拆分实现以计算核心数量作为拆分份数的拆分策略以及基于目标分块的乘累加计算,从全局控制总的内存消耗,以超参数形式完成矩阵形状在存储上的线性映射,避免了因矩阵形状差异导致的缓存访存消耗波动带来的算子性能下降。
88.需要说明的是,在上述流程中或者附图的流程图中示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
89.在一些实施例中,本技术还提供了一种通用矩阵乘计算优化装置,该装置应用于处理器,处理器包括至少一个计算核心,计算核心包括算术逻辑单元、数据缓存和寄存器。该通用矩阵乘计算优化装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。以下所使用的术语“模块”、“单元”、“子单元”等可以实现预定功能的软件和/或硬件的组合。在一些实施例中,图12是本实施例的通用矩阵乘计算优化装置的结构框图,如图12所示,该装置包括:确定模块1201,用于基于算术逻辑单元的宽度、寄存器的数量、数据缓存的容量,以及预先确定的用于构成通用矩阵乘算子内核的计算核心数量,确定通用矩阵乘算子内核的尺寸;第一优化模块1202,用于基于通用矩阵乘算子内核的尺寸、预先确定的基本块矩阵的尺寸,以及待执行通用矩阵乘的左矩阵、右矩阵的尺寸,优化并行计算的计算核心数量;第二优化模块1203,用于基于并行计算的计算核心数量、基本块矩阵的尺寸,以及左矩阵、右矩阵的尺寸,对数据缓存中通用矩阵乘计算区域的分块计算进行优化。
90.本实施例的通用矩阵乘计算优化装置,通过确定模块1201确定通用矩阵乘算子内核的尺寸,从逻辑上拓宽了算术逻辑单元的宽度,通过组合计算资源提高了硬件计算资源的利用率;通过第一优化模块1202优化并行计算的计算核心数量,保证并行计算的每个计
算核心上的乘累加过程与组合算子内核的规约维度相匹配,使得每次迭代均可实现规约维度上算子内核的全载计算,减少了切分导致的碎片化计算问题和访存消耗;通过第二优化模块1203对数据缓存中通用矩阵乘计算区域的分块计算进行优化,提升了计算核心的吞吐量,避免了计算资源的浪费,提高了数据缓存和寄存器的访问效率,解决了相关技术中存在的通用矩阵乘计算硬件资源利用率较低,数据访存开销较大的问题。
91.在其中的一些实施例中,第二优化模块包括第一确定子模块和计算子模块,第一确定子模块用于基于左矩阵、右矩阵的尺寸和基本块矩阵的尺寸,以及并行计算的计算核心数量,确定计算核心的迭代次数、计算区域非规约维的初始分块数量和初始分块的迭代次数;计算子模块用于在计算核心的迭代次数大于初始分块的迭代次数的情况下,对初始分块进行规约维的合并计算和拆分计算,以构成目标分块,该目标分块的迭代次数等于计算核心的迭代次数。
92.本实施例的通用矩阵乘计算优化装置,通过第一确定子模块确定计算核心的迭代次数、计算区域的初始分块数量和初始分块的迭代次数,获得结果矩阵的初始分块方案,并确定该初始分块方案是否满足一次并行完成所有计算量的要求;通过计算子模块在计算核心的迭代次数大于初始分块的迭代次数的情况下,对初始分块进行合并计算和拆分计算,以构成目标分块,即在初始分块方案不满足该需求的情况下,通过对初始分块在规约维度上的重新拆分得到目标分块方案,实现一次并行完成所有计算量,提高了硬件资源的利用率和计算核心的吞吐量。
93.在其中的一些实施例中,计算子模块包括迭代模块、第一累加模块和第二累加模块,迭代模块用于基于各初始分块在通用矩阵乘计算区域中的排列顺序,依次对各初始分块进行迭代计算;第一累加模块用于在对初始分块进行合并计算时,对合并的至少两个初始分块的迭代计算值累加;第二累加模块用于在对初始分块进行拆分计算时,将初始分块被拆分的第一分块的迭代计算值与前一初始分块的迭代计算值累加,将被拆分的第二分块的迭代计算值与后一初始分块的迭代计算值累加。
94.本实施例的通用矩阵乘计算优化装置,通过迭代模块依次对各初始分块进行迭代计算,获得每个基本块矩阵的计算结果,为乘累加提供基础数据,并通过索引标识目标分块的起始和终止位置;通过第一累加模块对合并的至少两个初始分块的迭代计算值累加,以及通过第二累加模块将初始分块被拆分的第一分块的迭代计算值与前一初始分块的迭代计算值累加,将被拆分的第二分块的迭代计算值与后一初始分块的迭代计算值累加,实现以计算核心数量作为拆分份数的拆分策略以及基于目标分块的乘累加计算,从全局控制总的内存消耗,以超参数形式完成矩阵形状在存储上的线性映射,避免了因矩阵形状差异导致的缓存访存消耗波动带来的算子性能下降。
95.在其中的一些实施例中,第一优化模块包括获取子模块和优化子模块,获取子模块用于基于左矩阵、右矩阵的尺寸和基本块矩阵的尺寸,获取总迭代次数;优化子模块用于基于总迭代次数、通用矩阵乘算子内核的规约维尺寸和基本块矩阵的规约维尺寸,对预先设置的并行计算的计算核心数量进行优化,得到计算核心数量的最优值。
96.本实施例的通用矩阵乘计算优化装置,通过获取子模块获取总迭代次数,作为判定并行计算核心数量与算子内核的规约维尺寸是否匹配的参数;通过优化子模块对预先设置的并行计算的计算核心数量进行优化,得到计算核心数量的最优值,以保证在每个计算
核心上的乘累加过程与算子内核的规约维度相匹配,即对于两次迭代中产生的部分和所累加的k维维度总是算子内核规约维的整数倍,从而使得在每次迭代中能够实现规约维上算子内核的全载计算,极大的减少了k维切分导致的碎片化计算问题与访存消耗,进而提升算子性能。
97.在其中的一些实施例中,优化子模块包括第三确定单元、第四确定单元和调整单元,第三确定单元用于基于总迭代次数和预先设置的并行计算的计算核心数量,确定计算核心的迭代次数;第四确定单元用于确定计算核心的迭代次数是否满足预先设置的约束条件,该约束条件由通用矩阵乘算子内核的规约维尺寸和基本块矩阵的规约维尺寸确定;调整单元用于在不满足约束条件的情况下,调整并行计算的计算核心数量,直至对应的计算核心的迭代次数满足约束条件。
98.本实施例的通用矩阵乘计算优化装置,通过第三确定单元确定计算核心的迭代次数,为后续判断计算核心数量是否最优提供基础数据;通过第四确定单元确定计算核心的迭代次数是否满足预先设置的约束条件,确定计算核心数量是否为最优值;通过调整单元在不满足约束条件的情况下,调整并行计算的计算核心数量,直至对应的计算核心的迭代次数满足约束条件,提供了优化计算核心数量的计算方式,优化后的计算核心数量可保证跨越初始分块产生的部分和累加的规约维维度总是算子内核规约维尺寸的整数倍,从而使得在每次迭代中能够实现规约维上算子内核的全载计算,极大的减少了规约维切分导致的碎片化计算问题与访存消耗,进而提升算子性能。
99.在其中的一些实施例中,确定模块包括第二确定子模块、第三确定子模块和第四确定子模块,第二确定子模块用于基于算术逻辑单元的宽度、寄存器的数量,确定计算核心每次迭代处理的数据量;第三确定子模块用于基于计算核心数量和计算核心每次迭代处理的数据量,确定通用矩阵乘算子内核的非规约维尺寸;第四确定子模块用于基于左矩阵、右矩阵对应的数据缓存的容量和非规约维尺寸,确定通用矩阵乘算子内核的规约维尺寸。
100.本实施例的通用矩阵乘计算优化装置,通过第二确定子模块确定计算核心每次迭代处理的数据量,得到每个计算核心的处理能力参数;通过第三确定子模块确定通用矩阵乘算子内核的非规约维尺寸,以及通过第四确定子模块确定通用矩阵乘算子内核的规约维尺寸,确定了算子内核的尺寸,通过多计算核心组合的方式获取最大资源利用率。
101.此外,本实施例还提供了一种处理器,该处理器包括上述实施例中的通用矩阵乘计算优化装置,以及至少一个计算核心,计算核心包括算术逻辑单元、数据缓存和寄存器。
102.本实施例的处理器,通过通用矩阵乘计算优化装置对至少一个计算核心的通用矩阵乘的计算过程进行优化,包括确定通用矩阵乘算子内核的尺寸、优化并行计算的计算核心数量和分块计算过程,提升了计算核心的吞吐量,避免了计算资源的浪费,提高了数据缓存和寄存器的访问效率。
103.需要说明的是,在本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,在本实施例中不再赘述。
104.应该明白的是,这里描述的具体实施例只是用来解释这个应用,而不是用来对它进行限定。根据本技术提供的实施例,本领域普通技术人员在不进行创造性劳动的情况下得到的所有其它实施例,均属本技术保护范围。
105.显然,附图只是本技术的一些例子或实施例,对本领域的普通技术人员来说,也可
以根据这些附图将本技术适用于其他类似情况,但无需付出创造性劳动。另外,可以理解的是,尽管在此开发过程中所做的工作可能是复杂和漫长的,但是,对于本领域的普通技术人员来说,根据本技术披露的技术内容进行的某些设计、制造或生产等更改仅是常规的技术手段,不应被视为本技术公开的内容不足。
[0106]“实施例”一词在本技术中指的是结合实施例描述的具体特征、结构或特性可以包括在本技术的至少一个实施例中。该短语出现在说明书中的各个位置并不一定意味着相同的实施例,也不意味着与其它实施例相互排斥而具有独立性或可供选择。本领域的普通技术人员能够清楚或隐含地理解的是,本技术中描述的实施例在没有冲突的情况下,可以与其它实施例结合。
[0107]
以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对专利保护范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术的保护范围应以所附权利要求为准。
技术特征:
1.一种通用矩阵乘计算优化方法,所述方法应用于处理器,所述处理器包括至少一个计算核心,所述计算核心包括算术逻辑单元、数据缓存和寄存器,其特征在于,所述方法包括:基于所述算术逻辑单元的宽度、所述寄存器的数量、所述数据缓存的容量,以及预先确定的用于构成通用矩阵乘算子内核的计算核心数量,确定所述通用矩阵乘算子内核的尺寸;基于所述通用矩阵乘算子内核的尺寸、预先确定的基本块矩阵的尺寸,以及待执行通用矩阵乘的左矩阵、右矩阵的尺寸,优化并行计算的计算核心数量;基于所述并行计算的计算核心数量、所述基本块矩阵的尺寸,以及所述左矩阵、右矩阵的尺寸,对所述数据缓存中通用矩阵乘计算区域的分块计算进行优化。2.根据权利要求1所述的通用矩阵乘计算优化方法,其特征在于,所述基于所述并行计算的计算核心数量、所述基本块矩阵的尺寸,以及所述左矩阵、右矩阵的尺寸,对所述数据缓存中通用矩阵乘计算区域的分块计算进行优化包括:基于所述左矩阵、右矩阵的尺寸和所述基本块矩阵的尺寸,以及所述并行计算的计算核心数量,确定计算核心的迭代次数、所述计算区域非规约维的初始分块数量和初始分块的迭代次数;在所述计算核心的迭代次数大于所述初始分块的迭代次数的情况下,对所述初始分块进行规约维的合并计算和拆分计算,以构成目标分块,所述目标分块的迭代次数等于所述计算核心的迭代次数。3.根据权利要求2所述的通用矩阵乘计算优化方法,其特征在于,对所述初始分块进行规约维的合并计算和拆分计算,以构成目标分块包括:基于各初始分块在所述通用矩阵乘计算区域中的排列顺序,依次对各所述初始分块进行迭代计算;在对所述初始分块进行合并计算时,对合并的至少两个初始分块的迭代计算值累加;在对所述初始分块进行拆分计算时,将所述初始分块被拆分的第一分块的迭代计算值与前一初始分块的迭代计算值累加,将被拆分的第二分块的迭代计算值与后一初始分块的迭代计算值累加。4.根据权利要求2所述的通用矩阵乘计算优化方法,其特征在于,所述基于所述左矩阵、右矩阵的尺寸和所述基本块矩阵的尺寸,以及所述并行计算的计算核心数量,确定计算核心的迭代次数、所述计算区域非规约维的初始分块数量和初始分块的迭代次数包括:基于所述左矩阵、右矩阵的尺寸和所述基本块矩阵的尺寸,确定计算区域非规约维的初始分块数量、初始分块的迭代次数和总迭代次数;基于所述并行计算的计算核心数量和所述总迭代次数,确定计算核心的迭代次数。5.根据权利要求1所述的通用矩阵乘计算优化方法,其特征在于,所述基于所述通用矩阵乘算子内核的尺寸、预先确定的基本块矩阵的尺寸,以及待执行通用矩阵乘的左矩阵、右矩阵的尺寸,优化并行计算的计算核心数量包括:基于所述左矩阵、右矩阵的尺寸和所述基本块矩阵的尺寸,获取总迭代次数;基于所述总迭代次数、所述通用矩阵乘算子内核的规约维尺寸和所述基本块矩阵的规约维尺寸,对预先设置的并行计算的计算核心数量进行优化,得到所述计算核心数量的最
优值。6.根据权利要求5所述的通用矩阵乘计算优化方法,其特征在于,所述基于所述总迭代次数、所述通用矩阵乘算子内核的规约维尺寸和所述基本块矩阵的规约维尺寸,对预先设置的并行计算的计算核心数量进行优化,得到所述计算核心数量的最优值包括:基于所述总迭代次数和预先设置的并行计算的计算核心数量,确定所述计算核心的迭代次数;确定所述计算核心的迭代次数是否满足预先设置的约束条件,所述约束条件由所述通用矩阵乘算子内核的规约维尺寸和所述基本块矩阵的规约维尺寸确定;在不满足所述约束条件的情况下,调整所述并行计算的计算核心数量,直至对应的计算核心的迭代次数满足所述约束条件。7.根据权利要求6所述的通用矩阵乘计算优化方法,其特征在于,所述约束条件用下述等式表示:ck
k
=perkernel-k
blk
,其中,perkernel为计算核心的迭代次数,k
blk
为所述基本块矩阵的规约维尺寸,k
k
为所述通用矩阵乘算子内核的规约维尺寸,c为预先确定的缩放系数,n为所述计算区域按照规约维分块的分块数量取值,n的取值范围用下式表示:8.根据权利要求1所述的通用矩阵乘计算优化方法,其特征在于,所述基于所述算术逻辑单元的宽度、所述寄存器的数量、所述数据缓存的容量,以及预先确定的用于构成通用矩阵乘算子内核的计算核心数量,确定所述通用矩阵乘算子内核的尺寸包括:基于所述算术逻辑单元的宽度、所述寄存器的数量,确定所述计算核心每次迭代处理的数据量;基于所述计算核心数量和所述计算核心每次迭代处理的数据量,确定所述通用矩阵乘算子内核的非规约维尺寸;基于所述左矩阵、右矩阵对应的数据缓存的容量和所述非规约维尺寸,确定所述通用矩阵乘算子内核的规约维尺寸。9.一种通用矩阵乘计算优化装置,所述装置应用于处理器,所述处理器包括至少一个计算核心,所述计算核心包括算术逻辑单元、数据缓存和寄存器,其特征在于,所述装置包括:确定模块,用于基于所述算术逻辑单元的宽度、所述寄存器的数量、所述数据缓存的容量,以及预先确定的用于构成通用矩阵乘算子内核的计算核心数量,确定所述通用矩阵乘算子内核的尺寸;第一优化模块,用于基于所述通用矩阵乘算子内核的尺寸、预先确定的基本块矩阵的尺寸,以及待执行通用矩阵乘的左矩阵、右矩阵的尺寸,优化并行计算的计算核心数量;第二优化模块,用于基于所述并行计算的计算核心数量、所述基本块矩阵的尺寸,以及所述左矩阵、右矩阵的尺寸,对所述数据缓存中通用矩阵乘计算区域的分块计算进行优化。10.一种处理器,其特征在于,所述处理器包括如权利要求9所述的通用矩阵乘计算优化装置,以及至少一个计算核心,所述计算核心包括算术逻辑单元、数据缓存和寄存器。
技术总结
本申请涉及一种通用矩阵乘计算优化方法、装置及处理器,该方法应用于处理器,处理器包括至少一个计算核心,计算核心包括算术逻辑单元、数据缓存和寄存器,包括:基于算术逻辑单元的宽度、寄存器的数量、数据缓存的容量,以及预先确定的用于构成通用矩阵乘算子内核的计算核心数量,确定通用矩阵乘算子内核的尺寸;基于算子内核的尺寸、预先确定的基本块矩阵的尺寸,以及左矩阵、右矩阵的尺寸,优化并行计算的计算核心数量;基于并行计算的计算核心数量、基本块矩阵的尺寸,以及左矩阵、右矩阵的尺寸,对数据缓存中通用矩阵乘计算区域的分块计算进行优化,解决了通用矩阵乘计算硬件资源利用率较低,数据访存开销较大的问题。数据访存开销较大的问题。数据访存开销较大的问题。
技术研发人员:孙红江 陈晨 杨贺淞 范文杰 常璟飞 陈光 曾令仿 李勇 程稳
受保护的技术使用者:之江实验室
技术研发日:2023.08.25
技术公布日:2023/10/15
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
航空商城 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/