《一种基于共享内存实现多进程共享GPU的方法.pdf》由会员分享,可在线阅读,更多相关《一种基于共享内存实现多进程共享GPU的方法.pdf(8页珍藏版)》请在专利查询网上搜索。
1、10申请公布号CN102323917A43申请公布日20120118CN102323917ACN102323917A21申请号201110262389322申请日20110906G06F15/167200601G06F9/5020060171申请人中国人民解放军国防科学技术大学地址410073湖南省长沙市开福区德雅路109号72发明人杜云飞杨灿群易会战王锋黄春赵克佳陈娟李春江左克彭林74专利代理机构国防科技大学专利服务中心43202代理人郭敏54发明名称一种基于共享内存实现多进程共享GPU的方法57摘要本发明公开了一种基于共享内存实现多进程共享GPU的方法,目的是解决单个异构计算结点上SPMD。
2、程序的多个进程之间不能共享使用GPU的问题。技术方案是启动GPU服务端,GPU服务端等待GPU客户端请求信号的到来。启动GPU客户端,在需要GPU加速时,GPU客户端发送请求信号给GPU服务端,GPU服务端响应最先接收到的请求信号,使用GPU进行加速计算,同时GPU客户端执行CPU的计算过程。GPU计算过程中,来自GPU客户端的请求信号进入操作系统的信号队列排队。GPU计算完成后,GPU服务端响应信号队列中的其它请求信号。在只包含一个GPU的单个异构计算结点上,采用本发明可以使SPMD程序的多个需要GPU加速的进程在运行时不会出现运行故障,GPU可以被多个进程共享使用。51INTCL19中华人。
3、民共和国国家知识产权局12发明专利申请权利要求书1页说明书4页附图2页CN102323927A1/1页21一种基于共享内存实现多进程共享GPU的方法,其特征在于包括以下步骤第一步、启动GPU服务端,GPU服务端使用系统调用SIGACTION为每个用户信号设置不同的信号处理函数,用户信号指GPU客户端请求GPU加速计算的信号,信号处理函数是SPMD即单程序多数据程序中的GPU计算过程,即利用GPU进行加速的计算过程;第二步、GPU服务端定义一个信号集合SIGUSRSET,清空SIGUSRSET集合,将设置了信号处理函数的用户信号添加到SIGUSRSET信号集合中;第三步、GPU服务端检查操作系统。
4、的信号队列中有是否存在未处理的用户信号,如果不存在,GPU服务端执行第四步,否则GPU服务端执行第八步;第四步、GPU服务端等待从GPU客户端发来的SIGUSRSET信号集合中的用户信号,如果没有用户信号到来,GPU服务端一直等待;否则,GPU服务端执行第八步;第五步、启动所有的GPU客户端,每个GPU客户端在计算结点的内存中分配一块共享内存空间,共享内存空间的标识是GPU客户端的进程号PID,并使用系统调用SHMAT将共享内存空间关联到GPU客户端的地址空间,使GPU客户端可以访问共享内存;第六步、GPU客户端执行其计算任务,当所有的GPU客户端进入利用GPU加速的计算过程时,将计算过程的数。
5、据写入共享内存空间,设置共享内存空间中的计算完成标识FINISHED为0;第七步、所有的GPU客户端发送用户信号,请求GPU服务端的GPU加速过程,发送的用户信号中包含GPU客户端进程号PID信息,GPU客户端跳转到第十一步;第八步、GPU服务端被首先到达的用户信号唤醒,GPU服务端将标识为PID的共享内存空间关联到GPU服务端的地址空间,使GPU服务端可以访问这块内存空间的数据;第九步、GPU服务端调用到达用户信号的信号处理函数,执行GPU加速计算过程,未被响应的其它GPU客户端的用户信号在操作系统的信号队列中排队;第十步,GPU服务端将计算结果写回标识为PID的共享内存空间,设置这个共享内。
6、存空间中的计算完成标识FINISHED为1,并释放对此共享内存空间的关联,GPU服务端跳转到第三步;第十一步,每个GPU客户端判断自己的共享内存空间中的计算完成标识FINISHED是否为1,如果不为1,表明GPU加速过程未结束,GPU客户端等待GPU服务端将FINISHED设置为1,同时,GPU客户端执行其CPU的计算任务;若为1,表明GPU加速过程已结束,GPU客户端执行第十二步;第十二步,每个GPU客户端继续运行其计算任务,如其计算任务已完成,则GPU客户端删除自己的共享内存空间,结束运行;否则,GPU客户端跳转到第六步。权利要求书CN102323917ACN102323927A1/4页3。
7、一种基于共享内存实现多进程共享GPU的方法技术领域0001本发明涉及图形处理单元GPUGRAPHICSPROCESSINGUNIT的共享方法,尤其指基于共享内存进行数据通信在多进程间共享GPU的方法。背景技术0002近年来,随着GPU硬件技术以及编程模型的不断发展,GPU强大的计算能力受到越来越多的重视,大量的科学计算程序都采用GPU加速其关键代码段,获得了良好的加速比。使用GPU的科学计算程序的任务为初始化GPU,为GPU准备数据,GPU计算,GPU将计算结果写回,释放GPU。0003然而,现有的GPU不支持多个进程同时访问。当一个进程初始化GPU之后,在释放GPU之前,其它的进程是无法使用。
8、GPU的。SPMDSINGLEPROGRAMMULTIDATA,单程序多数据的并行程序是现在的科学计算程序的主流并行编程模式,对于SPMD的并行程序,每个进程执行的代码是相同的,只是处理的数据不同。当SPMD并行程序的多个进程运行在单个异构计算结点由一个或多个CPU、一个GPU构成,如图1所示上时,在SPMD程序利用GPU加速的计算过程中,由于每个进程执行的代码是相同的,多个进程会同时竞争使用同一个GPU,这样就会导致并行程序出现运行故障。如图2所示,P0和P1是指异构计算结点上运行的SPMD程序的进程,这两个进程会同时竞争同一个GPU,导致并行程序无法运行。0004目前,美国专利US2009。
9、0201303A1“MULTIUSERMULTIGPURENDERSERVERAPPARATUSANDMETHODS”给出了一种网络环境下多个用户共享使用一个GPU服务端的方法。GPU服务端是一个含有一个或多个GPU设备的计算结点,一个或多个客户端计算机可以同时连接到GPU服务端。GPU服务端接收客户端的消息,创建数据集的绘制图像,然后,将绘制的图像发回到客户端。但是,这种网络环境中共享GPU的方法中,客户端与服务端之间的数据传输通过网络完成,传输速度慢,不能适用于单个计算结点上多个进程共享使用GPU的情况。0005综上所述,当前的专利与文献中未见有如何在CPUGPU的异构计算结点由一个或多个。
10、CPU、一个GPU构成上多个SPMD程序的进程共享GPU的相关报道,在单个异构计算结点上解决SPMD程序的进程共享使用GPU是本领域技术人员迫切希望解决的技术问题。发明内容0006本发明要解决的技术问题在于针对单个异构计算结点上SPMD程序的多个进程之间不能共享使用GPU的情况,提出了一种基于共享内存进行数据通信的方法,实现多进程共享使用GPU。以下将SPMD程序的进程简称为进程。0007请求GPU加速的进程称为GPU客户端,响应GPU加速请求的进程称为GPU服务端。计算结点中存在多个GPU客户端和一个GPU服务端。0008本发明的技术方案为启动GPU服务端,GPU服务端等待GPU客户端请求信。
11、号的到来。启动GPU客户端,在需要GPU加速时,GPU客户端发送请求信号给GPU服务端,GPU服务说明书CN102323917ACN102323927A2/4页4端响应最先接收到的请求信号,使用GPU进行加速计算,同时GPU客户端执行CPU的计算过程。GPU计算过程中,来自GPU客户端的请求信号进入操作系统的信号队列排队。GPU计算完成后,GPU服务端响应信号队列中的其它请求信号。0009具体技术方案为0010第一步、启动GPU服务端,GPU服务端使用系统调用SIGACTION为每个用户信号即GPU客户端请求GPU加速计算的信号设置不同的信号处理函数,信号处理函数是SPMD程序中的GPU计算过。
12、程,即利用GPU进行加速的计算过程;0011第二步、GPU服务端定义一个信号集合SIGUSRSET,清空SIGUSRSET集合,将设置了信号处理函数的用户信号添加到SIGUSRSET信号集合中;0012第三步、GPU服务端检查操作系统的信号队列中有是否存在未处理的用户信号,如果不存在,GPU服务端执行第四步,否则GPU服务端执行第八步;0013第四步、GPU服务端等待从GPU客户端发来的SIGUSRSET信号集合中的用户信号,如果没有用户信号到来,GPU服务端一直等待;否则,GPU服务端执行第八步;0014第五步、启动所有的GPU客户端,每个GPU客户端在计算结点的内存中分配一块共享内存空间,。
13、共享内存空间的标识是GPU客户端的进程号PID,并使用系统调用SHMAT将共享内存空间关联到GPU客户端的地址空间,使GPU客户端可以访问共享内存;0015第六步、GPU客户端执行其计算任务,当所有的GPU客户端进入利用GPU加速的计算过程时,将计算过程的数据写入共享内存空间,设置共享内存空间中的计算完成标识FINISHED为0;0016第七步、所有的GPU客户端发送用户信号,请求GPU服务端的GPU加速过程,发送的用户信号中包含GPU客户端进程号PID信息,GPU客户端跳转到第十一步;0017第八步、GPU服务端被首先到达的用户信号唤醒,GPU服务端将标识为PID的共享内存空间关联到GPU服。
14、务端的地址空间,使GPU服务端可以访问这块内存空间的数据;0018第九步、GPU服务端调用到达用户信号的信号处理函数,执行GPU加速计算过程,未被响应的其它GPU客户端的用户信号在操作系统的信号队列中排队;0019第十步,GPU服务端将计算结果写回标识为PID的共享内存空间,设置这个共享内存空间中的计算完成标识FINISHED为1,并释放对此共享内存空间的关联,GPU服务端跳转到第三步;0020第十一步,每个GPU客户端判断自己的共享内存空间中的计算完成标识FINISHED是否为1,如果不为1,表明GPU加速过程未结束,GPU客户端等待GPU服务端将FINISHED设置为1,同时,GPU客户端。
15、执行其CPU的计算任务;若为1,表明GPU加速过程已结束,GPU客户端执行第十二步;0021第十二步,每个GPU客户端继续运行其计算任务,如其计算任务已完成,则GPU客户端删除自己的共享内存空间,结束运行;否则,GPU客户端跳转到第六步。0022与现有技术相比,采用本发明可达到以下技术效果在只包含一个GPU的单个异构计算结点上,采用本发明可以使SPMD程序的多个需要GPU加速的进程在运行时不会出现运行故障,GPU可以被多个进程共享使用。附图说明说明书CN102323917ACN102323927A3/4页50023图1是一个异构计算结点结构图。0024图2传统的多进程使用GPU的方法图。002。
16、5图3本发明中多进程共享使用GPU示意图。0026图4是本发明总体流程图。具体实施方案0027图3是本发明中多进程共享使用GPU示意图。0028计算结点上运行两个GPU客户端和一个GPU服务端。每个GPU客户端分配一块自己的内存空间,以GPU客户端的进程号PID为标识。GPU客户端使用GPU时,发送用户信号,用户信号进入信号队列。GPU服务端响应信号队列中的用户信号,进入信号处理函数,使用GPU进行加速计算。0029图4是本发明总体流程图。0030为了检验本发明效果,国防科大计算机学院在CPUGPU的单个异构计算结点上进行了实验验证,结点具体配置如下两个INTELXEON5670六核CPU,每。
17、个核的频率为293GHZ,两个CPU的双精度浮点计算理论峰值为140GFLOPS;GPU加速器NVIDIAFERMI。测试的程序为HPLINPACK20,程序的核心是使用LU分解方法求解稠密矩阵线性方程组,矩阵数据为随机生成的双精度浮点值。测试程序采用CUDACOMPUTEUNIFIEDDEVICEARCHITECTURE编程模型实现了双精度浮点稠密矩阵乘加AMNBNKCMN的GPU加速。应用程序的主要输入参数为N50000,NB896,P1,Q2。使用GPU加速的HPLINPACK20是SPMD的并行程序,不使用本发明时,单个异构计算结点上运行两个进程时出现运行故障。0031测试时在单个结点。
18、上运行两个进程,每个进程使用一个XEON5670CPU和GPU参与计算。系统中存在一个GPU服务端和两个GPU客户端。采用本发明进行两个进程共享GPU时,如图4所示,步骤如下0032第一步、启动GPU服务端,GPU服务端定义一个用户信号SIGDGEMM,将SIGDGEMM的信号处理函数设置为DGEMM_HANDLER,DGEMM_HANDLER是双精度浮点稠密矩阵乘加的GPU加速计算过程;0033第二步、GPU服务端定义一个信号集合SIGUSRSET,使用操作系统调用SIGEMPTYSET清空SIGUSRSET集合,将用户信号SIGDGEMM添加到SIGUSRSET信号集合中;0034第三步、。
19、GPU服务端检查操作系统的信号队列中有是否存在未处理的SIGDGEMM信号,如果有,GPU服务端执行第八步,否则GPU服务端执行第四步;0035第四步、GPU服务端等待从GPU客户端发来的SIGDGEMM信号,如果没有用户信号到来,GPU服务端一直等待;否则,GPU服务端执行第八步;0036第五步、启动两个GPU客户端,两个GPU客户端使用操作系统的系统调用SHMGET分配自己的共享内存空间,共享内存空间的标识是GPU客户端的进程号PID,并使用操作系统调用SHMAT将内存空间关联到GPU客户端的地址空间;0037第六步、GPU客户端执行其计算任务,当两个GPU客户端进入双精度浮点稠密矩阵乘加。
20、计算过程时,将双精度浮点稠密矩阵乘加的矩阵数据传输到自己的共享内存空间中,设置共享内存空间中的计算完成标识FINISHED为0;说明书CN102323917ACN102323927A4/4页60038第七步、每个GPU客户端使用系统调用SIGQUEUE向GPU服务端发送信号SIGDGEMM,SIGDGEMM信号中包含GPU客户端的进程号PID信息,GPU客户端执行第十一步;0039第八步、GPU服务端被先到达的SIGDGEMM信号唤醒,根据SIGDGEMM信号中包含的PID信息,GPU服务端将标识为PID的共享内存空间关联到GPU服务端的地址空间,GPU服务端可以访问这块地址空间的矩阵数据;0。
21、040第九步、GPU服务端执行信号处理函数DGEMM_HANDLER,进行GPU的加速计算,未被响应的GPU客户端的SIGDGEMM信号在操作系统的信号队列中排队;0041第十步,GPU服务端将计算结果写回标识为PID的共享内存空间,设置这个共享内存空间中的计算完成标识FINISHED为1,并释放对此共享内存空间的关联,GPU服务端跳转到第三步;0042第十一步,每个GPU客户端判断自己的共享内存空间中的计算完成标识FINISHED是否为1,如果不为1,表明GPU加速过程未结束,GPU客户端等待GPU服务端将FINISHED设置为1,同时,GPU客户端执行其CPU的计算任务;若为1,表明GPU加速过程已结束,GPU客户端执行第十二步;0043第十二步,每个GPU客户端继续运行其计算任务,如其计算任务已完成,则GPU客户端利用系统调用SHMCTL删除自己的共享内存空间,结束运行;否则,GPU客户端跳转到第六步。0044使用本发明时应用程序运行时间为23140秒,性能为3601GFLOPS;不使用本发明时,应用程序运行过程中出现访问GPU设备错,无法在单结点上运行并行程序的多个进程。说明书CN102323917ACN102323927A1/2页7图1图2图3说明书附图CN102323917ACN102323927A2/2页8图4说明书附图CN102323917A。