CN114418828A - 显存管理方法、装置、设备、存储介质及程序产品 - Google Patents
显存管理方法、装置、设备、存储介质及程序产品 Download PDFInfo
- Publication number
- CN114418828A CN114418828A CN202111593565.1A CN202111593565A CN114418828A CN 114418828 A CN114418828 A CN 114418828A CN 202111593565 A CN202111593565 A CN 202111593565A CN 114418828 A CN114418828 A CN 114418828A
- Authority
- CN
- China
- Prior art keywords
- video memory
- memory
- api
- gpu
- address block
- 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
Images
Classifications
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- 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/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- 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/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
-
- 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/60—Memory management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Stored Programmes (AREA)
Abstract
本公开提供了显存管理方法、装置、设备、存储介质及程序产品,涉及数据处理技术领域,尤其涉及计算机视觉领域的GPU图形显示的显存管理领域。具体实现方案为:响应于存在显存申请请求,通过统一计算设备架构驱动应用程序接口API的全局内存分配函数,调用显存申请API;所述显存申请API为采用图形处理器GPU显存池化机制在GPU显存池中进行显存申请的API;通过所述显存申请API,在GPU显存池中,申请符合所述显存申请请求的显存。通过本公开提供了一种效率更高的显存管理方式。
Description
技术领域
本公开涉及数据处理技术领域,尤其涉及计算机视觉领域的图像处理器(Graphics Processing Unit,GPU)图形显示的显存管理。
背景技术
为了更好地服务于显存资源的共享、弹性分配以及跨GPU(Graphics ProcessingUnit,图形处理器)的设备分配等,GPU显存池化机制被应用。
GPU显存池化机制能够提高应用程序对GPU显存的使用效率,并减少应用程序运行过程中显存的碎片率。应用GPU显存池化机制,需要预先分配GPU显存池。在申请显存时,GPU显存池可以返回GPU显存池中一块空闲的显存,并将其标记为使用。在释放显存时,GPU显存池可以回收释放的显存,并将回收的显存标记为空闲。
发明内容
本公开提供了一种用于显存管理的方法、装置、设备、存储介质及程序产品。
根据本公开的一方面,提供了一种显存管理方法,包括:
响应于存在显存申请请求,通过统一计算设备架构驱动应用程序接口API的全局内存分配函数,调用显存申请API;所述显存申请API为采用图形处理器GPU显存池化机制在GPU显存池中进行显存申请的API;通过所述显存申请API,在GPU显存池中,申请符合所述显存申请请求的显存。
根据本公开的另一方面,提供了一种显存管理装置,包括:
调用单元,用于在存在显存申请请求时,通过统一计算设备架构驱动应用程序接口API的全局内存分配函数,调用显存申请API,所述显存申请API为采用图形处理器GPU显存池化机制在GPU显存池中进行显存申请的API;显存管理单元,用于在GPU显存池中,申请符合所述显存申请请求的显存。
根据本公开的又一方面,提供一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够上述各方面所述的方法。
根据本公开的又一方面,提供一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行上述各方面所述的方法。
根据本公开的又一方面,提供一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现上述各方面所述的方法。
通过本公开提供了一种效率更高的显存管理方式。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用于更好地理解本方案,不构成对本公开的限定。其中:
图1是根据本公开提供的显存管理方法进行显存申请的流程示意图;
图2是根据本公开提供的显存管理方法进行显存申请API调用的流程示意图;
图3是根据本公开提供的显存管理方法进行显存申请的流程示意图;
图4是根据本公开提供的显存管理方法通过VMM API在GPU显存池中申请显存的流程示意图;
图5是根据本公开提供的显存管理方法创建虚拟地址块与物理地址块映射关系的流程示意图;
图6是根据本公开提供的显存管理方法基于虚拟地址块与物理地址块之间的映射关系,在GPU显存池中申请显存的流程示意图;
图7是根据本公开提供的显存管理方法进行显存释放的方法流程示意图;
图8是根据本公开提供的一种显存管理装置的框图;
图9是用来实现本公开实施例的显存管理的方法的电子设备的框图。
具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
本公开提供的显存管理方法应用于应用程序进行显存申请或显存释放的场景。例如,应用于PaaS(Platform as a Service,平台即服务)、IaaS(Infrastructure as aService,基础设施即服务)平台中应用程序进行显存申请或显存释放的场景。
相关技术中,随着云计算、大数据和深度学习的发展,算力需求与日俱增。GPU由于浮点运算、并行计算等方面的优势,GPU被云服务、边缘计算和终端设备广泛依赖。一般地,应用程序向GPU发送显存申请请求。当应用程序频繁向GPU发送进行GPU显存申请的显存申请请求时,会导致显存申请请求从发出至可以使用的时间较长,而且会产生显存碎片,影响应用程序的性能。
为了提高应用程序对GPU显存的使用效率,并减少应用程序运行过程中显存的碎片率,采用GPU显存池化机制进行显存的申请和/或释放。GPU显存池化机制的核心是预先分配GPU显存池,GPU显存池中包括有相对较大的显存。应用程序进行GPU显存申请时,GPU可以在GPU显存池中确定并分配空闲的显存块,并将该分配的显存块标记为使用。应用程序释放显存时,GPU将应用程序释放的显存块放回显存池,并将释放的显存块标记为空闲,同时合并相邻的空闲的显存块。
基于GPU显存池化机制进行显存管理时,可以将不再使用的虚拟显存块回收至GPU显存池中。在回收的虚拟显存块与前后空闲的虚拟显存块时进行合并,可以减少碎片。下次需要使用显存时,先从GPU显存池中寻找符合条件的显存,减少频繁进行显存申请请求的时间(该时间指显存申请请求从发出至可以使用的时间)。
其中,本公开中涉及的显存块可以理解为是GPU显存池中对应某一段虚拟地址的显存。本公开以下实施例中,GPU显存池中的显存块有时也称为显存,或者虚拟地址块,本领域技术人员应理解其含义的一致性。
GPU显存池化机制可以应用在GPU虚拟化领域,更好地服务于显存资源的共享、弹性分配和跨GPU设备分配等,同时更高效地管理GPU显存资源。
基于GPU显存池化机制进行GPU显存资源管理时,相关技术中支持基于深度学习框架层的GPU显存池化机制。例如,可以是在飞桨PaddlePaddle、TensorFlow等深度学习平台使用基于GPU显存池化机制的显存资源管理。基于深度学习框架层的GPU显存池化机制中,通过一次性调用显存分配函数(或者也可以称为一次性调用显存分配接口)开辟显存,配置成显存池。例如,通过CUDA(Compute Unified Device Architecture,统一计算设备架构)Runtime(运行)API(Application Programming Interface,应用程序接口)中的cudaMalloc(内存分配函数),按照不同的显存大小一次性申请得到显存,并将申请到的显存组成显存池。其中,每次调用显存申请函数时,从显存池中获取显存。释放显存时,将显存重新回收至显存池中。
基于深度学习框架层的GPU显存池化机制,能够提高应用程序对GPU显存的使用效率,同时减少应用程序运行过程中显存的碎片率。但是基于深度学习框架层的GPU显存池化机制,需要在一次性调用显存分配接口上层封装用于进行显存申请的API,即需要额外新增显存池化申请和释放的API。由于额外新增的API并不能直接链接到GPU显存池对应的动态库,故需要用户手动调用GPU显存池化相关API去申请和释放显存,并重新编译应用程序,集成成本高,对用户不友好。
鉴于此,本公开提供一种基于显存池化机制进行显存管理的方法。
在该显存管理方法中,通过CUDA Driver(驱动)API进行显存管理。
一种实施方式中,在进行显存申请时,通过CUDA Driver API中的cuMemAlloc(全局内存分配函数)直接调用GPU池化机制的显存申请API进行显存申请。其中,显存申请API为采用GPU显存池化机制在GPU显存池中进行显存申请的API,该显存申请API能够链接到GPU显存池的显存申请动态库。本公开中,CUDA Driver API中的cuMemAlloc所调用的显存申请API,可以称为memPoolAlloc API。
另一种实施方式中,在进行显存释放时,通过CUDA Driver API中的cuMemFree(全局内存释放函数)直接调用GPU池化机制的显存释放API进行显存释放。其中,显存释放API为采用GPU显存池化机制在GPU显存池中进行显存释放的API,该显存释放API能够链接到GPU显存池的显存释放动态库。本公开中,CUDA Driver API中的cuMemFree调用的显存释放API,可以称为memPoolFree API。
本公开提供的显存管理方法,通过CUDA Driver API直接调用GPU池化机制的显存申请API和/或显存释放API,能够链接到GPU显存池的动态库,使得显存申请对用户是透明的。用户在使用应用程序进行显存申请时,无需修改应用程序,也无需重新编译应用程序,集成度低(“零成本”集成),对用户是友好的。
需要说明的是,本公开实施例中执行上述显存管理方法的执行主体,可为具有数据通信处理能力的电子设备和/或以电子设备为载体运行的应用程序。示例的,执行主体可包括计算机、用户终端以及其他设备。
本公开以下对本公开示例性实施例中涉及的显存管理方法进行说明。
作为示例性的实施方式,图1是根据本公开提供的显存管理方法进行显存申请的流程示意图。参阅图1所示,本公开提供的显存管理方法包括以下步骤。
在步骤S101中,响应于存在显存申请请求,通过CUDA Driver API的全局内存分配函数,调用显存申请API。
在步骤S102中,通过调用的显存申请API,在GPU显存池中,申请符合显存申请请求的显存。
本公开中,CUDA Driver API的全局内存分配函数可以是cuMemAlloc函数。以下实施例中以全局内存分配函数为cuMemAlloc函数为例进行说明,当然本公开中CUDA DriverAPI的全局内存分配函数也可以是其他能够实现本公开所需功能的函数。
作为示例性的实施方式,应用程序在运行时需要申请显存,此时确定存在显存申请请求。应用程序向GPU发送显存申请请求,该显存申请请求中包括显存大小。GPU通过CUDADriver API中的cuMemAlloc函数调用显存申请API,以在GPU显存池中进行显存申请。
本公开实施例提供的显存管理方法,通过CUDA Driver API的全局内存分配函数,调用显存申请API,使得应用程序能够直接链接到GPU显存池的动态库,进而应用程序进行显存申请时,无需修改应用程序,也无需重新编译应用程序,集成度低。故,通过本公开直接调用显存申请API进行显存管理的方式,使显存管理控制过程更为便捷、高效。
相关技术中,CUDA Driver API中的cuMemAlloc函数是用于进行全局内存分配的。本公开中,通过CUDA Driver API中的cuMemAlloc函数调用显存申请API时,可以采用拦截cuMemAlloc函数原有进行全局内存分配的处理逻辑,并创建调用显存申请API的处理逻辑。
作为示例性的实施方式,图2是根据本公开提供的显存管理方法进行显存申请API调用的流程示意图。参阅图2所示,本公开提供的显存管理方法包括以下步骤。
在步骤S201中,调用CUDA Driver API中的cuMemAlloc函数,并拦截cuMemAlloc函数所对应的处理逻辑。
本公开中,CUDA Driver API中的cuMemAlloc函数所对应的处理逻辑可以理解为是原有进行全局内存分配的逻辑。其中,拦截cuMemAlloc函数所对应的处理逻辑可以理解为是使cuMemAlloc函数不再采用全局内存分配的处理逻辑进行后续的函数调用。
在步骤S202中,创建cuMemAlloc函数调用显存申请API的处理逻辑。
本公开中,CUDA Driver API中的cuMemAlloc函数可以对底层驱动进行控制,故可以更改cuMemAlloc函数的处理逻辑为调用显存申请API的处理逻辑,以实现通过cuMemAlloc函数调用显存申请API的处理逻辑相关处理逻辑的创建。
本公开实施例提供的显存管理方法中,调用CUDA Driver API中的cuMemAlloc函数,并拦截cuMemAlloc函数原有进行全局内存分配的处理逻辑,创建cuMemAlloc函数调用显存申请API的处理逻辑,能够实现通过cuMemAlloc函数调用显存申请API,进而使得应用程序进行显存申请时,无需修改应用程序,也无需重新编译应用程序,集成度低。并且,本公开中通过拦截cuMemAlloc函数原有处理逻辑的方案,只需要增加拦截的处理逻辑,无需其他额外的操作,故实现过程相对简单。
本公开中,应用程序通过cuMemAlloc函数调用显存申请API后,可以直接访问GPU显存池,进而在GPU显存池中进行显存申请。
在GPU显存池中进行显存申请时,可以基于显存申请请求,在GPU显存池中申请显存块(虚拟地址块)。
其中,在GPU显存池中申请显存块时,可以确定满足显存申请请求条件的显存块。其中,满足显存申请请求条件一方面可以理解为是满足显存申请请求中的显存大小。其中,满足显存申请请求中的显存大小可以理解为是存在有大于或等于显存大小的显存块。另一方面也可以理解为是满足显存申请请求中包括的虚拟地址。满足显存申请请求中包括的虚拟地址可以理解为是存在与申请请求中包括的虚拟地址一致的显存块。
作为示例性的实施方式,图3是根据本公开提供的显存管理方法进行显存申请的流程示意图。参阅图3所示,本公开提供的显存管理方法包括以下步骤。
在步骤S301中,在GPU显存池中,确定满足显存申请请求中所包括的显存大小的空闲虚拟地址块。
本公开实施例中,应用程序向GPU发送的显存申请请求中包括显存大小。GPU调用CUDA Driver API中的cuMemAlloc函数,并拦截cuMemAlloc函数原有进行全局内存分配的处理逻辑,创建cuMemAlloc函数调用显存申请API的处理逻辑,以调用显存申请API,在GPU显存池中,确定是否存在满足显存申请请求中所包括的显存大小的空闲虚拟地址块。
一方面,若GPU显存池中,存在满足显存申请请求中所包括的显存大小的空闲虚拟地址块,则执行步骤S302a。另一方面,若GPU显存池中,不存在满足显存申请请求中所包括的显存大小的空闲虚拟地址块,则执行步骤S302b。
在步骤S302a中,若GPU显存池中存在满足显存大小的显存块,则获取满足显存大小的显存块的首地址,并将显存块标记为使用。
在步骤S302b中,若GPU显存池中不存在满足显存大小的显存块,则通过显存申请API,调用虚拟内存管理(Virtual Memory Management,VMM)API,通过VMM API,在GPU显存池中,申请符合显存大小的显存块。
本公开提供的显存管理方法,在GPU显存池中不存在满足显存大小的显存块时,通过VMM API,在GPU显存池中,申请符合显存大小的显存块,无需再重新调用cuMemAlloc函数调用显存申请API,能够使显存管理更为灵活。
本公开中,在GPU显存池中,确定是否存在满足显存申请请求中所包括的显存大小的空闲虚拟地址块时,可以是在GPU显存池中寻找大于或等于显存申请请求中包括的显存大小的显存块。
其中,在GPU显存池中寻找大于或等于显存申请请求中包括的显存大小的显存块可以采用如下方式:
首先,在GPU显存池中寻找超过显存申请请求中显存大小的最小虚拟地址块。若在GPU显存池中寻找到超过显存申请请求中显存大小的最小虚拟地址块,则判断找到的最小虚拟地址块的大小是否满足如下条件1和/或条件2。
条件1:最小虚拟地址块的大小超过显存申请请求中显存大小的m倍。其中,m为2或3等。
条件2:最小虚拟地址块的大小比显存申请请求中的显存大小大n B(B也可以称为Byte,字节)。其中,n为128KB(Kilobyte,千字节)或128MB(Mebibyte,兆字节)等。
其中,若找到的最小虚拟地址块的大小对于上述条件1和条件2都不满足,则将该找到的最小虚拟地址块作为符合显存申请请求的空闲虚拟地址块。
若找到的最小虚拟地址块的大小满足条件1或条件2,则将找到的最小虚拟地址块,根据显存申请请求中显存大小进行分割。例如,可以分割成两块,其中一块虚拟地址块的大小是显存申请请求中显存大小,即为符合显存申请请求条件的空闲虚拟地址块;另一块虚拟地址块的大小为剩余大小,放回GPU显存池。
本公开中,在GPU显存池中寻找超过显存申请请求中显存大小的最小虚拟地址块。若在GPU显存池中未寻找到超过显存申请请求中显存大小的最小虚拟地址块,则调用显存申请API,通过VMM API在GPU显存池中申请显存。
本公开以下对通过VMM API在GPU显存池中申请显存的实施过程进行说明。
作为示例性的实施方式,图4是根据本公开提供的显存管理方法通过VMM API在GPU显存池中申请显存的流程示意图。参阅图4所示,本公开提供的通过VMM API在GPU显存池中申请显存的方法包括以下步骤。
在步骤S401中,调用VMM API分配虚拟地址块。
其中,本公开可以调用VMM API的cuMemAddressReserve(用于申请虚拟地址空间的API)申请虚拟地址块。
在步骤S402中,基于VMM API分配的虚拟地址块,在GPU显存池中,申请符合显存申请请求中的显存大小的显存块。
本公开中,基于VMM API分配的虚拟地址块,在GPU显存池中,申请符合显存申请请求中显存大小的显存块时,可以基于虚拟地址在GPU显存池中申请显存的处理逻辑,故对原有处理逻辑的改动较小,实现过程相对简单。
本公开一示例性实施方式中,基于VMM API分配的虚拟地址块,在GPU显存池中,申请符合显存申请请求中显存大小的显存块时,可以在GPU显存池中,按照VMM API分配的虚拟地址块的首地址以及显存申请请求中包括的显存大小,申请显存块。将申请到的显存块标记为使用。
其中,本公开中,在GPU显存池中,按照VMM API分配的虚拟地址块的首地址以及显存申请请求中包括的显存大小,申请显存块,可以将VMMAPI分配的虚拟地址块的首地址和显存申请请求中的显存大小放入GPU显存池,在GPU显存池申请显存块,该申请到的显存块首地址为VMM API分配的虚拟地址块的首地址,显存块的大小为显存申请请求中包括的显存大小。GPU显存池将申请到的显存块(虚拟地址块)标记为使用并将申请到的显存块的首地址(VMM API分配的虚拟地址块的首地址)返回至应用程序。应用程序获取到申请到的显存块的首地址,后续基于该申请到的显存块的首地址,以及申请请求中包括的显存大小,使用VMM API分配的虚拟地址块,进行显存管理。
然而,基于虚拟地址在GPU显存池中申请显存,可能会出现不能匹配到实际物理内存的情况。故,在多个应用程序进行显存申请时,可能会出现匹配不到物理内存的应用程序,进而导致应用程序运行失败。一示例中,假设应用程序A与应用程序B运行所需的物理内存均为x,运行应用程序A与应用程序B的设备能够提供的物理内存最大也为x。采用基于虚拟地址在GPU显存池中申请显存的处理逻辑时,应用程序A和应用程序B二者中只能运行其中一个,并不能同时运行,同时运行将会由于不能匹配到物理内存,而导致运行失败。
基于此,本公开通过VMM API在GPU显存池中申请显存时,可以通过VMM API分配物理地址块,以使应用程序能够匹配到物理地址,提高应用程序运行成功率。
进一步的,VMM API在GPU显存池中申请显存时分配物理地址,可以基于物理地址和/或虚拟地址进行显存管理,相对单一的基于虚拟地址进行显存管理,灵活性更大。
本公开一示例性实施方式中,可以创建虚拟地址块与物理地址块映射关系,基于该映射关系进行显存管理。
作为示例性的实施方式,图5是根据本公开提供的显存管理方法创建虚拟地址块与物理地址块映射关系的流程示意图。参阅图5所示,本公开提供的创建虚拟地址块与物理地址块映射关系的方法包括以下步骤。
在步骤S501中,调用VMM API分配物理地址块以及虚拟地址块。
本公开一示例性实施方式中,调用VMM API中的cuMemCreate(用于申请物理地址句柄的API)申请物理地址块,并调用VMM API中的cuMemAddressReserve申请虚拟地址块。
进一步的,本公开中通过VMM API分配了物理地址块,可以进行物理地址块对应的物理内存访问权限的分配。一示例性实施方式中,本公开中将物理地址块对应的物理内存访问权限分配为以下之一:只读权限、只写权限,以及可读可写权限。相对传统基于虚拟地址进行显存管理中仅能设置可读可写权限,本公开中访问权限的设置更为灵活。
一示例性实施方式中,本公开中可以调用VMM API中的cuMemSetAccess(用于将每个设备的内存访问权限设置为分配的API),进行访问权限设置。
本公开一示例性实施方式中,针对VMM API分配的物理地址块以及虚拟地址块,可以创建映射关系。
在步骤S502中,将分配的物理地址块,映射至分配的虚拟地址块范围内,以创建物理地址块与虚拟地址块之间的映射关系。
本公开一示例性实施方式中,可以调用VMM API中的cuMemMap(用于将物理内存句柄映射到虚拟地址范围的API),将物理地址块与虚拟地址块进行映射,以创建物理地址块与虚拟地址块之间的映射关系。
本公开中,创建物理地址块以及虚拟地址块之间的映射关系,使得在进行显存管理时,基于物理地址块以及虚拟地址块之间的映射关系,可以基于虚拟地址块在GPU显存池中申请显存,也可以基于物理地址块在GPU显存池中申请显存,相对单一的基于虚拟地址进行显存管理,灵活性更大。
进一步的,本公开中可以基于虚拟地址块与物理地址块映射关系,实现基于物理地址的内存分配,实现了物理地址与虚拟地址之间的解耦,提高多应用程序运行的成功率,并提高了显存管理操作的灵活性。
作为示例性的实施方式,图6是根据本公开提供的显存管理方法基于虚拟地址块与物理地址块之间的映射关系,在GPU显存池中申请显存的流程示意图。参阅图6所示,本公开提供的虚拟地址块与物理地址块之间的映射关系,在GPU显存池中申请显存的方法包括以下步骤。
在步骤S601中,基于虚拟地址块与物理地址块之间的映射关系,确定VMM API分配的虚拟地址块所映射的物理地址块。
在步骤S602中,将显存申请请求定位至物理地址块对应的物理内存。
本公开一示例性的实施方式中,VMM API将分配的虚拟地址块的首地址和显存申请请求中的显存大小放入GPU显存池。GPU显存池将虚拟地址块标记为使用并将申请到的显存块的首地址(VMM API分配的虚拟地址块的首地址)返回至应用程序。应用程序基于获取到的虚拟地址块的首地址,以及显存申请请求中的显存大小,确定虚拟地址块,并基于该虚拟地址块定位至物理内存。其中,GPU可以基于应用程序发送的虚拟地址块,以及虚拟地址块与物理地址块的映射关系,确定应用程序发送的虚拟地址块所映射的物理地址块,进而将虚拟地址块定位至物理地址块对应到具有物理地址的物理内存。
本公开中基于虚拟地址块与物理地址块之间的映射关系,在GPU显存池中申请显存,能够定位至物理地址块对应的物理内存,可以提高多应用运行时运行成功率。接续上述示例,应用程序A与应用程序B运行所需的物理内存均为x,运行应用程序A与应用程序B的设备能够提供的物理内存最大也为x。在应用程序A和/或应用程序B运行并申请显存时,发送虚拟地址在GPU显存池中申请显存x,并基于该虚拟地址映射物理内存x。故,若应用程序A或应用程序B基于虚拟地址在GPU显存池中申请到显存x空闲,并定位到物理内存x空闲,则可正常运行。
本公开提供的显存管理方法中,应用程序也可以基于CUDA Driver API层进行显存释放。
作为示例性的实施方式,图7是根据本公开提供的显存管理方法进行显存释放的方法流程示意图。参阅图7所示,本公开进行显存释放的方法包括以下步骤。
在步骤S701中,响应于存在显存释放请求,通过CUDA Driver API中的cuMemFree,调用显存释放API。
其中,应用程序不再使用申请的虚拟地址块时,需要向GPU发送显存释放请求,以释放不再使用的虚拟地址块。显存释放请求中包括释放的虚拟地址块。
基于上述实施例,本公开中显存释放API为GPU显存池化机制在GPU显存池中进行显存释放的API,也可称为memPoolFree API。
本公开中,GPU通过CUDA Driver API中的cuMemFree函数调用显存释放API,以在GPU显存池中进行显存释放。
在步骤S702中,在GPU显存池中,回收释放的虚拟地址块,并将释放的虚拟地址块标记为空闲。
本公开实施例提供的显存管理方法,通过CUDA Driver API的全局内存释放函数,调用显存释放API,使得应用程序能够直接链接到GPU显存池的动态库,进而应用程序进行显存释放时,无需修改应用程序,也无需重新编译应用程序,集成度低。故,通过本公开直接调用显存释放API进行显存管理的方式,使显存管理控制过程更为便捷、高效。
相关技术中,CUDA Driver API中的cuMemFree函数是用于进行全局内存释放的。本公开中,通过CUDA Driver API中的cuMemFree函数调用显存释放API时,可以采用拦截cuMemFree函数原有进行全局内存释放的处理逻辑,并创建调用显存释放API的处理逻辑。
作为示例性的实施方式,本公开提供的显存管理方法进行显存释放API调用时,调用CUDA Driver API中的cuMemFree函数,并拦截cuMemFree函数所对应的处理逻辑,并创建cuMemFree函数调用显存释放API的处理逻辑。
本公开中,CUDA Driver API中的cuMemFree函数所对应的处理逻辑可以理解为是原有进行全局内存释放的逻辑。其中,拦截cuMemFree函数所对应的处理逻辑可以理解为是使cuMemFree函数不再采用全局内存释放的处理逻辑进行后续的函数调用。
本公开中,通过更改cuMemFree函数的处理逻辑为调用显存释放API的处理逻辑,以实现通过cuMemFree函数调用显存释放API的处理逻辑相关处理逻辑的创建。
本公开实施例提供的显存管理方法中,调用CUDA Driver API中的cuMemFree函数,并拦截cuMemFree函数原有进行全局内存释放的处理逻辑,创建cuMemFree函数调用显存释放API的处理逻辑,能够实现通过cuMemFree函数调用显存释放API,进而使得应用程序进行显存释放时,无需修改应用程序,也无需重新编译应用程序,集成度低。并且,本公开中通过拦截cuMemFree函数原有处理逻辑的方案,只需要增加拦截的处理逻辑,无需其他额外的操作,故实现过程相对简单。
本公开中,应用程序通过cuMemFree函数调用显存释放API后,可以直接访问GPU显存池,进而在GPU显存池中回收释放的虚拟地址块。
在GPU显存池中,回收释放的虚拟地址块时,可以确定GPU显存池中是否存在与释放的虚拟地址块相邻的空闲虚拟地址块。
一方面,若GPU显存池中存在与释放的虚拟地址块相邻的空闲虚拟地址块,则将释放的虚拟地址块与相邻的空闲虚拟地址块合并为一个显存块,回收至GPU显存池中,以减少碎片。
另一方面,若GPU显存池中不存在与释放的虚拟地址块相邻的空闲虚拟地址块,则将释放的虚拟地址块作为一个显存块,回收至GPU显存池中。
本公开一示例性实施方式中,回收至GPU显存池中的显存块可以被标记为空闲,以便后续进行共享。
本公开提供的显存管理方法中,在需要进行显存释放时,将释放的虚拟地址块回收至GPU显存池中。在GPU显存池中,存在与回收的虚拟地址块相邻的空闲的显存块时,将释放的虚拟地址块与相邻的空闲虚拟地址块合并为一个显存块,回收至GPU显存池中,可以减少碎片。并且,本公开中将释放的虚拟地址块作为空闲的显存块回收至GPU显存池中,可以在后续需要使用显存时,先从GPU显存池中寻找符合条件的显存,减少频繁进行显存申请请求的时间。
本公开提供的显存管理方法中,若应用程序再次存在显存申请请求时,发出新的显存申请请求至GPU,GPU通过CUDA Driver API中的cuMemFree函数调用显存申请API。在本公开中,CUDA Driver API中的cuMemFree函数原有处理逻辑被劫持,通过本公开上述实施例涉及的处理逻辑直接调用显存申请API进行显存的申请。此时,GPU池化机制先从已有的GPU显存池中寻找是否有符合显存申请请求的虚拟地址块。若GPU显存池中,存在满足显存申请请求的空闲虚拟地址块,直接分配给应用程序使用。若GPU显存池中,不存在满足显存申请请求的空闲虚拟地址块,通过VMM API,在GPU显存池中,申请符合显存大小的显存块。
本公开中在对申请到的显存使用完之后,可以采用本公开上述实施例中涉及的进行显存释放的方法,释放显存。
本公开提供的显存管理方法中,通过CUDA Driver API进行显存管理,并采用拦截cuMemAlloc函数原有进行全局内存分配的处理逻辑,创建调用显存申请API的处理逻辑,或者拦截cuMemFree函数原有进行全局内存释放的处理逻辑,创建调用显存释放API的处理逻辑,相对通过深度学习框架层进行显存管理,使得应用程序能够直接链接到GPU显存池的动态库,进而应用程序进行显存管理时,对用户是透明的,用户使用时无需修改应用程序,也不用重新编译,“零成本”集成,对用户友好。
进一步的,本公开提供的显存管理方法中,通过CUDA Driver API层的VMM API,分配虚拟地址块和物理地址块,实现显存的虚拟地址和物理地址解耦,因此允许应用程序不仅可以处理虚拟地址也可以处理物理地址,给用户使用带来了操作灵活性。
基于相同的构思,本公开实施例还提供一种显存管理装置。
可以理解的是,本公开实施例提供的显存管理装置为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。结合本公开实施例中所公开的各示例的单元及算法步骤,本公开实施例能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以对每个特定的应用来使用不同的方法来实现所描述的功能,但是这种实现不应认为超出本公开实施例的技术方案的范围。
作为示例性的实施方式,图8是根据本公开提供的一种显存管理装置的框图。参阅图8所示,本公开提供的显存管理装置800包括调用单元801和显存管理单元802。
其中,调用单元801,用于在存在显存申请请求时,通过CUDA Driver API的全局内存分配函数,调用显存申请API,显存申请API为采用GPU显存池化机制在GPU显存池中进行显存申请的API。显存管理单元802,用于通过显存申请API,在GPU显存池中,申请符合显存申请请求的显存。
作为示例性的实施方式,调用单元801用于调用CUDA Driver API的全局内存分配函数,拦截全局内存分配函数所对应的处理逻辑,并创建调用显存申请API的处理逻辑。
其中,显存管理单元802用于采用如下方式在GPU显存池中,申请符合显存申请请求的显存:
在GPU显存池中,确定满足显存大小的空闲虚拟地址块。若GPU显存池中存在满足显存大小的显存块,则获取满足显存大小的显存块的首地址,并将显存块标记为使用。若GPU显存池中不存在满足显存大小的显存块,则通过显存申请API,调用虚拟内存管理API,通过虚拟内存管理API,在GPU显存池中,申请符合显存大小的显存块。
其中,显存管理单元802用于调用虚拟内存管理API分配虚拟地址块,并基于VMMAPI分配的虚拟地址块,在GPU显存池中,申请符合显存大小的显存块。
其中,显存管理单元802基于VMM API分配的虚拟地址块,在GPU显存池中,申请符合所述显存大小的显存块时,在GPU显存池中,按照VMM API分配的虚拟地址块的首地址以及显存申请请求中包括的显存大小,申请显存块,并将申请到的显存块标记为使用。其中,申请到的显存块的首地址为VMM API分配的虚拟地址块的首地址,申请到的显存块的大小等于显存申请请求中包括的显存大小。
作为示例性的实施方式,显存管理单元802还用于:基于虚拟地址块与物理地址块之间的映射关系,确定虚拟内存管理API分配的虚拟地址块所映射的物理地址块。将显存申请请求定位至物理地址块对应的物理内存。
作为示例性的实施方式,显存管理单元802用于:调用虚拟内存管理API分配物理地址块以及虚拟地址块,并将分配的物理地址块,映射至分配的虚拟地址块范围内,以创建物理地址块与虚拟地址块之间的映射关系。
作为示例性的实施方式,显存管理单元802还用于:将物理地址块对应的物理内存访问权限分配为以下之一:只读权限、只写权限,以及可读可写权限。
作为示例性的实施方式,调用单元801还用于:在存在显存释放请求时,调用CUDADriver API的全局内存释放函数,拦截全局内存释放函数所对应的处理逻辑,并创建调用显存释放API的处理逻辑,显存释放请求中包括释放的虚拟地址块,显存释放API为采用GPU显存池化机制在GPU显存池中进行显存释放的API。显存管理单元802还用于:通过显存释放API,在GPU显存池中,回收释放的虚拟地址块,并将释放的虚拟地址块标记为空闲。
其中,若GPU显存池中存在与所述释放的虚拟地址块相邻的空闲虚拟地址块,则显存管理单元802将释放的虚拟地址块与相邻的空闲虚拟地址块合并为一个显存块,回收至GPU显存池中。若GPU显存池中不存在与释放的虚拟地址块相邻的空闲虚拟地址块,则显存管理单元802将释放的虚拟地址块作为一个显存块,回收至GPU显存池中。
关于本公开上述涉及的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
本公开的技术方案中,所涉及的用户个人信息的申请,存储和应用等,均符合相关法律法规的规定,且不违背公序良俗。
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
图9示出了可以用来实施本公开的实施例的示例电子设备900的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
如图9所示,设备900包括计算单元901,其可以根据存储在只读存储器(ROM)902中的计算机程序或者从存储单元908加载到随机访问存储器(RAM)903中的计算机程序,来执行各种适当的动作和处理。在RAM903中,还可存储设备900操作所需的各种程序和数据。计算单元901、ROM 902以及RAM 903通过总线904彼此相连。输入/输出(I/O)接口905也连接至总线904。
设备900中的多个部件连接至I/O接口905,包括:输入单元906,例如键盘、鼠标等;输出单元907,例如各种类型的显示器、扬声器等;存储单元908,例如磁盘、光盘等;以及通信单元909,例如网卡、调制解调器、无线通信收发机等。通信单元909允许设备900通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元901可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元901的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元901执行上文所描述的各个方法和处理,例如显存管理方法。例如,在一些实施例中,显存管理方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元908。在一些实施例中,计算机程序的部分或者全部可以经由ROM 902和/或通信单元909而被载入和/或安装到设备900上。当计算机程序加载到RAM 903并由计算单元901执行时,可以执行上文描述的显存管理方法的一个或多个步骤。备选地,在其他实施例中,计算单元901可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行显存管理方法。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,也可以为分布式系统的服务器,或者是结合了区块链的服务器。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。
Claims (19)
1.一种显存管理方法,包括:
响应于存在显存申请请求,通过统一计算设备架构驱动应用程序接口API的全局内存分配函数,调用显存申请API;
所述显存申请API为采用图形处理器GPU显存池化机制在GPU显存池中进行显存申请的API;
通过所述显存申请API,在GPU显存池中,申请符合所述显存申请请求的显存。
2.根据权利要求1所述的方法,其中,通过统一计算设备架构驱动API的全局内存分配函数,调用显存申请API,包括:
调用统一计算设备架构驱动API的全局内存分配函数,拦截所述全局内存分配函数所对应的处理逻辑,并创建调用显存申请API的处理逻辑。
3.根据权利要求1或2所述的方法,其中,所述显存申请请求中包括显存大小;
所述在GPU显存池中,申请符合所述显存申请请求的显存,包括:
在所述GPU显存池中,确定满足所述显存大小的空闲虚拟地址块;
若GPU显存池中存在满足所述显存大小的显存块,则获取满足所述显存大小的显存块的首地址,并将所述显存块标记为使用;
若GPU显存池中不存在满足所述显存大小的显存块,则通过所述显存申请API,调用虚拟内存管理API,通过所述虚拟内存管理API,在所述GPU显存池中,申请符合所述显存大小的显存块。
4.根据权利要求3所述的方法,其中,所述通过所述虚拟内存管理API,在所述GPU显存池中,申请符合所述显存大小的显存块,包括:
调用虚拟内存管理API分配虚拟地址块;
基于虚拟内存管理API分配的虚拟地址块,在GPU显存池中,申请符合所述显存大小的显存块。
5.根据权利要求4所述的方法,其中,所述基于虚拟内存管理API分配的虚拟地址块,在GPU显存池中,申请符合所述显存大小的显存块,包括:
在所述GPU显存池中,按照虚拟内存管理API分配的虚拟地址块的首地址以及显存申请请求中包括的显存大小,申请显存块,并将申请到的显存块标记为使用;
其中,所述申请到的显存块的首地址为所述虚拟内存管理API分配的虚拟地址块的首地址,所述申请到的显存块的大小等于所述显存申请请求中包括的显存大小。
6.根据权利要求4或5所述的方法,其中,所述方法还包括:
基于虚拟地址块与物理地址块之间的映射关系,确定所述虚拟内存管理API分配的虚拟地址块所映射的物理地址块;
将所述显存申请请求定位至所述物理地址块对应的物理内存。
7.根据权利要求6所述的方法,其中,虚拟地址块与物理地址块之间的映射关系采用如下方式确定:
调用虚拟内存管理API分配物理地址块以及虚拟地址块;
将分配的物理地址块,映射至分配的虚拟地址块范围内,以创建物理地址块与虚拟地址块之间的映射关系。
8.根据权利要求6或7所述的方法,还包括:
将所述物理地址块对应的物理内存访问权限分配为以下之一:只读权限、只写权限,以及可读可写权限。
9.根据权利要求1-8中任意一项所述的方法,还包括:
响应于存在显存释放请求,调用统一计算设备架构驱动API的全局内存释放函数,拦截所述全局内存释放函数所对应的处理逻辑,并创建调用显存释放API的处理逻辑,所述显存释放请求中包括释放的虚拟地址块;
所述显存释放API为采用图形处理器GPU显存池化机制在GPU显存池中进行显存释放的API;
通过所述显存释放API,在所述GPU显存池中,回收所述释放的虚拟地址块,并将所述释放的虚拟地址块标记为空闲。
10.根据权利要求9所述的方法,其中,所述在所述GPU显存池中,回收所述释放的虚拟地址块,包括:
若所述GPU显存池中存在与所述释放的虚拟地址块相邻的空闲虚拟地址块,则将所述释放的虚拟地址块与所述相邻的空闲虚拟地址块合并为一个显存块,回收至所述GPU显存池中;
若所述GPU显存池中不存在与所述释放的虚拟地址块相邻的空闲虚拟地址块,则将所述释放的虚拟地址块作为一个显存块,回收至所述GPU显存池中。
11.一种显存管理装置,包括:
调用单元,用于在存在显存申请请求时,通过统一计算设备架构驱动应用程序接口API的全局内存分配函数,调用显存申请API,所述显存申请API为采用图形处理器GPU显存池化机制在GPU显存池中进行显存申请的API;
显存管理单元,用于通过所述显存申请API,在GPU显存池中,申请符合所述显存申请请求的显存。
12.根据权利要求11所述的装置,其中,所述调用单元用于采用如下方式通过统一计算设备架构驱动API的全局内存分配函数,调用显存申请API:
调用统一计算设备架构驱动API的全局内存分配函数,拦截所述全局内存分配函数所对应的处理逻辑,并创建调用显存申请API的处理逻辑。
13.根据权利要求11所述的装置,其中,所述显存管理单元用于采用如下方式在GPU显存池中,申请符合所述显存申请请求的显存:
在所述GPU显存池中,确定满足所述显存大小的空闲虚拟地址块;
若GPU显存池中存在满足所述显存大小的显存块,则获取满足所述显存大小的显存块的首地址,并将所述显存块标记为使用;
若GPU显存池中不存在满足所述显存大小的显存块,则通过所述显存申请API,调用虚拟内存管理API,通过所述虚拟内存管理API,在所述GPU显存池中,申请符合所述显存大小的显存块。
14.根据权利要求13所述的装置,其中,所述显存管理单元还用于:
基于虚拟地址块与物理地址块之间的映射关系,确定所述虚拟内存管理API分配的虚拟地址块所映射的物理地址块;
将所述显存申请请求定位至所述物理地址块对应的物理内存。
15.根据权利要求14所述的装置,其中,所述显存管理单元用于:
调用虚拟内存管理API分配物理地址块以及虚拟地址块;
将分配的物理地址块,映射至分配的虚拟地址块范围内,以创建物理地址块与虚拟地址块之间的映射关系。
16.根据权利要求11-15中任意一项所述的装置,所述调用单元还用于:在存在显存释放请求时,调用统一计算设备架构驱动API的全局内存释放函数,拦截所述全局内存释放函数所对应的处理逻辑,并创建调用显存释放API的处理逻辑,所述显存释放请求中包括释放的虚拟地址块,所述显存释放API为采用图形处理器GPU显存池化机制在GPU显存池中进行显存释放的API;
所述显存管理单元还用于:通过所述显存释放API,在所述GPU显存池中,回收所述释放的虚拟地址块,并将所述释放的虚拟地址块标记为空闲。
17.一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-10中任一项所述的方法。
18.一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行根据权利要求1-10中任一项所述的方法。
19.一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现根据权利要求1-10中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111593565.1A CN114418828B (zh) | 2021-12-23 | 2021-12-23 | 显存管理方法、装置、设备、存储介质及程序产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111593565.1A CN114418828B (zh) | 2021-12-23 | 2021-12-23 | 显存管理方法、装置、设备、存储介质及程序产品 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114418828A true CN114418828A (zh) | 2022-04-29 |
CN114418828B CN114418828B (zh) | 2022-11-15 |
Family
ID=81268508
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111593565.1A Active CN114418828B (zh) | 2021-12-23 | 2021-12-23 | 显存管理方法、装置、设备、存储介质及程序产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114418828B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114579319A (zh) * | 2022-05-07 | 2022-06-03 | 北京象帝先计算技术有限公司 | 显存管理方法、显存管理模块、soc及电子设备 |
CN115904740A (zh) * | 2023-02-23 | 2023-04-04 | 青岛创新奇智科技集团股份有限公司 | 一种gpu资源调用方法及系统 |
CN117455750A (zh) * | 2023-12-26 | 2024-01-26 | 芯瞳半导体技术(山东)有限公司 | 显存管理方法、装置、系统、介质及设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110196753A (zh) * | 2019-01-21 | 2019-09-03 | 腾讯科技(北京)有限公司 | 基于容器的图形处理器gpu虚拟化方法、装置和可读介质 |
CN110928695A (zh) * | 2020-02-12 | 2020-03-27 | 南京芯瞳半导体技术有限公司 | 一种关于显存的管理方法、装置及计算机存储介质 |
WO2020221200A1 (zh) * | 2019-04-28 | 2020-11-05 | 华为技术有限公司 | 神经网络的构建方法、图像处理方法及装置 |
CN113377545A (zh) * | 2021-07-08 | 2021-09-10 | 支付宝(杭州)信息技术有限公司 | 用于分配gpu物理内存的方法及装置 |
CN113674133A (zh) * | 2021-07-27 | 2021-11-19 | 阿里巴巴新加坡控股有限公司 | Gpu集群共享显存系统、方法、装置及设备 |
-
2021
- 2021-12-23 CN CN202111593565.1A patent/CN114418828B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110196753A (zh) * | 2019-01-21 | 2019-09-03 | 腾讯科技(北京)有限公司 | 基于容器的图形处理器gpu虚拟化方法、装置和可读介质 |
WO2020221200A1 (zh) * | 2019-04-28 | 2020-11-05 | 华为技术有限公司 | 神经网络的构建方法、图像处理方法及装置 |
CN110928695A (zh) * | 2020-02-12 | 2020-03-27 | 南京芯瞳半导体技术有限公司 | 一种关于显存的管理方法、装置及计算机存储介质 |
CN113377545A (zh) * | 2021-07-08 | 2021-09-10 | 支付宝(杭州)信息技术有限公司 | 用于分配gpu物理内存的方法及装置 |
CN113674133A (zh) * | 2021-07-27 | 2021-11-19 | 阿里巴巴新加坡控股有限公司 | Gpu集群共享显存系统、方法、装置及设备 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114579319A (zh) * | 2022-05-07 | 2022-06-03 | 北京象帝先计算技术有限公司 | 显存管理方法、显存管理模块、soc及电子设备 |
CN114579319B (zh) * | 2022-05-07 | 2022-07-19 | 北京象帝先计算技术有限公司 | 显存管理方法、显存管理模块、soc及电子设备 |
CN115904740A (zh) * | 2023-02-23 | 2023-04-04 | 青岛创新奇智科技集团股份有限公司 | 一种gpu资源调用方法及系统 |
CN117455750A (zh) * | 2023-12-26 | 2024-01-26 | 芯瞳半导体技术(山东)有限公司 | 显存管理方法、装置、系统、介质及设备 |
CN117455750B (zh) * | 2023-12-26 | 2024-04-02 | 芯瞳半导体技术(山东)有限公司 | 显存管理方法、装置、系统、介质及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN114418828B (zh) | 2022-11-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114418828B (zh) | 显存管理方法、装置、设备、存储介质及程序产品 | |
US10572392B2 (en) | Increasing the scope of local purges of structures associated with address translation | |
EP3462671B1 (en) | Virtual network function resource management method and device | |
US9098378B2 (en) | Computing reusable image components to minimize network bandwidth usage | |
US9990189B2 (en) | Method to optimize provisioning time with dynamically generated virtual disk contents | |
WO2013040943A1 (en) | Virtual machine placement within server farm | |
US11341044B2 (en) | Reclaiming storage resources | |
US10461772B1 (en) | Code conversion | |
US20220405114A1 (en) | Method, device and computer program product for resource scheduling | |
CN110162397B (zh) | 资源分配方法、装置及系统 | |
WO2023082716A1 (zh) | 在Linux系统中操作安卓应用的方法、装置和设备 | |
CN115309511B (zh) | 基于Xen的数据交互方法、装置、存储介质以及电子设备 | |
US10169027B2 (en) | Upgrade of an operating system of a virtual machine | |
CN111209080A (zh) | 一种图形处理器透传的方法 | |
CN115904761A (zh) | 片上系统、车辆及视频处理单元虚拟化方法 | |
CN112905537A (zh) | 文件处理方法、装置、电子设备和存储介质 | |
US20180203726A1 (en) | Virtual machine migration method and apparatus | |
CN110209354B (zh) | 用于处理数据的方法、装置、设备和介质 | |
CN114726657B (zh) | 中断管理和数据收发管理的方法、装置及智能网卡 | |
CN115562871A (zh) | 内存分配管理的方法和装置 | |
US11429412B2 (en) | Guest protection from application code execution in kernel mode | |
CN115665231A (zh) | 服务创建方法、装置以及计算机可读存储介质 | |
CN112306372B (zh) | 用于处理数据的方法、设备和程序产品 | |
US20210073033A1 (en) | Memory management using coherent accelerator functionality | |
CN113220282B (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 |