[发明专利]面向异构融合体系结构的矩阵乘加速方法有效
申请号: | 201910076766.0 | 申请日: | 2019-01-27 |
公开(公告)号: | CN109871512B | 公开(公告)日: | 2020-05-22 |
发明(设计)人: | 甘新标;曾瑞庚;杨志辉;孙泽文;吴涛;刘杰;龚春叶;李胜国;杨博;徐涵;晏益慧 | 申请(专利权)人: | 中国人民解放军国防科技大学 |
主分类号: | G06F17/16 | 分类号: | G06F17/16;G06F7/523 |
代理公司: | 长沙中科启明知识产权代理事务所(普通合伙) 43226 | 代理人: | 任合明 |
地址: | 410003 湖*** | 国省代码: | 湖南;43 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 面向 融合 体系结构 矩阵 加速 方法 | ||
1.一种面向异构融合体系结构的矩阵乘加速方法,其特征在于包括以下步骤:
第一步、设计面向异构融合体系结构的分块矩阵乘版本,具体步骤如下:
1.1异构融合体系结构配置与初始化,具体方法是:
定义矩阵A的维度为M×K,矩阵B的维度为K×N,A和B相乘的结果矩阵C的维度为M×N,M,K,N均为正整数;A的第p行第q列元素为apq,0≤p≤M-1,0≤q≤K-1,B的第q行第t列元素为bqt,0≤t≤N-1;
1.2若异构融合体系结构仅由CPU组成,对CPU进行初始化,方法如下:
1.2.1.查询体系结构手册获取一个CPU中计算核的拓扑结构,如果多核CPU中的拓扑结构为mg×ng,即一个CPU中有mg×ng个计算核,物理分布为mg行×ng列,将计算核依次编号为(0,0),(0,1),…(0,ng-1),(1,0),(1,1),…(1,ng-1),……,(i,0),(i,1),…,(i,j),(i,ng-1),……(mg-1,0),(mg-1,1),…(mg-1,ng-1),0≤i≤mg-1,0≤j≤ng-1;
1.2.2.查询体系结构手册获取每个CPU计算核拥有的浮点向量乘累加功能部件FMA的数目me;
1.2.3.利用操作系统提供的初始化函数完成多核CPU初始化;
1.3依据CPU的拓扑结构对A和B进行矩阵划分,将矩阵A划分为mg×ng个A块矩阵,mg×ng个A块矩阵的排布方式与mg×ng个计算核的排布方式相同,第i行第j列个A块矩阵用Aij表示,0≤i≤mg-1,0≤j≤ng-1,每个块矩阵的维度为m×k,其中表示上取整;将K*N的矩阵B划分为ng×mg个B块矩阵,ng×mg个B块矩阵的排布方式与mg×ng个计算核的排布方式相同,第r行第s列B块矩阵用Brs表示,0≤r≤mg-1,0≤s≤ng-1,每个块矩阵的维度为k×n,
1.4初始化结果矩阵C=0,即将C中各元素均赋值为0,令C(mo,no)=0,C(mo,no) 表示结果矩阵第mo行第no列的元素,0≤mo≤M-1,0≤no≤N-1;
1.5矩阵乘加速,得到mg×ng×me个C块矩阵:mg×ng×me个FMA以CPU计算核共享存储空间为共享存储空间,以标量数据缓冲区为数据缓冲区,并行执行分块矩阵乘法操作,使得矩阵乘加速,每个FMA独立完成分配给自己的块矩阵乘,编号为(i',j')的FMA完成块矩阵乘
1.6结果归并,即依据数据分布原理,以CPU计算核共享存储空间为共享存储空间,将共享存储空间的结果归并组成结果矩阵C,按1.2~1.6采用MPI编程方式实现的矩阵乘即为CPU矩阵乘加速版本vcpu;
1.7若异构融合体系结构由CPU和GPU组成,采用CUDA编程方式实现面向GPU的矩阵乘加速版本vgpu,具体方法如下:
1.7.1查询体系结构手册获取每个GPU中计算核的拓扑结构,即GPU中的线程处理器TPU拓扑结构mg×ng,即GPU中有mg×ng个TPU,物理分布为mg行×ng列,依次编号为(0,0),(0,1),…(0,ng-1),
(1,0),(1,1),…(1,ng-1),……,(i,0),(i,1),…,(i,j),…,(i,ng-1),……(mg-1,0),(mg-1,1),…(mg-1,ng-1);
1.7.2查询体系结构手册获取每个TPU拥有的向量浮点乘累加功能部件FMA的数目me;
1.7.3利用操作系统提供的函数完成初始化;
1.7.4矩阵划分,基于GPU的拓扑结构采用1.3步所述的矩阵划分方法对A和B进行分块,得到mg×ng个A块矩阵和ng×mg个B块矩阵;
1.7.5 mg×ng×me个FMA以GPU的Shared Memory为共享存储空间,以GPU的ConstantMemory为数据缓冲区,采用1.5步所述的矩阵乘加速方法并行执行矩阵乘法,每个FMA独立完成分配给自己的块矩阵乘,编号为(i',j')的FMA完成块矩阵乘
1.7.6以GPU的Shared Memory为共享存储空间,采用1.6步所述的结果归并方法完成各FMA计算的C块矩阵结果归并,得到C;
1.8若异构融合体系结构由CPU与MIC组成,采用Offload编程方式实现的MIC矩阵乘加速版本vmic,具体方法如下:
1.8.1查询体系结构手册获取每个MIC中计算核,即如MIC中的向量处理器VPU拓扑结构mg×ng,即一个MIC中有mg×ng个VPU,物理分布为mg行×ng列,依次编号为(0,0),(0,1),…(0,ng-1),(1,0),(1,1),…(1,ng-1),……,(i,0),(i,1),…,(i,j),…,(i,ng-1),……(mg-1,0),(mg-1,1),…(mg-1,ng-1);
1.8.2查询体系结构手册获取每个VPU拥有的向量浮点乘累加功能部件FMA的数目me;
1.8.3利用操作体系提供的函数完成初始化;
1.8.4矩阵划分,基于VPU的拓扑结构采用1.3步所述的矩阵划分方法对A和B进行分块,得到mg×ng个A块矩阵和ng×mg个B块矩阵;
1.8.5 mg×ng×me个FMA以MIC的内存空间即内存为共享存储空间,以共享存储空间便携式Cache为数据缓冲区,采用1.5步所述的矩阵乘加速方法并行执行矩阵乘法,每个FMA独立完成分配给自己的块矩阵乘,编号为(i',j')的FMA完成块矩阵乘
1.8.6以MIC的内存空间为共享存储空间,采用1.6步所述的结果归并方法完成各FMA计算的C块矩阵结果归并,得到C;
1.9若异构融合体系结构由CPU与Matrix2000组成,若Matrix2000采用SCIF编程模式,则采用SCIF编程模式实现矩阵乘加速版本vscif,具体方法如下:
1.9.1查询体系结构手册获取每个Matrix2000中计算核,即Matrix2000中的向量处理单元VPE拓扑结构mg×ng,即Matrix2000中有mg×ng个VPE,物理分布为mg行×ng列,依次编号为(0,0),(0,1),…(0,ng-1),(1,0),(1,1),…(1,ng-1),……,(i,0),(i,1),…,(i,j),…,(i,ng-1),……(mg-1,0),(mg-1,1),…(mg-1,ng-1);
1.9.2查询体系结构手册获取每个VPE拥有的向量浮点乘累加功能部件FMA(FusedMultiply Add)的数目me;
1.9.3利用操作系统提供的函数完成初始化;
1.9.4矩阵划分,基于VPE的拓扑结构采用1.3步所述的矩阵划分方法对A和B进行分块,得到mg×ng个A块矩阵和ng×mg个B块矩阵;
1.9.5 mg×ng×me个FMA以Matrix2000的全局空间Global Cache为共享存储空间,以共享存储空间Array Memory为数据缓冲区,采用1.5步所述的矩阵乘加速方法并行执行矩阵乘法;每个FMA独立完成分配给自己的块矩阵乘,编号为(i',j')的FMA完成块矩阵乘
1.9.6以Matrix2000中的共享存储空间Array Memory为共享存储空间,采用1.6步所述的结果归并方法完成各FMA计算的C块矩阵结果归并,得到C;
1.10若异构融合体系结构由CPU与Matrix2000组成,若Matrix2000采用COI编程模式,则采用COI编程模式实现矩阵乘加速版本vcoi,具体方法如下:
1.10.1查询体系结构手册获取系统中计算核,若Matrix2000中的向量处理单元VPE拓扑结构为mg×ng,即Matrix2000中有mg×ng个VPE,物理分布为mg行×ng列,依次编号为(0,0),(0,1),…(0,ng-1),(1,0),(1,1),…(1,ng-1),……,(i,0),(i,1),…,(i,j),…,(i,ng-1),……(mg-1,0),(mg-1,1),…(mg-1,ng-1);
1.10.2查询体系结构手册获取每个VPE拥有的向量浮点乘累加功能部件FMA的数目me;
1.10.3利用系统软件提供的函数完成初始化;
1.10.4矩阵划分,基于VPE的拓扑结构采用1.3步所述的矩阵划分方法对A和B 进行分块,得到mg×ng个A块矩阵和ng×mg个B块矩阵;
1.10.5 mg×ng×me个FMA以Matrix2000的全局空间Global Cache为共享存储空间,以共享存储空间Array Memory为数据缓冲区,采用1.5步所述的矩阵乘加速方法并行执行矩阵乘法;每个FMA独立完成分配给自己的块矩阵乘,编号为(i',j')的FMA完成块矩阵乘
1.10.6以Matrix2000中的共享存储空间Array Memory为共享存储空间,采用1.6步所述的结果归并方法完成各FMA计算的C块矩阵结果归并,得到C;
1.11若异构融合体系结构由CPU与Matrix2000组成,若Matrix2000采用OpenMP taget编程模式,则采用OpenMP taget编程模式实现OpenMP taget矩阵乘加速版本vtarget,具体方法如下:
1.11.1查询体系结构手册获取系统中计算核,即如Matrix2000中的向量处理单元VPE拓扑结构mg×ng,即系统中有mg×ng个VPE,物理分布为mg行×ng列,依次编号为(0,0),(0,1),…(0,ng-1),(1,0),(1,1),…(1,ng-1),……,(i,0),(i,1),…,(i,j),…,(i,ng-1),……(mg-1,0),(mg-1,1),…(mg-1,ng-1);
1.11.2查询体系结构手册获取每个VPE拥有的向量浮点乘累加功能部件FMA(FusedMultiply Add)的数目me;
1.11.3利用系统软件提供的函数完成初始化;
1.11.4矩阵划分,基于VPE的拓扑结构采用1.3步所述的矩阵划分方法对A和B进行分块,得到mg×ng个A块矩阵和ng×mg个B块矩阵;
1.11.5基于Matrix2000的全局空间Global Cache和共享存储空间Array Memory,mg×ng×me个FMA以Matrix2000的全局空间Global Cache为共享存储空间,以共享存储空间Array Memory为数据缓冲区,采用1.5步所述的矩阵乘加速方法并行执行矩阵乘法;每个FMA独立完成分配给自己的块矩阵乘,编号为(i',j')的FMA完成块矩阵乘
1.11.6以Matrix2000中的共享存储空间Array Memory为共享存储空间,采用1.6步所述的结果归并方法完成各FMA完成的C块矩阵结果归并,得到C;
第二步:集成异构融合多版本矩阵乘,方法如下:
2.1分别编译vcpu、vgpu、vmic、vtarget、vcoi和vscif对应的源代码,生成vcpu、vgpu、vmic、vtarget、vcoi和vscif的可执行文件;
2.2利用tar命令将vcpu、vgpu、vmic、vtarget、vcoi和vscif的可执行文件打包生成异构融合版本的库文件HU-xgemm;
第三步、适配异构融合体系结构中的加速器,方法如下:
3.1利用操作系统命令lspci|grep processor查询异构融合体系结构中加速器类型,令加速器类型变量arc为加速器类型;
3.2若arc=Matrix2000,转3.2.1:否则,转3.3;
3.2.1.查询Matrix2000编程技术手册,确认支持的编程模型,赋值给编程模型变量prolan;
3.2.2.若prolan=OpenMP taget,调用HU-xgemm中的vcpu和vtarget分别完成主处理器CPU端和加速器Matrix2000端的矩阵乘计算;否则,转3.2.3;
3.2.3.若prolan=COI,调用HU-xgemm中的vcpu和vcoi分别完成主处理器CPU端和加速器Matrix2000端的矩阵乘计算;否则,转3.2.4;
3.2.4.若prolan=SCIF,调用HU-xgemm中的vcpu和vscif分别完成主处理器CPU端和加速器Matrix2000端的矩阵乘计算;否则,转3.3;
3.3若arc=MIC,调用HU-xgemm中的vcpu和vmic分别完成主处理器CPU端和加速器MIC端的矩阵乘计算;否则,转3.4;
3.4若arc=GPU,调用HU-xgemm中的vcpu和vgpu分别完成主处理器CPU端和加速器GPU端的矩阵乘计算;否则,转3.5;
3.5若系统中无专用加速器,即只有CPU,调用HU-xgemm中的vcpu完成矩阵乘计算。
2.如权利要求1所述的面向异构融合体系结构的矩阵乘加速方法,其特征在于1.2.3步所述操作系统提供的初始化函数指init函数。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军国防科技大学,未经中国人民解放军国防科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910076766.0/1.html,转载请声明来源钻瓜专利网。