一种面向GPU集群环境的避免GPU资源争用的方法技术

技术编号:17779511 阅读:99 留言:0更新日期:2018-04-22 07:55
本发明专利技术公开了一种面向GPU集群环境的避免GPU资源争用的方法,包括支持多应用程序细粒度并发执行的插件,应用程序行为特征抽取和应用程序任务调度。针对同一个NVIDIA GPU节点上运行的多个应用程序可能会引起的GPU资源争用问题,构建一个支持多应用程序细粒度并发执行的平台,使得多个应用程序在同一个GPU节点上可以尽可能的并发执行。其次,抽取每个应用程序的GPU行为特征,包括GPU使用模式和GPU资源需求信息。根据应用程序的GPU行为特征,以及当前GPU集群中各个GPU节点的资源使用状态,调度应用程序到适合的GPU节点上,从而最小化多个独立应用程序在同一个GPU节点上的资源争用。

【技术实现步骤摘要】
一种面向GPU集群环境的避免GPU资源争用的方法
本专利技术涉及GPU高性能计算领域,尤其涉及一种面向GPU集群环境的避免GPU资源争用的方法。
技术介绍
GPU加速计算是指同时利用图形处理器(GPU)和CPU,加快科学、分析、工程、消费和企业应用程序的运行速度。GPU加速计算可以提供非凡的应用程序性能,能将应用程序计算密集部分的工作负载转移到GPU,同时仍由CPU运行其余程序代码。从用户的角度来看,应用程序的运行速度明显加快。利用GPU加速应用程序的执行,目前已经越来越流行。如在科学计算领域,科研人员使用GPU加速蒙特卡洛仿真实验;使用GPU加速数值计算;在图像处理领域,人们利用GPU处理大规模医学影像数据;在数据挖掘领域,利用GPU加速数据挖掘算法的执行;在人工智能领域,利用GPU加速算法的训练等。目前,国内外许多大规模云服务提供商均已支持GPU服务,如亚马逊EC2、微软Azure、百度云等。随着技术的发展,新一代的GPU中容纳了更多的多流处理器(StreamingMultiprocessors,SM、SMX)和流处理器(Streamingprocessors,SP),也支持了更多有用的特性,如Hyper-Q、动态并行(DynamicParallelism)等。但是,GPU利用率低下问题日趋凸显。其主要原因在于:1)受限于当前GPU计算模型。目前GPU编程通常经过以下步骤:首先,使用CPU将位于硬盘上的待处理数据拷贝到主机内存;第二,在GPU设备上开辟空间,并将主机内存上的数据拷贝到GPU设备的内存空间中;第三,GPU设备执行相应的内核函数进行并行计算,并将结果写回GPU设备内存;最后,GPU设备内存的数据需要拷贝回主机内存。另外,若存在网络通信,则还需要依靠CPU来辅助完成。在编程过程中,有些代码无法或者不适合在GPU上完成,如一些无法并行执行的代码;数据迁移的代价大于并行计算带来的好处的代码;I/O操作等。因此程序员需要事先指定CPU和GPU上执行代码的比例,这导致GPU出现空闲,从而使得GPU利用率低下。2)GPU指派方式不合理。很多GPU应用程序会显式的指定所要使用的GPU设备。当大量应用程序都指定使用同一个GPU设备时,会导致该GPU节点过度负载。当应用程序到达某GPU节点的频率过低时,会导致该GPU节点欠负载。因此,为了提高GPU利用率,其中一种方法是根据GPU集群中各个节点的资源状态,以及到达的应用程序的GPU行为特征,将其调度到合适的GPU节点上。为达到该目标,需要解决的主要问题有:1)在应用程序到达的时候,快速、透明、准确的获取应用程序的GPU行为特征;2)提出合理、高效的调度策略;3)提高多个独立应用程序在同一个GPU上执行时并发度,减少资源争用。根据现有对应用程序GPU行为特征提取的研究可知,现有的方法主要有NVIDIACUPTI、PAPI、Tau、Vampir等。NVIDIACUPTI主要通过注册相应回调函数方法,在应用程序执行期间,实时获取应用程序调用GPU运行时库函数的信息。当应用程序执行完毕后,才能获得所有GPU函数调用信息。PAPI、Tau、Vampir是通过在源代码中插桩的方法,使应用程序在执行过程中能够触发所插入代码的执行,从而获取应用程序对GPU函数调用的信息。上述已有方法均要在应用程序执行完毕后,才能获取其GPU行为特征。但在本应用场景中,应用程序一到达就需要获取其GPU行为特征,为后续调度做出决策依据。根据现有对应用程序在GPU上并发执行的研究可知,在NVIDIACUDA4.0及以后,允许一个进程的多个线程共享一个上下CUDA上下文,且这些线程之间能够并发执行。但是该方法并不能使得多个独立应用程序之间细粒度并发执行。NVIDIAMPS(Multi-ProcessService)服务允许多个进程并发执行,但是它更适用于MPI程序,并不推荐在独立应用程序之间使用。NVIDIAHyper-Q技术支持32路独立硬件管理的工作队列并发执行,但是它也只适用于同一个上下文中,不同流之间的GPU操作并发执行。综上所述,目前针对快速、透明、准确、提前的获取应用程序的GPU行为特征,多个独立应用程序细粒度并发方面的研究起步不久,目前还未有能有效、快速、透明、提前的获取GPU行为特征的方法,也未提出能有效提高多个独立应用程序在同一个GPU上执行时并发度的方法。对这些问题的解决,充满着困难与挑战。
技术实现思路
针对现有技术的问题,本专利技术公开了一种面向GPU集群环境的避免GPU资源争用的方法,包括如下步骤:步骤1,构建一个支持多应用程序细粒度并发执行的插件:该插件包含一个自行编写的GPU运行时伪函数库(libcudart.so)和一个自行编写的本地服务器进程,前者(GPU运行时伪函数库)与NVIDIA自带的GPU运行时函数库(libcudart.so)有相同的函数原型,但各个函数实现体的基本功能包括:变换同步函数为异步函数;向后者(本地服务器进程)转发相关的函数执行请求。该细粒度并发执行插件的作用为:同一个GPU节点上的多个应用程序对GPU运行时库函数的调用,均通过GPU运行时伪函数变换、转发,并通过本地服务器进程执行,从而提高了多个独立应用程序执行的并发度;步骤2,在GPU集群的头结点,使用自行编写的GPU运行时伪函数库(libcudart.so)替换NVIDIA自带的GPU运行时函数库(libcudart.so)。该伪函数库将GPU内存创建类函数(cudaMalloc等)、GPU内存拷贝类函数(cudaMemcpy等)、GPU内核执行函数(ccudaConfigureCall)、GPU同步类函数(cudaDeviceSynchronize等)的函数体替换为相应函数的字符输出信息。当一个用户向GPU集群中的头结点提交待执行的GPU应用程序时,在GPU集群的头结点中运行该应用程序,即可在避免真实运行的模式下,获得该应用程序所需执行的GPU关键函数信息,从而获得该应用程序的GPU使用模式;另一方面,使用NVIDIA自带工具CUOBJDUMP、PTXAS,静态解析该应用程序中的GPU内核函数,抽取应用程序所需使用的GPU资源需求信息;步骤3,根据步骤2中的获取应用程序的GPU使用模式和GPU资源需求信息,以及当前GPU集群中各个GPU节点的资源使用状况,在GPU集群的头结点中,调度所到达的应用程序到适宜的GPU节点上运行。步骤1中,所述的同步函数专指GPU内存拷贝类同步函数(cudaMemcpy等)、GPU内核执行函数(ccudaConfigureCall,不含有流参或使用默认流参)、GPU设备同步函数(cudaDeviceSynchronize)。而对应的异步函数专指对应的GPU内存拷贝类异步函数(cudaMemcpyAsync等)、GPU内核执行函数(ccudaConfigureCall,含有流参)、GPU流同步函数(cudaStreamSynchronize)。步骤1包括以下步骤:步骤1-1,应用程序调用GPU运行时库函数时,若所需调用的GPU运行时库函数为同步函数,则将其变换为对应的异步函数;步骤1-2,将应用程序对GPU运行时库函数的调用请求,包括函数名和参数,转发到本文档来自技高网
...
一种面向GPU集群环境的避免GPU资源争用的方法

