一种基于共享内存实现多进程共享gpu的方法

文档序号:6432519阅读:1508来源:国知局
专利名称:一种基于共享内存实现多进程共享gpu的方法
技术领域
本发明涉及图形处理单元GPU (Graphics Processing Unit)的共享方法,尤其指基于共享内存进行数据通信在多进程间共享GPU的方法。
背景技术
近年来,随着GPU硬件技术以及编程模型的不断发展,GPU强大的计算能力受到越来越多的重视,大量的科学计算程序都采用GPU加速其关键代码段,获得了良好的加速比。 使用GPU的科学计算程序的任务为初始化GPU,为GPU准备数据,GPU计算,GPU将计算结果写回,释放GPU。然而,现有的GPU不支持多个进程同时访问。当一个进程初始化GPU之后,在释放 GPU之前,其它的进程是无法使用GPU的。SPMD(Single Program Multi Data,单程序多数据)的并行程序是现在的科学计算程序的主流并行编程模式,对于SPMD的并行程序,每个进程执行的代码是相同的,只是处理的数据不同。当SPMD并行程序的多个进程运行在单个异构计算结点(由一个或多个CPU、一个GPU构成,如图1所示)上时,在SPMD程序利用 GPU加速的计算过程中,由于每个进程执行的代码是相同的,多个进程会同时竞争使用同一个GPU,这样就会导致并行程序出现运行故障。如图2所示,Ptl和P1是指异构计算结点上运行的SPMD程序的进程,这两个进程会同时竞争同一个GPU,导致并行程序无法运行。目前,美国专利 US20090201303A1 "Multi-User Multi-GPU Render Server Apparatus And Methods”给出了一种网络环境下多个用户共享使用一个GPU服务端的方法。GPU服务端是一个含有一个或多个GPU设备的计算结点,一个或多个客户端计算机可以同时连接到GPU服务端。GPU服务端接收客户端的消息,创建数据集的绘制图像,然后,将绘制的图像发回到客户端。但是,这种网络环境中共享GPU的方法中,客户端与服务端之间的数据传输通过网络完成,传输速度慢,不能适用于单个计算结点上多个进程共享使用GPU 的情况。综上所述,当前的专利与文献中未见有如何在CPU+GPU的异构计算结点(由一个或多个CPU、一个GPU构成)上多个SPMD程序的进程共享GPU的相关报道,在单个异构计算结点上解决SPMD程序的进程共享使用GPU是本领域技术人员迫切希望解决的技术问题。

发明内容
本发明要解决的技术问题在于针对单个异构计算结点上SPMD程序的多个进程之间不能共享使用GPU的情况,提出了一种基于共享内存进行数据通信的方法,实现多进程共享使用GPU。以下将SPMD程序的进程简称为进程。请求GPU加速的进程称为GPU客户端,响应GPU加速请求的进程称为GPU服务端。 计算结点中存在多个GPU客户端和一个GPU服务端。本发明的技术方案为启动GPU服务端,GPU服务端等待GPU客户端请求信号的到来。启动GPU客户端,在需要GPU加速时,GPU客户端发送请求信号给GPU服务端,GPU服务
3端响应最先接收到的请求信号,使用GPU进行加速计算,同时GPU客户端执行CPU的计算过程。GPU计算过程中,来自GPU客户端的请求信号进入操作系统的信号队列排队。GPU计算完成后,GPU服务端响应信号队列中的其它请求信号。具体技术方案为第一步、启动GPU服务端,GPU服务端使用系统调用sigaction为每个用户信号 (即GPU客户端请求GPU加速计算的信号)设置不同的信号处理函数,信号处理函数是SPMD 程序中的GPU计算过程,即利用GPU进行加速的计算过程;第二步、GPU服务端定义一个信号集合sigusrset,清空sigusrset集合,将设置了信号处理函数的用户信号添加到sigusrset信号集合中;第三步、GPU服务端检查操作系统的信号队列中有是否存在未处理的用户信号,如果不存在,GPU服务端执行第四步,否则GPU服务端执行第八步;第四步、GPU服务端等待从GPU客户端发来的sigusrset信号集合中的用户信号, 如果没有用户信号到来,GPU服务端一直等待;否则,GPU服务端执行第八步;第五步、启动所有的GPU客户端,每个GPU客户端在计算结点的内存中分配一块共享内存空间,共享内存空间的标识是GPU客户端的进程号pid,并使用系统调用shmat将共享内存空间关联到GPU客户端的地址空间,使GPU客户端可以访问共享内存;第六步、GPU客户端执行其计算任务,当所有的GPU客户端进入利用GPU加速的计算过程时,将计算过程的数据写入共享内存空间,设置共享内存空间中的计算完成标识 finished 为 0 ;第七步、所有的GPU客户端发送用户信号,请求GPU服务端的GPU加速过程,发送的用户信号中包含GPU客户端进程号pid信息,GPU客户端跳转到第十一步;第八步、GPU服务端被首先到达的用户信号唤醒,GPU服务端将标识为pid的共享内存空间关联到GPU服务端的地址空间,使GPU服务端可以访问这块内存空间的数据;第九步、GPU服务端调用到达用户信号的信号处理函数,执行GPU加速计算过程, 未被响应的其它GPU客户端的用户信号在操作系统的信号队列中排队;第十步,GPU服务端将计算结果写回标识为pid的共享内存空间,设置这个共享内存空间中的计算完成标识finished为1,并释放对此共享内存空间的关联,GPU服务端跳转到第三步;第十一步,每个GPU客户端判断自己的共享内存空间中的计算完成标识finished 是否为1,如果不为1,表明GPU加速过程未结束,GPU客户端等待GPU服务端将finished设置为1,同时,GPU客户端执行其CPU的计算任务 ’若为1,表明GPU加速过程已结束,GPU客户端执行第十二步;第十二步,每个GPU客户端继续运行其计算任务,如其计算任务已完成,则GPU客户端删除自己的共享内存空间,结束运行;否则,GPU客户端跳转到第六步。与现有技术相比,采用本发明可达到以下技术效果在只包含一个GPU的单个异构计算结点上,采用本发明可以使SPMD程序的多个需要GPU加速的进程在运行时不会出现运行故障,GPU可以被多个进程共享使用。


