首页 专利交易 科技果 科技人才 科技服务 国际服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

一种提高GEMM计算性能的方法及装置 

买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!

申请/专利权人:华为技术有限公司

摘要:本申请提供了一种提高GEMM计算性能的方法及装置,获取待优化的通用矩阵‑矩阵乘GEMM计算的参数,从至少一个历史的GEMM计算的参数中查询目标参数,目标参数为与待优化的GEMM计算的参数满足预设关系的参数。依据参数与优化方法的预设对应关系,确定所述目标参数对应的优化方法。并使用所述目标参数对应的优化方法,优化所述待优化的GEMM计算。其中,GEMM计算的参数基于参与GEMM计算的矩阵的大小确定。因为将参与待优化的GEMM计算的矩阵的特征作为优化待优化的GEMM计算的依据,所以,在使用深度卷积神经网络对目标进行检测的过程中,即使矩阵的规模小或者形状不规则,也能提高GEMM计算的性能。

主权项:1.一种提高GEMM计算性能的方法,其特征在于,包括:获取待优化的通用矩阵-矩阵乘GEMM计算的参数,所述GEMM计算为第一矩阵乘以第二矩阵的计算,所述GEMM计算的参数基于矩阵参数确定,所述矩阵参数包括矩阵规模参数和或矩阵形状参数集,所述矩阵规模参数为所述第一矩阵的行数、所述第一矩阵的列数和所述第二矩阵的列数的最大公约数,所述矩阵形状参数集中包括:第一参数、第二参数和第三参数,所述第一参数为所述第一矩阵的行数与第一数值的比值,所述第二参数为所述第一矩阵的列数与所述第一数值的比值,所述第三参数为所述第二矩阵的列数与所述第一数值的比值,所述第一数值为所述矩阵规模参数;从参考的GEMM计算的参数中查询目标参数,所述参考的GEMM计算包括至少一个历史的GEMM计算,所述目标参数为与所述待优化的GEMM计算的参数满足预设关系的参数;依据所述目标参数与优化方法的预设对应关系,确定所述目标参数对应的优化方法;使用所述目标参数对应的优化方法,优化所述待优化的GEMM计算。

