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

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

Info

Publication number
CN102323917B
CN102323917B CN 201110262389 CN201110262389A CN102323917B CN 102323917 B CN102323917 B CN 102323917B CN 201110262389 CN201110262389 CN 201110262389 CN 201110262389 A CN201110262389 A CN 201110262389A CN 102323917 B CN102323917 B CN 102323917B
Authority
CN
China
Prior art keywords
gpu
client
service end
signal
shared memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN 201110262389
Other languages
English (en)
Other versions
CN102323917A (zh
Inventor
杜云飞
杨灿群
易会战
王�锋
黄春
赵克佳
陈娟
李春江
左克
彭林
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
National University of Defense Technology
Original Assignee
National University of Defense Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN 201110262389 priority Critical patent/CN102323917B/zh
Publication of CN102323917A publication Critical patent/CN102323917A/zh
Application granted granted Critical
Publication of CN102323917B publication Critical patent/CN102323917B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Transfer Between Computers (AREA)

Abstract

本发明公开了一种基于共享内存实现多进程共享GPU的方法,目的是解决单个异构计算结点上SPMD程序的多个进程之间不能共享使用GPU的问题。技术方案是启动GPU服务端,GPU服务端等待GPU客户端请求信号的到来。启动GPU客户端,在需要GPU加速时,GPU客户端发送请求信号给GPU服务端,GPU服务端响应最先接收到的请求信号,使用GPU进行加速计算,同时GPU客户端执行CPU的计算过程。GPU计算过程中,来自GPU客户端的请求信号进入操作系统的信号队列排队。GPU计算完成后,GPU服务端响应信号队列中的其它请求信号。在只包含一个GPU的单个异构计算结点上,采用本发明可以使SPMD程序的多个需要GPU加速的进程在运行时不会出现运行故障,GPU可以被多个进程共享使用。

Description

一种基于共享内存实现多进程共享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所示,P0和P1是指异构计算结点上运行的SPMD程序的进程,这两个进程会同时竞争同一个GPU,导致并行程序无法运行。
目前,美国专利US20090201303A1“Multi-User Multi-GPU Render Server ApparatusAnd 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服务端响应最先接收到的请求信号,使用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客户端对应的共享内存空间的标识是GPU客户端的进程号pid,并使用系统调用shmat将所述GPU客户端对应的共享内存空间关联到GPU客户端的地址空间,使GPU客户端可以访问共享内存;
第六步、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的单个异构计算结点上进行了实验验证,结点具体配置如下:两个Intel Xeon 5670六核CPU,每个核的频率为2.93GHz,两个CPU的双精度浮点计算理论峰值为140Gflops;GPU加速器:NVIDIA Fermi。测试的程序为HPLinpack2.0,程序的核心是使用LU分解方法求解稠密矩阵线性方程组,矩阵数据为随机生成的双精度浮点值。测试程序采用CUDA(Compute Unified DeviceArchitecture)编程模型实现了双精度浮点稠密矩阵乘加(Am×n×Bn×k+Cm×n)的GPU加速。应用程序的主要输入参数为:N=50000,NB=896,P=1,Q=2。使用GPU加速的HPLinpack2.0是SPMD的并行程序,不使用本发明时,单个异构计算结点上运行两个进程时出现运行故障。
测试时在单个结点上运行两个进程,每个进程使用一个Xeon 5670CPU和GPU参与计算。系统中存在一个GPU服务端和两个GPU客户端。采用本发明进行两个进程共享GPU时,如图4所示,步骤如下:
第一步、启动GPU服务端,GPU服务端定义一个用户信号SIGDGEMM,将SIGDGEMM的信号处理函数设置为dgemm_handler,dgemm_handler是双精度浮点稠密矩阵乘加的GPU加速计算过程;
第二步、GPU服务端定义一个信号集合sigusrset,使用操作系统调用sigemptyset清空sigusrset集合,将用户信号SIGDGEMM添加到sigusrset信号集合中;
第三步、GPU服务端检查操作系统的信号队列中有是否存在未处理的SIGDGEMM信号,如果有,GPU服务端执行第八步,否则GPU服务端执行第四步;
第四步、GPU服务端等待从GPU客户端发来的SIGDGEMM信号,如果没有用户信号到来,GPU服务端一直等待;否则,GPU服务端执行第八步;
第五步、启动两个GPU客户端,两个GPU客户端使用操作系统的系统调用shmget分配自己的共享内存空间,所述GPU客户端对应的共享内存空间的标识是GPU客户端的进程号pid,并使用操作系统调用shmat将所述GPU客户端对应的内存空间关联到GPU客户端的地址空间;
第六步、GPU客户端执行其计算任务,当两个GPU客户端进入双精度浮点稠密矩阵乘加计算过程时,将双精度浮点稠密矩阵乘加的矩阵数据传输到所述GPU客户端对应的共享内存空间中,设置所述GPU客户端对应的共享内存空间中的计算完成标识finished为0;
第七步、每个GPU客户端使用系统调用sigqueue向GPU服务端发送信号SIGDGEMM,SIGDGEMM信号中包含GPU客户端的进程号pid信息,GPU客户端执行第十一步;
第八步、GPU服务端被先到达的SIGDGEMM信号唤醒,根据SIGDGEMM信号中包含的pid信息,GPU服务端将标识为pid的共享内存空间关联到GPU服务端的地址空间,GPU服务端可以访问这块地址空间的矩阵数据;
第九步、GPU服务端执行信号处理函数dgemm_handler,进行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客户端跳转到第六步。
使用本发明时应用程序运行时间为231.40秒,性能为360.1Gflops;不使用本发明时,应用程序运行过程中出现访问GPU设备错,无法在单结点上运行并行程序的多个进程。

Claims (1)

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客户端对应的共享内存空间的标识是GPU客户端的进程号pid,并使用系统调用shmat将所述GPU客户端对应的共享内存空间关联到GPU客户端的地址空间,使GPU客户端可以访问共享内存;
第六步、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客户端跳转到第六步。
CN 201110262389 2011-09-06 2011-09-06 一种基于共享内存实现多进程共享gpu的方法 Expired - Fee Related CN102323917B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 201110262389 CN102323917B (zh) 2011-09-06 2011-09-06 一种基于共享内存实现多进程共享gpu的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 201110262389 CN102323917B (zh) 2011-09-06 2011-09-06 一种基于共享内存实现多进程共享gpu的方法

Publications (2)

Publication Number Publication Date
CN102323917A CN102323917A (zh) 2012-01-18
CN102323917B true CN102323917B (zh) 2013-05-15

Family

ID=45451661

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 201110262389 Expired - Fee Related CN102323917B (zh) 2011-09-06 2011-09-06 一种基于共享内存实现多进程共享gpu的方法

Country Status (1)

Country Link
CN (1) CN102323917B (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8669990B2 (en) 2009-12-31 2014-03-11 Intel Corporation Sharing resources between a CPU and GPU
CN103810124A (zh) * 2012-11-09 2014-05-21 辉达公司 用于数据传输的系统及方法
CN103226540B (zh) * 2013-05-21 2015-08-19 中国人民解放军国防科学技术大学 基于分组多流的gpu上多区结构网格cfd加速方法
US9401003B2 (en) * 2013-11-18 2016-07-26 Zebrafish Labs, Inc. Just-in-time processing of images
US9654602B2 (en) 2014-01-22 2017-05-16 Zebrafish Labs, Inc. User interface for just-in-time image processing
CN106681694A (zh) * 2016-12-30 2017-05-17 中国科学院计算技术研究所 基于NVIDIA Kepler GPU汇编指令的单精度矩阵乘优化方法与系统
CN110928702B (zh) * 2018-09-20 2023-03-21 北京君正集成电路股份有限公司 多进程消息通讯系统
US11210757B2 (en) * 2019-12-13 2021-12-28 Advanced Micro Devices, Inc. GPU packet aggregation system
CN112199326B (zh) * 2020-12-04 2021-02-19 中国人民解放军国防科技大学 阵列异构型计算系统上动态构建软件超结点的方法和装置
CN116723191B (zh) * 2023-08-07 2023-11-10 深圳鲲云信息科技有限公司 利用加速装置执行数据流加速计算的方法和系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101551761A (zh) * 2009-04-30 2009-10-07 浪潮电子信息产业股份有限公司 一种异构多处理器中共享流内存的方法
CN102103567A (zh) * 2009-12-21 2011-06-22 英特尔公司 在异构处理器之间共享基于虚拟存储器的多版本数据

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8669990B2 (en) * 2009-12-31 2014-03-11 Intel Corporation Sharing resources between a CPU and GPU

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101551761A (zh) * 2009-04-30 2009-10-07 浪潮电子信息产业股份有限公司 一种异构多处理器中共享流内存的方法
CN102103567A (zh) * 2009-12-21 2011-06-22 英特尔公司 在异构处理器之间共享基于虚拟存储器的多版本数据

Also Published As

Publication number Publication date
CN102323917A (zh) 2012-01-18

Similar Documents

Publication Publication Date Title
CN102323917B (zh) 一种基于共享内存实现多进程共享gpu的方法
US11429442B2 (en) Parallel and distributed computing using multiple virtual machines
CN106663028B (zh) 动态碎片分配调整
CN104866374A (zh) 基于多任务的离散事件并行仿真及时间同步方法
CN111367630A (zh) 一种基于云计算的多用户多优先级的分布式协同处理方法
US20210357759A1 (en) Task processing method and device based on neural network
JP2022515302A (ja) 深層学習モデルをトレーニングするための方法及び装置、電子機器、コンピュータ可読記憶媒体並びにコンピュータプログラム
EP2807555B1 (en) Para-virtualized asymmetric gpu processors
CN108416433A (zh) 一种基于异步事件的神经网络异构加速方法和系统
US9378533B2 (en) Central processing unit, GPU simulation method thereof, and computing system including the same
Lin et al. Echo: An edge-centric code offloading system with quality of service guarantee
CN111400000A (zh) 网络请求处理方法、装置、设备和存储介质
Parker A flexible, large-scale, distributed agent based epidemic model
US20170097854A1 (en) Task placement for related tasks in a cluster based multi-core system
CN114610474A (zh) 一种异构超算环境下多策略的作业调度方法及系统
CN111352896B (zh) 人工智能加速器、设备、芯片以及数据处理方法
WO2023274278A1 (zh) 一种资源调度的方法、装置及计算节点
CN106227594A (zh) 一种基于分屏的多核cpu帧缓存显示优化方法
Goswami et al. Landrush: Rethinking in-situ analysis for gpgpu workflows
Garibay-Martínez et al. On the scheduling of fork-join parallel/distributed real-time tasks
Alhussian et al. An unfair semi-greedy real-time multiprocessor scheduling algorithm
CN115775199B (zh) 数据处理方法和装置、电子设备和计算机可读存储介质
Zhang et al. Gang scheduling extensions for I/O intensive workloads
Liu et al. BSPCloud: A hybrid distributed-memory and shared-memory programming model
CN112732634B (zh) 面向边缘计算的arm-fpga协同局部动态重构处理方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20130515

Termination date: 20170906

CF01 Termination of patent right due to non-payment of annual fee