一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种GPU批量矩阵乘法加速器及其处理方法

2022-07-02 05:05:49 来源:中国专利 TAG:

一种gpu批量矩阵乘法加速器及其处理方法
技术领域
1.本发明涉及高性能计算的研究领域,特别涉及一种gpu批量矩阵乘法加速器及其处理方法。


背景技术:

2.basic linear algebra subprograms(基本线性代数子程序,blas)是一系列基本线性代数运算函数的接口标准,被广泛用于科学计算和工业界的各个领域。更高级的一些语言和计算库中也是通过调用blas接口实现的(r语言、matlab、numpy、lapack等)。如今随着blas的发展,出现了各种基于不同平台和硬件架构的blas库实现,如cublas、rocblas、mkl、magma、openblas等,并对现代科学领域和工业发展起到了至关重要的作用。
3.经典blas应用场景针对大型输入(大型的矩阵、向量操作)往往有较好的性能表现;然而对于问题规模较小,而问题数量较大的场景下会由于单个问题较小导致资源利用不充分,极大的影响了性能和效率。然而,随着目前高性能计算领域、机器学习等领域的不断发展,这类型的问题常常出现并已经成为了一种新兴趋势,这迫使经典blas需要顺应发展进行优化和扩展。
4.为了解决上面的挑战,近年来提出了批量blas(batch blas)的概念和初步实现。它通过将多个子问题同时并行批量处理的思路,解决以往经典blas中对于这种场景表现较差的窘境。在这些批量blas的例程之中,批量矩阵乘法作为最常用的线性代数操作得到广泛的关注和研究,业界也迫切需要高性能的批量矩阵乘法实现来推动发展。然而,目前已有的批量blas的相关实现与功能上依然较为初级。对于批量矩阵相乘而言,目前基于gpu的blas库(cublas、rocblas)只支持固定尺寸的问题输入,而不支持可变尺寸矩阵计算,极大的限制了其应用场景。
5.为了提高批量矩阵相关计算的适用性和计算效率,目前业界内最先进的magma计算库提出了vbatch方法来支持可变尺寸的矩阵计算。其中,最受关注的便是xgemm_vbatched的一类api。相比于当前cuda、rocm平台中求解可变尺寸的批量矩阵乘法时必须要循环调用xgemm例程来依次求解每个计算实例的方式,它能够同时将所有的计算实例统一载入到gpu端进行并行计算,减少了由于单个实例过小导致的gpu资源空闲和过多的重复调度资源开销,极大地提高了算法执行效率与计算并行性,从而得到了非常可观的加速。
6.然而,在可变尺寸的矩阵计算操作时,不同的计算实例之间不同的内核函数同时调用会导致计算时硬件内部出现不规整;另外,由于各个实例之间互相不同的内核函数划分策略生成的工作组也因为round-robin调度算法,在载入计算单元时导致各个计算单元的工作量不平衡,引起gpu计算资源之间的分配不均,进而对计算并行性和计算密度造成了很大的损害。
7.现有技术中,存在以下问题:在已有的基于gpu的批量矩阵乘法计算库在求解可变尺寸的大批量矩阵乘法时,可变尺寸的矩阵输入分布与工作组调度算法的共同作用会导致计算单元之间出现严重的负载不均衡与内部不规整,影响了计算流水线的执行效率,使得
gpu不能够很好的发挥硬件的并行能力,从而降低了最终算法计算速率。


技术实现要素:

