CN115114003B - Gpu动态多任务可控并发执行方法及*** - Google Patents
Gpu动态多任务可控并发执行方法及*** Download PDFInfo
- Publication number
- CN115114003B CN115114003B CN202210780174.9A CN202210780174A CN115114003B CN 115114003 B CN115114003 B CN 115114003B CN 202210780174 A CN202210780174 A CN 202210780174A CN 115114003 B CN115114003 B CN 115114003B
- Authority
- CN
- China
- Prior art keywords
- kernel
- executed
- proxy
- gpu
- registers
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 23
- 230000006870 function Effects 0.000 claims description 29
- 238000004364 calculation method Methods 0.000 claims description 12
- 230000009191 jumping Effects 0.000 claims description 10
- 238000013468 resource allocation Methods 0.000 description 4
- 238000001514 detection method Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000007500 overflow downdraw method Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012549 training Methods 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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
-
- 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
- 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/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- 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 Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供了一种GPU动态多任务可控并发执行方法及***,包括:步骤S1:在程序编译阶段生成一个或多个proxy kernel作为待执行kernel的入口;步骤S2:在程序运行阶段,用户动态选择并发执行的待执行kernel;步骤S3:根据选择的待执行kernel所需要的寄存器数量,选择proxykernel提交到GPU中;步骤S4:用户通过proxykernel动态控制各个待执行kernel使用的计算单元数量,跳转到待执行kernel并执行。本发明通过proxy kernel为待执行kernel动态分配指定数量的计算单元,可以实现GPU程序运行阶段细粒度的计算单元分配。
Description
技术领域
本发明涉及GPU任务调度领域,具体地,涉及一种GPU动态多任务可控并发执行方法及***。
背景技术
GPU相比CPU具有更强的并行处理能力,常用于图形渲染、高性能计算、模拟仿真以及人工智能模型训练与推理等任务。随着目前商用GPU计算单元(ComputeUnit)的不断增加,单个计算任务很难充分利用GPU中所有的计算单元,为了提高GPU计算单元的利用率,允许多个任务同时共享GPU是最常见的做法。
目前的GPU编程框架(例如CUDA、HIP)提供了GPU Stream的多任务并发抽象,多个任务使用不同的GPUStream可以实现在同一时刻并发执行,充分利用GPU中的计算单元。然而,使用GPUStream并发执行多个任务时,用户无法控制GPU计算单元的资源分配,使得不同任务对GPU计算单元进行竞争,虽能提高资源的利用率和***的吞吐量,但是会显著增加各个任务的执行时延,这严重影响了延迟敏感任务的实时性。以智能驾驶中的神经网络推理任务为例,障碍物检测任务需要使用GPU实现低时延的推理,而司机状态监测任务也需要使用GPU进行计算,但其具有较宽松的时延要求,当两个任务分别使用两个GPUStream并发执行时,由于两者相互对GPU计算单元的竞争,导致强实时任务(障碍物检测任务)的实时性要求不能够被满足。
为了能够控制并发任务对GPU计算单元的分配,学术界还提出了内核融合(KernelFusion)的方式来实现GPU多任务并发计算,将两个GPU kernel的源代码合并到一起,从而实现让两个GPU kernel共享GPU全部的计算单元,并且可以在合并的代码中控制计算单元的资源分配。然而,内核融合的方法只能在程序编译阶段选择将哪些kernel进行合并,无法应用在任务组合不确定或是在程序运行阶段才可以确定的动态调度场景中。
综上,如何设计一种在程序运行阶段动态控制GPU计算单元分配的GPU多任务并发执行的方法,是本领域研究人员亟待解决的一大问题。
专利文献CN114048026A(申请号:CN202111258248.4)公开了一种多任务情况下GPU资源的动态分配方法,以解决NVIDIA GPU多任务并发时,采用静态资源分配方法造成的大量资源空闲,***吞吐率下降,资源分配不合理的问题。但该发明并不是通过proxykernel为待执行kernel动态分配指定数量的计算单元,实现GPU程序运行阶段细粒度的计算单元分配。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种GPU动态多任务可控并发执行方法及***。
根据本发明提供的一种GPU动态多任务可控并发执行方法,包括:
步骤S1:在程序编译阶段生成一个或多个proxy kernel作为待执行kernel的入口;
步骤S2:在程序运行阶段,用户动态选择并发执行的待执行kernel;
步骤S3:根据选择的待执行kernel所需要的寄存器数量,选择proxykernel提交到GPU中;
步骤S4:用户通过proxy kernel动态控制各个待执行kernel使用的计算单元数量,跳转到待执行kernel并执行。
优选地,在所述步骤S1中:
生成一个或多个proxy kernel的源代码,每个proxy kernel拥有相同的源代码,每个proxy kernel具有不同的寄存器数量;proxy kernel是所有待执行kernel的入口,所有并发执行的kernel都从proxy kernel跳转执行;将proxykernel和待执行kernel的源代码编译为二进制文件;将编译过的proxy kernel和待执行kernel所在的二进制文件加载到GPU内存中;
proxy kernel的参数包括待执行kernel函数入口地址、待执行kernel参数地址以及待执行kernel使用的计算单元数量;
对于每一个CUOccupancy都生成对应最大寄存器数量的proxy kernel。
优选地,在所述步骤S2中:
根据用户的需求选择并发执行的待执行kernel,并根据选择的待执行kernel所需要的寄存器数量,选择proxykernel;
选择的proxy kernel应满足以下两点:首先,其使用的寄存器数量应大于选择的待执行kernel所需要的寄存器数量;其次,其应该是满足前述条件的所有proxy kernel中,使用寄存器数量最少的。
优选地,在所述步骤S3中:
根据用户的需求为每个待执行kernel分配计算单元数量,设置proxykernel的启动参数并启动proxykernel;
启动的proxy kernel的线程块数量为GPU计算单元数量与当前proxykernel的CUOccupancy的积;
启动的proxy kernel的每个线程块所包含的线程数量为所有待执行kernel的线程块最大线程数量;
启动的proxykernel的动态共享内存大小为所有待执行kernel所使用的最大共享内存大小。
优选地,在所述步骤S4中:
在GPU中执行proxykernel,根据当前所处的计算单元ID选择对应的待执行kernel,设置参数并跳转到待执行kernel执行;
proxy kernel设置待执行kernel的函数参数、线程块ID以及线程ID;
使用JMP指令跳转到待执行kernel的函数入口地址。
根据本发明提供的一种GPU动态多任务可控并发执行***,包括:
模块M1:在程序编译阶段生成一个或多个proxy kernel作为待执行kernel的入口;
模块M2:在程序运行阶段,用户动态选择并发执行的待执行kernel;
模块M3:根据选择的待执行kernel所需要的寄存器数量,选择proxykernel提交到GPU中;
模块M4:用户通过proxy kernel动态控制各个待执行kernel使用的计算单元数量,跳转到待执行kernel并执行。
优选地,在所述模块M1中:
生成一个或多个proxy kernel的源代码,每个proxy kernel拥有相同的源代码,每个proxy kernel具有不同的寄存器数量;proxy kernel是所有待执行kernel的入口,所有并发执行的kernel都从proxy kernel跳转执行;将proxykernel和待执行kernel的源代码编译为二进制文件;将编译过的proxy kernel和待执行kernel所在的二进制文件加载到GPU内存中;
proxy kernel的参数包括待执行kernel函数入口地址、待执行kernel参数地址以及待执行kernel使用的计算单元数量;
对于每一个CUOccupancy都生成对应最大寄存器数量的proxy kernel。
优选地,在所述模块M2中:
根据用户的需求选择并发执行的待执行kernel,并根据选择的待执行kernel所需要的寄存器数量,选择proxykernel;
选择的proxy kernel应满足以下两点:首先,其使用的寄存器数量应大于选择的待执行kernel所需要的寄存器数量;其次,其应该是满足前述条件的所有proxy kernel中,使用寄存器数量最少的。
优选地,在所述模块M3中:
根据用户的需求为每个待执行kernel分配计算单元数量,设置proxykernel的启动参数并启动proxykernel;
启动的proxy kernel的线程块数量为GPU计算单元数量与当前proxykernel的CUOccupancy的积;
启动的proxy kernel的每个线程块所包含的线程数量为所有待执行kernel的线程块最大线程数量;
启动的proxykernel的动态共享内存大小为所有待执行kernel所使用的最大共享内存大小。
优选地,在所述模块M4中:
在GPU中执行proxykernel,根据当前所处的计算单元ID选择对应的待执行kernel,设置参数并跳转到待执行kernel执行;
proxy kernel设置待执行kernel的函数参数、线程块ID以及线程ID;
使用JMP指令跳转到待执行kernel的函数入口地址。
与现有技术相比,本发明具有如下的有益效果:
1、本发明通过proxy kernel为待执行kernel动态分配指定数量的计算单元,可以实现GPU程序运行阶段细粒度的计算单元分配;
2、本发明使用多个proxy kernel来满足不同待执行kernel的寄存器数量需求,从而最大化待执行kernel的CUOccupancy,降低性能开销;
3、本发明在proxykernel使用JMP指令直接跳转到待执行kernel,避免使用函数指针造成的上下文保存,降低通过函数指针调用函数的性能开销。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为实施本发明的流程示意图;
图2为proxykernel的执行流程示意图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
实施例1:
本发明提供了一种GPU动态多任务可控并发执行方法及***,其特征在于,该方法在程序编译阶段生成若干个proxy kernel作为待执行kernel的入口;在程序运行阶段,用户可以动态选择并发执行的待执行kernel,并根据选择的待执行kernel所需要的寄存器数量,选择合适的proxykernel提交到GPU中;用户可以通过proxy kernel动态控制各个待执行kernel使用的计算单元数量,最终跳转到待执行kernel并执行;
根据本发明提供的一种GPU动态多任务可控并发执行方法,如图1-图2所示,包括:
步骤S1:在程序编译阶段生成一个或多个proxy kernel作为待执行kernel的入口;
具体地,在所述步骤S1中:
生成一个或多个proxy kernel的源代码,每个proxy kernel拥有相同的源代码,每个proxy kernel具有不同的寄存器数量;proxy kernel是所有待执行kernel的入口,所有并发执行的kernel都从proxy kernel跳转执行;将proxykernel和待执行kernel的源代码编译为二进制文件;将编译过的proxy kernel和待执行kernel所在的二进制文件加载到GPU内存中;
proxy kernel的参数包括待执行kernel函数入口地址、待执行kernel参数地址以及待执行kernel使用的计算单元数量;
对于每一个CUOccupancy都生成对应最大寄存器数量的proxy kernel。
步骤S2:在程序运行阶段,用户动态选择并发执行的待执行kernel;
具体地,在所述步骤S2中:
根据用户的需求选择并发执行的待执行kernel,并根据选择的待执行kernel所需要的寄存器数量,选择proxykernel;
选择的proxy kernel应满足以下两点:首先,其使用的寄存器数量应大于选择的待执行kernel所需要的寄存器数量;其次,其应该是满足前述条件的所有proxy kernel中,使用寄存器数量最少的。
步骤S3:根据选择的待执行kernel所需要的寄存器数量,选择proxykernel提交到GPU中;
具体地,在所述步骤S3中:
根据用户的需求为每个待执行kernel分配计算单元数量,设置proxykernel的启动参数并启动proxykernel;
启动的proxy kernel的线程块数量为GPU计算单元数量与当前proxykernel的CUOccupancy的积;
启动的proxy kernel的每个线程块所包含的线程数量为所有待执行kernel的线程块最大线程数量;
启动的proxykernel的动态共享内存大小为所有待执行kernel所使用的最大共享内存大小。
步骤S4:用户通过proxy kernel动态控制各个待执行kernel使用的计算单元数量,跳转到待执行kernel并执行。
具体地,在所述步骤S4中:
在GPU中执行proxykernel,根据当前所处的计算单元ID选择对应的待执行kernel,设置参数并跳转到待执行kernel执行;
proxy kernel设置待执行kernel的函数参数、线程块ID以及线程ID;
使用JMP指令跳转到待执行kernel的函数入口地址。
实施例2:
实施例2为实施例1的优选例,以更为具体地对本发明进行说明。
本领域技术人员可以将本发明提供的一种GPU动态多任务可控并发执行方法,理解为GPU动态多任务可控并发执行***的具体实施方式,即所述GPU动态多任务可控并发执行***可以通过执行所述方法的步骤流程予以实现。
根据本发明提供的一种GPU动态多任务可控并发执行***,包括:
模块M1:在程序编译阶段生成一个或多个proxy kernel作为待执行kernel的入口;
具体地,在所述模块M1中:
生成一个或多个proxy kernel的源代码,每个proxy kernel拥有相同的源代码,每个proxy kernel具有不同的寄存器数量;proxy kernel是所有待执行kernel的入口,所有并发执行的kernel都从proxy kernel跳转执行;将proxykernel和待执行kernel的源代码编译为二进制文件;将编译过的proxy kernel和待执行kernel所在的二进制文件加载到GPU内存中;
proxy kernel的参数包括待执行kernel函数入口地址、待执行kernel参数地址以及待执行kernel使用的计算单元数量;
对于每一个CUOccupancy都生成对应最大寄存器数量的proxy kernel。
模块M2:在程序运行阶段,用户动态选择并发执行的待执行kernel;
具体地,在所述模块M2中:
根据用户的需求选择并发执行的待执行kernel,并根据选择的待执行kernel所需要的寄存器数量,选择proxykernel;
选择的proxy kernel应满足以下两点:首先,其使用的寄存器数量应大于选择的待执行kernel所需要的寄存器数量;其次,其应该是满足前述条件的所有proxy kernel中,使用寄存器数量最少的。
模块M3:根据选择的待执行kernel所需要的寄存器数量,选择proxykernel提交到GPU中;
具体地,在所述模块M3中:
根据用户的需求为每个待执行kernel分配计算单元数量,设置proxykernel的启动参数并启动proxykernel;
启动的proxy kernel的线程块数量为GPU计算单元数量与当前proxykernel的CUOccupancy的积;
启动的proxy kernel的每个线程块所包含的线程数量为所有待执行kernel的线程块最大线程数量;
启动的proxykernel的动态共享内存大小为所有待执行kernel所使用的最大共享内存大小。
模块M4:用户通过proxy kernel动态控制各个待执行kernel使用的计算单元数量,跳转到待执行kernel并执行。
具体地,在所述模块M4中:
在GPU中执行proxykernel,根据当前所处的计算单元ID选择对应的待执行kernel,设置参数并跳转到待执行kernel执行;
proxy kernel设置待执行kernel的函数参数、线程块ID以及线程ID;
使用JMP指令跳转到待执行kernel的函数入口地址。
实施例3:
实施例3为实施例1的优选例,以更为具体地对本发明进行说明。
根据本发明提供的GPU动态多任务可控并发执行方法,包括以下步骤:
(1)生成proxy kernel源代码:生成若干个proxy kernel的源代码,每个proxykernel拥有相同的源代码,但每个proxy kernel具有不同的寄存器数量;proxy kernel是所有待执行kernel的入口,所有并发执行的kernel都将从proxy kernel跳转执行。
(2)编译proxy kernel与待执行kernel:将proxykernel和待执行kernel的源代码编译为二进制文件;
(3)加载proxy kernel与待执行kernel:将编译过的proxy kernel和待执行kernel所在的二进制文件加载到GPU内存中;
(4)选择待执行kernel:根据用户的需求选择并发执行的待执行kernel,并根据选择的待执行kernel所需要的寄存器数量,选择合适的proxykernel;
(5)启动proxy kernel:根据用户的需求为每个待执行kernel分配计算单元数量,设置proxykernel的启动参数并启动proxykernel;
(6)执行proxy kernel:在GPU中执行proxykernel,根据当前所处的计算单元ID选择对应的待执行kernel,设置参数并跳转到待执行kernel执行。
具体地,所述的步骤(1)中,proxy kernel的参数包括待执行kernel函数入口地址、待执行kernel参数地址以及待执行kernel使用的计算单元数量。
具体地,所述的步骤(1)中,对于每一个CUOccupancy都应该生成对应最大寄存器数量的proxy kernel。
具体地,所述的步骤(4)中,选择的proxy kernel应满足以下两点:首先,其使用的寄存器数量应大于选择的待执行kernel所需要的寄存器数量;其次,其应该是满足前述条件的所有proxy kernel中,使用寄存器数量最少的。
具体地,所述的步骤(5)中,启动的proxy kernel的线程块数量为GPU计算单元数量与当前proxykernel的CUOccupancy之积。
具体地,所述的步骤(5)中,启动的proxy kernel的每个线程块所包含的线程数量为所有待执行kernel的线程块最大线程数量。
具体地,所述的步骤(5)中,启动的proxykernel的动态共享内存大小为所有待执行kernel所使用的最大共享内存大小。
具体地,所述的步骤(6)中,proxy kernel需要设置待执行kernel的函数参数、线程块ID以及线程ID。
具体地,所述的步骤(6)中,直接使用JMP指令跳转到待执行kernel的函数入口地址。
根据本发明提供的GPU动态多任务可控并发执行***,包括以下模块:
(1)生成proxy kernel源代码:生成若干个proxy kernel的源代码,每个proxykernel拥有相同的源代码,但每个proxy kernel具有不同的寄存器数量;proxy kernel是所有待执行kernel的入口,所有并发执行的kernel都将从proxy kernel跳转执行。
(2)编译proxy kernel与待执行kernel:将proxykernel和待执行kernel的源代码编译为二进制文件;
(3)加载proxy kernel与待执行kernel:将编译过的proxy kernel和待执行kernel所在的二进制文件加载到GPU内存中;
(4)选择待执行kernel:根据用户的需求选择并发执行的待执行kernel,并根据选择的待执行kernel所需要的寄存器数量,选择合适的proxykernel;
(5)启动proxy kernel:根据用户的需求为每个待执行kernel分配计算单元数量,设置proxykernel的启动参数并启动proxykernel;
(6)执行proxy kernel:在GPU中执行proxykernel,根据当前所处的计算单元ID选择对应的待执行kernel,设置参数并跳转到待执行kernel执行。
所述的模块(1)中,proxy kernel的参数包括待执行kernel函数入口地址、待执行kernel参数地址以及待执行kernel使用的计算单元数量。
所述的模块(1)中,对于每一个CUOccupancy都应该生成对应最大寄存器数量的proxy kernel。
所述的模块(4)中,选择的proxy kernel应该是所有寄存器数量大于选择的待执行kernel所需要的寄存器数量的proxy kernel中寄存器数量最少的。
所述的模块(5)中,启动的proxy kernel的线程块数量为GPU计算单元数量与当前proxykernel的CUOccupancy之积。
所述的模块(5)中,启动的proxy kernel的每个线程块所包含的线程数量为所有待执行kernel的线程块最大线程数量。
所述的模块(5)中,启动的proxykernel的动态共享内存大小为所有待执行kernel所使用的最大共享内存大小。
所述的模块(6)中,proxy kernel需要设置待执行kernel的函数参数、线程块ID以及线程ID。
所述的模块(6)中,直接使用JMP指令跳转到待执行kernel的函数入口地址。
以下结合附图对本发明作进一步详细说明。
图1为本发明的流程示意图,包含以下步骤:
(1)生成proxy kernel源代码:生成若干个proxy kernel的源代码,每个proxykernel拥有相同的源代码,但每个proxy kernel具有不同的寄存器数量;proxy kernel是所有待执行kernel的入口,所有并发执行的kernel都将从proxy kernel跳转执行。
(2)编译proxy kernel与待执行kernel:将proxykernel和待执行kernel的源代码编译为二进制文件;
(3)加载proxy kernel与待执行kernel:将编译过的proxy kernel和待执行kernel所在的二进制文件加载到GPU内存中;
(4)选择待执行kernel:根据用户的需求选择并发执行的待执行kernel,并根据选择的待执行kernel所需要的寄存器数量,选择合适的proxykernel;
(5)启动proxy kernel:根据用户的需求为每个待执行kernel分配计算单元数量,设置proxykernel的启动参数并启动proxykernel;
(6)执行proxy kernel:在GPU中执行proxykernel,根据当前所处的计算单元ID选择对应的待执行kernel,设置参数并跳转到待执行kernel执行。
具体地,所述的步骤(4)中,proxy kernel的寄存器数量可以通过kernelattribute设置。
具体地,所述的步骤(4)中,用户可以根据应用需求选择并发执行的待执行kernel,例如选择执行时间相近的kernel,或者是计算密集与访存密集的kernel。
具体地,所述的步骤(5)中,用户可以根据应用需求为每个待执行kernel分配计算单元数量,例如先为高优先级的待执行kernel分配足够的计算单元,再为低优先级的待执行kernel分配剩余的计算单元。
图2为本发明中本发明的步骤(6)中proxykernel的执行流程示意图,包含以下步骤:
(6.1)获取当前线程块所在的计算单元ID;
(6.2)获取下一个待执行的kernel;
(6.3)若当前计算单元ID是否小于上个步骤获取的kernel所分配的最大计算单元ID,执行(6.4),否则执行(6.2);
(6.4)为选定的待执行kernel设置线程块ID、线程ID以及函数参数;
(6.5)使用JMP指令跳转到选定的待执行kernel的入口地址;
(6.6)执行选定的但执行kernel;
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的***、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的***、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的***、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。
Claims (6)
1.一种GPU动态多任务可控并发执行方法,其特征在于,包括:
步骤S1:在程序编译阶段生成一个或多个proxy kernel作为待执行kernel的入口;
步骤S2:在程序运行阶段,用户动态选择并发执行的待执行kernel;
步骤S3:根据选择的待执行kernel所需要的寄存器数量,选择proxy kernel提交到GPU中;
步骤S4:用户通过proxy kernel动态控制各个待执行kernel使用的计算单元数量,跳转到待执行kernel并执行;
在所述步骤S1中:
生成一个或多个proxy kernel的源代码,每个proxy kernel拥有相同的源代码,每个proxy kernel具有不同的寄存器数量;proxy kernel是所有待执行kernel的入口,所有并发执行的kernel都从proxy kernel跳转执行;将proxy kernel和待执行kernel的源代码编译为二进制文件;将编译过的proxy kernel和待执行kernel所在的二进制文件加载到GPU内存中;
proxy kernel的参数包括待执行kernel函数入口地址、待执行kernel参数地址以及待执行kernel使用的计算单元数量;
对于每一个CU Occupancy都生成对应最大寄存器数量的proxy kernel;
在所述步骤S4中:
在GPU中执行proxy kernel,根据当前所处的计算单元ID选择对应的待执行kernel,设置参数并跳转到待执行kernel执行;
proxy kernel设置待执行kernel的函数参数、线程块ID以及线程ID;
使用JMP指令跳转到待执行kernel的函数入口地址。
2.根据权利要求1所述的GPU动态多任务可控并发执行方法,其特征在于,在所述步骤S2中:
根据用户的需求选择并发执行的待执行kernel,并根据选择的待执行kernel所需要的寄存器数量,选择proxy kernel;
选择的proxy kernel应满足以下两点:首先,其使用的寄存器数量应大于选择的待执行kernel所需要的寄存器数量;其次,其是满足前述条件的所有proxy kernel中,使用寄存器数量最少的。
3.根据权利要求1所述的GPU动态多任务可控并发执行方法,其特征在于,在所述步骤S3中:
根据用户的需求为每个待执行kernel分配计算单元数量,设置proxy kernel的启动参数并启动proxy kernel;
启动的proxy kernel的线程块数量为GPU计算单元数量与当前proxy kernel的CUOccupancy的积;
启动的proxy kernel的每个线程块所包含的线程数量为所有待执行kernel的线程块最大线程数量;
启动的proxy kernel的动态共享内存大小为所有待执行kernel所使用的最大共享内存大小。
4.一种GPU动态多任务可控并发执行***,其特征在于,包括:
模块M1:在程序编译阶段生成一个或多个proxy kernel作为待执行kernel的入口;
模块M2:在程序运行阶段,用户动态选择并发执行的待执行kernel;
模块M3:根据选择的待执行kernel所需要的寄存器数量,选择proxy kernel提交到GPU中;
模块M4:用户通过proxy kernel动态控制各个待执行kernel使用的计算单元数量,跳转到待执行kernel并执行;
在所述模块M1中:
生成一个或多个proxy kernel的源代码,每个proxy kernel拥有相同的源代码,每个proxy kernel具有不同的寄存器数量;proxy kernel是所有待执行kernel的入口,所有并发执行的kernel都从proxy kernel跳转执行;将proxy kernel和待执行kernel的源代码编译为二进制文件;将编译过的proxy kernel和待执行kernel所在的二进制文件加载到GPU内存中;
proxy kernel的参数包括待执行kernel函数入口地址、待执行kernel参数地址以及待执行kernel使用的计算单元数量;
对于每一个CU Occupancy都生成对应最大寄存器数量的proxy kernel;
在所述模块M4中:
在GPU中执行proxy kernel,根据当前所处的计算单元ID选择对应的待执行kernel,设置参数并跳转到待执行kernel执行;
proxy kernel设置待执行kernel的函数参数、线程块ID以及线程ID;
使用JMP指令跳转到待执行kernel的函数入口地址。
5.根据权利要求4所述的GPU动态多任务可控并发执行***,其特征在于,在所述模块M2中:
根据用户的需求选择并发执行的待执行kernel,并根据选择的待执行kernel所需要的寄存器数量,选择proxy kernel;
选择的proxy kernel应满足以下两点:首先,其使用的寄存器数量应大于选择的待执行kernel所需要的寄存器数量;其次,其是满足前述条件的所有proxy kernel中,使用寄存器数量最少的。
6.根据权利要求4所述的GPU动态多任务可控并发执行***,其特征在于,在所述模块M3中:
根据用户的需求为每个待执行kernel分配计算单元数量,设置proxy kernel的启动参数并启动proxy kernel;
启动的proxy kernel的线程块数量为GPU计算单元数量与当前proxy kernel的CUOccupancy的积;
启动的proxy kernel的每个线程块所包含的线程数量为所有待执行kernel的线程块最大线程数量;
启动的proxy kernel的动态共享内存大小为所有待执行kernel所使用的最大共享内存大小。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210780174.9A CN115114003B (zh) | 2022-07-04 | 2022-07-04 | Gpu动态多任务可控并发执行方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210780174.9A CN115114003B (zh) | 2022-07-04 | 2022-07-04 | Gpu动态多任务可控并发执行方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115114003A CN115114003A (zh) | 2022-09-27 |
CN115114003B true CN115114003B (zh) | 2024-05-28 |
Family
ID=83330376
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210780174.9A Active CN115114003B (zh) | 2022-07-04 | 2022-07-04 | Gpu动态多任务可控并发执行方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115114003B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101963918A (zh) * | 2010-10-26 | 2011-02-02 | 上海交通大学 | 实现cpu/gpu异构平台的虚拟执行环境的方法 |
CN106502771A (zh) * | 2016-09-09 | 2017-03-15 | 中国农业大学 | 基于kernel函数的时间开销模型构建方法及*** |
CN110196753A (zh) * | 2019-01-21 | 2019-09-03 | 腾讯科技(北京)有限公司 | 基于容器的图形处理器gpu虚拟化方法、装置和可读介质 |
CN111722915A (zh) * | 2020-06-22 | 2020-09-29 | 上海商汤智能科技有限公司 | 任务处理方法、装置和*** |
CN112417470A (zh) * | 2020-11-06 | 2021-02-26 | 上海壁仞智能科技有限公司 | 实现gpu数据安全访问的方法、装置、电子设备及存储介质 |
CN113490924A (zh) * | 2019-02-22 | 2021-10-08 | 英特尔公司 | 用于运行时处理器验证的ept和影子页表之间的动态切换 |
WO2021211809A1 (en) * | 2020-04-16 | 2021-10-21 | Texas Instruments Incorporated | Scalable hardware thread scheduler |
CN114356547A (zh) * | 2021-12-07 | 2022-04-15 | 北京百度网讯科技有限公司 | 基于处理器虚拟化环境的低优阻塞方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170371662A1 (en) * | 2016-06-23 | 2017-12-28 | Intel Corporation | Extension of register files for local processing of data in computing environments |
-
2022
- 2022-07-04 CN CN202210780174.9A patent/CN115114003B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101963918A (zh) * | 2010-10-26 | 2011-02-02 | 上海交通大学 | 实现cpu/gpu异构平台的虚拟执行环境的方法 |
CN106502771A (zh) * | 2016-09-09 | 2017-03-15 | 中国农业大学 | 基于kernel函数的时间开销模型构建方法及*** |
CN110196753A (zh) * | 2019-01-21 | 2019-09-03 | 腾讯科技(北京)有限公司 | 基于容器的图形处理器gpu虚拟化方法、装置和可读介质 |
CN113490924A (zh) * | 2019-02-22 | 2021-10-08 | 英特尔公司 | 用于运行时处理器验证的ept和影子页表之间的动态切换 |
WO2021211809A1 (en) * | 2020-04-16 | 2021-10-21 | Texas Instruments Incorporated | Scalable hardware thread scheduler |
CN111722915A (zh) * | 2020-06-22 | 2020-09-29 | 上海商汤智能科技有限公司 | 任务处理方法、装置和*** |
CN112417470A (zh) * | 2020-11-06 | 2021-02-26 | 上海壁仞智能科技有限公司 | 实现gpu数据安全访问的方法、装置、电子设备及存储介质 |
CN114356547A (zh) * | 2021-12-07 | 2022-04-15 | 北京百度网讯科技有限公司 | 基于处理器虚拟化环境的低优阻塞方法及装置 |
Non-Patent Citations (3)
Title |
---|
"Efficient Execution of OpenMP on GPUs";Joseph Huber;《2022 IEEE/ACM International Symposium on Code Generation and Optimization (CGO)》;20220329;第41-52页 * |
"Microsecond-scale Preemption for Concurrent GPU-accelerated DNN Inferences";Mingcong Han;《Proceedings of the 16th USENIX Symposium on Operating Systems Design and Implementation》;20220713;第539-558页 * |
"一种基于冗余线程的GPU多副本容错技术";贾佳;《计算机研究与发展》;20130715;第50卷(第07期);第1551-1562页 * |
Also Published As
Publication number | Publication date |
---|---|
CN115114003A (zh) | 2022-09-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100962531B1 (ko) | 동적 로드 밸런싱을 지원하는 멀티 쓰레딩 프레임워크를 수행하는 장치 및 이를 이용한 프로세싱 방법 | |
CN1043932C (zh) | 多任务处理低功率控制器 | |
CN112463709A (zh) | 可配置的异构人工智能处理器 | |
CN112465129A (zh) | 片内异构人工智能处理器 | |
US20090160867A1 (en) | Autonomous Context Scheduler For Graphics Processing Units | |
US9152462B2 (en) | Parallel processing device, parallel processing method, optimization device, optimization method and computer program | |
US9582320B2 (en) | Computer systems and methods with resource transfer hint instruction | |
CN105893126A (zh) | 一种任务调度方法及装置 | |
US20050125793A1 (en) | Operating system kernel-assisted, self-balanced, access-protected library framework in a run-to-completion multi-processor environment | |
CN110308982B (zh) | 一种共享内存复用方法及装置 | |
KR20040069257A (ko) | 다수의 하드웨어 구성들을 가지는 재구성가능한 하드웨어아키텍처의 스케줄링 방법 | |
CN112711478A (zh) | 基于神经网络的任务处理方法、装置、服务器和存储介质 | |
US11947999B2 (en) | Multi-phased and multi-threaded program execution based on SIMD ratio | |
WO2020227582A2 (en) | Method and apparatus for scheduling matrix operations in digital processing systems | |
Li et al. | Efficient algorithms for task mapping on heterogeneous CPU/GPU platforms for fast completion time | |
CN111597044A (zh) | 任务调度方法、装置、存储介质及电子设备 | |
CN115114003B (zh) | Gpu动态多任务可控并发执行方法及*** | |
US9760969B2 (en) | Graphic processing system and method thereof | |
CN116107753A (zh) | 一种任务节点分配方法、装置、电子设备及存储介质 | |
CN110969565A (zh) | 图像处理的方法和装置 | |
CN114048026A (zh) | 一种多任务并发情况下gpu资源动态分配方法 | |
JP2006099579A (ja) | 情報処理装置及び情報処理方法 | |
WO2023283767A1 (zh) | 一种任务调度方法和装置 | |
Chow et al. | Energy efficient task graph execution using compute unit masking in GPUs | |
Gannouni | A Gamma-calculus GPU-based parallel programming framework |
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 |