全文数据:一种提高GEMM计算性能的方法及装置技术领域本申请涉及计算机领域,尤其涉及一种提高GEMM计算性能的方法及装置。背景技术通用矩阵-矩阵乘GeneralMatrix-matrixMultiplication,GEMM计算一般是针对稠密矩阵的计算,在深度学习中有着广泛的应用。深度学习是机器学习中一种基于对数据进行表征学习的方法。随着深度学习的发展,深度卷积神经网络成为应用最为广泛的网络结构,在图像以及语音等领域应用广泛。深度卷积神经网络的核心算法是卷积计算,当前主流的实现方式是将卷积计算转变为GEMM计算。研究表明,GEMM计算占用了深度卷积神经网络的大部分计算资源,可见,GEMM计算的性能直接决定着深度卷积神经网络的性能。目前针对GEMM计算性能优化的方案在深度学习的训练阶段对于性能提升的作用明显。而对于深度学习的检测阶段,现有的提高GEMM计算性能的方法的效果并不好。发明内容本申请提供了一种提高GEMM计算性能的方法及装置,目的在于解决如何提高在深度学习的检测阶段的GEMM计算的性能的问题。为了实现上述目的,本申请提供了以下技术方案:本申请的第一方面提供了一种提高GEMM计算性能的方法,包括:获取待优化的通用矩阵-矩阵乘GEMM计算的参数,所述GEMM计算为第一矩阵乘以第二矩阵的计算,所述GEMM计算的参数基于矩阵参数确定,所述矩阵参数包括矩阵规模参数和或矩阵形状参数集,所述矩阵规模参数为所述第一矩阵的行数、所述第一矩阵的列数和所述第二矩阵的列数的最大公约数,所述矩阵形状参数集中包括:第一参数、第二参数和第三参数,所述第一参数为所述第一矩阵的行数与第一数值的比值,所述第二参数为所述第一矩阵的列数与所述第一数值的比值,所述第三参数为所述第二矩阵的列数与所述第一数值的比值,所述第一数值为所述矩阵规模参数或1。从参考的GEMM计算的参数中查询目标参数,所述参考的GEMM计算包括至少一个历史的GEMM计算,所述目标参数为与所述待优化的GEMM计算的参数满足预设关系的参数。依据参数与优化方法的预设对应关系,确定所述目标参数对应的优化方法。使用所述目标参数对应的优化方法,优化所述待优化的GEMM计算。因为以待优化的GEMM计算的参数作为目标参数的查询依据,进而确定目标参数对应的优化方法,作为待优化的GEMM计算使用的优化方法,所以,将参与待优化的GEMM计算的矩阵的特征作为优化待优化的GEMM计算的依据,使得选择的优化方法与参与待优化的GEMM计算的矩阵的特征相适应,所以,在使用深度卷积神经网络对目标进行检测的过程中,即使矩阵的规模小或者形状不规则,也能有效提高GEMM计算的性能。本申请的第二方面提供了一种提高GEMM计算性能的装置,包括:获取模块、查询模块、确定模块和优化模块。其中,获取模块用于获取待优化的通用矩阵-矩阵乘GEMM计算的参数,所述GEMM计算为第一矩阵乘以第二矩阵的计算,所述GEMM计算的参数基于矩阵参数确定,所述矩阵参数包括矩阵规模参数和或矩阵形状参数集,所述矩阵规模参数为所述第一矩阵的行数、所述第一矩阵的列数和所述第二矩阵的列数的最大公约数,所述矩阵形状参数集中包括:第一参数、第二参数和第三参数,所述第一参数为所述第一矩阵的行数与第一数值的比值,所述第二参数为所述第一矩阵的列数与所述第一数值的比值,所述第三参数为所述第二矩阵的列数与所述第一数值的比值,所述第一数值为所述矩阵规模参数或1。查询模块用于从参考的GEMM计算的参数中查询目标参数,所述参考的GEMM计算包括至少一个历史的GEMM计算,所述目标参数为与所述待优化的GEMM计算的参数满足预设关系的参数。确定模块用于依据参数与优化方法的预设对应关系,确定所述目标参数对应的优化方法。优化模块用于使用所述目标参数对应的优化方法,优化所述待优化的GEMM计算。所述装置在使用深度卷积神经网络对目标进行检测的过程中,即使矩阵的规模小或者形状不规则,也能有效提高GEMM计算的性能。本申请的第三方面提供了一种提高GEMM计算性能的服务器,包括:处理器和存储器。其中,存储器用于存储应用程序,所述处理器用于执行所述存储器中的应用程序,以实现以下功能:获取待优化的通用矩阵-矩阵乘GEMM计算的参数,所述GEMM计算为第一矩阵乘以第二矩阵的计算,所述GEMM计算的参数基于矩阵参数确定,所述矩阵参数包括矩阵规模参数和或矩阵形状参数集,所述矩阵规模参数为所述第一矩阵的行数、所述第一矩阵的列数和所述第二矩阵的列数的最大公约数,所述矩阵形状参数集中包括:第一参数、第二参数和第三参数,所述第一参数为所述第一矩阵的行数与第一数值的比值,所述第二参数为所述第一矩阵的列数与所述第一数值的比值,所述第三参数为所述第二矩阵的列数与所述第一数值的比值,所述第一数值为所述矩阵规模参数或1。从参考的GEMM计算的参数中查询目标参数,所述参考的GEMM计算包括至少一个历史的GEMM计算,所述目标参数为与所述待优化的GEMM计算的参数满足预设关系的参数。依据参数与优化方法的预设对应关系,确定所述目标参数对应的优化方法。使用所述目标参数对应的优化方法,优化所述待优化的GEMM计算。本申请的第四方面提供了一种计算机存储介质,所述计算机可读存储介质中存储有程序指令,所述程序指令在计算机上运行时,执行以下操作:获取待优化的通用矩阵-矩阵乘GEMM计算的参数,所述GEMM计算为第一矩阵乘以第二矩阵的计算,所述GEMM计算的参数基于矩阵参数确定,所述矩阵参数包括矩阵规模参数和或矩阵形状参数集,所述矩阵规模参数为所述第一矩阵的行数、所述第一矩阵的列数和所述第二矩阵的列数的最大公约数,所述矩阵形状参数集中包括:第一参数、第二参数和第三参数,所述第一参数为所述第一矩阵的行数与第一数值的比值,所述第二参数为所述第一矩阵的列数与所述第一数值的比值,所述第三参数为所述第二矩阵的列数与所述第一数值的比值,所述第一数值为所述矩阵规模参数或1。从参考的GEMM计算的参数中查询目标参数,所述参考的GEMM计算包括至少一个历史的GEMM计算,所述目标参数为与所述待优化的GEMM计算的参数满足预设关系的参数。依据参数与优化方法的预设对应关系,确定所述目标参数对应的优化方法。使用所述目标参数对应的优化方法,优化所述待优化的GEMM计算。本申请的第五方面提供了一种计算机程序产品,所述计算机程序产品包含程序指令,所述程序指令被调用时,执行以下操作:获取待优化的通用矩阵-矩阵乘GEMM计算的参数,所述GEMM计算为第一矩阵乘以第二矩阵的计算,所述GEMM计算的参数基于矩阵参数确定,所述矩阵参数包括矩阵规模参数和或矩阵形状参数集,所述矩阵规模参数为所述第一矩阵的行数、所述第一矩阵的列数和所述第二矩阵的列数的最大公约数,所述矩阵形状参数集中包括:第一参数、第二参数和第三参数,所述第一参数为所述第一矩阵的行数与第一数值的比值,所述第二参数为所述第一矩阵的列数与所述第一数值的比值,所述第三参数为所述第二矩阵的列数与所述第一数值的比值,所述第一数值为所述矩阵规模参数或1。从参考的GEMM计算的参数中查询目标参数,所述参考的GEMM计算包括至少一个历史的GEMM计算,所述目标参数为与所述待优化的GEMM计算的参数满足预设关系的参数。依据参数与优化方法的预设对应关系,确定所述目标参数对应的优化方法。使用所述目标参数对应的优化方法,优化所述待优化的GEMM计算。在一个实现方式中,所述从参考的GEMM计算的参数中查询目标参数包括:从预设的优化方法知识库中查询所述目标参数,所述优化方法知识库中包括样本参数与样本优化方法的对应关系,所述样本参数为所述参考的GEMM计算的参数,所述目标参数为与所述待优化的GEMM计算的参数满足所述预设关系的样本参数,所述样本优化方法为所述参考的GEMM计算使用的优化方法,从同一个参考的GEMM计算提取的样本参数与样本优化方法相对应。所述依据参数与优化方法的预设对应关系,确定所述目标参数对应的优化方法包括:从所述优化方法知识库中,确定与所述目标参数对应的样本优化方法。将历史的GEMM计算的参数与使用的优化方法预先对应保存在优化方法知识库中,作为待优化的GEMM计算的优化方法的选择依据,能够降低优化过程的复杂性。在一个实现方式中,在所述从参考的GEMM计算的参数中,查询目标参数之前,还包括:依据所述参考的GEMM计算,提取所述样本参数以及所述样本优化方法。建立从同一个参考的GEMM计算中提取的样本参数与样本优化方法之间的对应关系,建立的对应关系构成所述优化方法知识库。通过预先建立优化方法知识库的方式,减轻优化过程的计算压力。在一个实现方式中,所述GEMM计算的参数为所述矩阵参数。或者,所述GEMM计算的参数为索引值,所述索引值为目标数据在预设的数据序列中的位置序号,所述目标数据为所述数据序列中,与所述矩阵参数的差值最小的数据。索引值的设置,能够进一步提高查询速度。在一个实现方式中,所述使用所述目标参数对应的优化方法,优化所述待优化的GEMM计算包括:从预设的代码库中,查询目标子代码,所述目标子代码在所述代码库中与目标子算法对应,所述目标子算法通过划分与所述目标参数对应的优化方法得到,所述目标子代码用于实现所述目标子算法。将参与所述待优化的GEMM计算的矩阵以及所述目标子代码代入所述GEMM计算的预设代码框架中,以生成目标代码。运行所述目标代码,从而从代码层面实现待优化的GEMM计算的优化过程,以实现待优化的GEMM计算的可执行性。在一个实现方式中,在所述使用所述目标参数对应的优化方法,优化所述待优化的GEMM计算之前,还包括:将所述参考的GEMM计算使用的优化方法划分为预设类型的子算法。依据专家经验,生成子代码,所述子代码用于实现所述子算法。建立所述子代码与所述子算法之间的对应关系,所述对应关系构成所述代码库,其中,用于实现任意一个子算法的子代码与该子算法相对应。通过预先建立优化方法知识库的方式,可以减轻优化过程的计算压力。在一个实现方式中,所述矩阵参数还包括:所述GEMM计算运行的硬件平台的类型。因为深度学习的趋势是检测阶段会部署到嵌入式平台上,且嵌入式平台的计算能力较低,因此,将GEMM计算运行的硬件平台的类型作为矩阵参数中的一个参数,能够进一步优化GEMM计算的性能。在一个实现方式中,所述预设关系包括:相同。或者,包括数据值相同的预先指定的参数。附图说明图1为本申请公开的提高GEMM计算性能的方法以及装置的应用场景的示意图;图2为本申请实施例公开的一种提高GEMM计算性能的方法的流程图;图3为本申请实施例公开的又一种提高GEMM计算性能的方法的流程图;图4为本申请实施例公开的又一种提高GEMM计算性能的方法的流程图;图5为本申请实施例公开的提高GEMM计算性能的装置的结构示意图。具体实施方式本申请公开的提高GEMM计算性能的方法以及装置,可以应用在利用深度卷积神经网络检测目标的过程中。如图1所示,在完成对于深度卷积神经网络的训练之后,深度卷积神经网络被用于检测获取到的目标。例如,通过图像采集设备获取到人脸图像,作为目标,训练好的深度卷积神经网络被用于检测该人脸图像,得到表明人脸身份的检测结果。其中,在对于目标的检测过程中,深度卷积神经网络将卷积计算转换为GEMM计算。申请人在研究的过程中发现,现有的用于提高GEMM计算的性能的方法,针对的对象均为大规模矩阵,因此,应用在需要使用大量样本对深度卷积神经网络进行训练的过程中,对于GEMM计算的性能的提升效果明显。而在使用深度卷积神经网络对目标进行检测的阶段,通常待检测的目标为一幅图像或者一段语音,矩阵的规模并不大,所以,现有的用于提高GEMM计算的性能的方法,在使用深度卷积神经网络对目标进行检测的过程中的效果并不好。本申请实施例提供的提高GEMM计算性能的方法以及装置的目的在于,提高深度学习的检测阶段,即,使用深度卷积神经网络对目标进行检测的过程中GEMM计算的性能。下面将结合附图,对本申请实施例提出的技术方案进行详细的说明。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。图2所示为本申请实施例公开的一种提高GEMM计算性能的方法,包括以下步骤:S201:获取待优化的GEMM计算的参数。通常,参与GEMM计算的如图1所示的图像或者声音目标,均以矩阵的形式表示。GEMM计算为两个矩阵相乘的计算,本申请的实施例中,假设GEMM计算为第一矩阵A乘以第二矩阵B的计算。其中,“第一”和“第二”仅泛指矩阵,而非特指某个具体的矩阵。本实施例中,GEMM计算的参数包括:矩阵形状参数集和矩阵规模参数。或者,GEMM计算的参数为矩阵形状参数集。或者GEMM计算的参数为矩阵规模参数。其中,矩阵形状参数集和矩阵规模参数统称为矩阵参数。矩阵形状参数集用于表示矩阵的长和宽。本实施例中,假设矩阵A的大小为m*k,m表示矩阵A的行数,n表示矩阵A的列数。矩阵B的大小为k*n,k表示矩阵B的行数,n表示矩阵B的列数。矩阵形状参数集中包括m、n和k。可选的,为了简化形状参数以节省内存,可将矩阵形状参数集中的参数转换为mi、ni和ki简化后的形状参数集表示矩阵的长和宽的比例,其中,i为m、n和k的最大公约数。本实施例中,矩阵规模参数为m、n和k的最大公约数i。S202:从参考的GEMM计算的参数中,查询与待优化的GEMM计算的参数满足预设关系的参数,为了便于说明,将参考的GEMM计算的参数中,与待优化的GEMM计算的参数满足预设关系的参数称为目标参数。参考的GEMM计算包括至少一个历史的GEMM计算。历史的GEMM计算是指,已经执行过的GEMM计算,历史的GEMM计算均使用相应的优化方法被优化执行。具体的,可以根据历史的GEMM计算预先建立优化方法知识库,优化方法知识库中包括样本参数与样本优化方法的对应关系,再从优化方法知识库的样本参数中,查询目标参数,并从优化方法知识库的样本优化方法中,查询目标参数对应的样本优化方法。即在S202之前构建优化方法知识库,再通过优化方法知识库实现S202和S203,具体过程如下:优化方法知识库的建立过程为:依据历史的GEMM计算例如历史的GEMM计算的数据,包括记录历史的优化经验以及历史的性能测试数据提取历史的GEMM计算的参数,包括历史的GEMM计算的矩阵形状参数集和或矩阵规模参数、以及历史的GEMM计算使用的优化方法,并建立提取到的数据间的对应关系:从同一个历史的GEMM计算提取的参数与优化方法之间相对应。例如,如表1所示,优化方法知识库中包括各个历史的GEMM计算的矩阵形状参数集包括mi、ni和ki、矩阵规模参数i以及使用的优化方法,其中,优化方法包括矩阵分块大小、是否进行分块打包packing、寄存器分块大小三个方面,表1中的优化方法仅为示例,也可以使用其它优化方法,或者对表1中的优化方法进行增加、删除或修改。为了便于与待优化的GEMM计算的参数区分,本申请的实施例中,将从历史的GEMM计算提取的参数称为样本参数,将从历史的GEMM计算提取的优化方法,称为样本优化方法。表1表1中的任意一行中的样本参数mi、ni、ki和i与样本优化方法具有对应关系。以表1中的第一行为例,样本参数为mi=500、ni=20、ki=3和i=1表1中的m、n和k的数值均为除以三者的最大公约数后的数值,样本优化方法为:矩阵分块大小为256,128,128,即将参与该历史的GEMM计算的两个矩阵的大小分别设置为256*128和128*128、不进行packingNo-packing表示、寄存器分块大小为8,4,即寄存器一次计算8*4个元素。第一行中的样本参数与样本优化方法均从一个历史的GEMM计算中提取,具有对应关系。基于上述优化方法知识库,具体的,S202中依据参数与优化方法的预设对应关系,确定目标参数对应的优化方法的具体实现方式为:从优化方法知识库中,查询目标参数,目标参数为与待优化的GEMM计算的参数满足预设关系的样本参数。其中,预设关系可以为相同,即与待优化的GEMM计算的参数相同的样本参数为目标参数。例如,待优化的GEMM计算的参数包括mi=500、ni=20、ki=3、i=1,则表1中的第一行样本参数与待优化的GEMM计算的参数完全相同,即两者满足预设关系。预设关系还可以为,包括数据值相同的预先指定的参数。即,样本参数和待优化的GEMM计算的参数中均包括预先指定的参数,且预先指定的参数的数据值相同。例如,待优化的GEMM计算的参数包括mi=500、ni=30、ki=3、i=1,表1中没有完全相同的样本参数,如果i为预先指定的参数,因为待优化的GEMM计算的参数中i=1,且表1中第一行的样本参数中i=1,所以表1中第一行的样本参数与待优化的GEMM计算的参数满足预设关系,表1中第一行的样本参数为目标参数。进一步的,可以设置多个预先指定的参数,并设置优先级,按照优先级从高到低的顺序,依次从样本参数中查询目标参数。例如,设置预先指定的参数的优先级顺序为i、mi、ni、ki,则在待优化的GEMM计算的参数包括mi=600、ni=30、ki=3、i=100的情况下,按照优先级顺序,最先从表1中查询到相同数值的样本参数为ki=3,表1中的三行样本参数均与待优化的GEMM计算的参数满足预设关系,在此情况下,可以从三行样本参数中任选其一。S203:依据参数与优化方法的预设对应关系,确定目标参数对应的优化方法。具体的,因为上述优化方法知识库中包括样本参数与样本优化方法的对应关系,因此,可以从优化方法知识库中,确定目标参数对应的优化方法。接上例,因为表1中的第一行样本参数与待优化的GEMM计算的参数完全相同,又因为优化方法知识库中任意一行的样本参数与样本优化方法对应,所以第一行的样本优化方法,即为确定出的优化方法。S204:使用目标参数对应的优化方法,优化待优化的GEMM计算。从图2所示的过程可以看出,本实施例中,将待优化的GEMM计算的矩阵特征形状和或规模参数表示作为优化待优化的GEMM计算的方法的选择依据,从历史的GEMM计算的优化方法中,为待优化的GEMM计算,选择具有相似的矩阵特征的优化方法,因此,选择的优化方法与参与待优化的GEMM计算的矩阵的特征相适应,所以,在使用深度卷积神经网络对目标进行检测的过程中,即使矩阵的规模小或者形状不规则,也能有效提高GEMM计算的性能。图3为本申请实施例公开的又一种提高GEMM计算性能的方法,与图2所示的方法相比,区别在于,待优化的GEMM计算的参数与优化方法知识库中的样本参数均使用矩阵参数的索引值,以实现在优化方法知识库中高效查询目标样本参数以及样本优化方法的目的。图3包括以下步骤:S301:建立优化方法知识库,优化方法知识库中包括样本参数即历史的GEMM计算的矩阵参数的索引值以及样本优化方法。例如,在表1的基础上,增加了索引值的优化方法知识库如表2所示:表2具体的,样本参数的索引值的获取方法为:将样本参数与预设的数据序列中的数据相比较,样本参数的索引值为目标数据在数据序列中的位置序号,目标数据为与样本参数的差值最小的数据。在样本参数为多个的情况下,例如,表2中的每一行均包括样本参数mi、ni、ki和i,按照上述方法得到每一个样本参数的索引值。例如,以表1中第一行为例,假设预先为mi、ni和ki设置的数据序列为3,8,30,80,200,500,800,1000,2000,3000,该数据序列中数据的位置序号从0开始,依次加1,直到9结束。即数据3的位置序号为0,数据8的位置序号为1……,数据3000的位置序号为9。表1中第一行mi=500,因为数据序列中500与mi的差值为0,且500的位置序号为5,则mi的索引值=5。同理,ki的索引值=0。需要说明的是,表1中第一行中ni=20,在数据序列中不存在数据20,则从数据序列中选择与20差值最小的数据的位置序号,作为ni的索引值。上述数据序列中,与20差值最小的数据为30,则ni的索引值=2。假设预先为i设置的数据序列为1,10,100,1000,所以,表1中第一行i的索引值=0。如果数据序列中存在多个目标数据,则可以按照预设的规则,从中选择一个目标数据的位置序号作为索引值。预设的规则可以为:选择最小的位置序号作为索引值,或者,选择最大的位置序号作为索引值。上述举例中,mi、ni和ki作为矩阵形状参数,共用一个数据序列,i作为矩阵规模参数单独使用一个数据序列。除此之外,mi、ni和ki也可以使用不同的预设的数据序列,mi、ni、ki和i也可以共用一个预设的数据序列。上述数据序列均为举例说明,实际应用中,可以依据实际需求,设置数据序列。S302:获取待优化的GEMM计算的参数,即待优化的GEMM计算的矩阵参数的索引值。具体的,使用图1所示的实施例中的方式获取待优化的GEMM计算的矩阵参数。获取待优化的GEMM计算的矩阵参数的索引值的方式与S301中获取样本参数的方式相同。获取待优化的GEMM计算的参数即矩阵参数的索引值使用的数据序列与S301中获取样本参数使用的数据序列相同。例如,S301中获取表2中的样本参数mi、ni和ki的索引值使用的数据序列为3,8,30,80,200,500,800,1000,2000,3000,则获取待优化的GEMM计算的参数使用相同的数据序列。可选的,本实施例中,可以使用哈希数组的形式表示优化方法知识库中的样本参数以及样本优化方法的对应关系,以进一步提高查询与矩阵参数匹配的样本参数的速度。哈希数组的具体形式为:key值-value,其中,key值包括样本参数的索引值,value为优化方法。例如,将表2中的第一行表示为哈希数组:[5][2][0][0]-256,128,128,No-packing,8,4。也就是说,表2中可以不包括mi、ni、ki和i,而仅包括key值-value对。S303:以待优化的GEMM计算的参数为查询索引,从优化方法知识库中查询目标参数。S304:使用目标参数对应的样本优化方法,优化待优化的GEMM计算。具体的,在优化方法知识库中查找与待优化的GEMM计算的参数满足预设关系的key值,并将查询到的key值对应的value作为待优化的GEMM计算使用的优化方法。预设关系如图2所示的实施例中所述,将图2所示的mi、ni、ki和i替换为索引值即可,这里不再赘述。以哈希数组为例,假设待优化的GEMM计算的矩阵参数的索引值为[5][2][0][0],查询表2中的样本参数由,确定与表2中的第一行的样本参数相同,则确定待优化的GEMM计算使用的优化方法为:矩阵分块大小为256,128,128,不进行packing,寄存器分块大小为8,4。因此,在执行待优化的GEMM计算的过程中,将参与待优化的GEMM计算的矩阵分别设置为256*128,128*128,不进行分块打包,寄存器一次计算8*4个元素的方式,实现优化待优化的GEMM计算的目的。从图3所示的过程可以看出,因为索引值相当于对矩阵参数进行了归一化处理,因为索引值与矩阵参数相比,占用的存储资源更少,所以能够提高查询匹配的效率。优化GEMM计算的最终目的是要实现GEMM计算代码的高性能的运行,所以,除了从算法层面优化GEMM计算之外,还可以从GEMM计算的代码以及代码运行硬件着手,提高GEMM计算的性能。图4为本申请实施例公开的又一种提高GEMM计算性能的方法,与图2以及图3的区别在于,增加了硬件以及代码层面提高GEMM计算的性能的手段。图4所示的方法包括以下步骤:S401:建立优化方法知识库。因为深度学习的趋势是检测阶段会部署到嵌入式平台上,且嵌入式平台的计算能力较低,因此,嵌入式平台也是提升GEMM计算的性能的至关重要的因素。所以,本实施例中,优化方法知识库与前述优化方法知识库相比,增加了一个样本参数:历史的GEMM计算运行的硬件平台的类型,如表3所示。表3硬件平台的类型minikii样本优化方法ARMCortexA575002031256,128,128,No-packing,8,4ARMCortexA5750203100,No-packing,4,4ARMCortexA573331000512,256,256,Packing,16,4………………本实施例中,也可以为硬件平台的类型设置索引值,例如,获取硬件平台的类型的索引值使用的数据序列为:ARMCortexA57、ARMCortexA72,则表3中,ARMCortexA57的索引值为0。以哈希数组的方式设置表3,得到表4:表4key值value05200256,128,128,No-packing,8,4022010,No-packing,4,400003512,256,256,Packing,16,4……哈希数组的计算方式可以参见图2以及图3所示的过程,这里不再赘述。S402:建立代码库。具体的,为了便于后续对于代码的调用,可以先将优化方法知识库中的样本优化方法划分为预设类型的子算法,再编写实现各个子算法的代码子算法的代码简称子代码,并建立子代码与子算法之间的对应关系,其中,任意一个子算法与实现该子算法的子代码对应,将各个子代码与子算法的对应关系存储到代码库中。可以在编写代码的过程中引入专家经验,以得到高性能的子代码。以表4所示的样本优化方法即value进行举例:将表4中的每一个样本优化方法划分为三种类型的子算法:矩阵分块子算法、Packing子算法和寄存器分块子算法,再依据样本优化方法中的各类子算法的输入值,编写代码,形成实现各个子算法的代码。表4中,输入值为256,128,128与输入值为512,256,256的矩阵分块子算法同属于矩阵分块子算法,但因为输入值不同,所以,形成的子代码不同。输入值为256,128,128矩阵分块子算法形成的代码的输入值为256,128,128,输入值为512,256,256的矩阵分块子算法形成的代码的输入值为512,256,256。可选的,为了提高子代码的查询效率,为每一类子代码分配一个指针数组。在任意一个指针数组中,每一个指针指向一个该类子代码。进一步的,各个指针还可以携带识别标识,识别标识用于表示指针指向的子代码的输入值。例如,实现输入值为256,128,128的矩阵分块子算法的子代码,与实现输入值为512,256,256的矩阵分块子算法的子代码,指针均存储在矩阵分块子算法的指针数组中,指向实现输入值为256,128,128的矩阵分块子算法的代码的识别标识为0,指向实现输入值为512,256,256的矩阵分块子算法的代码的识别标识为1。代码的输入值与识别标识之间的对应关系可以预先设置。需要说明的是,S401和S402在使用深度卷积神经网络进行检测之前执行。即可以在深度学习的检测阶段开始之前,离线执行S401和S402。下面为使用深度卷积神经网络进行检测的过程中,优化GEMM计算的过程。S403:获取待优化的GEMM计算的参数。其中,待优化的GEMM计算的参数包括待优化的GEMM计算的矩阵参数的索引值和待优化的GEMM计算运行的硬件平台的类型的索引值。假设参与待优化的GEMM计算的矩阵A的大小为500*1600,矩阵B的大小为1600*30。待优化的GEMM计算的代码运行在ARMCortexA57硬件平台上。则待优化的GEMM计算的矩阵规模参数为500、1600和30的最大公约数10,即i=10。待优化的GEMM计算的矩阵形状参数集为:50010=50、160010=160、3010=3。硬件类型参数为ARMCortexA57。以ARMCortexA57、ARMCortexA72为硬件平台的类型参数的数据序列,以3,8,30,80,200,500,800,1000,2000,3000为形状参数集的数据序列,以1,10,100,1000为规模参数的数据序列。则硬件平台的类型参数的索引值为0,形状参数集中的参数mi、ni和ki的索引值依次为2、4、0,规模参数i的索引值为1。因此,待优化的GEMM计算的的key值为[0][2][4][0][1]。S404:使用待优化的GEMM计算的参数从优化方法知识库中查询相同的key值,并获取到相同的key值对应的优化方法即value。查询的方式可以参见前述实施例。S405:从代码库中查询S404中获取到的优化方法中的各个子算法的子代码。具体的,从代码库中,查询目标子算法,目标子算法为代码库中与S404中获取到的优化方法中的子算法相同的子算法,再确定目标子算法对应的子代码目标子算法对应的子代码简称为目标子代码。可选的,可以进一步查询到目标识别标识,目标识别标识为目标子算法的输入值的识别标识,从代码库中的指针中查询携带目标识别标识的指针,该指针指向的子代码即为目标子代码。S406:将参与待优化的GEMM计算的矩阵以及目标子代码代入预设的GEMM计算的代码框架中,以生成目标代码,并运行目标代码。预设的GEMM计算的代码框架包括实现GEMM计算的通用代码。而不同的GEMM计算,参与的矩阵不同,采用的优化子算法也可能不同,因此,在代码框架中,为这些不同之处导致的不通用的代码预留出相应的位置。在获取参与的矩阵和目标子代码后,将参与的矩阵写入代码框架中的输出参数的位置,将目标子代码写入相应的位置可以参见现有技术,即完成待优化的GEMM计算的代码的编写。可选的,可以将目标子代码的指针写入代码框架中相应的位置,使用子函数调用的方式,调用目标子代码。图4所示的方法具有以下优点:1、提高性能:能够实现不同输入规模和形状的矩阵在不同计算平台上GEMM算法的最佳性能,大大提升深度学习算法在嵌入式平台上的性能。2、提高产能:当硬件平台改变时,只需要对子算法的代码库进行专门优化便可实现GEMM算法的最佳性能,在大幅提升性能的同时大大节省了人力资源。3、有益于深度学习产品的应用和推广,具有较高的竞争力。图5为本申请实施例公开的一种提高GEMM计算性能的装置的结构,包括:获取模块、查询模块、确定模块和优化模块,可选的,还包括优化方法知识库建立模块和代码库建立模块。其中,获取模块用于获取待优化的GEMM计算的参数。查询模块用于从参考的GEMM计算的参数中查询目标参数。确定模块用于依据参数与优化方法的预设对应关系,确定所述目标参数对应的优化方法。优化模块用于使用所述目标参数对应的优化方法,优化所述待优化的GEMM计算。具体的,查询模块从优化方法知识库中查询目标参数,确定模块从优化方法知识库中确定与目标参数对应的优化方法,并从代码库中查询与目标参数对应的优化方法的子代码。优化方法知识库建立模块用于建立优化方法知识库。代码库建立模块用于建立代码库。以上各个模块的功能的具体实现方式可以参见上述方法实施例,这里不再赘述。图5所示的提高GEMM计算性能的装置,可以如图1所示,设置在的目标检测系统中。可以单独作为一个实体部署在目标检测系统中,也可以与目标检测系统的其它实体,例如设置在部署了深度卷积神经网络的服务器上。图5所示的装置,用于提高深度卷积神经网络的对于目标检测的性能。本申请实施例还公开了一种提高GEMM计算性能的服务器,包括存储器和处理器。其中,存储器用于存储应用程序。处理器用于执行所述存储器中的应用程序,以实现上述方法实施例所述的方法。存储器与处理器可以通过总线通信。所述处理器可以是通用处理器、数字信号处理器DSP、专用集成电路ASIC,现场可编程门阵列FPGA或者其他可编程逻辑器件、晶体管逻辑器件,硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等等。以上所述的提高GEMM计算性能的服务器,可以设置在图1所示的目标检测系统中,以提高深度卷积神经网络的对于目标检测的性能。本领域技术人员应该可以意识到,在上述一个或多个示例中,本申请所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。以上所述的具体实施方式,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请的具体实施方式而已,并不用于限定本申请的保护范围,凡在本申请的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本申请的保护范围之内。