图1是一个异构计算结点结构图。图2传统的多进程使用GPU的方法图。图3本发明中多进程共享使用GPU示意图。图4是本发明总体流程图。
具体实施方案图3是本发明中多进程共享使用GPU示意图。计算结点上运行两个GPU客户端和一个GPU服务端。每个GPU客户端分配一块自己的内存空间,以GPU客户端的进程号pid为标识。GPU客户端使用GPU时,发送用户信号, 用户信号进入信号队列。GPU服务端响应信号队列中的用户信号,进入信号处理函数,使用 GPU进行加速计算。图4是本发明总体流程图。为了检验本发明效果,国防科大计算机学院在CPU+GPU的单个异构计算结点上进行了实验验证,结点具体配置如下两个化切1 Xeon 5670六核CPU,每个核的频率为 2. 93GHz,两个CPU的双精度浮点计算理论峰值为140Gflops ;GPU加速器NVIDIA Fermi0 测试的程序为HPLinpaCk2.0,程序的核心是使用LU分解方法求解稠密矩阵线性方程组, 矩阵数据为随机生成的双精度浮点值。测试程序采用CUDA(Compute Unified Device Architecture)编程模型实现了双精度浮点稠密矩阵乘加(AmXnXBnXk+CmXn)的GPU加速。应用程序的主要输入参数为N = 50000, NB = 896,P = 1,Q = 2。使用GPU加速的 HPLinpack2. 0是SPMD的并行程序,不使用本发明时,单个异构计算结点上运行两个进程时出现运行故障。测试时在单个结点上运行两个进程,每个进程使用一个Xeon 5670CPU和GPU参与计算。系统中存在一个GPU服务端和两个GPU客户端。采用本发明进行两个进程共享GPU 时,如图4所示,步骤如下第一步、启动GPU服务端,GPU服务端定义一个用户信号SIOTGEMMdfSIOTGEMMW 信号处理函数设置为dgemmjiandler,dgemm_handler是双精度浮点稠密矩阵乘加的GPU加速计算过程;第二步、GPU服务端定义一个信号集合sigusrset,使用操作系统调用 sigemptyset清空sigusrset集合,将用户信号SI⑶GEMM添加到sigusrset信号集合中;第三步、GPU服务端检查操作系统的信号队列中有是否存在未处理的SI⑶GEMM信号,如果有,GPU服务端执行第八步,否则GPU服务端执行第四步;第四步、GPU服务端等待从GPU客户端发来的SIGDGEMM信号,如果没有用户信号到来,GPU服务端一直等待;否则,GPU服务端执行第八步;第五步、启动两个GPU客户端,两个GPU客户端使用操作系统的系统调用shmget 分配自己的共享内存空间,共享内存空间的标识是GPU客户端的进程号pid,并使用操作系统调用shmat将内存空间关联到GPU客户端的地址空间;第六步、GPU客户端执行其计算任务,当两个GPU客户端进入双精度浮点稠密矩阵乘加计算过程时,将双精度浮点稠密矩阵乘加的矩阵数据传输到自己的共享内存空间中, 设置共享内存空间中的计算完成标识finished为0 ;
第七步、每个GPU客户端使用系统调用sigqueue向GPU服务端发送信号 SI⑶GEMM,SI⑶GEMM信号中包含GPU客户端的进程号pid信息,GPU客户端执行第i^一步;第八步、GPU服务端被先到达的SI⑶GEMM信号唤醒,根据SI⑶GEMM信号中包含的 Pid信息,GPU服务端将标识为Pid的共享内存空间关联到GPU服务端的地址空间,GPU服务端可以访问这块地址空间的矩阵数据;第九步、GPU服务端执行信号处理函数dgemmjmndler,进行GPU的加速计算,未被响应的GPU客户端的SIGDGEMM信号在操作系统的信号队列中排队;第十步,GPU服务端将计算结果写回标识为pid的共享内存空间,设置这个共享内存空间中的计算完成标识finished为1,并释放对此共享内存空间的关联,GPU服务端跳转
到第三步;第十一步,每个GPU客户端判断自己的共享内存空间中的计算完成标识finished 是否为1,如果不为1,表明GPU加速过程未结束,GPU客户端等待GPU服务端将finished设置为1,同时,GPU客户端执行其CPU的计算任务 ’若为1,表明GPU加速过程已结束,GPU客户端执行第十二步;第十二步,每个GPU客户端继续运行其计算任务,如其计算任务已完成,则GPU客户端利用系统调用shmctl删除自己的共享内存空间,结束运行;否则,GPU客户端跳转到第
丄止使用本发明时应用程序运行时间为Ml. 40秒,性能为360. IGflops ;不使用本发明时,应用程序运行过程中出现访问GPU设备错,无法在单结点上运行并行程序的多个进禾呈。
权利要求
1. 一种基于共享内存实现多进程共享GPU的方法,其特征在于包括以下步骤 第一步、启动GPU服务端,GPU服务端使用系统调用sigaction为每个用户信号设置不同的信号处理函数,用户信号指GPU客户端请求GPU加速计算的信号,信号处理函数是SPMD 即单程序多数据程序中的GPU计算过程,即利用GPU进行加速的计算过程;第二步、GPU服务端定义一个信号集合sigusrset,清空sigusrset集合,将设置了信号处理函数的用户信号添加到sigusrset信号集合中;第三步、GPU服务端检查操作系统的信号队列中有是否存在未处理的用户信号,如果不存在,GPU服务端执行第四步,否则GPU服务端执行第八步;第四步、GPU服务端等待从GPU客户端发来的sigusrset信号集合中的用户信号,如果没有用户信号到来,GPU服务端一直等待;否则,GPU服务端执行第八步;第五步、启动所有的GPU客户端,每个GPU客户端在计算结点的内存中分配一块共享内存空间,共享内存空间的标识是GPU客户端的进程号pid,并使用系统调用shmat将共享内存空间关联到GPU客户端的地址空间,使GPU客户端可以访问共享内存;第六步、GPU客户端执行其计算任务,当所有的GPU客户端进入利用GPU加速的计算过程时,将计算过程的数据写入共享内存空间,设置共享内存空间中的计算完成标识 finished 为 O ;第七步、所有的GPU客户端发送用户信号,请求GPU服务端的GPU加速过程,发送的用户信号中包含GPU客户端进程号pid信息,GPU客户端跳转到第十一步;第八步、GPU服务端被首先到达的用户信号唤醒,GPU服务端将标识为pid的共享内存空间关联到GPU服务端的地址空间,使GPU服务端可以访问这块内存空间的数据;第九步、GPU服务端调用到达用户信号的信号处理函数,执行GPU加速计算过程,未被响应的其它GPU客户端的用户信号在操作系统的信号队列中排队;第十步,GPU服务端将计算结果写回标识为pid的共享内存空间,设置这个共享内存空间中的计算完成标识finished为1,并释放对此共享内存空间的关联,GPU服务端跳转到第步;第十一步,每个GPU客户端判断自己的共享内存空间中的计算完成标识finished是否为1,如果不为1,表明GPU加速过程未结束,GPU客户端等待GPU服务端将finished设置为1,同时,GPU客户端执行其CPU的计算任务;若为1,表明GPU加速过程已结束,GPU客户端执行第十二步;第十二步,每个GPU客户端继续运行其计算任务,如其计算任务已完成,则GPU客户端删除自己的共享内存空间,结束运行;否则,GPU客户端跳转到第六步。
全文摘要
本发明公开了一种基于共享内存实现多进程共享GPU的方法,目的是解决单个异构计算结点上SPMD程序的多个进程之间不能共享使用GPU的问题。技术方案是启动GPU服务端,GPU服务端等待GPU客户端请求信号的到来。启动GPU客户端,在需要GPU加速时,GPU客户端发送请求信号给GPU服务端,GPU服务端响应最先接收到的请求信号,使用GPU进行加速计算,同时GPU客户端执行CPU的计算过程。GPU计算过程中,来自GPU客户端的请求信号进入操作系统的信号队列排队。GPU计算完成后,GPU服务端响应信号队列中的其它请求信号。在只包含一个GPU的单个异构计算结点上,采用本发明可以使SPMD程序的多个需要GPU加速的进程在运行时不会出现运行故障,GPU可以被多个进程共享使用。
文档编号G06F15/167GK102323917SQ201110262389
公开日2012年1月18日 申请日期2011年9月6日 优先权日2011年9月6日
发明者左克, 彭林, 易会战, 李春江, 杜云飞, 杨灿群, 王 锋, 赵克佳, 陈娟, 黄春 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1