CN111078412A - 一种通过api截获对gpu进行资源管理的方法 - Google Patents
一种通过api截获对gpu进行资源管理的方法 Download PDFInfo
- Publication number
- CN111078412A CN111078412A CN201911276087.4A CN201911276087A CN111078412A CN 111078412 A CN111078412 A CN 111078412A CN 201911276087 A CN201911276087 A CN 201911276087A CN 111078412 A CN111078412 A CN 111078412A
- Authority
- CN
- China
- Prior art keywords
- cuda
- video memory
- memory allocation
- function
- interception
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 47
- 230000006870 function Effects 0.000 claims abstract description 119
- 230000008569 process Effects 0.000 claims description 20
- 238000011068 loading method Methods 0.000 claims description 7
- 230000007246 mechanism Effects 0.000 claims description 3
- 230000006399 behavior Effects 0.000 claims description 2
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 claims 27
- 230000008901 benefit Effects 0.000 abstract description 4
- 238000012545 processing Methods 0.000 abstract description 3
- 238000007726 management method Methods 0.000 description 21
- 238000013135 deep learning Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000011160 research Methods 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000007858 starting material Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012549 training Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种通过API截获对GPU进行资源管理的方法,包括:显存分配管理,拦截CUDA运行时的所有cudaMalloc函数,在用户调用cudaMalloc函数时,控制流跳转,按照预设好的显存分配规则和显存分配限额来进行显存分配的管理;流处理器分配,在执行到CUDA核函数的调用时,控制流跳转,按照预设好的流处理器分配规则来进行流处理器分配的管理。本发明通过API截获实现控制流跳转,进而可根据预设好的分配规则等对GPU进行资源管理,克服了一人独占所有GPU资源的问题,且无需对源程序代码进行过多修改,具有实现方便、成本低的优点。
Description
技术领域
本发明涉及计算机内部GPU资源管理研究领域,特别涉及一种通过API截获对GPU进行资源管理的方法。
背景技术
随着深度学习相关应用越来越广泛,不可避免的要用到GPU。大量非商业机构和科研机构出于成本的原因,都会使用NVIDIA消费级GPU(GTX、RTX等系列)来进行深度学习相关应用的网络训练。
NVIDIA消费级GPU通常是用作个人电脑的显卡,且出于商业利益原因,NVIDIA并没有给消费级GPU配备资源管理的相关功能,因此在多人共同使用的安装了NVIDIA消费级GPU的服务器上,资源管理一直是一个重大问题,常常会出现一人独占了所有GPU资源,导致其他人无GPU资源可用的困境。这里的GPU资源主要指GPU上的显存和流处理器两大类资源。NVIDIA为专业级的显卡提供了虚拟化GPU的功能(Tesla、Pascal等系列),但并没有对消费级显卡进行支持,因此不能满足低成本的要求。
为此,研究一种针对NVIDIA消费级GPU的、可用的、成熟的资源管理方法具有重要的应用价值。
发明内容
本发明的目的在于克服现有技术的缺点与不足,提供一种通过API截获对GPU进行资源管理的方法,该方法基于API拦截技术,尤其是对NVIDIA消费级GPU可进行资源管理。
本发明的目的通过以下的技术方案实现:一种通过API截获对GPU进行资源管理的方法,包括:
显存分配管理,拦截CUDA运行时的所有cudaMalloc函数,在用户调用cudaMalloc函数时,控制流跳转,按照预设好的显存分配规则和显存分配限额来进行显存分配的管理;
流处理器分配,在执行到CUDA核函数的调用时,控制流跳转,按照预设好的流处理器分配规则来进行流处理器分配的管理。
本发明均通过API截获实现控制流跳转,进而可根据预设好的分配规则等对GPU进行资源管理,克服了一人独占所有GPU资源的问题,且无需对源程序代码进行过多修改,具有实现方便、成本低的优点。
优选的,控制流跳转,按照预设好的显存分配规则和显存分配限额来进行显存分配的管理的方法是:先判断当前显存分配请求是否符合预设好的显存分配规则,且显存分配限额是否剩余,如果都符合则将此次显存分配请求转发到对应的cudaMalloc函数中,然后CUDA库里的函数就会跟在没有拦截的情况下一样正常分配显存,否则将显存分配失败的信息返回给CUDA客户代码。
更进一步的,显存分配管理的步骤是:
(1-1)在CUDA应用程序中,CUDA用户代码通过调用一族cudaMalloc*函数,来指示CUDA运行时库进行显存分配;这里一族cudaMalloc*函数表示一系列函数,包括cudaMalloc、cudaMallocHost、cudaMallocPitch、cudaMalloc3D,cudaMalloc表示特指函数cudaMalloc;
(1-2)此时,所有的cudaMalloc*函数都已被拦截,在用户调用cudaMalloc*函数的时候,控制流跳转到对应的cudaHookMalloc*函数中;
(1-3)控制流进入到cudaHookMalloc*函数后,cudaHookMalloc*函数根据预设好的显存分配规则和显存分配限额,对客户代码的此次显存分配请求进行是否符合显存分配规则的判断,然后查询显存分配限额还有没有剩余;
(1-4)若此次显存分配请求符合显存分配规则,且显存分配限额仍有剩余,则cudaHookMalloc*函数,会将来自CUDA客户代码的显存分配请求,转发到对应的CUDA运行时的cudaMalloc*函数中,并将cudaHookMalloc*函数返回的成功信息或者失败信息返回给CUDA客户代码;
(1-5)若此次显存分配请求不符合显存分配规则,或显存分配限额没有剩余,则cudaHookMalloc*函数会直接将显存分配失败的信息返回给CUDA客户代码,由CUDA客户代码对显存分配失败的异常进行处理,或者直接结束CUDA程序。
优选的,流处理器分配,包括方法:
(2-1)在CUDA应用程序中,CUDA用户代码通过编写CUDA核函数,并通过三对尖括号的语法,指定CUDA核运行的网格和线程块大小;
(2-2)NVCC工具在编译CUDA C++代码时,将三对尖括号的语法,转化为对cudaLaunchKernel函数的调用,运行的网格和线程块大小,转化为cudaLaunchKernel函数的gridDim和blockDim参数;
(2-3)在执行到CUDA核函数的调用时,编译好的代码会调用cudaLaunchKernel函数,此时,控制流跳转到cudaHookLaunchKernel函数中;
(2-4)在cudaHookLaunchKernel函数中,程序根据预先设置好的流处理器分配规则,判断此次分配请求是否符合流处理器分配规则,若不符合,则向用户代码返回启动核函数失败的错误,让CUDA用户代码自行处理错误或终止程序。
优选的,API截获是指可执行文件通过动态加载的方法,调用动态共享库里的API函数,通过对这些调用进行拦截并重定向到另外编写的函数的方法,在windows下实现时,动态共享库属于PE文件格式,具体的扩展名为.dll,采用由Microsoft开发的开源API拦截程序库Detours作为API拦截技术。
更进一步的,使用Detours前,源程序对CUDA库的调用采用动态链接,即加载dll的方式进行。
优选的,设置一个独立的程序启动器用于代理启动CUDA客户程序,在启动启动器的时候,通过命令行参数传递CUDA客户程序的路径。这里命令行参数是指启动进程时带的参数。
更进一步的,程序启动器启动后,通过调用Detour库的函数DetourCreateProcessWithDllEx,将CUDA拦截dll注入到CUDA客户程序内,并启动CUDA客户程序进程。
更进一步的,启动CUDA客户程序进程后,windows的dll加载机制随后会调用拦截dll内的dllmain函数,在dllmain函数中,会调用DetourAttach函数,此函数将一个无条件跳转指令插入到目标函数最前面,达到API拦截的目的。
优选的,Windows钩子函数的行为与对应的CUDA函数一致。避免在引入其他调用了CUDA的第三方库的代码的时候出现错误。
优选的,在编译拦截dll的时候,显式地用关键字__declspec(dllimport)向MSVC告知此拦截函数是通过dll共享导入的。以避免MSVC对此函数生成模块内部的调用版本,只能在此模块内跳转到目标函数。
本发明与现有技术相比,具有如下优点和有益效果:
本发明基于API拦截技术,对源程序的CUDA调用进行拦截,可达到对源程序代码最少修改,甚至无需修改,即可实现NVIDIA的消费级GPU的资源管理。从而克服了应用NVIDIA消费级GPU进行深度学习计算的非商业机构和科研机构经常出现GPU资源管理困难的问题。采用本发明所述方法,既可以将单张算力强劲的GPU拆分让多人使用,也可以将多张GPU合为一个管理单位,让需要更强算力的应用得到受益。
附图说明
图1是现有技术中GPU架构图。
图2是现有技术中CUDA计算框架构图。
图3是本实施例显存分配管理的流程图,其中虚线为现有技术中显存调用流程。
图4是本实施例流处理器分配管理的流程图,其中虚线为现有技术中流处理器调用流程。
具体实施方式
下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
实施例
如图1所示,目前的GPU硬件架构主要包括全局显存和流处理器,这也是本发明需要管理的两大类资源,流处理器内又包括诸如共享内存、寄存器、ALU等结构。
参见图2所示的目前的CUDA程序库的结构,最底层的是GPU的驱动程序。上层是CUDA运行时API和各种计算库的API,下一层是CUDA驱动API,这些都是用户能够直接调用的API,本发明要拦截的API主要位于CUDA运行时层。
如图3、4所示,本实施例一种通过API截获对NVIDIA消费级GPU进行资源管理的方法,该方法通过拦截CUDA运行时API(CUDART)层的API cudaMalloc函数,来进行显存分配和流处理器分配管理。
参见图3虚线所示,现有技术中显存分配过程具体步骤如下:
(1)在CUDA应用程序中,CUDA用户代码通过调用一族cudaMalloc*函数,来指示CUDA运行时库进行显存分配。
(2)CUDA运行时库调用下层的CUDA驱动程序API,在CUDA驱动程序这一层,驱动程序会获取进程的CUDA上下文,并根据用户请求的容量进行显存分配。
(3)CUDA运行时库根据显存分配的结果成功与否,向调用cudaMalloc*函数的用户程序返回对应的显存分配成功信息,或者具体失败信息。
(4)用户程序对cudaMalloc*函数返回的结果进行处理,如果显存分配成功,则进行后面的CUDA计算步骤,如果显存分配失败,则进行对应的错误处理,或者直接终止CUDA程序。
参见图3实线所示,本实施例通过API拦截对显存分配进行管理的过程具体步骤如下:
(1)在CUDA应用程序中,CUDA用户代码通过调用一族cudaMalloc*函数,来指示CUDA运行时库进行显存分配。
(2)此时,所有的cudaMalloc*函数都已被拦截,再用户调用cudaMalloc*函数的时候,控制流跳转到对应的cudaHookMalloc*函数中。
(3)控制流进入到cudaHookMalloc*函数后,cudaHookMalloc*函数根据预设好的显存分配规则和显存分配限额,对客户代码的此次显存分配请求进行是否符合显存分配规则的判断,然后查询显存分配限额还有没有剩余。
(4)若此次显存分配请求符合显存分配规则,且显存分配限额仍有剩余,则cudaHookMalloc*函数,会将来自CUDA客户代码的显存分配请求,转发到对应的CUDA运行时的cudaMalloc*函数中,并将cudaHookMalloc*函数返回的成功信息,或者失败信息,返回给CUDA客户代码。
(5)若此次显存分配请求不符合显存分配规则,或显存分配限额没有剩余,则cudaHookMalloc*函数会直接将显存分配失败的错误,返回给CUDA客户代码,由CUDA客户代码对显存分配失败的异常进行处理,或者直接结束CUDA程序。
通过以上步骤即实现了按照预设好的显存分配规则和显存分配限额来进行显存分配的管理。
参见图4虚线所示,现有技术中流处理器分配过程具体步骤如下:
(1)在CUDA应用程序中,CUDA用户代码通过编写CUDA核函数,并通过三对尖括号的语法,指定CUDA核运行的网格和线程块大小。
(2)NVCC工具在编译CUDA C++代码时,将三对尖括号的语法,转化为对cudaLaunchKernel函数的调用,运行的网格和线程块大小,转化为cudaLaunchKernel函数的gridDim和blockDim参数。
(3)在执行到CUDA核函数的调用时,编译好的代码会调用cudaLaunchKernel函数,cudaLaunchKernel函数调用下层的CUDA驱动程序API,CUDA驱动程序指示显卡分配流处理器执行CUDA核函数。
参见图4实线所示,本实施例通过API拦截对流处理器分配进行管理的过程具体步骤如下:
(1)在CUDA应用程序中,CUDA用户代码通过编写CUDA核函数,并通过三对尖括号的语法,指定CUDA核运行的网格和线程块大小。
(2)NVCC工具在编译CUDA C++代码时,将三对尖括号的语法,转化为对cudaLaunchKernel函数的调用,运行的网格和线程块大小,转化为cudaLaunchKernel函数的gridDim和blockDim参数。
(3)在执行到CUDA核函数的调用时,编译好的代码会调用cudaLaunchKernel函数,此时,控制流跳转到cudaHookLaunchKernel函数中。
(4)在cudaHookLaunchKernel函数中,程序根据预先设置好的流处理器分配规则,判断此次分配请求是否符合流处理器分配规则,若不符合,则向用户代码返回启动核函数失败的错误,让CUDA用户代码自行处理错误或终止程序。
针对上述方法,本实施例在windows下完成了基础的实现,windows下采用的动态共享库属于PE文件格式,具体的扩展名为.dll,因此采用由Microsoft开发的开源API拦截程序库Detours(https://github.com/microsoft/Detours)作为API拦截技术。具体实施方案如下:
(1)使用Detours前,必须确保源程序对CUDA库的调用是通过动态链接,即加载dll的方式进行,如果是静态链接,在源程序编译好,进行链接时,将会生成一份私有的代码,加入到程序的可执行文件中,由于加载时没有重定位这一步,API拦截将无法工作。
(2)本方法通过一个独立的程序启动器,来代理启动CUDA客户程序,在启动启动器的时候,通过命令行参数,传递CUDA客户程序的路径。
(3)程序启动器启动后,通过调用Detour库的函数DetourCreateProcessWithDllEx,将CUDA拦截dll注入到CUDA客户程序内,并启动CUDA客户程序进程。
(4)启动CUDA客户程序进程后,windows的dll加载机制随后会CUDA调用拦截dll内的dllmain函数,在dllmain函数中,会调用DetourAttach函数,此函数将一个无条件跳转指令插入到目标函数最前面,达到API拦截的目的。
(5)注意在编写拦截dll代码的时候,需要显式地用关键字__declspec(dllimport)向MSVC告知此拦截函数是通过dll共享导入的。否则,MSVC将会对此函数生成模块内部的调用版本,在拦截dll中调用Detours的拦截函数虽然返回成功,但只能在此模块内跳转到目标函数,在源程序中的函数调用并没有被拦截。
本发明通过API调用拦截来对NVIDIA消费级GPU进行资源管理,使消费级GPU更能满足深度学习计算的使用要求,无需增加非商业机构和科研机构的使用成本。
在本发明实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (10)
1.一种通过API截获对GPU进行资源管理的方法,其特征在于,显存分配管理,拦截CUDA运行时的所有cudaMalloc函数,在用户调用cudaMalloc函数时,控制流跳转,按照预设好的显存分配规则和显存分配限额来进行显存分配的管理;
流处理器分配,在执行到CUDA核函数的调用时,控制流跳转,按照预设好的流处理器分配规则来进行流处理器分配的管理。
2.根据权利要求1所述的通过API截获对GPU进行资源管理的方法,其特征在于,控制流跳转,按照预设好的显存分配规则和显存分配限额来进行显存分配的管理的方法是:先判断当前显存分配请求是否符合预设好的显存分配规则,且显存分配限额是否剩余,如果都符合则将此次显存分配请求转发到对应的cudaMalloc函数中,然后CUDA库里的函数就会跟在没有拦截的情况下一样正常分配显存,否则将显存分配失败的信息返回给CUDA客户代码。
3.根据权利要求2所述的通过API截获对GPU进行资源管理的方法,其特征在于,显存分配管理的步骤是:
(1-1)在CUDA应用程序中,CUDA用户代码通过调用一族cudaMalloc*函数,来指示CUDA运行时库进行显存分配;这里一族cudaMalloc*函数表示一系列函数,包括函数cudaMalloc、cudaMallocHost、cudaMallocPitch、cudaMalloc3D,cudaMalloc表示特指函数cudaMalloc;
(1-2)此时,所有的cudaMalloc*函数都已被拦截,在用户调用cudaMalloc*函数的时候,控制流跳转到对应的cudaHookMalloc*函数中;
(1-3)控制流进入到cudaHookMalloc*函数后,cudaHookMalloc*函数根据预设好的显存分配规则和显存分配限额,对客户代码的此次显存分配请求进行是否符合显存分配规则的判断,然后查询显存分配限额还有没有剩余;
(1-4)若此次显存分配请求符合显存分配规则,且显存分配限额仍有剩余,则cudaHookMalloc*函数,会将来自CUDA客户代码的显存分配请求,转发到对应的CUDA运行时的cudaMalloc*函数中,并将cudaHookMalloc*函数返回的成功信息或者失败信息返回给CUDA客户代码;
(1-5)若此次显存分配请求不符合显存分配规则,或显存分配限额没有剩余,则cudaHookMalloc*函数会直接将显存分配失败的信息返回给CUDA客户代码,由CUDA客户代码对显存分配失败的异常进行处理,或者直接结束CUDA程序。
4.根据权利要求1所述的通过API截获对GPU进行资源管理的方法,其特征在于,流处理器分配,包括方法:
(2-1)在CUDA应用程序中,CUDA用户代码通过编写CUDA核函数,并通过三对尖括号的语法,指定CUDA核运行的网格和线程块大小;
(2-2)NVCC工具在编译CUDA C++代码时,将三对尖括号的语法,转化为对cudaLaunchKernel函数的调用,运行的网格和线程块大小,转化为cudaLaunchKernel函数的gridDim和blockDim参数;
(2-3)在执行到CUDA核函数的调用时,编译好的代码会调用cudaLaunchKernel函数,此时,控制流跳转到cudaHookLaunchKernel函数中;
(2-4)在cudaHookLaunchKernel函数中,程序根据预先设置好的流处理器分配规则,判断此次分配请求是否符合流处理器分配规则,若不符合,则向用户代码返回启动核函数失败的错误,让CUDA用户代码自行处理错误或终止程序。
5.根据权利要求1所述的通过API截获对GPU进行资源管理的方法,其特征在于,API截获是指可执行文件通过动态加载的方法调用动态共享库里的API函数,通过对这些调用进行拦截并重定向到另外编写的函数的方法,在windows下实现时,动态共享库属于PE文件格式,具体的扩展名为.dll,采用由Microsoft开发的开源API拦截程序库Detours作为API拦截技术。
6.根据权利要求5所述的通过API截获对GPU进行资源管理的方法,其特征在于,使用Detours前,源程序对CUDA库的调用采用动态链接,即加载dll的方式进行。
7.根据权利要求6所述的通过API截获对GPU进行资源管理的方法,其特征在于,设置一个独立的程序启动器用于代理启动CUDA客户程序,在启动启动器的时候,通过命令行参数传递CUDA客户程序的路径。
8.根据权利要求7所述的通过API截获对GPU进行资源管理的方法,其特征在于,程序启动器启动后,通过调用Detour库的函数DetourCreateProcessWithDllEx,将CUDA拦截dll注入到CUDA客户程序内,并启动CUDA客户程序进程。
9.根据权利要求6所述的通过API截获对GPU进行资源管理的方法,其特征在于,启动CUDA客户程序进程后,windows的dll加载机制随后会调用拦截dll内的dllmain函数,在dllmain函数中,会调用DetourAttach函数,此函数将一个无条件跳转指令插入到目标函数最前面,达到API拦截的目的。
10.根据权利要求5所述的通过API截获对GPU进行资源管理的方法,其特征在于Windows钩子函数的行为与对应的CUDA函数一致;
在编译拦截dll的时候,显式地用关键字__declspec(dllimport)向MSVC告知此拦截函数是通过dll共享导入的。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911276087.4A CN111078412B (zh) | 2019-12-12 | 2019-12-12 | 一种通过api截获对gpu进行资源管理的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911276087.4A CN111078412B (zh) | 2019-12-12 | 2019-12-12 | 一种通过api截获对gpu进行资源管理的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111078412A true CN111078412A (zh) | 2020-04-28 |
CN111078412B CN111078412B (zh) | 2023-03-14 |
Family
ID=70314200
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911276087.4A Active CN111078412B (zh) | 2019-12-12 | 2019-12-12 | 一种通过api截获对gpu进行资源管理的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111078412B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114625536A (zh) * | 2022-03-15 | 2022-06-14 | 北京有竹居网络技术有限公司 | 显存分配方法、装置、介质及电子设备 |
CN115951974A (zh) * | 2023-03-10 | 2023-04-11 | 浙江宇视科技有限公司 | Gpu虚拟机的管理方法、系统、设备和介质 |
CN116578416A (zh) * | 2023-04-26 | 2023-08-11 | 中国人民解放军92942部队 | 一种基于gpu虚拟化的信号级仿真加速方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101419558A (zh) * | 2008-11-13 | 2009-04-29 | 湖南大学 | Cuda图形子系统虚拟化方法 |
US20090259829A1 (en) * | 2008-04-09 | 2009-10-15 | Vinod Grover | Thread-local memory reference promotion for translating cuda code for execution by a general purpose processor |
CN104991827A (zh) * | 2015-06-26 | 2015-10-21 | 季锦诚 | 云游戏中gpu资源共享的方法 |
CN110196753A (zh) * | 2019-01-21 | 2019-09-03 | 腾讯科技(北京)有限公司 | 基于容器的图形处理器gpu虚拟化方法、装置和可读介质 |
-
2019
- 2019-12-12 CN CN201911276087.4A patent/CN111078412B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090259829A1 (en) * | 2008-04-09 | 2009-10-15 | Vinod Grover | Thread-local memory reference promotion for translating cuda code for execution by a general purpose processor |
CN101419558A (zh) * | 2008-11-13 | 2009-04-29 | 湖南大学 | Cuda图形子系统虚拟化方法 |
CN104991827A (zh) * | 2015-06-26 | 2015-10-21 | 季锦诚 | 云游戏中gpu资源共享的方法 |
CN110196753A (zh) * | 2019-01-21 | 2019-09-03 | 腾讯科技(北京)有限公司 | 基于容器的图形处理器gpu虚拟化方法、装置和可读介质 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114625536A (zh) * | 2022-03-15 | 2022-06-14 | 北京有竹居网络技术有限公司 | 显存分配方法、装置、介质及电子设备 |
CN114625536B (zh) * | 2022-03-15 | 2023-10-31 | 北京有竹居网络技术有限公司 | 显存分配方法、装置、介质及电子设备 |
CN115951974A (zh) * | 2023-03-10 | 2023-04-11 | 浙江宇视科技有限公司 | Gpu虚拟机的管理方法、系统、设备和介质 |
CN116578416A (zh) * | 2023-04-26 | 2023-08-11 | 中国人民解放军92942部队 | 一种基于gpu虚拟化的信号级仿真加速方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111078412B (zh) | 2023-03-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10761867B2 (en) | Nested emulation and dynamic linking environment | |
US9658890B2 (en) | Runtime agnostic representation of user code for execution with selected execution runtime | |
US10592218B2 (en) | Dynamic data and compute resource elasticity | |
US8768682B2 (en) | ISA bridging including support for call to overidding virtual functions | |
US10585653B2 (en) | Declarative programming model with a native programming language | |
US10191774B2 (en) | Hardware acceleration of web applications | |
CN111078412B (zh) | 一种通过api截获对gpu进行资源管理的方法 | |
KR20080112269A (ko) | 자원 제한 장치, 자원 제한 장치용 가상 실행 시스템, 및 가상 실행 시스템의 성능 향상 방법 | |
EP2802983B1 (en) | Isa bridging with callback | |
JP5886450B2 (ja) | ハイブリッドのエミュレーション及びカーネル関数処理のシステム及び方法 | |
US20100058305A1 (en) | Automatic Generation of Language Bindings for Libraries Using Data from Compiler Generated Debug Information | |
KR100818919B1 (ko) | 메소드 호출 방법 및 이를 이용한 자바 가상 머신 | |
US10552135B1 (en) | Reducing a size of an application package | |
WO2021098257A1 (zh) | 一种基于异构计算平台的业务处理方法 | |
CN114443123A (zh) | 支架电控系统跨平台的实现方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |