虚拟化环境下基于OpenMP的多GPU协同计算方法

文档序号:6524222阅读:228来源:国知局
虚拟化环境下基于OpenMP的多GPU协同计算方法
【专利摘要】本发明公开了一种虚拟化环境下基于OpenMP的多GPU协同计算方法,包括以下步骤:用OpenMP在主机端开设和GPU个数相同的主机端线程,每个主机端线程负责控制一个GPU,在每个设备上为每个线程分配显存,并各自启动内核函数;每个线程设置自己私有主机端和设备的数据指针,数据计算,数据合并,将数据通过GPU私有的设备端数据指针拷贝回私有主机端,在私有主机端进行数据合并,与现有技术相比,本发明在虚拟化环境下实现多GPU协同计算,利用多GPU对单任务进行加速,对基于CPU+GPU异构平台的超级计算、云计算以及网格计算具有重大的理论和现实意义。
【专利说明】虚拟化环境下基于OpenMP的多GPU协同计算方法
【技术领域】
[0001]本发明涉及虚拟化环境下单任务多GPU计算领域,尤其涉及虚拟化环境下基于OpenMP的多GPU协同计算方法。
【背景技术】
[0002]现有的多GPU协同计算技术都是基于物理机,OpenMP—般是用于CPU并行计算的,将其用在GPU中也就在NVIDIA官方的sdk中给出了示例,并没有支持多GPU完整的API,gVirtuS是目前较为成熟的GPU虚拟化解决方案,它解决了在虚拟化环境下利用GPU进行CUDA编程的问题,但它的解决方案全部针对单GPU,并没有对多GPU进行研究,总之,现有技术中,在虚拟化环境下不能利用多GPU对数据规模很大的任务进行同时加速。

【发明内容】

[0003]本发明克服了现有技术的不足,提供一种虚拟化环境下基于OpenMP的多GPU协同计算方法。
[0004]为解决上述技术问题,本发明采用的技术方案为:
虚拟化环境下基于OpenMP的多GPU协同计算方法,包括以下步骤,
步骤S01,在服务端部署GPU虚拟化(gVirtuS)服务端组件,将在客户端拦截的参数在本地执行,即在物理机上执行,物理机通过OpenMP在主机端开设和GPU个数相同的主机端线程,每个主机端线程负责控制一个GPU,通过编程接口函数将主机端线程的ID号同GPU的设备号对应,将GPU计算的对象定义为N*N矩阵;编程接口函数为cudaSetDevice (cpu_thread_id)函数;
现有技术中,在虚拟化环境下并没有针对GPU的驱动程序,步骤S01,在服务端部署GTO虚拟化(gVirtuS)服务端组件后将具体的执行传递给服务端,服务端完成后将结果传递给虚拟机;
步骤S02,在每个设备上为每个线程分配显存,并各自启动内核函数,计算矩阵复合运算,所述显存大小依据需要计算的数据大小分配,所述内核函数为用于计算矩阵相乘的内核函数;
步骤S03,数据分解,每个线程设置自己私有主机端和设备的数据指针,私有主机端线程指向原始指针不同的起始位置,并通过CUDA复制函数,即cudaMemcpyO函数从自己私有主机端线程的位置拷贝N/n个数据规模达到规模划分的目的,其中N为矩阵的行数或者列数,η为GPU的个数;
步骤S04,数据计算,根据矩阵相乘法则对η个GPU的矩阵进行计算,OpenMP同步模块控制所述GPU计算结果的输出时间,通过ccudaDeviceSynchronizeO函数同步输出数据;步骤S05,数据合并,所述步骤S04中同步数据的数据通过GPU私有的设备端数据指针拷贝回私有主机端,在私有主机端进行数据合并,服务端完成计算后通过socket通信给将计算结果传递给客户端,所述客户端为虚拟机。[0005]步骤S03中GPU个数为4个,分别为GPU0、GPU1、GPU2和GPU3,所述矩阵为A、B、C和D,A*B+C*D数据分解包括以下步骤:
DGPU O执行矩阵A的一半乘以B,GPU I执行矩阵A的另一半乘以B,GPU 2执行矩阵C的一半乘以D,GPU 3执行矩阵C的另一半乘以D ;
2)0penMP同步模块等待GPU0、GPU1、GPU2和GPU3的相乘运算全部完成,将全部数据通过cudaMemcpyO函数拷贝到GPU O上,主机端校验结果的正确性。
[0006]数据计算采用矩阵乘法计算,包括以下步骤:将A矩阵分为4个A/4 (N/4*N),并分别与矩阵B相乘,分别得到4个AB/4矩阵,4个AB/4矩阵组合可以得到结果矩阵AB,以此方法分别计算GPUO、GPUU GPU2和GPU3中矩阵相乘,AB矩阵为N*N矩阵,AB矩阵同样为N*N矩阵。
[0007]与现有技术相比,本发明的有益效果有:本发明在虚拟化环境下实现多GPU协同计算,利用多GPU对单任务进行加速,对基于CPU+GPU异构平台的超级计算、云计算以及网格计算具有重大的理论和现实意义。
【专利附图】

【附图说明】
[0008]图1为本发明的方法流程图。
[0009]图2为本发明数据分解算法示意图。
[0010]图3为本发明数据计算算法示意图。
[0011]图4为A*B+C*D在多GPU与单GPU环境下的计算时间对比图。
【具体实施方式】
[0012]下面结合附图对本发明作更进一步的说明。
[0013]如图1所示,虚拟化环境下基于OpenMP的多GPU协同计算方法,包括以下步骤, 步骤S01,在服务端部署GPU虚拟化(gVirtuS)服务端组件,将在客户端拦截的参数在
本地执行,即在物理机上执行,物理机通过OpenMP在主机端开设和GPU个数相同的主机端线程,每个主机端线程负责控制一个GPU,通过cudaSetDevice (cpu_thread_id)函数将主机端线程的ID号同GPU的设备号对应,将GPU计算的对象定义为N*N矩阵;
步骤S02,在每个设备上为每个线程分配显存,并各自启动内核函数,计算矩阵复合运算,所述显存大小依据需要计算的数据大小分配,所述内核函数为用于计算矩阵相乘的内核函数;
步骤S03,数据分解,每个线程设置自己私有主机端和设备的数据指针,私有主机端线程指向原始指针不同的起始位置,并通过cudaMemcpyO函数从自己私有主机端线程的位置拷贝N/n个数据规模达到规模划分的目的,其中N为矩阵的行数,η为GPU的个数;步骤S04,数据计算,根据矩阵相乘法则对η个GPU的矩阵进行计算,OpenMP同步模块控制所述GPU计算结果的输出时间,通过ccudaDeviceSynchronizeO函数同步输出数据;步骤S05,数据合并,所述步骤S04中同步数据的数据通过GPU私有的设备端数据指针拷贝回私有主机端,在私有主机端进行数据合并,服务端完成计算后通过socket通信给将计算结果传递给客户端(虚拟机)。
[0014]如图2所示,步骤S03中GPU个数为4个,分别为GPUO、GPUU GPU2和GPU3,所述矩阵为A、B、C和D,A*B+C*D数据分解包括以下步骤:
DGPU O执行矩阵A的一半乘以B,GPU I执行矩阵A的另一半乘以B,GPU 2执行矩阵C的一半乘以D,GPU 3执行矩阵C的另一半乘以D ;
2)0penMP同步模块等待GPU0、GPU1、GPU2和GPU3的相乘运算全部完成,将全部数据通ScudaMemcpyO函数拷贝到GPU O上,主机端校验结果的正确性。
[0015]如图3所示,数据计算采用矩阵乘法计算,包括以下步骤:将A矩阵分为4个A/4(N/4*N),并分别与矩阵B相乘,分别得到4个AB/4矩阵,4个AB/4矩阵组合可以得到结果矩阵AB,以此方法分别计算GPUO、GPU1、GPU2和GPU3中矩阵相乘,AB矩阵为N*N矩阵。
[0016]图4为A*B+C*D在在虚拟化环境多GPU与单GPU环境下的计算时间对比图,图示中,当矩阵阶数增大时,单GPU运算时间呈指数上升,耗时比较长,虚拟化环境下基于OpenMP的多GPU协同计算,当矩阵阶数增大时,耗时近似呈线性增加,效率高。
[0017]以上所述仅是本发明的优选实施方式,应当指出:对于本【技术领域】的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
【权利要求】
1.虚拟化环境下基于OpenMP的多GPU协同计算方法,其特征在于:包括以下步骤, 步骤S01,在服务端部署GPU虚拟化服务端组件,将在客户端拦截的参数在本地执行,即在物理机上执行,物理机通过OpenMP在主机端开设和GPU个数相同的主机端线程,每个主机端线程负责控制一个GPU,通过编程接口函数将主机端线程的ID号同GPU的设备号对应,将GPU计算的对象定义为N*N矩阵计算; 步骤S02,在每个设备上为每个线程分配显存,并分别启动内核函数; 步骤S03,数据分解,每个线程设置自己私有主机端和设备的数据指针,私有主机端线程指向原始指针不同的起始位置,并通过CUDA复制函数从自己私有主机端线程的位置拷贝N/n个数据达到规模划分的目的,其中N为矩阵的行数,η为GPU的个数; 步骤S04,数据计算,根据矩阵相乘法则对η个GPU的矩阵进行计算,OpenMP控制所述GPU计算结果的输出时间,同步输出数据; 步骤S05,数据合并,所述步骤S04中同步数据的数据通过GPU私有的设备端数据指针拷贝回私有主机端,在私有主机端进行数据合并,服务端完成计算后通过socket通信,将计算结果传递给客户端。
2.根据权利要求1所述的虚拟化环境下基于OpenMP的多GPU协同计算方法,其特征在于:所述步骤S03中GPU个数为4个,分别为GPUO、GPU1、GPU2和GPU3,所述矩阵为A、B、C和D,A*B+C*D数据分解包括以下步骤: DGPU O执行矩阵A的一半乘以B,GPU I执行矩阵A的另一半乘以B,GPU 2执行矩阵C的一半乘以D,GPU 3执行矩阵C的另一半乘以D ; 2)0penMP同步模块等待GPU0、GPU1、GPU2和GPU3的相乘运算全部完成,将全部数据拷贝到GPU O上,主机端校验结果的正确性。
3.根据权利要求2所述的虚拟化环境下基于OpenMP的多GPU协同计算方法,其特征在于:所述GPU1、GPU2和GPU3中的计算出的数据通过cudaMemcpyO函数拷贝到GPU O。
4.根据权利要求1或者2所述的虚拟化环境下基于OpenMP的多GPU协同计算方法,其特征在于:所述数据计算采用矩阵乘法计算,包括以下步骤:将A矩阵分为4个A/4(N/4*N),并分别与矩阵B相乘,分别得到4个AB/4矩阵,4个AB/4矩阵组合可以得到结果矩阵AB,以此方法分别计算GPUO、GPU1、GPU2和GPU3中矩阵相乘。
5.根据权利要求1所述的虚拟化环境下基于OpenMP的多GPU协同计算方法,其特征在于,所述编程接口函数为cudaSetDevice (cpu_thread_id)函数。
6.根据权利要求1所述的虚拟化环境下基于OpenMP的多GPU协同计算方法,其特征在于,所述步骤S04同步通过ccudaDeviceSynchronize O函数完成。
7.根据权利要求1所述的虚拟化环境下基于OpenMP的多GPU协同计算方法,其特征在于,所述步骤CUDA复制函数为cudaMemcpyO函数。
8.根据权利要求1所述的虚拟化环境下基于OpenMP的多GPU协同计算方法,其特征在于,所述客户端为虚拟机。
9.根据权利要求1所述的虚拟化环境下基于OpenMP的多GPU协同计算方法,其特征在于,所述显存大小依据需要计算的数据大小分配。
10.根据权利要求1所述的虚拟化环境下基于OpenMP的多GPU协同计算方法,其特征在于,所述内核函数为用于计算矩阵相乘的内核函数。
【文档编号】G06F9/38GK103713938SQ201310695055
【公开日】2014年4月9日 申请日期:2013年12月17日 优先权日:2013年12月17日
【发明者】秦谦, 袁家斌 申请人:江苏名通信息科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1