权利要求:1.一种提高GEMM计算性能的方法,其特征在于,包括:获取待优化的通用矩阵-矩阵乘GEMM计算的参数,所述GEMM计算为第一矩阵乘以第二矩阵的计算,所述GEMM计算的参数基于矩阵参数确定,所述矩阵参数包括矩阵规模参数和或矩阵形状参数集,所述矩阵规模参数为所述第一矩阵的行数、所述第一矩阵的列数和所述第二矩阵的列数的最大公约数,所述矩阵形状参数集中包括:第一参数、第二参数和第三参数,所述第一参数为所述第一矩阵的行数与第一数值的比值,所述第二参数为所述第一矩阵的列数与所述第一数值的比值,所述第三参数为所述第二矩阵的列数与所述第一数值的比值,所述第一数值为所述矩阵规模参数或1;从参考的GEMM计算的参数中查询目标参数,所述参考的GEMM计算包括至少一个历史的GEMM计算,所述目标参数为与所述待优化的GEMM计算的参数满足预设关系的参数;依据参数与优化方法的预设对应关系,确定所述目标参数对应的优化方法;使用所述目标参数对应的优化方法,优化所述待优化的GEMM计算。2.根据权利要求1所述的方法,其特征在于,所述从参考的GEMM计算的参数中查询目标参数包括:从预设的优化方法知识库中查询所述目标参数,所述优化方法知识库中包括样本参数与样本优化方法的对应关系,所述样本参数为所述参考的GEMM计算的参数,所述目标参数为与所述待优化的GEMM计算的参数满足所述预设关系的样本参数,所述样本优化方法为所述参考的GEMM计算使用的优化方法,从同一个参考的GEMM计算提取的样本参数与样本优化方法相对应;所述依据参数与优化方法的预设对应关系,确定所述目标参数对应的优化方法包括:从所述优化方法知识库中,确定与所述目标参数对应的样本优化方法。3.根据权利要求2所述的方法,其特征在于,在所述从参考的GEMM计算的参数中,查询目标参数之前,还包括:依据所述参考的GEMM计算,提取所述样本参数以及所述样本优化方法;建立从同一个参考的GEMM计算中提取的样本参数与样本优化方法之间的对应关系,建立的对应关系构成所述优化方法知识库。4.根据权利要求1-3任一项所述的方法,其特征在于,所述GEMM计算的参数为所述矩阵参数;或者,所述GEMM计算的参数为索引值,所述索引值为目标数据在预设的数据序列中的位置序号,所述目标数据为所述数据序列中,与所述矩阵参数的差值最小的数据。5.根据权利要求1所述的方法,其特征在于,所述使用所述目标参数对应的优化方法,优化所述待优化的GEMM计算包括:从预设的代码库中,查询目标子代码,所述目标子代码在所述代码库中与目标子算法对应,所述目标子算法通过划分与所述目标参数对应的优化方法得到,所述目标子代码用于实现所述目标子算法;将参与所述待优化的GEMM计算的矩阵以及所述目标子代码代入所述GEMM计算的预设代码框架中,以生成目标代码;运行所述目标代码。6.根据权利要求5所述的方法,其特征在于,在所述使用所述目标参数对应的优化方法,优化所述待优化的GEMM计算之前,还包括:将所述参考的GEMM计算使用的优化方法划分为预设类型的子算法;依据专家经验,生成子代码,所述子代码用于实现所述子算法;建立所述子代码与所述子算法之间的对应关系,所述对应关系构成所述代码库,其中,用于实现任意一个子算法的子代码与该子算法相对应。7.根据权利要求1所述的方法,其特征在于,所述矩阵参数还包括:所述GEMM计算运行的硬件平台的类型。8.根据权利要求1所述的方法,其特征在于,所述预设关系包括:相同;或者,包括数据值相同的预先指定的参数。9.一种提高GEMM计算性能的装置,其特征在于,包括:获取模块,用于获取待优化的通用矩阵-矩阵乘GEMM计算的参数,所述GEMM计算为第一矩阵乘以第二矩阵的计算,所述GEMM计算的参数基于矩阵参数确定,所述矩阵参数包括矩阵规模参数和或矩阵形状参数集,所述矩阵规模参数为所述第一矩阵的行数、所述第一矩阵的列数和所述第二矩阵的列数的最大公约数,所述矩阵形状参数集中包括:第一参数、第二参数和第三参数,所述第一参数为所述第一矩阵的行数与第一数值的比值,所述第二参数为所述第一矩阵的列数与所述第一数值的比值,所述第三参数为所述第二矩阵的列数与所述第一数值的比值,所述第一数值为所述矩阵规模参数或1;查询模块,用于从参考的GEMM计算的参数中查询目标参数,所述参考的GEMM计算包括至少一个历史的GEMM计算,所述目标参数为与所述待优化的GEMM计算的参数满足预设关系的参数;确定模块,用于依据参数与优化方法的预设对应关系,确定所述目标参数对应的优化方法;优化模块,用于使用所述目标参数对应的优化方法,优化所述待优化的GEMM计算。10.根据权利要求9所述的装置,其特征在于,所述查询模块用于从参考的GEMM计算的参数中查询目标参数包括:所述查询模块具体用于,从预设的优化方法知识库中查询所述目标参数,所述优化方法知识库中包括样本参数与样本优化方法的对应关系,所述样本参数为所述参考的GEMM计算的参数,所述目标参数为与所述待优化的GEMM计算的参数满足所述预设关系的样本参数,所述样本优化方法为所述参考的GEMM计算使用的优化方法,从同一个参考的GEMM计算提取的样本参数与样本优化方法相对应;所述确定模块用于依据参数与优化方法的预设对应关系,确定所述目标参数对应的优化方法包括:所述确定模块具体用于,从所述优化方法知识库中,确定与所述目标参数对应的样本优化方法。11.根据权利要求10所述的装置,其特征在于,还包括:优化方法知识库建立模块,用于在所述查询模块从参考的GEMM计算的参数中,查询目标参数之前,依据所述参考的GEMM计算,提取所述样本参数以及所述样本优化方法,并建立从同一个参考的GEMM计算中提取的样本参数与样本优化方法之间的对应关系,建立的对应关系构成所述优化方法知识库。12.根据权利要求9-11任一项所述的装置,其特征在于,所述GEMM计算的参数为所述矩阵参数;或者,所述GEMM计算的参数为索引值,所述索引值为目标数据在预设的数据序列中的位置序号,所述目标数据为所述数据序列中,与所述矩阵参数的差值最小的数据。13.根据权利要求9所述的装置,其特征在于,所述优化模块用于使用所述目标参数对应的优化方法,优化所述待优化的GEMM计算包括:所述优化模块具体用于,从预设的代码库中,查询目标子代码,所述目标子代码在所述代码库中与目标子算法对应,所述目标子算法通过划分与所述目标参数对应的优化方法得到,所述目标子代码用于实现所述目标子算法;将参与所述待优化的GEMM计算的矩阵以及所述目标子代码代入所述GEMM计算的预设代码框架中,以生成目标代码;运行所述目标代码。14.根据权利要求13所述的装置,其特征在于,还包括:代码库建立模块,用于在所述优化模块使用所述目标参数对应的优化方法,优化所述待优化的GEMM计算之前,将所述参考的GEMM计算使用的优化方法划分为预设类型的子算法;依据专家经验,生成子代码,所述子代码用于实现所述子算法;建立所述子代码与所述子算法之间的对应关系,所述对应关系构成所述代码库,其中,用于实现任意一个子算法的子代码与该子算法相对应。15.根据权利要求9所述的装置,其特征在于,所述矩阵参数还包括:所述GEMM计算运行的硬件平台的类型。16.根据权利要求9所述的装置,其特征在于,所述预设关系包括:相同;或者,包括数据值相同的预先指定的参数。

百度查询: 华为技术有限公司 一种提高GEMM计算性能的方法及装置

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。