CN117369991A - Gpu资源调度方法及相关装置 - Google Patents
Gpu资源调度方法及相关装置 Download PDFInfo
- Publication number
- CN117369991A CN117369991A CN202311138989.8A CN202311138989A CN117369991A CN 117369991 A CN117369991 A CN 117369991A CN 202311138989 A CN202311138989 A CN 202311138989A CN 117369991 A CN117369991 A CN 117369991A
- Authority
- CN
- China
- Prior art keywords
- gpu
- task request
- cuda
- task
- execution state
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 76
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 claims abstract 17
- 238000012163 sequencing technique Methods 0.000 claims description 11
- 238000004891 communication Methods 0.000 claims description 8
- 230000008569 process Effects 0.000 abstract description 19
- 239000008186 active pharmaceutical agent Substances 0.000 description 101
- 238000012545 processing Methods 0.000 description 22
- 238000010586 diagram Methods 0.000 description 14
- 230000006870 function Effects 0.000 description 10
- SPBWHPXCWJLQRU-FITJORAGSA-N 4-amino-8-[(2r,3r,4s,5r)-3,4-dihydroxy-5-(hydroxymethyl)oxolan-2-yl]-5-oxopyrido[2,3-d]pyrimidine-6-carboxamide Chemical compound C12=NC=NC(N)=C2C(=O)C(C(=O)N)=CN1[C@@H]1O[C@H](CO)[C@@H](O)[C@H]1O SPBWHPXCWJLQRU-FITJORAGSA-N 0.000 description 7
- 238000004590 computer program Methods 0.000 description 7
- 101150053844 APP1 gene Proteins 0.000 description 6
- 102100021677 Baculoviral IAP repeat-containing protein 2 Human genes 0.000 description 6
- 101000896157 Homo sapiens Baculoviral IAP repeat-containing protein 2 Proteins 0.000 description 6
- 101100189105 Homo sapiens PABPC4 gene Proteins 0.000 description 6
- 102100039424 Polyadenylate-binding protein 4 Human genes 0.000 description 6
- 101100055496 Arabidopsis thaliana APP2 gene Proteins 0.000 description 5
- 101100016250 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) GYL1 gene Proteins 0.000 description 5
- 230000000694 effects Effects 0.000 description 5
- 230000003287 optical effect Effects 0.000 description 5
- 102100037024 E3 ubiquitin-protein ligase XIAP Human genes 0.000 description 4
- 101000804865 Homo sapiens E3 ubiquitin-protein ligase XIAP Proteins 0.000 description 4
- 235000019800 disodium phosphate Nutrition 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 102100021662 Baculoviral IAP repeat-containing protein 3 Human genes 0.000 description 3
- 101000896224 Homo sapiens Baculoviral IAP repeat-containing protein 3 Proteins 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000001360 synchronised effect Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000004549 pulsed laser deposition Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 102100026862 CD5 antigen-like Human genes 0.000 description 1
- 101100264195 Caenorhabditis elegans app-1 gene Proteins 0.000 description 1
- 101000911996 Homo sapiens CD5 antigen-like Proteins 0.000 description 1
- 101100161412 Neurospora crassa (strain ATCC 24698 / 74-OR23-1A / CBS 708.71 / DSM 1257 / FGSC 987) aap-2 gene Proteins 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
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
- G06F9/5038—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 considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- 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)
- Debugging And Monitoring (AREA)
Abstract
本申请实施例提供一种GPU资源调度方法及相关装置,GPU资源调度方法包括:在检测到应用集中任一应用的任务请求时,向任务请求调用的CUDA AP I插入特权AP I,以实现对任务请求的拦截,任务请求用于请求使用GPU的资源,应用集包括至少两个应用;然后获取GPU的执行状态,执行状态包括GPU正在执行的任务请求;依据执行状态确定目标任务请求集,目标任务请求集包括至少两个被拦截且未被执行的任务请求;按照预设规则对应用集对应的目标任务请求集中的至少两个任务请求进行排序,以确定GPU下一个执行的任务请求,通过对任务请求进行拦截并对拦截的任务请求进行排序以实现对GPU资源的调度,调度过程不依赖GPU硬件,调度灵活性较强。
Description
技术领域
本申请涉及图形处理器GPU技术领域,尤其涉及一种GPU资源调度方法及相关装置。
背景技术
图形处理器(graphics processing unit,GPU),又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上做图像和图形相关运算工作的微处理器。GPU凭借其强大的计算能力,被广泛运用于视频转码、物理模拟、地球表层测绘以及网络安全等热门研究领域,但是由于GPU硬件成本较高,需要通过多个应用共享GPU以实现GPU资源效率提升和成本优化。
为了实现多个应用共享GPU,需要控制每个应用在GPU上的运行时间,现有技术中大多通过GPU厂商提供的寄存器清单实现,但是多大GPU厂商并未公开其寄存器清单,通过寄存器控制应用在GPU上的运行时间不具有通用性,且无法依据用户需求调整多个应用使用GPU资源的顺序。
发明内容
本申请提供一种GPU资源调度方法及相关装置,在检测到应用的任务请求时,通过对任务请求调用的CUDA API进行拦截实现对任务请求的拦截,然后依据GPU的执行状态调整被拦截的任务请求的执行顺序,以实现对GPU资源的调度,调度过程不依赖于GPU硬件,调度灵活性比较强。
为达到上述目的,本申请采用如下技术方案:
第一方面,提供一种GPU资源调度方法,所述方法包括:检测到应用集中任一的任务请求,向所述任务请求调用的统一计算设备架构应用程序编程接口CUDA API插入特权API,以实现对所述任务请求的拦截,所述任务请求用于请求使用所述GPU的资源,所述应用集包括至少两个应用;获取所述GPU的执行状态,所述执行状态包括所述GPU正在执行的任务请求或所述GPU正在执行的所述任务请求调用的CUDA API;依据所述执行状态确定目标任务请求集,所述目标任务请求集包括至少两个被拦截且未被执行的任务请求;按照预设规则对所述应用集对应的目标任务请求集中的至少两个任务请求进行排序,以确定所述GPU下一个执行的任务请求。
采用上述技术方案,在检测应用集的至少两个应用中任一应用的任务请求时,向任务请求调用的CUDA API插入特权API,以实现对向GPU传输的任务请求的拦截,避免任务请求被直接传递给GPU,然后依据GPU的执行状态确定当前时刻被拦截且未被GPU执行的目标任务请求集,然后对目标任务请求集中多个任务请求进行排序,以确定GPU下一个执行的任务请求,上述GPU资源调度方法是基于CUDA侧程序代码实现,调度过程不依赖于GPU硬件,即在将任务请求传递给GPU之前,通过软件方式对任务请求或任务请求调用的CUDA API进行排序,并依据排序结果确定下一个执行的任务请求,并将下一个执行的任务请求或任务请求调用的CUDA API向GPU进行传递,以使GPU在当前执行的任务请求或CUDA API执行完成之后,开始执行确定的下一个任务请求对应的CUDA API。即本申请的GPU资源调度方法通过在GPU硬件自身进行调度之前,完成多个任务请求的占用时间或执行顺序的调度,调度灵活性比较强,可满足用户对于多个应用的任务请求的多样化需求。
进一步地,可通过GPU的执状态确定GPU当前执行的任务请求释放GPU资源的时间,然后通过该时间确定下一个任务请求抢占该GPU资源的时机。在该时间向GPU传递确定待执行的任务请求,由于当前实际该GPU仅具有一个可执行的任务请求,GPU硬件无需对任务请求进行先入先出方式的调度,仅需对被传递的任务请求进行执行,从而实现确定的下一个任务请求对GPU资源的抢占。
进一步地,GPU资源调度系统中可包括多个GPU,则GPU执行状态包括多种GPU的执行状态,由于每种GPU可提供的GPU资源不同,在确定对应的GPU的执行状态之后,还可依据GPU的执行状态确定GPU可提供的GPU资源,然后依据可提供的GPU资源确定当前被拦截且未执行的任务请求的目标任务请求,即提供的GPU资源满足的所有任务请求,然后依据预设规则对满足所有任务请求进行排序,以确定下一个执行的任务请求。
在第一方面的一些实施例中,每个应用的任务请求至少调用一个CUDA API;所述向所述任务请求调用的CUDA API插入特权API,包括:向所述任务请求调用的预设数量的CUDA API插入所述特权API。
采用上述技术方案,在检测到应用集中的应用的任务请求时,通过向预设数量的被调用的CUDA API插入特权API,以实现对任务请求的拦截,且通过每个特权API拦截预设数量的CUDA API且实现对预设数量的CUDA API的定位,在确定GPU待执行的任务请求时,可通过特权API选择任务请求对应的至少预设数量的CUDA API作为GPU将要执行的CUDA API,实现将预设数量的CUDA API作为GPU资源调度的粒度,提升调度的灵活性。
在第一方面的一些实施例中,每个应用的任务请求至少调用一个CUDA API;所述向所述任务请求调用的CUDA API插入特权API,包括:获取调度时间;依据调度时间确定每个特权API所拦截的CUDA API的目标数量;向所述任务请求调度的所述目标数量的CUDAAPI插入所述特权API。
采用上述技术方案,依据预设的调度时间确定每个特权API拦截的CUDA API的目标数量,从而将目标数量的CUDA API作为GPU调度的粒度,既满足对调度时间的需求,又可基于目标数量的CUDA API,调度灵活性较强。
在第一方面的一些实施例中,所述获取所述GPU的执行状态,包括:调用第一GPU驱动接口,以获取所述GPU的执行状态。
采用上述技术方案,通过调度GPU驱动接口以获取接口提供的信息,依据接口提供的信息确定GPU当前执行的任务请求或GPU当前执行的CUDA API,便于实现。进一步地,通过接口信息获取GPU的执行状态,从而可推断GPU即将释放的GPU资源和释放时间,从而依据该信息从被拦截的任务请求中选取下一个执行的任务请求。
在第一方面的一些实施例中,每个所述特权API具有标识信息,所述调用第一GPU驱动接口,以获取所述GPU的执行状态,包括:依据所述标识信息调用所述第一GPU驱动接口,以获取所述GPU的执行状态。
采用上述技术方案,在调用GPU驱动接口时,可依据标识信息识别调用接口获取的信息,从而可快速确定GPU正在执行的任务请求的CUDA API,以提升GPU的执行状态的获取速度。
在第一方面的一些实施例中,所述调用第一GPU驱动接口,以获取所述GPU的执行状态,包括:调用第一GPU驱动接口和第二GPU驱动接口,以获取所述GPU的执行状态。
采用上述技术方案,由于不同的GPU驱动接口提供的信息可能不同,通过调用不同的两个接口以获取两个接口的信息,通过结合两个接口的信息确定GPU的执行状态,以提升GPU的执行状态确定的准确性。
在第一方面的一些实施例中,所述按照预设规则对目标任务请求集的至少两个任务请求进行排序,包括:获取所述至少两个任务请求的应用信息;依据应用信息及预设规则对所述至少两个任务请求进行排序。
采用上述技术方案,首先获取应用的相关信息,其中应用信息可为至少两个应用的优先级信息、权限信息等,然后依据应用信息和对应的预设规则对当前被拦截的且未被执行的任务请求按照被执行的先后顺序进行排序,以便依据排序结果确定下一个被执行的任务请求或下一个被执行的CUDA API。由于上述排序方式是基于任务请求进行的,则可实现应用级别较高的任务请求可被优先执行,从而提升级别较高用户的体验效果。
在第一方面的一些实施例中,每个应用的任务请求至少调用一个CUDA API;所述按照预设规则对所述目标任务请求集的至少两个任务请求进行排序,包括:获取所述至少两个任务请求的任务请求信息;依据所述任务请求信息及预设规则对所述至少两个任务请求调用的CUDA API进行排序。
采用上述技术方案,首先获取任务请求的相关信息,其中任务请求信息可为任务请求的优先级信息、权限信息等,然后依据任务请求信息和对应的预设规则对当前被拦截的且未被执行的任务请求按照被执行的先后顺序进行排序,以便依据排序结果确定下一个被执行的任务请求或下一个被执行的CUDA API。由于上述排序方式是基于任务请求进行的,则可实现应用级别较高的任务请求可被优先执行,从而提升级别较高用户的体验效果。
在第一方面的一些实施例中,所述执行状态还包括所述GPU上一个执行完成的任务请求或上一个执行完成的CUDA API。
采用上述技术方案,结合GPU当前执行的任务请求和GPU上一个执行完成的任务请求,以提升GPU的状态的正确性。
第二方面,提供一种GPU资源调度装置,包括:存储器,所述存储器包括计算机可读指令;
与所述存储器通信的处理器,所述处理器用于执行所述计算机可读指令,使得所述GPU资源调度装置执行第一方面中任一项所述的GPU资源调度方法。
第三方面,提供一种计算机可读存储介质,包括程序或指令,当其被处理器执行时实现如第一方面任一项所述的GPU资源调度方法。
本申请实施例的第二方面提供的GPU资源调度装置、第三方面提供的计算机可读存储介质中每种可能实现方式所带来的有益效果,均可以参考第一方面中各种可能的实现方式中的描述,此处不再一一赘述。
附图说明
图1为本申请实施例提供的一种GPU资源调度系统的示意图;
图2A为图1所示的GPU资源调度系统的一种场景示意图;
图2B为图1所示的GPU资源调度系统的另一种场景示意图;
图2C为图1所示的GPU资源调度系统的又一种场景示意图;
图3为本申请实施例提供的一种GPU资源调度方法的流程示意图;
图4为本申请实施例提供的一种任务请求拦截的示意图;
图5为本申请实施例提供的一种GPU资源调度装置的模块示意图;
图6为本申请实施例提供的一种GPU资源调度装置的结构示意图;
具体实施方式
下面将结合附图,对本申请中的技术方案进行描述。显然,所描述的实施例仅是本说明书一部分实施例,而不是全部的实施例。
为便于理解,首先对本申请实施例所涉及的术语进行简单介绍。
1、统一计算设备架构(Compute Unified Device Architecture,CUDA):
CUDA是显卡厂商英伟达(NVIDIA)推出的运算平台,是一种并行计算平台和编程模型。它通过利用图形处理器(GPU)的处理能力,可大幅提升计算性能。CUDA是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题,CUDA包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。CUDA是一个异构模型,需要CPU和GPU协同才可以进行工作,例如,CUDA中包括主机(host)程序和设备(device)程序,其中CUDA的host程序可在CPU上运行,CUDA的device程序可在GPU上运行。
由于GPU硬件成本加高,需要提升GPU资源的利用率以实现成本优化,如果一个中央处理器(Central Processing Unit,CPU)的应用(APP)独占GPU的资源,此时的GPU资源的利用率比较低;为了提升GPU资源的利用率,多个CPU的应用可采用时分的方式使用GPU的资源,即多个应用可向GPU发送任务请求,以请求使用GPU的资源,GPU按照先进先出的策略为多个应用的任务请求提供GPU资源服务。上述资源调度方式中,由于GPU是依据先进先出的策略为多个应用提供服务,无法调整多个应用的任务请求的资源使用顺序,也无法实现实时抢占GPU的资源,调度灵活性较差。
基于上述问题,本申请实施例提供一种GPU资源调度方法,在检测到任务请求时,向任务请求调用的CUDA API插入特权API,以实现对任务请求的拦截,然后获取GPU的执行状态,依据GPU的任务执行状态确定被拦截且未被执行的任务请求,然后依据预设规则对未被执行的任务请求进行排序,依据排序结果确定下一个被GPU执行的任务请求。通过对任务请求进行拦截,然后依据GPU的执行状态调整拦截后的任务请求的执行顺序,以实现对GPU的多个应用的任务请求按照需求进行调整,还可以依据GPU的执行状态确定该GPU资源的释放时机,从而便于控制其他任务请求依据释放时机抢占被释放的GPU资源,以提升调度的灵活性,满足用户多样化调度需求。
首先说明适用于本申请提供的GPU资源调度方法的系统示意图。
下面通过图1所示GPU资源调度系统进行说明,请参见图1,图1为本申请实施例提供的一种GPU资源调度系统的示意图,GPU资源调度系统包括GPU、CUDA、GPU资源调度装置和CPU,CPU可通过CUDA向GPU传递应用(APP)对应的任务请求,GPU资源调度装置通过在CUDA侧对任务请求进行拦截,并依据GPU的当前执行的对应应用的任务请求,对被拦截的任务请求按照预设规则进行排序,并依据排序结果确定下一个被执行的任务请求,从而实现对GPU资源的调度。
可选地,图1中GPU资源调度装置是基于CUDA侧实现的,即通过对CUDA侧进行拦截并将拦截后的多个任务请求按照用户需求进行调度。
其中,图1中GPU资源调度系统仅示意了一个GPU,可以理解,在其他实施例中,GPU资源调度系统可包括多种GPU,多种GPU均可为CPU的应用提供GPU资源服务,如此,GPU资源调度装置可依据多个GPU的执行状态对被拦截的任务请求进行排序,进而依据排序结果确定每个GPU下一个将要执行的任务请求。
可选地,图1中的GPU资源调度装置仅为本申请实施例提供个一种示意,可以理解,在其他实施例中,GPU资源调度系统也可作为一个GPU资源调度系统,即GPU资源调度装置是一种可实现本申请实施例提供的GPU资源调度方法的装置。
请参见图2A,图2A为图1所示的GPU资源调度系统的场景示意图,CPU中的应用经由CUDA向GPU请求使用GPU资源,每个任务请求调用至少一个CUDA API;GPU资源调度装置检测应用的任务请求之后,在CUDA侧通过向调用的CUDA API插入对应的特权API,以实现对任务请求的拦截,阻止CUDA继续向GPU传递对应的任务请求;接着GPU资源调度装置通过检测GPU当前执行的任务请求,并依据GPU当前执行的任务请求确定当前被拦截的且未被执行的任务请求,然后依据预设规则对未被执行的任务请求进行排序,进而确定GPU下一个执行的任务请求,并将该任务请求向GPU进行传递,以使GPU将该任务请求作为下一个执行的任务请求。
如图2A所示,GPU中两个应用APP1和APP2请求使用GPU的资源,APP1的任务请求调用CUDA API1,APP2的任务请求调用CUDA API2,GPU资源调度装置检测到APP1和APP2的任务请求,向APP1调用的CUDA API1插入特权API(non-APP1),向APP2调用的CUDA API2插入特权API(non-APP2),以实现对APP1和APP2的任务请求的拦截,然后GPU资源调度装置获取GPU的当前执行状态,并依据执行状态对当前多个被拦截的且未被执行的CUDA API进行排序,通过排序结果确定GPU下一个执行的任务请求或下一个执行的任务请求对应的CUDA API。
上述GPU资源调度装置通过在CUDA侧对应用调用的CUDA API进行拦截,并依据GPU的执行状态对拦截的且未被执行的CUDA API进行排序,从而依据排序结果确定多个任务请求的执行顺序和下一个被执行任务请求,上述调度过程中,无需修改应用的代码,也不依赖于GPU的编译器和GPU硬件,通过软件实现对GPU的资源的调度,即通过GPU资源调度装置辅助GPU进行资源的调度,便于实现且调度灵活性较强。
请参见图2B,图2B为图1所示的GPU资源调度系统另一种场景示意图,图2B中GPU资源调度系统包括两个容器:容器1和容器2,每个容器具有对应的CPU,每个容器具有多个应用(例如APP1或AAP2),容器的CPU通过CUDA向GPU传递应用(APP)对应的任务请求,GPU资源调度装置通过在CUDA侧对任务请求进行拦截,将被拦截的任务请求进行按照预设规则进行排序和GPU资源的调度。
可选地,在容器内实现对任务请求调用的CUDA API进行拦截,即GPU资源调度装置向容器内应用调用的CUDA API插入特权API,以实现对任务请求的拦截,GPU资源调度装置可控制特权API的插入频度,通过每个特权API控制的CUDA API数量调整GPU资源调度的控制粒度。
请参见图2C,图2C为图1所示的GPU资源调度系统的又一场景示意图,图2C中GPU资源调度系统包括两个虚拟机:虚拟机1和虚拟机2,每个虚拟机内具有对应的CPU,虚拟机具有多个应用(例如APP1或AAP2),虚拟机的CPU通过CUDA向GPU传递应用(APP)对应的任务请求,GPU资源调度装置通过在CUDA侧对任务请求进行拦截,将被拦截的任务请求进行按照预设规则进行排序和GPU资源的调度。
可选地,在虚拟机内实现对任务请求调用的CUDA API进行拦截,即GPU资源调度装置向虚拟机内应用调用的CUDA API插入特权API,以实现对任务请求的拦截,GPU资源调度装置可控制特权API的插入频度,通过每个特权API控制的CUDA API数量调整GPU资源调度的控制粒度。
请参见图3,图3为本申请实施例提供的一种GPU资源调度方法的流程示意图,下面以图3应用于图1所示的GPU资源调度装置为例进行说明,图3中的GPU资源调度方法包括:S301-S304。
S301、检测到应用集中任一应用的任务请求,向任务请求调用的CUDA API插入特权API,以实现对任务请求的拦截。
其中,应用通过任务请求向GPU请求使用GPU的资源,应用集包括至少两个应用。
可选地,在GPU资源调度装置检测到CPU向GPU传递的应用集中任一应用的任务请求,在任务请求经由CUDA向GPU传递时,通过向任务请求调用的CUDA API插入特权API,实现对任务请求的拦截,从而避免该任务请求被直接传递给GPU。
其中,特权API用于对任务请求调用的CUDA API进行拦截,可选地,在GPU调用并执行特权API对应的任务请求时,无需因特权API而执行额外的操作,即特权API用于封装空指令操作,GPU无需因特权API执行操作。
在一种可选的实现方式中,应用集中的至少两个应用均为满足预设需求的应用,例如用户指定的应用,或优先级满足预设级别的应用或满足其他预设规则的应用,例如应用的优先级分别为高、低和中,则应用集中的应用的优先级均为高。
S302、获取GPU的执行状态,GPU的执行状态包括GPU当前执行的任务请求。
可选地,由于多个应用采用时分复用的方式使用GPU的资源,GPU的资源每次仅可为一个任务请求提供服务,可依据GPU当前提供服务的任务请求确定GPU的执行状态。
可选地,GPU执行状态还包括GPU刚执行完成的任务请求或刚执行完成的CUDAAPI,由于每个CUDA API占用GPU资源的时间较短(例如20毫秒),GPU执行状态变换较快,通过GPU刚执行完成的任务请求和GPU当前执行的任务请求,两者结合,可更准确确定GPU的执行状态。
S303、依据GPU的执行状态确定目标任务请求集,目标任务请求集包括至少两个被拦截且未被执行的任务请求。
可选地,GPU的执行状态包括GPU正在执行的任务请求,且在GPU执行当前的任务请求期间,CPU中应用持续经由CUDA向GPU发送任务请求且被插入的CUDA API所拦截,导致被拦截的任务请求对应的CUDA API的数量处于不断变化中,且所有被拦截的CUDA API被按需排列,以使每个任务请求具有对应的位置;在获取GPU执行的当前任务请求之后,依据当前任务请求在当前被拦截的所有CUDA API的位置确定当前未被执行任务请求,即目标任务请求集。
进一步地,由于每一个被GPU执行的任务请求调用的CUDA API具有对应的运行时间,在确定GPU执行的任务请求调用的CUDA API之后,则可依据运行时间确定该CUDA API占用的GPU资源的时间,从而可确定该GPU资源被释放的时间,该时间即为其他任务请求可进行GPU资源抢占的时间,在抢占时间可抢占被释放的GPU的资源。
S304、依据预设规则对目标任务请求集中至少两个任务请求进行排序,以确定目标任务请求中下一个被GPU执行的任务请求。
可选地,将目标任务请求集中至少两个任务请求依据预设规则、按照被GPU执行的先后顺序进行排序,从而可依据排序结果确定最先执行的任务请求,然后通过调用对应CUDA driver将该任务请求向GPU进行提交,以使GPU在执行完成当前的任务请求之后,执行提交的任务请求。
可选地,预设规则可为依据任务请求的优先级别进行排序,示例性地,每个任务请求具有对应的优先级,将多个任务请求按照优先级高低进行排序。当然,预设规则还可为依据应用APP的优先级进行排序,示例性地,依据应用的优先级高低将对应的任务请求进行排序。
可选地,采用链表方式对目标任务请求集的多个任务请求进行排序管理,以便可以对多个任务请求按需调整被GPU执行的顺序。
如此,在检测到应用集的至少两个应用中任一应用的任务请求时,向任务请求调用的CUDA API插入特权API,以实现对向GPU传输的任务请求的拦截,然后依据GPU的执行状态确定当前时刻被拦截且未被GPU执行的任务请求,然后对其进行排序,以确定GPU下一个执行的任务请求,上述GPU资源调度方法是基于CUDA侧程序代码实现,调度过程不依赖于GPU硬件,即在将任务请求传递给GPU之前,通过软件方式对任务请求或任务请求调用的CUDA API进行排序,并依据排序结果确定下一个执行的任务请求,并将下一个执行的任务请求或任务请求调用的CUDA API向GPU进行传递,以使GPU在当前执行的任务请求或CUDAAPI执行完成之后,开始执行确定的下一个任务请求对应的CUDA API。本申请的GPU资源调度方法是在GPU硬件自身进行调度之前,完成多个未被执行的任务请求的执行顺序的调度,调度灵活性比较强,可满足用户对于多个应用的任务请求的多样化需求。
进一步地,可通过GPU的执状态确定GPU当前执行的任务请求释放GPU资源的时间,然后通过该时间确定下一个任务请求抢占该GPU资源的时机。在该时机向GPU传递待执行的任务请求,从而实现对GPU资源的抢占。
进一步地,GPU资源调度系统中可包括多个GPU,则GPU执行状态包括多种GPU的执行状态,由于每种GPU可提供的GPU资源不同,在确定每个GPU的执行状态之后,还可依据每个GPU的执行状态确定GPU可提供的GPU资源,然后依据可提供的GPU资源确定当前被拦截且未执行的任务请求的目标任务请求,即提供的GPU资源满足的所有任务请求,然后依据预设规则对满足所有任务请求进行排序,以确定每个GPU下一个执行的任务请求。
在一种可选地的实现方式中,在CPU经由CUDA向GPU传递应用的任务请求过程中,每个应用的任务请求至少调用一个CUDA API,S301中向任务请求调用的CUDA API插入特权API,可向任务请求调用的每个CUDA API均插入特权API,以实现对任务请求的拦截。通过在任务请求调用的每个CUDA API后均插入特权API,以实现对任务请求的拦截,由于每个CUDAAPI通过对应的特权API进行拦截,从而可通过特权API定位每个CUDA API,则可依据特权API对被拦截的CUDA API的进行调度且调度的CUDA API的数量可任意设置,例如可通过其中三个特权API对被拦截的三个CUDA API进行同时调度。通过在每个CUDA API后均插入特权API,实现将CUDA API作为调度粒度,调度方式更为灵活。
示例性地,CPU将应用的任务请求向GPU传递过程中,该任务请求依次调用了CUDA库中的下列三个CUDA API:
CUDALaunchHostFunc(CUDA API1)
…
CUDAConfigureCall(CUDA API2)
…
CUDASetupArgument(CUDA API3)
…
在检测到该任务请求之后,向每个CUDA API插入特权API(nop-APP),以实现对任务请求的拦截,则在CUDA API被拦截时,上述调用代码变为:
CUDALaunchHostFunc
nop-APP1
…
CUDAConfigureCall
nop-APP2
…
CUDASetupArgument
nop-APP3
…
当然,在其他实施例中,在CPU经由CUDA向GPU传递应用的任务请求过程中,每个应用的任务请求至少调用一个CUDA API,S301中向任务请求调用的CUDA API插入特权API,包括:向任务请求调用的预设数量的CUDA API插入特权API,以实现对任务请求的拦截。其中,预设数量可为两个或大于两个。通过在任务请求调用的预设数量的CUDA API后插入特权API,以实现对任务请求的拦截,由于预设数量的CUDA API通过对应的特权API进行拦截,从而可通过特权API定位预设数量CUDA API,从而可依据需求选择其中至少预设数量的CUDAAPI作为GPU将要执行的CUDA API,通过预设数量的CUDA API作为GPU资源调度的粒度,提升调度的灵活性。即在CPU经由CUDA向GPU传递任务请求时,通过向任务请求调用的N个CUDAAPI插入特权API,以实现对任务请求的拦截,其中,N为正整数,通过每个特权API定位N个CUDA API,将拦截的CUDA API向GPU传递时,每次传递的CUDA API的数量为N的倍数。
示例性地,请参见图4,图4为本申请实施例提供的一种拦截任务请求的示意图,图4中任务请求调用六个CUDA API:CUDA API1~CUDA API6,每两个CUDA API后插入对应的特权API,以实现对任务请求的拦截,且通过每个特权API(图4中的non-API1~non-API3)定位两个CUDA API,将拦截的CUDA API向GPU传递时,每次传递的CUDA API的数量为两个、四个或六个,例如传递的CUDA API的数量为四个,则可为non-API1对应的CUDA API1~CUDAAPI2和non-API3对应的CUDA API5~CUDA API6。
在一种可选的实现方式中,在CPU经由CUDA向GPU传递任务请求时,S301中向任务请求调用的CUDA API插入特权API,以实现对任务请求的拦截,包括:通过预先设置调度时间,然后依据调度时间确定每个特权API拦截的CUDA API的目标数量;在检测到应用集的任一任务请求时,向目标数量的CUDA API插入特权API,以实现对目标数量的CUDA API进行拦截。由于依据调度时间对任务请求调用的CUDA API进行拦截,在对拦截的CUDA API进行调度时的粒度也为调度时间,通过依据调度时间进行GPU资源调度,对用户而言更为直观、便于用户查看和控制。
示例性地,若预设的调度时间为40ms,检测到的任务请求的调用的六个CUDA API,每个CUDA API所需时间为20ms,则目标数量为两个,则可依次向其中两个CUDA API后插入特权API,每个特权API用于拦截任务请求的两个CUDA API;进一步地,在确定GPU下一个执行的任务请求时,由于依据特权API实现对两个CUDA API拦截和定位,在向GPU调用被执行的CUDA API时,可通过至少一个特权API实现,因此最小的调度粒度为每个特权API所拦截的两个CUDA API。
在一种可选的实现方式中,在CPU经由CUDA向GPU传递任务请求时,S301中向任务请求调用的CUDA API插入特权API,以实现对任务请求的拦截,包括:确定该应用的任务请求调用的CUDA API的调用数量,向调用数量对应的CUDA API插入特权API,从而依据应用的任务请求为粒度进行拦截,便于控制和实现,调度较为灵活。
示例性地,在CPU经由CUDA向GPU传递任务请求时,若存在三个任务请求:任务请求1~任务请求3,任务请求1调用三个CUDA API,任务请求2调用两个CUDA API,任务请求3调用四个CUDA API,则任务请求1调用的三个CUDA API后插入特权API,任务请求2调用的两个CUDA API后插入特权API2,任务请求3调用的四个CUDA API后插入特权API3;进一步地,在确定GPU下一个执行的任务请求时,则特权API调用被执行的任务请求对应的所有CUDAAPI。
其中,为了确定当前时刻被拦截且未被GPU执行的任务请求的CUDA API,需要确定GPU当前的执行状态,即GPU当前执行的任务请求或GPU当前执行的任务请求对应的CUDAAPI,依据GPU当前的执行状态确定当前时刻被拦截且未被GPU执行的任务请求的CUDA API,在一些可选的实现方式中,S302包括:通过调用GPU驱动接口进行获取。示例性地,通过调用GPU驱动接口cuDevicePrimaryCtxGetState或cuCtxGetFlags,通过接口信息以获取当前GPU的当前的执行状态,即GPU当前正在处理的任务请求或GPU处理的CUDA API。
进一步地,由于每一个特权API具有对应的标识信息,标识信息用于唯一标识对应的特权API,则,在调用GPU驱动接口时,可依据标识信息识别调用接口获取的信息,从而可快速确定GPU正在执行的任务请求的CUDA API,以提升GPU的执行状态的获取速度。
具体地,在特权API释放拦截的CUDA API,以使被拦截的CUDA API被GPU执行,由于CUDA API被执行的接口在CUDA的驱动层,依据标识信息调用GPU驱动接口,以快速获取标识信息对应的特权API拦截的CUDA API的状态,进而获取GPU的当前执行状态。
可以理解,可通过调用GPU的驱动接口以确定的GPU的执行状态,然后由于每个接口的提供的信息存在差异,为了提升GPU的执行状态的准确性,则S302包括:通过调用第一GPU驱动接口和第二GPU驱动接口以获取GPU的执行状态,即通过结合两个接口的信息确定GPU的执行状态,以提升GPU的执行状态确定的准确性。
可选地,在S302中获取GPU的执行状态过程中,可通过调用第一GPU驱动接口以确定GPU的第一子执行状态,然后通过调用第二GPU驱动接口以确定GPU的第二子执行状态,依据第一子执行状态和第二子执行状态以确定GPU的执行状态;通过第一子执行状态和第二子执行状态两个状态相互补充,以提升GPU的执行状态确定的准确性。由于不同的GPU驱动接口提供的信息可能不同,通过调用不同的两个接口以获取两个接口的信息,并依据该每个接口信息确定对应的子执行状态;通过结合两个子执行状态确定GPU的执行状态,以提升GPU的执行状态确定的准确性。
示例性地,可分别调用GPU驱动接口:cuDevicePrimaryCtxGetState和cuCtxGetFlags,调用cuDevicePrimaryCtxGetState获取的第一子执行状态为GPU正在执行CUDA API1,调用cuCtxGetFlags获取的第二子执行状态为GPU刚刚执行完成CUDA API3,结合两个接口提供的信息确定GPU的执行状态,即CUDA API3被执行完成,CUDA API1正在被执行。
进一步地,在S302的获取GPU的执行状态过程中,也可通过调用三个或大于三个GPU驱动接口,以获得多个驱动接口提供的信息,通过结合多个驱动接口提供的信息以确定GPU的执行状态,从而提升GPU的执行状态的正确性。
在一种可选的实现方式中,CPU的应用的任务请求经由CUDA向GPU传递过程中,通过向任务请求调用的CUDA API插入特权API,以实现对任务请求的拦截,在基于GPU的执行状态确定GPU下一个执行的任务请求时,则S304包括:获取至少两个任务请求的应用信息,并依据应用信息及预设规则对至少两个任务请求进行排序。即首先获取应用的相关信息,其中应用信息可为至少两个应用的优先级信息、权限信息等,然后依据应用信息和对应的规则对当前被拦截的且未被执行的任务请求进行排序(例如按照任务请求被执行的先后顺序)。由于上述排序方式是基于应用信息进行的,则可将优先级别较高的应用的任务请求优先向GPU进行传递而被优先执行,从而提升级别较高的应用的GPU使用效果。
在一种可选的实现方式中,CPU的应用的任务请求经由CUDA向GPU传递过程中,通过向任务请求调用的CUDA API插入特权API,以实现对任务请求的拦截,在基于GPU的执行状态确定GPU下一个执行的任务请求时,由于每个应用的任务请求至少调用一个CUDA API,则S304包括:获取至少两个任务请求的任务请求信息;并依据任务请求信息及预设规则对至少两个任务请求调用的CUDA API进行排序。即首先获取任务请求的相关信息,其中任务请求信息可为每个任务请求的优先级信息、权限信息等,然后依据任务请求信息和对应的规则对当前被拦截的且未被执行的任务请求进行排序(例如按照任务请求被执行的先后顺序)。由于上述排序方式是基于任务请求进行的,则可将优先级别较高的任务请求优先向GPU进行传递而被优先执行,从而提升级别较高的任务请求的GPU使用效果。
可选地,任务请求信息可包括任务请求的优先级信息或任务请求所需的GPU资源信息等。
本申请提供的GPU资源调度方法,在检测应用集的至少两个应用中任一应用的任务请求时,向任务请求调用的CUDA API插入特权API,以实现对向GPU传输的任务请求的拦截,然后依据GPU的执行状态确定当前时刻被拦截且未被GPU执行的任务请求,然后对其进行排序,以确定GPU下一个执行的任务请求,上述GPU资源调度方法是基于CUDA侧程序代码实现,调度过程不依赖于GPU硬件,调度灵活性比较强,从而可满足用户对于多个应用的任务请求的多样化需求。
应理解,上述只是为了帮助本领域技术人员更好地理解本申请实施例,而非要限制本申请实施例的范围。本领域技术人员根据所给出的上述示例,显然可以进行各种等价的修改或变化,例如,上述方法各个方法中某些步骤可以不必须的,或者可以新加入某些步骤等。或者上述任意两种或者任意多种实施例的组合。这样的修改、变化或者组合后的方案也落入本申请实施例的范围内。
还应理解,本申请实施例中的方式、情况、类别以及实施例的划分仅是为了描述的方便,不应构成特别的限定,各种方式、类别、情况以及实施例中的特征在不矛盾的情况下可以相结合。
还应理解,在本申请的实施例中涉及的各种数字编号仅为描述方便进行的区分,并不用来限制本申请的实施例的范围。上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
还应理解,上文对本申请实施例的描述着重于强调各个实施例之间的不同之处,未提到的相同或相似之处可以互相参考,为了简洁,这里不再赘述。
上述结合图1-图4描述了本申请实施例提供的方法和系统的实施例,下面描述本申请实施例提供的GPU资源调度装置。
本实施例可以根据上述方法,对GPU资源调度装置进行功能模块的划分。例如,可以对应各个功能,划分为各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块可以采用硬件的形式实现。需要说明的是,本实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
需要说明的是,上述方法实施例涉及的各步骤的相关内容,均可以援引到对应功能模块的功能描述,此处不再赘述。
本申请实施例提供的GPU资源调度装置,用于执行上述方法实施例提供的GPU资源调度方法,因此可以达到与上述实现方法相同的效果。图5为本申请实施例提供的一种GPU资源调度装置的模块示意图,GPU资源调度装置包括APP、特权API、CUDA API拦截层、CUDA驱动拦截层、GPU任务调度器(用户态)、GPU任务调度器(内核态),APP用于检测CPU向GPU传递的任务请求,特权API用于形成特权API,GPU任务调度器(用户态)用于控制特权API在CUDAAPI拦截层对任务请求调用的CUDA API进行拦截;GPU任务调度器(内核态)用于通过CUDA驱动拦截层获取GPU的执行状态,GPU任务调度器(用户态)还用于依据GPU的执行状态确定CUDA API拦截层中被拦截的CUDA API中的被拦截且未被执行的CUDA API;GPU任务调度器(用户态)还用于依据预设规则对被拦截且未被执行的CUDA API进行排序,以确定GPU下一次执行的任务请求。
在其他实施例中,在采用集成的单元的情况下,GPU资源调度装置可以包括处理模块、存储模块和通信模块。其中,处理模块可以用于对GPU资源调度装置的动作进行控制管理。例如,可以用于支持GPU资源调度装置执行处理单元执行的步骤。存储模块可以用于支持存储程序代码和数据等。通信模块,可以用于支持GPU资源调度装置与其他设备的通信。
其中,处理模块可以是处理器或控制器。其可以是实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理(digital signal processing,DSP)和微处理器的组合等等。存储模块可以是存储器。通信模块具体可以为射频电路、蓝牙芯片、Wi-Fi芯片等与其他GPU资源调度装置交互的设备。
参见图6,图6示出了本申请一示例性的GPU资源调度装置的结构示意图,图6所示的GPU资源调度装置可执行本申请实施例提供的任意一种GPU资源调度装置所执行的GPU资源调度方法中的步骤。
该GPU资源调度装置600包括至少一个处理器601、存储器603以及至少一个网络接口604。
处理器601例如是通用CPU、数字信号处理器(digital signal processor,DSP)、网络处理器(network processer,NP)、GPU、神经网络处理器(neural network processingunits,NPU)、数据处理单元(data processing unit,DPU)、微处理器或者一个或多个用于实现本申请方案的集成电路或专用集成电路(application specific integratedcircuit,ASIC),可编程逻辑器件(programmable logic device,PLD)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。PLD例如是复杂可编程逻辑器件(complex programmable logic device,CPLD)、现场可编程逻辑门阵列(fieldprogrammable gate array,FPGA)、通用阵列逻辑(generic array logic,GAL)或其任意组合。其可以实现或执行结合本申请公开内容所描述的各种逻辑方框、模块和电路。处理器也可以是实现计算功能的组合,例如包括一个或多个微处理器组合,DSP和微处理器的组合等等。
可选的,GPU资源调度装置600还包括总线602。总线602用于在GPU资源调度装置600的各组件之间传送信息。总线602可以是外设部件互连标准(peripheral componentinterconnect,简称PCI)总线或扩展工业标准结构(extended industry standardarchitecture,简称EISA)总线等。总线602可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器603例如是只读存储器(read only memory,ROM)或可存储静态信息和指令的其它类型的存储设备,又如是随机存取存储器(random access memory,RAM)或者可存储信息和指令的其它类型的动态存储设备,又如是电可擦可编程只读存储器(electricallyerasable programmable read only Memory,EEPROM)、只读光盘(compact disc readonly memory,CD ROM)或其它光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其它磁存储设备,或者是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其它介质,但不限于此。存储器603例如是独立存在,并通过总线602与处理器601相连接。存储器603也可以和处理器601集成在一起。
网络接口604使用任何收发器一类的装置,用于与其它设备或通信网络通信,通信网络可以为以太网、无线接入网(radio access network,RAN)或无线局域网(wirelesslocal area network,WLAN)等。网络接口604可以包括有线网络接口,还可以包括无线网络接口。具体的,网络接口604可以为以太(Ethernet)接口,如:快速以太(fast Ethernet,FE)接口、千兆以太(gigabit Ethernet,GE)接口,异步传输模式(asynchronous transfermode,ATM)接口,WLAN接口,蜂窝网络接口或其组合。以太网接口可以是光接口,电接口或其组合。在本申请的一些实施方式中,网络接口604可以用于GPU资源调度装置600与其他设备进行通信。
在具体实现中,作为一些实施方式,处理器601可以包括一个或多个CPU。这些处理器中的每一个可以是一个单核处理器,也可以是一个多核处理器。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。
在具体实现中,作为一些实施方式,GPU资源调度装置600可以包括多个处理器。这些处理器中的每一个可以是一个单核处理器,也可以是一个多核处理器。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(如计算机程序指令)的处理核。
在一些实施方式中,存储器603用于存储执行本申请方案的程序指令,处理器601可以执行存储器603中存储的程序指令。也即是,GPU资源调度装置600可以通过处理器601以及存储器603中的程序指令,来实现上述实施例所示的方法实施例提供的方法。程序指令中可以包括一个或多个软件模块。可选地,处理器601自身也可以存储执行本申请方案的程序指令。
在具体实施过程中,本申请的GPU资源调度装置600中的处理器601读取存储器603中的指令,使图6所示的GPU资源调度装置600能够执行上述实施例中GPU资源调度装置所执行的GPU资源调度方法中的全部或部分步骤。
其中,上述实施例所述的方法的各步骤通过GPU资源调度装置600的处理器中的硬件的集成逻辑电路或者软件形式的指令完成。结合本申请所公开的方法实施例的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法实施例的步骤,为避免重复,这里不再详细描述。
应理解的是,上述处理器可以是中央处理器(central processing unit,CPU),还可以是其他通用处理器、数字信号处理器(digital signal processing,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现场可编程门阵列(fieldprogrammable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者是任何常规的处理器等。值得说明的是,处理器可以是支持进阶精简指令集机器(advanced RISC machines,ARM)架构的处理器。
进一步地,在一种可选的实施例中,上述存储器可以包括只读存储器和随机存取存储器,并向处理器提供指令和数据。存储器还可以包括非易失性随机存取存储器。例如,存储器还可以存储设备类型的信息。
该存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用。例如,静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(dynamic random access memory,DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(doubledata dateSDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(directrambus RAM,DR RAM)。
本申请实施例还提供了一种GPU资源调度系统,包括GPU资源调度装置,其中,GPU资源调度装置可执行本申请实施例提供的任意一种GPU资源调度装置所执行的GPU资源调度方法中的步骤。
在示例性实施例中,本申请实施例提供了一种计算机程序(产品),计算机程序(产品)包括:计算机程序代码,当计算机程序代码被计算机运行时,使得计算机执行可执行本申请实施例提供的任意一种GPU资源调度装置所执行的GPU资源调度方法中的步骤。
在示例性实施例中,本申请实施例提供了一种计算机可读存储介质,计算机可读存储介质存储程序或指令,当程序或指令在计算机上运行时,本申请实施例提供的任意一种GPU资源调度装置所执行的GPU资源调度方法被执行。
在示例性实施例中,本申请实施例提供了一种芯片,包括处理器,用于从存储器中调用并运行存储器中存储的指令,使得安装有芯片的通信设备执行本申请实施例提供的任意一种GPU资源调度装置所执行的GPU资源调度方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid StateDisk)等。
本申请中术语“第一”“第二”等字样用于对作用和功能基本相同的相同项或相似项进行区分,应理解,“第一”、“第二”、“第n”之间不具有逻辑或时序上的依赖关系,也不对数量和执行顺序进行限定。还应理解,尽管以下描述使用术语第一、第二等来描述各种元素,但这些元素不应受术语的限制。这些术语只是用于将一元素与另一元素区别分开。
还应理解,在本申请的各个实施例中,各个过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
本申请中术语“至少一个”的含义是指一个或多个,本申请中术语“多个”的含义是指两个或两个以上,例如,多个第二设备是指两个或两个以上的第二设备。本文中术语“系统”和“网络”经常可互换使用。
应理解,在本文中对各种所述示例的描述中所使用的术语只是为了描述特定示例,而并非旨在进行限制。如在对各种所述示例的描述和所附权利要求书中所使用的那样,单数形式“一个(“a”,“an”)”和“该”旨在也包括复数形式,除非上下文另外明确地指示。
还应理解,本文中所使用的术语“和/或”是指并且涵盖相关联的所列出的项目中的一个或多个项目的任何和全部可能的组合。术语“和/或”,是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本申请中的字符“/”,一般表示前后关联对象是一种“或”的关系。
还应理解,术语“若”和“如果”可被解释为意指“当...时”(“when”或“upon”)或“响应于确定”或“响应于检测到”。类似地,根据上下文,短语“若确定...”或“若检测到[所陈述的条件或事件]”可被解释为意指“在确定...时”或“响应于确定...”或“在检测到[所陈述的条件或事件]时”或“响应于检测到[所陈述的条件或事件]”。
以上所述仅为本申请的实施例,并不用以限制本申请,凡在本申请的原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (12)
1.一种图形处理器GPU资源调度方法,其特征在于,所述方法包括:
检测到应用集中任一应用的任务请求,向所述任务请求调用的统一计算设备架构应用程序编程接口CUDA AP I插入特权AP I,以实现对所述任务请求的拦截,所述任务请求用于请求使用所述GPU的资源,所述应用集包括至少两个应用;
获取所述GPU的执行状态,所述执行状态包括所述GPU正在执行的任务请求或所述GPU正在执行的所述任务请求调用的CUDA AP I;
依据所述执行状态确定目标任务请求集,所述目标任务请求集包括至少两个被拦截且未被执行的任务请求;
按照预设规则对所述目标任务请求集中的至少两个任务请求进行排序,以确定所述GPU下一个执行的任务请求。
2.根据权利要求1所述的方法,其特征在于,每个应用的任务请求至少调用一个CUDAAP I;
所述向所述任务请求调用的CUDA AP I插入特权AP I,包括:
向所述任务请求调用的预设数量的CUDA AP I插入所述特权AP I。
3.根据权利要求1所述的方法,其特征在于,每个应用的任务请求至少调用一个CUDAAP I;
所述向所述任务请求调用的CUDA AP I插入特权AP I,包括:
获取调度时间;
依据调度时间确定每个特权AP I所拦截的CUDA AP I的目标数量;
向所述任务请求调度的所述目标数量的CUDA AP I插入所述特权AP I。
4.根据权利要求1所述的方法,其特征在于,每个应用的任务请求至少调用一个CUDAAP I;
所述向所述任务请求调用的CUDA AP I插入特权AP I,包括:
获取所述任务请求调度的CUDA AP I的调度数量;
向所述任务请求调度的所述调度数量的CUDA AP I插入所述特权AP I。
5.根据权利要求1至4任一项所述的方法,其特征在于,所述获取所述GPU的执行状态,包括:
调用第一GPU驱动接口,以获取所述GPU的执行状态。
6.根据权利要求5所述的方法,其特征在于,每个所述特权AP I具有标识信息,所述调用第一GPU驱动接口,以获取所述GPU的执行状态,包括:
依据所述标识信息调用所述第一GPU驱动接口,以获取所述GPU的执行状态。
7.根据权利要求5或6所述的方法,其特征在于,所述调用第一GPU驱动接口,以获取所述GPU的执行状态,包括:
调用第一GPU驱动接口和第二GPU驱动接口,以获取所述GPU的执行状态。
8.根据权利要求1至7任一项所述的方法,其特征在于,所述按照预设规则对所述目标任务请求集的至少两个任务请求进行排序,包括:
获取所述至少两个任务请求的应用信息;
依据所述应用信息及预设规则对所述至少两个任务请求进行排序。
9.根据权利要求1至8任一项所述的方法,其特征在于,每个应用的任务请求至少调用一个CUDA AP I;
所述按照预设规则对所述目标任务请求集的至少两个任务请求进行排序,包括:
获取所述至少两个任务请求的任务请求信息;
依据所述任务请求信息及预设规则对所述至少两个任务请求调用的CUDA AP I进行排序。
10.根据权利要求1至9任一项所述的方法,其特征在于,所述执行状态还包括所述GPU上一个执行完成的任务请求或上一个执行完成的CUDA AP I。
11.一种GPU资源调度装置,其特征在于,包括:
存储器,所述存储器包括计算机可读指令;
与所述存储器通信的处理器,所述处理器用于执行所述计算机可读指令,使得所述GPU资源调度装置执行权利要求1-10中任一项所述的GPU资源调度方法。
12.一种计算机可读存储介质,其特征在于,包括程序或指令,当其被处理器执行时实现如权利要求1-10任一项所述的GPU资源调度方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311138989.8A CN117369991A (zh) | 2023-09-04 | 2023-09-04 | Gpu资源调度方法及相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311138989.8A CN117369991A (zh) | 2023-09-04 | 2023-09-04 | Gpu资源调度方法及相关装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117369991A true CN117369991A (zh) | 2024-01-09 |
Family
ID=89388088
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311138989.8A Pending CN117369991A (zh) | 2023-09-04 | 2023-09-04 | Gpu资源调度方法及相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117369991A (zh) |
-
2023
- 2023-09-04 CN CN202311138989.8A patent/CN117369991A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10061610B2 (en) | CPU scheduler configured to support latency sensitive virtual machines | |
US10452572B2 (en) | Automatic system service resource management for virtualizing low-latency workloads that are input/output intensive | |
US9778961B2 (en) | Efficient scheduling of multi-versioned tasks | |
US11941434B2 (en) | Task processing method, processing apparatus, and computer system | |
WO2021088419A1 (zh) | 一种多业务请求进程调用fpga设备的方法及相关装置 | |
CN111078436B (zh) | 数据处理的方法、装置、设备及存储介质 | |
US20170102967A1 (en) | System and method for isolating i/o execution via compiler and os support | |
CN109726005B (zh) | 用于管理资源的方法、服务器系统和计算机可读介质 | |
US20110219373A1 (en) | Virtual machine management apparatus and virtualization method for virtualization-supporting terminal platform | |
CN106034120B (zh) | 一种多进程访问可信应用的方法和系统 | |
JPH1115793A (ja) | 資源の保全性を保護する方法 | |
US20190171489A1 (en) | Method of managing dedicated processing resources, server system and computer program product | |
US9158601B2 (en) | Multithreaded event handling using partitioned event de-multiplexers | |
Müller et al. | MULTI SLOTH: An efficient multi-core RTOS using hardware-based scheduling | |
US20190317827A1 (en) | Method and apparatus for managing kernel services in multi-core system | |
CN117369991A (zh) | Gpu资源调度方法及相关装置 | |
CN114911538A (zh) | 一种运行系统的启动方法及计算设备 | |
Shih et al. | Virtual cloud core: Opencl workload sharing framework for connected devices | |
Serra et al. | ReTiF: A declarative real-time scheduling framework for POSIX systems | |
US20130212601A1 (en) | Method and system for maintaining game functionality for a plurality of game instances running on a computer system | |
JP2021060707A (ja) | 同期制御システムおよび同期制御方法 | |
US9547522B2 (en) | Method and system for reconfigurable virtual single processor programming model | |
US9792152B2 (en) | Hypervisor managed scheduling of virtual machines | |
Elliott et al. | Real-Time Handling of GPU Interrupts in LITMUS RT | |
Silambarasan | Handling of Priority Inversion Problem in RT-Linux using Priority Ceiling Protocol |
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 |