[发明专利]一种面向GPU集群环境的避免GPU资源争用的方法有效
申请号: | 201711326972.X | 申请日: | 2017-12-13 |
公开(公告)号: | CN107943592B | 公开(公告)日: | 2020-06-12 |
发明(设计)人: | 东方;师晓敏;罗军舟;查付政;王睿;孙斌 | 申请(专利权)人: | 中通服咨询设计研究院有限公司;东南大学 |
主分类号: | G06F9/50 | 分类号: | G06F9/50 |
代理公司: | 江苏圣典律师事务所 32237 | 代理人: | 胡建华;于瀚文 |
地址: | 210019 江苏*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 面向 gpu 集群 环境 避免 资源 方法 | ||
1.一种面向GPU集群环境的避免GPU资源争用的方法,其特征在于,包括以下步骤:
步骤1,构建一个支持多应用程序细粒度并发执行的插件:该插件包含一个自行编写的GPU运行时伪函数库和一个自行编写的本地服务器进程,GPU运行时伪函数库与NVIDIA自带的GPU运行时函数库有相同的函数原型,但各个函数实现体的基本功能包括:变换同步函数为异步函数;向本地服务器进程转发相关的函数执行请求;该细粒度并发执行插件的作用为:同一个GPU节点上的多个应用程序对GPU运行时库函数的调用,均需通过GPU运行时伪函数库变换、转发,并通过本地服务器进程执行;
步骤2,在GPU集群的头结点,使用自行编写的GPU运行时伪函数库替换NVIDIA自带的GPU运行时函数库,该伪函数库将GPU内存创建类函数、GPU内存拷贝类函数、GPU内核执行函数、GPU同步类函数的函数体替换为相应函数的字符输出信息;当一个用户向GPU集群中的头结点提交待执行的GPU应用程序时,在GPU集群的头结点中运行该应用程序,即能够在避免真实运行的模式下,获得该应用程序运行过程中所需执行的GPU关键函数信息,从而获得该应用程序的GPU使用模式;另一方面,使用NVIDIA自带工具CUOBJDUMP、PTXAS,静态解析该应用程序中的GPU内核函数,能够抽取应用程序所需使用的GPU资源需求信息;
步骤3,根据步骤2中的获取应用程序的GPU使用模式和GPU资源需求信息,以及当前GPU集群中各个GPU节点的资源使用状况,在GPU集群的头结点中,调度所到达的GPU应用程序到适宜的GPU节点上运行;
步骤1中,所述的同步函数专指GPU内存拷贝类同步函数、GPU内核执行函数和GPU设备同步函数,而对应的异步函数专指对应的GPU内存拷贝类异步函数、GPU内核执行函数和GPU流同步函数。
2.根据权利要求1所述的方法,其特征在于,步骤1包括以下步骤:
步骤1-1,应用程序调用GPU运行时库函数时,若所需调用的GPU运行时库函数为同步函数,则将其变换为对应的异步函数;
步骤1-2,将应用程序对GPU运行时库函数的调用请求,包括函数名和参数,转发到本节点的服务器进程;
步骤1-3,本地服务器端进程根据所接收到的调用请求,执行相应的NVIDIA自带GPU运行时库函数,并返回执行结果给调用方。
3.根据权利要求2所述的方法,其特征在于,步骤2中,所述GPU关键函数信息包括应用程序申请GPU内存类操作、在主机和GPU设备之间拷贝数据类操作、执行GPU内核函数操作、GPU设备流同步操作和GPU设备同步操作;所述GPU使用模式是由GPU关键函数构成的有向图;所述GPU资源需求信息包括执行GPU内核函数所需的块CUDABlock数量、线程CUDAThread数量、全局内存数量、共享内存数量和寄存器数量。
4.根据权利要求3所述的方法,其特征在于,步骤2中,所述获得该应用程序的GPU使用模式,具体包括以下步骤:
步骤2-1,在GPU运行时函数库为伪库的环境下,执行应用程序代码,依次获得GPU关键函数信息;
步骤2-2,根据各个GPU关键函数信息,构造描述GPU函数调用顺序的有向图,从而获得GPU使用模式;
步骤2-3,根据各个GPU关键函数信息,获取该应用程序所需的块CUDA Block数量、线程CUDA Thread数量和全局内存数量信息。
5.根据权利要求4所述的方法,其特征在于,步骤2中,所述抽取应用程序的GPU资源需求信息,具体包括以下步骤:
步骤2-4,使用NVIDIA自带工具CUOBJDUMP,抽取应用程序中GPU内核函数的并行线程执行PTX代码;
步骤2-5,使用NVIDIA自带工具PTXAS,解析所有的并行线程执行PTX代码,获取GPU内核函数所需的共享内存数量和寄存器数量信息;
步骤2-6,将步骤2-3中获取的块CUDA Block数量、线程CUDA Thread数量和全局内存数量信息,与步骤2-5中获取的共享内存数量和寄存器数量信息结合,即获得了该应用程序所需使用的GPU资源需求信息。
6.根据权利要求5所述的方法,其特征在于,步骤3包括以下步骤:
步骤3-1,在GPU集群的头结点中维护一个列表,其中记录各个GPU计算节点当前拥有的GPU资源信息,包括:块CUDABlock数量、线程CUDAThread数量、全局内存数量、共享内存数量和寄存器数量,这些信息的初始值为GPU计算节点硬件支持的各种资源的数量;
步骤3-2,寻找当前GPU集群中是否存在空闲的GPU计算节点,若存在,则将到达的应用程序调度到最近的空闲GPU计算节点,转到步骤3-6;否则,转到步骤3-3;
步骤3-3,从最近被调度节点的下一个节点开始,根据待调度应用程序的GPU使用模式和GPU资源需求信息,以及各个GPU计算节点当前拥有的GPU资源信息,寻找第一个能满足该应用程序资源需求的GPU计算节点,若找到,则转到步骤3-6;否则,该应用程序放入待调度队列,并转到步骤3-4;
步骤3-4,当有GPU计算节点向头结点汇报其上的一个应用程序执行结束时,头结点检查待调度队列中是否有等待被调度的应用程序,若存在,则从队头开始,找到一个应用程序,并转到步骤3-5;否则,转到步骤3-7;
步骤3-5,判断该GPU计算节点能否满足该应用程序资源需求,若该GPU计算节点能够满足,则转步骤3-6;否则,找后一个等待被调度的应用程序,转步骤3-5;
步骤3-6,将应用程序调度到所选定的GPU计算节点上,并在GPU集群的头结点维护的列表中,更新对应GPU计算节点的GPU资源信息;
步骤3-7,结束步骤3的流程。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中通服咨询设计研究院有限公司;东南大学,未经中通服咨询设计研究院有限公司;东南大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201711326972.X/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种基于linux的多主机进程管理的方法
- 下一篇:数据获取方法和装置