8.本发明的主要目的在于克服现有技术的缺点与不足,提供一种gpu批量矩阵乘法加速器及其处理方法,此加速器嵌入在大批量的矩阵输入计算过程中,可以分析矩阵输入内部的分布特性,并根据分析得到的输入性质,通过对批次序进行优化调整之后,再将调整后的矩阵输入加载到内核函数中进行并行计算,并得到最终的计算结果。在批次序优化中,矩阵的批次顺序会结合gpu的硬件调度特性,通过特定的算法进行重新调整,可以有效提高计算单元的利用效率并达到各个计算单元任务量的负载均衡,提高运行时的计算密度,达到更高的指令并行性、线程并行性和访存并行性,从而充分发挥硬件的计算能力,达到计算加速的目的。
9.本发明的第一目的在于提供一种gpu批量矩阵乘法加速器;
10.本发明的第二目的在于提供一种gpu批量矩阵乘法加速处理方法。
11.本发明的第一目的通过以下的技术方案实现:
12.一种gpu批量矩阵乘法加速器,包括:
13.指令译码处理器,将cpu端提交至指令队列的dma传输包读取并译码,并将译码后的结果传输给dma引擎进而将矩阵数据从cpu端载入;
14.计算单元,用于将载入的矩阵分片进行并行执行计算,通过内核函数并行计算矩阵分片中的分片计算结果;
15.共享内存单元,用于存储矩阵分片的中间计算过程的矩阵部分;
16.高速存储单元,用于存储相关数据;
17.工作组管理器,用于各单元之间的工作管理;
18.由工作组管理器、指令译码处理器、高速存储单元、共享内存单元、计算单元、dma组成主分支电路,用于对矩阵数据进行批次序优化,得到矩阵分片,将矩阵分片载入到计算单元中;
19.由指令译码处理器、高速存储单元、共享内存单元、计算单元、dma组成旁分支电路,当不进行批次序优化时,对矩阵数据直接进行内核函数计算,得到矩阵计算结果。
20.进一步地,所述工作组管理器根据配置信息对网格进行划分,拆分出多个工作组,并将多个工作组数据发送到计算单元中进行计算,并管理调度执行运算的工作组的顺序。
21.进一步地,所述存储相关数据,具体为:相关数据包括输入矩阵尺寸信息、批大小信息、矩阵元素与指针、批次序信息、策略桶、网格配置信息、输出矩阵。
22.进一步地,当批量矩阵乘法问题实例输入至加速器时,加速器通过批次矩阵信息判断是否进入主分支电路,在主分支中统计每个矩阵乘法问题实例的工作量并对其进行粗排序,结合内核函数的尺寸大小与计算单元配置对所述问题实例采取最佳划分分片大小,并对该问题实例规模进行细排序以优化最终批次序,将并将优化后的矩阵数据载入至计算单元中进行计算,得出的最终结果返回至指令译码处理器;若不进入优化分支,则进入旁分支电路,直接将矩阵数据载入至计算单元中来使用内核函数进行计算,并将结果返回。
23.本发明的第二目的通过以下技术方案实现:
24.一种gpu批量矩阵乘法加速处理方法,包括以下步骤:
25.将矩阵数据输入到加速器中,对矩阵数据进行判断,根据判断结果选择是否进行批次序优化;
26.如需要进行批次序优化,对矩阵数据的矩阵尺寸进行统计分析,得到统计分析结果;
27.根据内核函数的分片大小对矩阵数据进行匹配划分,得到划分结果;
28.根据矩阵数据指针进行分类,得到分类结果;
29.依据统计分析结果、划分结果、分类结果重排数据数据输入的批次序;
30.根据重排后的顺序结合内核函数进行重新调用和计算,得到最终运算结果;
31.如不需要进行批次序优化,则直接通过内核函数计算,得到最终运算结果。
32.进一步地,所述批次序优化,具体为:对当前矩阵数据输入进行分析;遍历矩阵数据输入中各个实例的矩阵大小,统计记录各个实例完成计算所需工作量,以及各个实例对应内核函数的分片大小,将符合该实例的内核函数进行标记并将其内核函数转换为当前实例的索引,将各个实例的索引进行记录与分类;对所有实例记录分类后,再次遍历所有实例索引,得到最终的批次序,并将排序好的实例指针重新回写,得到优化后的矩阵数据,将优化后的矩阵数据载入到gpu进行并行计算。
33.进一步地,所述对所有实例记录分类,具体为:遍历整个批次序矩阵数据输入的所有实例,分析所有实例对应的m、n、k,m为实例矩阵中矩阵a与矩阵c的行数,n为实例矩阵中矩阵b与矩阵c的列数,k为实例矩阵中矩阵a的列数与矩阵b的行数;将k值作为内核函数内循环的所需工作量,并作为粗略排序的主键进行排序;再次对每个实例采用分类方式结合当前实例对应的m、n来计算当前实例的内核函数,并对该内核函数进行索引标记,将各个实例按其对应的不同内核函数的尺寸进行分类。
34.进一步地,所述进行排序,具体为:使用各个实例的k值作为主键进行粗排序,即所有实例的顺序按内核函数的工作量大小进行从小到大排序,对所有实例使用基于运算的排序算法,将各个标记好的索引对象存放到与内核函数对应的策略桶中,并提取各个策略桶中存放的所有索引标记,以获得最终排序后的实例次序。
35.进一步地,所述将各个实例按其对应的不同内核函数的尺寸进行分类,具体为:
36.计算当前实例中矩阵c的可选划分策略,待选策略满足以下要求:
[0037][0038]
其中,mi是当前计算实例的对应的矩阵a和矩阵c的行数,ni是是对应的矩阵b和矩阵c的列数;t
mj
是是当前内核函数划分策略的矩阵a和矩阵c的子矩阵的行数,t
nj
是对应的矩阵b和矩阵c的子矩阵的列数;
[0039]
得到多个待选策略后,选择满足以下要求的划分策略作为当前计算实例的最佳划分策略,此时最佳划分策略有最高的并行性,要求为:
[0040]
max{t
mj
×
t
nj
}
[0041]
将当前选择的最佳划分策略的所索引j作为该实例分类的标记索引,并将其放入
到对应的策略桶中,并将当前的最佳划分策略作为该实例使用内核函数的对应依据。
[0042]
进一步地,所述将排序好的实例指针重新回写,具体为:使用排序后的实例次序遍历,并对各个实例的内存指针、维度指针、先导维指针和标量指针次序进行重新调整并回写到矩阵数据输入的指针数组中,供在进行计算时的api接口可以直接调用。
[0043]
本发明与现有技术相比,具有如下优点和有益效果:
[0044]
1、本发明能够在cuda和rocm等主流的科学高性能计算平台上实现并原生执行,极大的增加了软件的通用性和适用范围,涵盖了nvidia与amd的各种支持通用计算的并行计算卡和图形处理器。
[0045]
2、本发明是内核函数调用执行的优化部件,能够有效地减少已有批量可变尺寸矩阵乘法库在求解过程中,因实例工作量不一致与硬件调度算法共同导致的计算单元内部资源总量不平衡的问题,提高计算资源的负载均衡,在减少资源浪费的同时提高计算的密度和并行性,进而提高计算的效率和速度。
[0046]
3、本发明针对的可变尺寸的批量矩阵乘法,在高性能计算场景和机器学习,人工智能场景中应用非常广泛,更是当下高性能异构系统的优化重点之一。该发明对这些场景的相关应用设计构建、高级算法组合都具有很大的意义,可以加速相关领域的应用和算法的执行效率。
附图说明
[0047]
图1是本发明所述一种gpu批量矩阵乘法加速器的结构框图;
[0048]
图2是本发明所述一种gpu批量矩阵乘法加速处理方法的流程图;
[0049]
图3是本发明所述一种gpu批量矩阵乘法加速器的计算流程图;
[0050]
图4是本发明所述一种gpu批量矩阵乘法加速器的内部流程图。
具体实施方式
[0051]
下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
[0052]
实施例1
[0053]
一种gpu批量矩阵乘法加速器,如图1所示,包括:
[0054]
指令译码处理器,将cpu端提交至指令队列的dma传输包读取并译码,并将译码后的结果传输给dma引擎进而将矩阵数据从cpu端载入;
[0055]
计算单元,用于将载入的矩阵分片进行并行执行计算,通过内核函数并行计算矩阵分片中的分片计算结果;
[0056]
共享内存单元,用于存储矩阵分片的中间计算过程的矩阵部分;
[0057]
高速存储单元,用于存储相关数据;
[0058]
工作组管理器,用于各单元之间的工作管理;
[0059]
由工作组管理器、指令译码处理器、高速存储单元、共享内存单元、计算单元、dma组成主分支电路,用于对矩阵数据进行批次序优化,得到矩阵分片,将矩阵分片载入到计算单元中;
[0060]
由指令译码处理器、高速存储单元、共享内存单元、计算单元、dma组成旁分支电
路,当不进行批次序优化时,对矩阵数据直接进行内核函数计算,得到矩阵计算结果。
[0061]
进一步地,所述工作组管理器根据配置信息对网格进行划分,拆分出多个工作组,并将多个工作组数据发送到计算单元中进行计算,并管理调度执行运算的工作组的顺序。
[0062]
进一步地,所述存储相关数据,具体为:相关数据包括输入矩阵尺寸信息、批大小信息、矩阵元素与指针、批次序信息、策略桶、网格配置信息、输出矩阵。
[0063]
该加速器的实施步骤如图2所示,结合cpu端和gpu端如图3所示,其加速器具体内部流程图如图4所示:
[0064]
步骤一:先根据当前矩阵输入情况进行判断,如果批次本身已经是优化后的次序,或者显性指定不需要进行次序优化,则进入旁路分支,直接进入内核函数调用来进行运算。否则,进入批次序优化流程。
[0065]
步骤二:若进入批次序优化流程,则先对当前矩阵输入进行分析,遍历输入中各个实例的矩阵大小,以统计记录各个实例对应的工作组所需的工作量。工作量由k,即矩阵a的列数和矩阵b的行数决定。
[0066]
步骤三:将各个实例以k为主键进行首轮粗排序,将批次中所有的实例按其生成的工作组对应的工作量从大到小排列,此时批中所有实例对应的内核函数依然未规整,需要进一步优化。
[0067]
步骤四:创建与内核函数划分策略同样数量的临时策略桶用以对每个实例进行再次细排序。
[0068]
步骤五:对每个实例计算其最优内核函数与用于分类的标记索引,并将索引放入到对应的策略桶中。最优内核函数与标记索引由以下步骤得到:
[0069]

