[发明专利]面向异构融合体系结构的矩阵乘加速方法有效
申请号: | 201910076766.0 | 申请日: | 2019-01-27 |
公开(公告)号: | CN109871512B | 公开(公告)日: | 2020-05-22 |
发明(设计)人: | 甘新标;曾瑞庚;杨志辉;孙泽文;吴涛;刘杰;龚春叶;李胜国;杨博;徐涵;晏益慧 | 申请(专利权)人: | 中国人民解放军国防科技大学 |
主分类号: | G06F17/16 | 分类号: | G06F17/16;G06F7/523 |
代理公司: | 长沙中科启明知识产权代理事务所(普通合伙) 43226 | 代理人: | 任合明 |
地址: | 410003 湖*** | 国省代码: | 湖南;43 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: |
本发明公开了一种面向异构融合体系结构的矩阵乘加速方法,目的是面向不同的众核加速器目标体系结构设计一种通用的面向异构融合体系结构矩阵乘加速方法,提高异构系统使用效率。技术方案是先设计面向异构融合体系结构的分块矩阵乘版本,包括v |
||
搜索关键词: | 面向 融合 体系结构 矩阵 加速 方法 | ||
【主权项】:
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划分为mg×ng个B块矩阵,mg×ng个B块矩阵的排布方式与mg×ng个计算核的排布方式相同,第q行第t列B块矩阵用Bqt表示,每个块矩阵的纬度为k×n,1.4初始化结果矩阵C=0,即将C中各元素均赋值为0,令C(m0,n0)=0,C(m0,n0)表示结果矩阵第m0行第n0列的元素,0≤m0≤M‑1,0≤n0≤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块矩阵和mg×ng个B块矩阵;1.7.5 mg×ng×me个FMA以GPU的全局存储空间Shared Memory为共享存储空间,以GPU的共享存储空间Constant Memory为数据缓冲区,采用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块矩阵和mg×ng个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(Fused Multiply Add)的数目me;1.9.3利用操作系统提供的函数完成初始化;1.9.4矩阵划分,基于VPE的拓扑结构采用1.3步所述的矩阵划分方法对A和B进行分块,得到mg×ng个A块矩阵和mg×ng个B块矩阵;1.9.5 mg×ng×me个FMA以Matrix2000的全局空间Global Cache为共享存储空间,以共享存储空间Array Memory为数据缓冲区,采用1.5步所述的矩阵乘加速方法并行执行矩阵乘法;每个FMA独立完成分配给自己的块矩阵乘,编号为(i',j')的FMA完成块矩阵乘1.9.6以MIC中的共享存储空间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块矩阵和mg×ng个B块矩阵;1.10.5 mg×ng×me个FMA以Matrix2000的全局空间Global Cache为共享存储空间,以共享存储空间Array Memory为数据缓冲区,采用1.5步所述的矩阵乘加速方法并行执行矩阵乘法;每个FMA独立完成分配给自己的块矩阵乘,编号为(i',j')的FMA完成块矩阵乘1.10.6以MIC中的共享存储空间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(Fused Multiply Add)的数目me;1.11.3利用系统软件提供的函数完成初始化;1.11.4矩阵划分,基于VPE的拓扑结构采用1.3步所述的矩阵划分方法对A和B进行分块,得到mg×ng个A块矩阵和mg×ng个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以MIC中的共享存储空间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端和加速器Matrix200端的矩阵乘计算;否则,转3.2.4;3.2.4.若prolan=SCIF,调用HU‑xgemm中的vcpu和vscif分别完成主处理器CPU端和加速器Matrix200端的矩阵乘计算;否则,转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完成矩阵乘计算。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军国防科技大学,未经中国人民解放军国防科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201910076766.0/,转载请声明来源钻瓜专利网。