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

上传人:b*** 文档编号:973919 上传时间:2018-03-22 格式:PDF 页数:8 大小:406.52KB
返回 下载 相关 举报
摘要
申请专利号:

CN201110262389.3

申请日:

2011.09.06

公开号:

CN102323917A

公开日:

2012.01.18

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 15/167申请日:20110906|||公开

IPC分类号:

G06F15/167; G06F9/50

主分类号:

G06F15/167

申请人:

中国人民解放军国防科学技术大学

发明人:

杜云飞; 杨灿群; 易会战; 王锋; 黄春; 赵克佳; 陈娟; 李春江; 左克; 彭林

地址:

410073 湖南省长沙市开福区德雅路109号

优先权:

专利代理机构:

国防科技大学专利服务中心 43202

代理人:

郭敏

PDF下载: PDF下载
内容摘要

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

    技术领域 本发明涉及图形处理单元 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 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 服务
     端响应最先接收到的请求信号, 使用 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 的单个异构计算结点上 进行了实验验证, 结点具体配置如下 : 两个 Intel Xeon 5670 六核 CPU, 每个核的频率为 2.93GHz, 两个 CPU 的双精度浮点计算理论峰值为 140Gflops ; GPU 加速器 : NVIDIA Fermi。 测试的程序为 HPLinpack2.0, 程序的核心是使用 LU 分解方法求解稠密矩阵线性方程组, 矩阵数据为随机生成的双精度浮点值。测试程序采用 CUDA(Compute Unified Device Architecture) 编 程 模 型 实 现 了 双 精 度 浮 点 稠 密 矩 阵 乘 加 (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 客户端的进程号 pid, 并使用操作系 统调用 shmat 将内存空间关联到 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 设备错, 无法在单结点上运行并行程序的多个进 程。
    

一种基于共享内存实现多进程共享GPU的方法.pdf_第1页
第1页 / 共8页
一种基于共享内存实现多进程共享GPU的方法.pdf_第2页
第2页 / 共8页
一种基于共享内存实现多进程共享GPU的方法.pdf_第3页
第3页 / 共8页
点击查看更多>>
资源描述

《一种基于共享内存实现多进程共享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。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1