计算当前计算实例中矩阵c的可选划分策略,待选策略满足以下要求:
[0070]

[0071]
其中,mi是当前计算实例的对应的矩阵a和矩阵c的行数,ni是是对应的矩阵b和矩阵c的列数;t
mj
是是当前内核函数划分策略的矩阵a和矩阵c的子矩阵的行数,t
nj
是对应的矩阵b和矩阵c的子矩阵的列数;
[0072]

得到多个待选策略后,选择满足以下要求的划分策略作为当前计算实例的最佳划分策略。由于

中已经筛选出当前实例所有可行的划分策略,此时使用处理元素量最大的划分策略作为最佳划分策略,以增加单个工作组所处理的矩阵元素数量,同时更大的划分策略方案能够有更高的共享内存利用率,同时指令密度和计算密度最大。即满足以下条件的策略作为最优的划分策略:
[0073]
max{t
mj
×
t
nj
}
[0074]
将当前选择的策略的索引j作为该实例分类的标记索引,并将其放入到对应的策略桶中,并将当前策略作为该实例使用内核函数的对应依据。
[0075]
步骤六:遍历所有的策略桶及桶中所有标记索引以得到调整后的批次序,并将索引对应的实例的内存指针、维度指针、先导维指针和标量指针回写到原始输入的对应指针
数组之中,以便于计算时api直接调用。
[0076]
步骤七:对优化批次序后的输入,同时并行调用标记好的内核函数以计算最终的运算结果。结果按修改后的内存指针进行存放,保证数据的一致性与正确性。
[0077]
步骤八:内核函数将计算结果整合并回传至内存,整体计算完毕。
[0078]
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献