【技术保护点】
一种面向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资源争用的方法,其特征在于,包括以下步骤:步骤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节点上运行。2.根据权利要求1所述的方法,其特征在于,步骤1中,所述的同步函数专指GPU内存拷贝类同步函数、GPU内核执行函数和GPU设备同步函数,而对应的异步函数专指对应的GPU内存拷贝类异步函数、GPU内核执行函数和GPU流同步函数。3.根据权利要求2所述的方法,其特征在于,步骤1包括以下步骤:步骤1-1,应用程序调用GPU运行时库函数时,若所需调用的GPU运行时库函数为同步函数,则将其变换为对应的异步函数;步骤1-2,将应用程序对GPU运行时库函数的调用请求,包括函数名和参数,转发到本节点的服务器进程;步骤1-3,本地服务器端进程根据所接收到的调用请求,执行相应的NVIDIA自带GPU运行时库函数,并返回执行结果给调用方。4.根据权利要求3所述的方法,其特征在于,步骤2中,所述GPU关键函数信息包括应用程序申请GPU内存类操作、在主机和GPU设备之间拷贝数据类操作、执行GPU内核函数操作、GPU设备流同步操作和GPU设备同步操作;所述GPU使用模式是由GPU关键函数构成的有向图;所述GPU资源需求信息包括执行GPU内核函数所需的块CUDABlock数量、线程CUDAThr...

【专利技术属性】
技术研发人员:东方师晓敏罗军舟查付政王睿孙斌
申请(专利权)人:江苏省邮电规划设计院有限责任公司东南大学
类型:发明
国别省市:江苏,32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1