CN112256435B - 用于图形处理器的工作组的分配方法以及图形处理器 - Google Patents
用于图形处理器的工作组的分配方法以及图形处理器 Download PDFInfo
- Publication number
- CN112256435B CN112256435B CN202011211150.9A CN202011211150A CN112256435B CN 112256435 B CN112256435 B CN 112256435B CN 202011211150 A CN202011211150 A CN 202011211150A CN 112256435 B CN112256435 B CN 112256435B
- Authority
- CN
- China
- Prior art keywords
- load
- computing unit
- load state
- real
- current
- 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
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
- G06F9/505—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 load
-
- 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/5061—Partitioning or combining of resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
-
- 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)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Image Processing (AREA)
- Multi Processors (AREA)
Abstract
本公开提供一种用于图形处理器的工作组的分配方法以及图形处理器,该方法包括:实时请求将当前工作组分配到多个计算单元之一;根据多个计算单元中每个的实时负载状态以及当前工作组的大小,在多个计算单元中选择用于当前工作组运行的目标计算单元;将当前工作组分成多个线程粒度发送到所述目标计算单元。本公开基于各个并行计算单元的实时负载情况将工作组分配给计算单元,达到各个计算单元负载均衡的目的,提高计算单元的利用效率,从而提升并行计算的性能。
Description
技术领域
本公开的实施例涉及一种用于图形处理器的工作组的分配方法以及图形处理器。
背景技术
图形处理器GPU(例如GPGPU,General-purpose computing on graphicsprocessingunits,通用图形处理器)在图形图像处理等领域逐步得到广泛应用。由于GPU具有天生的并行计算体系结构,近十多年来,随着GPU硬件结构的发展,它在通用计算领域尤其是高性能计算领域得到了广泛应用。
GPU的硬件结构支持超大规模多线程的并发执行,并采用单指令多数据的程序执行模式。为了高效的调度并发执行的线程组(Dispatch,其是一组三维空间的并行运算的线程,执行相同的内核程序),首先从一个线程组中切分出一部分线程,即工作组(Workgroup),并且一个工作组分配在一个计算单元(CU)中;然后再从一个工作组中切分出线程,即线程粒度(Warp),线程粒度是GPU中调度的最小单元,并且每个线程粒度中包含多个线程,线程粒度在同一时刻执行相同的数据操作。
随着人们对算力需求的提升,GPU中实例化的并行计算单元数量也在不断增加,如何高效地管理这些计算单元以达到各个并行计算单元负载的均衡就变得至关重要。
发明内容
本公开的实施例提供了一种用于图形处理器的工作组的分配方法以及图形处理器,基于各个并行计算单元的实时负载情况将工作组分配给计算单元,达到各个计算单元负载均衡的目的,提高计算单元的利用效率,从而提升并行计算的性能。
本公开至少一实施例提供了一种用于图形处理器的工作组的分配方法,包括:
实时请求将当前工作组分配到多个计算单元之一;
根据所述多个计算单元中每个的实时负载状态以及所述当前工作组的大小,在所述多个计算单元中选择用于所述当前工作组运行的目标计算单元;
将所述当前工作组分成多个线程粒度发送到所述目标计算单元。
例如,在本公开至少一实施例提供的一种用于图形处理器的工作组的分配方法中,根据所述多个计算单元中每个的实时负载状态以及所述当前工作组的大小,在所述多个计算单元中选择用于所述当前工作组运行的目标计算单元,包括:根据每个计算单元的实时负载状态与所述当前工作组的大小之间的匹配结果,实时获取用于所述当前工作组的至少一个可用计算单元,并从所述至少一个可用计算单元中选择一个作为所述当前工作组的所述目标计算单元,其中,所述可用计算单元是指实时负载状态可供所述当前工作组运行的计算单元。
例如,在本公开至少一实施例提供的一种用于图形处理器的工作组的分配方法中,响应于所得到的每个计算单元的实时负载状态与所述当前工作组的大小之间的匹配结果而实时获取当前所有计算单元中不存在一个用于所述当前工作组的可用计算单元,继续请求将所述当前工作组分配到所述多个计算单元之一,直至根据每个计算单元的实时负载状态和所述当前工作组的大小获取用于所述当前工作组的至少一个可用计算单元。
例如,在本公开至少一实施例提供的一种用于图形处理器的工作组的分配方法中,从所述至少一个可用计算单元中选择一个作为所述当前工作组的所述目标计算单元,包括:所述目标计算单元的负载小于所述至少一个可用计算单元中其他可用计算单元中的至少一个计算单元的负载。
例如,在本公开至少一实施例提供的一种用于图形处理器的工作组的分配方法中,从所述至少一个可用计算单元中选择一个作为所述当前工作组的所述目标计算单元,包括:从所述至少一个可用计算单元中选择负载最小的计算单元作为所述目标计算单元。
例如,在本公开至少一实施例提供的一种用于图形处理器的工作组的分配方法中,根据所述当前工作组的大小,更新所述目标计算单元的负载状态。
例如,在本公开至少一实施例提供的一种用于图形处理器的工作组的分配方法中,在所述目标计算单元的至少一个线程粒度执行完内核程序后,对所述目标计算单元进行负载释放,并且更新所述目标计算单元的负载状态。
例如,在本公开至少一实施例提供的一种用于图形处理器的工作组的分配方法中,每个所述计算单元的实时负载状态以实时负载状态值分别被存储在负载状态寄存器中。
例如,在本公开至少一实施例提供的一种用于图形处理器的工作组的分配方法中,从所述至少一个可用计算单元中选择负载最小的计算单元作为所述目标计算单元,包括:根据每个所述计算单元的实时负载状态与所述当前工作组的大小进行比较的匹配结果,选择出实时负载状态可供所述当前工作组运行的一个或多个计算单元,并在已选择出的所述一个或多个计算单元中选出负载最小的计算单元作为所述目标计算单元。
例如,在本公开至少一实施例提供的一种用于图形处理器的工作组的分配方法中,从所述至少一个可用计算单元中选择负载最小的计算单元作为所述目标计算单元,包括:将每个所述计算单元的实时负载状态与所述当前工作组的大小之间的匹配结果,与每个所述计算单元的相应负载状态寄存器的实时负载状态值进行按位与运算,分别得到一布尔位运算结果,其中,所述匹配结果为0以表示不匹配,或1以表示能匹配,所述布尔位运算结果为零或负载状态寄存器的实时负载状态值;将多个所述计算单元对应的多个布尔位运算结果,通过比较器和选择器进行多次比较和选择,选出所述负载最小的计算单元。
例如,在本公开至少一实施例提供的一种用于图形处理器的工作组的分配方法中,所述负载状态值包括负载权值,其中,所述负载状态寄存器所存储的计算单元的所述负载权值越大时,所述负载状态寄存器对应的计算单元的负载越小;所述负载最小的计算单元是指负载权值最大的计算单元。
例如,在本公开至少一实施例提供的一种用于图形处理器的工作组的分配方法中,在分发所述线程粒度时,实时地更新所述负载状态寄存器的负载权值,将所述负载状态寄存器的更新前的负载权值减去当前被分发的线程粒度的负载权值,得到更新后的负载权值;在所述线程粒度执行完内核程序后,实时地更新所述负载状态寄存器的负载权值,将所述负载状态寄存器的更新前的负载权值加上当前已执行完内核程序的线程粒度的负载权值,得到更新后的负载权值。
例如,在本公开至少一实施例提供的一种用于图形处理器的工作组的分配方法中,每个所述线程粒度的负载权值被存储在权值存储模块中;每个所述线程粒度的负载权值在其被分发时被写入所述权值存储模块;每个线程粒度的负载权值在其执行完内核程序后,根据线程粒度所在的计算单元的地址从所述权值存储模块中被读出。
本公开至少一实施例提供了一种图形处理器,包括:
多个计算单元;
资源管理器,接收将所述当前工作组待分配到所述多个计算单元之一的实时请求,根据所述多个计算单元中每个的实时负载状态以及所述当前工作组的大小,得到所述多个计算单元中每个的实时负载状态与所述当前工作组的大小之间的匹配结果,以在所述多个计算单元中选择用于所述当前工作组运行的目标计算单元,并将所述当前工作组分成多个线程粒度发送到所述目标计算单元。
例如,在本公开至少一实施例提供的一种图形处理器中,所述资源管理器包括多个负载状态寄存器,其中,所述负载状态寄存器配置为存储各计算单元的实时负载状态值。
例如,在本公开至少一实施例提供的一种图形处理器中,所述资源管理器还包括目标计算单元选择模块,其中,所述目标计算单元选择模块包括:
多个按位与逻辑电路,分别与所述多个负载状态寄存器连接,所述按位与逻辑电路配置为输入每个所述计算单元的实时负载状态与所述当前工作组的大小之间的匹配结果,以及每个所述计算单元的相应负载状态寄存器的实时负载状态值,分别输出一布尔位运算结果;其中,所述匹配结果为0以表示不匹配,或1以表示能匹配,所述布尔位运算结果为零或负载状态寄存器的当前负载状态值;
多个比较器,与所述多个按位与逻辑电路连接,所述比较器配置为根据多个所述计算单元对应的多个布尔位运算结果进行多次的比较;
多个选择器,与所述多个比较器连接,所述选择器配置为根据所述比较器的输出进行选择,选出负载最小的计算单元。
例如,在本公开至少一实施例提供的一种图形处理器中,所述比较器分为N级比较器,其中,每一级比较器包括一个或多个所述比较器,N为整数且N≥2;
所述选择器包括负载状态值选择器,其中,所述负载状态值选择器分为N-1级负载状态值选择器,每一级负载状态值选择器包括一个或多个所述负载状态值选择器;
所述每一级比较器用于比较所述多个布尔位运算结果中的两个,并且所述每一级负载状态值选择器的选择信号是当前级比较器的输出,以选出对应所述负载最小的负载状态值;其中,当前级负载状态值选择器输入与所述当前级比较器的输入相同。
例如,在本公开至少一实施例提供的一种图形处理器中,所述选择器还包括计算单元地址选择器,其中,所述计算单元地址选择器分为N级计算单元地址选择器,每一级计算单元地址选择器包括一个或多个所述计算单元地址选择器;所述每一级比较器的输出作为当前级计算单元地址选择器的选择信号,并且所述当前级计算单元地址选择器的输入是当前级比较器的输入所对应的计算单元的地址,用以选择得出对应所述负载最小的计算单元的地址;其中,第N级地址选择器的输出是所述负载最小的计算单元的地址。
例如,在本公开至少一实施例提供的一种图形处理器中,当i=1时,第i级比较器的输入是所述多个布尔位运算结果中的任意两个;当1<i≤N并且i为整数时,第i级比较器的输入是一个布尔位运算结果和一个第i-1级负载状态值选择器的输出,或者,第i级比较器的输入是一个第j级负载状态值选择器的输出和一个第i-1级负载状态值选择器的输出,j为整数并且1≤j<i,或者,第i级比较器的输入是两个第i-1级负载状态值选择器的输出。
例如,在本公开至少一实施例提供的一种图形处理器中,所述负载状态值包括负载权值,其中,所述负载状态寄存器所存储的计算单元的所述负载权值越大时,所述负载状态寄存器对应的计算单元的负载越小;所述每个比较器的输出是其输入中数值大的一个,所述每个负载状态值选择器的输出是其输入中数值大的一个,所述负载最小的计算单元是指负载权值最大的计算单元。
例如,在本公开至少一实施例提供的一种图形处理器中,所述资源管理器还包括线程粒度分发单元,其中,所述线程粒度分发单元配置为将所述当前工作组分成多个线程粒度发送到所述目标计算单元的分发单元。
例如,在本公开至少一实施例提供的一种图形处理器中,所述资源管理器还包括负载状态更新逻辑电路,其中,所述负载状态更新逻辑电路配置为与所述线程粒度分发单元和所述负载状态寄存器连接,以实时地更新所述负载状态寄存器的实时负载状态。
例如,在本公开至少一实施例提供的一种图形处理器中,所述负载状态更新逻辑电路包括:
权值存储模块,与所述线程粒度分发单元连接,其中,所述权值存储模块配置为在线程粒度被分发时,接收当前被分发的线程粒度的负载权值以进行存储,并且接收所述当前被分发的线程粒度所在的计算单元的地址;
加法器,与所述权值存储模块和所述负载状态寄存器连接,其中,所述加法器配置为在所述线程粒度被分发时,接收当前被分发的线程粒度的负载权值,并将所述负载状态寄存器的更新前的负载权值减去所述当前被分发的线程粒度的负载权值,得到更新后的负载权值;所述加法器还配置为在所述线程粒度执行完内核程序后根据所述线程粒度所在的计算单元的地址接收所述权值存储模块中存储的线程粒度的负载权值,并将所述负载状态寄存器的更新前的负载权值加上当前已执行完内核程序的线程粒度的负载权值,得到更新后的负载权值;其中,所述加法器将所述更新后的负载权值发送至所述负载状态寄存器,以更新所述负载状态寄存器的实时负载状态。
附图说明
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为一种管理GPGPU的多个计算单元的方法示意图;
图2为一种基于轮询调度方式选择计算单元的原理示意图;
图3为本公开一些实施例提供的一种用于GPGPU的工作组的分配方法的流程示意图;
图4为本公开又一些实施例提供的一种用于GPGPU的工作组的分配方法的流程示意图;
图5为本公开另一些实施例提供的一种用于GPGPU的工作组的分配方法的流程示意图;
图6为本公开一些实施例提供的选择目标计算单元的原理示意图;
图7为本公开一些实施例提供的一种用于GPGPU的工作组的分配方法中负载权值更新的原理示意图;
图8为本公开一些实施例提供的基于权值存储模块更新负载状态寄存器的原理示意图;
图9为本公开一些实施例提供的用于四个计算单元的GPGPU的目标计算单元选择模块的电路示意图;
图10为本公开另一些实施例提供的用于四个计算单元的GPGPU的目标计算单元选择模块的电路示意图;
图11为本公开一些实施例提供的用于五个计算单元的GPGPU的目标计算单元选择模块的电路示意图;
图12本公开另一些实施例提供的用于五个计算单元的GPGPU的目标计算单元选择模块的电路示意图;以及
图13本公开又一些实施例提供的用于五个计算单元的GPGPU的目标计算单元选择模块的电路示意图。
具体实施方式
下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另有定义,本公开实施例使用的所有术语(包括技术和科学术语)具有与本本公开所属领域的普通技术人员共同理解的相同含义。还应当理解,诸如在通常字典里定义的那些术语应当被解释为具有与它们在相关技术的上下文中的含义相一致的含义,而不应用理想化或极度形式化的意义来解释,除非本公开实施例明确地这样定义。
本公开实施例中使用的“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。同样,“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。本公开实施例中使用了流程图用来说明根据本公开实施例的方法的步骤。应当理解的是,前面或后面的步骤不一定按照顺序来精确的进行。相反,可以按照倒序或同时处理各种步骤。同时,也可以将其他操作添加到这些过程中,或从这些过程移除某一步或数步。
图1是一种管理GPGPU的多个计算单元的方法示意图。如图1所示,在图形处理器GPU(例如通用图形处理器GPGPU)中主要是由资源管理器管理所有的计算单元,并从一个线程组(Dispatch)先切分出工作组(Workgroup)再切分成线程粒度(Warp),再将线程粒度分发到计算单元中,以分别执行内核程序(Kernel)。由于一个工作组的内部需要共享数据,因此工作组中的所有线程粒度只能被分发到同一个计算单元,而且一个计算单元可以同时运行多个不同的线程粒度。
可以使用轮询调度方式,轮询地将一个线程组中的多个工作组分配到各个对应的计算单元,如图2所示。该轮询调度方式包括:首先将第一个工作组发送到计算单元0,第二个工作组发送到计算单元1,以此类推,直到将工作组发到最后一个计算单元,然后才会重新回到计算单元0,继续分发工作组。这种轮询调度方法的好处是分发逻辑简单,容易实现。
另外,GPGPU作为通用处理器,可同时运行不同的内核程序,则线程组及线程组中的工作组的大小会不一样,因为工作组中包含的线程粒度的个数不同,并且工作组中的线程粒度在计算单元中运行时间也不一样。发明人发现:如果总是轮询地将工作组分配到计算单元的话,那当GPGPU运行了一段时间之后,就会出现各个计算单元负载不均衡的情况,即某些计算单元负载过重,而某些计算单元却负载很小,甚至某些计算单元出现空闲的状态,导致运算单元算力的浪费,从而影响到GPGPU的性能。
本公开至少一实施例提供了一种用于图形处理器(GPU)的工作组的分配方法,包括:
实时请求将当前工作组分配到多个计算单元之一;
根据该多个计算单元中每个的实时负载状态以及该当前工作组的大小,在该多个计算单元中选择用于该当前工作组运行的目标计算单元;
将该当前工作组分成多个线程粒度发送到该目标计算单元。
该实施例的用于图形处理器的工作组的分配方法,根据各个并行计算单元的实时负载情况将工作组分配给目标计算单元(例如负载较小的计算单元),均衡各个计算单元的负载,提高计算单元的利用效率,从而提升GPU并行计算的性能。
本公开至少一实施例提供了一种用于图形处理器(GPU)的工作组的分配方法,例如,该工作组的分配方法可以适用于通用图形处理器(GPGPU),下述多处的分配方法的示例是以用于GPGPU为例进行说明的,但是本公开实施例不仅限于该GPGPU,还适用于其他应用下的GPU,本公开实施例在此不做穷举和赘述。
本公开至少一实施例还提供了一种图形处理器。同样地,该图形处理器可以是GPGPU,下述多处的示例是以GPGPU为例进行说明的,当然还可以是其他类型的GPU,本公开实施例在此不做穷举和赘述。
图3为本公开一些实施例提供的用于GPGPU的工作组的分配方法的流程图。如图3所示,该工作组的分配方法包括步骤S1至步骤S3。
步骤S1、实时请求将当前工作组分配到多个计算单元之一。
步骤S2、根据该多个计算单元中每个的实时负载状态以及该当前工作组的大小,在该多个计算单元中选择用于该当前工作组运行的目标计算单元。
步骤S3、将该当前工作组分成多个线程粒度发送到该目标计算单元。
首先,对于步骤S1,例如,在一些示例中,GPGPU包括资源管理器和多个计算单元。当线程组切分出来一个工作组后,当前工作组被发送到资源管理器,并向资源管理器申请分配到计算单元,即,该资源管理器接收将当前工作组待分配到多个计算单元之一的实时请求,用于后续将工作组分配到适当的计算单元中。
接着,对于步骤S2,例如,在一些示例中,该步骤S2进一步包括以下步骤S201至步骤S203,如图4所示。
步骤S201、资源管理根据所得到的实时请求,获取当前工作组的大小并查询到当前所有的计算单元的实时负载状态。
步骤S202、资源管理器根据每个计算单元的实时负载状态与当前工作组的大小,判断是否存在与当前工作组匹配的可用计算单元,其中,该可用计算单元是指实时负载状态能够可供当前工作组正常运行的计算单元,即可用计算单元有足够资源供当前工作组正常运行。若是,即存在一个或多个可用计算单元(通常会有多个计算单元满足条件),继续执行步骤S203。若否,即当前所有计算单元中不存在一个用于当前工作组的可用计算单元,则跳转到步骤S1,继续保持着要将当前工作组分配到多个计算单元之一的请求,等待计算单元的资源释放,直至资源管理器根据每个计算单元的实时负载状态和当前工作组的大小获取到用于当前工作组的至少一个可用计算单元,再继续执行步骤S203。
步骤S203、资源管理器在可用计算单元中选择一个作为当前工作组的目标计算单元。步骤S203中的目标计算单元是能使当前工作组运行的可用计算单元,即这是指在一些示例中,选出的目标计算单元是可用计算单元的其中一个,但是本公开实施例并不限制该方法一定按照上述描述的顺序进行执行。
最后,对于步骤S3,例如,在一些示例中,资源管理器中的线程粒度分发单元用于将当前工作组分成多个线程粒度发送到一个目标计算单元,即以线程粒度的形式发送给目标计算单元执行内核程序。
图5为本公开另一些实施例提供的一种用于GPGPU的工作组的分配方法的流程示意图。
如图5所示,例如,在一些示例中,根据当前工作组的大小,资源管理器在当前工作组分配到目标计算单元后更新对应的目标计算单元的负载状态。又例如,在一些示例中,资源管理器在目标计算单元的至少一个线程粒度执行完内核程序后,对目标计算单元进行负载释放,并且更新目标计算单元的负载状态,直到工作组中所有的线程粒度都执行完成,即当工作组占用的负载全部释放,工作组的生命周期结束。
例如,在一些示例中,将从线程组切分出来的工作组按照次序一个一个地分发给相应的目标计算单元,工作组的大小和分配的次序是由软件定义,一般由应用本身来决定。对于处理能力一定的计算单元,当前负载小意味着可用于其他任务的可用资源更多,反之,当前负载大,则意味着可用于其他任务的可用资源更少,甚至没有。值得注意的是,在本公开实施例提供的工作组的分配方法中,有时候会刚好出现一些较大的工作组分配到负载较小(即可用资源空间较大)的计算单元,一般不会发生一些较大的工作组分配到负载较大(即可用资源空间较小)的计算单元而导致计算单元无法运行该工作组,更不会一开始就出现没有与当前工作组匹配的计算单元,因为工作组的大小和分配的次序是由软件定义,必须让工作组所需要的资源不能大于一个计算单元的可用资源空间。
对于步骤S203,例如,在一些示例中,目标计算单元的负载小于至少一个可用计算单元中其他可用计算单元中的至少一个计算单元的负载。更进一步地,在一些示例中,从至少一个可用计算单元中选择负载最小的计算单元作为目标计算单元,以达到各个计算单元的负载的均衡。
其中,对于从至少一个可用计算单元中选择负载最小的计算单元作为目标计算单元,在一些示例中,为了判断出当前的负载较小的计算单元,此时资源管理器需要增加多个负载状态寄存器来分别存储并实时地更新每个计算单元的负载情况。例如,一些示例中,每个计算单元的实时负载状态是以实时负载状态值分别被存储在一个对应的负载状态寄存器中。
图6为本公开一些实施例提供的选择目标计算单元的原理示意图。如图6所示,例如,在一些示例中,当资源管理器找出可以匹配整个工作组的可用计算单元后,通过比较可用计算单元的负载状态寄存器的负载状态值来确定某个计算单元的负载最小,并将工作组的线程粒度分发到这个负载最小的目标计算单元。换句话说,在一些示例中,根据每个计算单元的实时负载状态值与当前工作组的大小进行比较的匹配结果,选择出实时负载状态可供当前工作组运行的一个或多个计算单元,并在已选择出的一个或多个计算单元中选出负载最小的计算单元作为目标计算单元。
更进一步地,在一些示例中,将每个计算单元的实时负载状态与当前工作组的大小之间的匹配结果,与每个计算单元的相应负载状态寄存器的实时负载状态值进行按位与运算,分别得到一布尔位运算结果,其中,匹配结果为0以表示不匹配,或匹配结果为1以表示能匹配,并且该布尔位运算结果为零或负载状态寄存器的实时负载状态值,例如,在匹配结果为0时,对应输出的布尔位运算结果为零,在匹配结果为1时,对应输出的布尔位运算结果为相应的负载状态寄存器的实时负载状态值;然后再将多个计算单元对应的多个布尔位运算结果,通过多个比较器和多个选择器进行多次比较和选择,选出负载最小的计算单元。
例如,在一些示例中,该负载状态值包括负载权值。比如,该负载权值可以是一个软件定义的负载权值。其中,负载状态寄存器所存储的计算单元的负载权值越大时,负载状态寄存器对应的计算单元的负载越小;因此,上述负载最小的计算单元是指负载权值最大的计算单元。在一些示例中,负载寄存器的复位值(reset值)为计数器的最大值,并且负载寄存器存储的数值越大,说明负载越小。
图7为本公开一些实施例提供的一种用于GPGPU的工作组的分配方法中负载权值更新的原理示意图。
如图7所示,例如,在一些示例中,当工作组被分配到目标计算单元后,即线程粒度分发单元分发工作组中的线程粒度时,资源管理器实时地更新对应负载状态寄存器的负载权值,并将负载状态寄存器的更新前的负载权值减去当前被分发的线程粒度的负载权值,得到负载状态寄存器的更新后的负载权值。例如,在一些示例中,在线程粒度执行完内核程序后,资源管理器实时地更新负载状态寄存器的负载权值,将负载状态寄存器的更新前的负载权值加上当前已执行完内核程序的线程粒度的负载权值,得到负载状态寄存器的更新后的负载权值。
图8为本公开一些实施例提供的基于权值存储模块更新负载状态寄存器的原理示意图。
具体而言,如图7和图8结合所示,当工作组被分配到目标计算单元后,资源管理器在分发线程粒度时更新负载状态寄存器,并在原值(即更新前的负载权值)基础上减去一个软件定义的负载权值,即计算单元的负载增加。这个负载权值表明了当前线程粒度的相对负载,由当前线程粒度在计算单元中内核程序的运行时间决定,比如定义五个等级的权值,从1到5,最简单的内核程序的权值为1,最复杂的内核程序的权值为5。当该线程粒度执行完成时,资源管理器再重新加回这个负载权值,表明当前计算单元的负载减少。
为了能够在线程粒度执行完成并释放计算单元的资源的时候得到线程粒度分发时的负载权值,资源管理器需要增加存储每个线程粒度的负载权值的存储模块,即权值存储模块,如图8所示。例如,每个线程粒度的负载权值被存储在权值存储模块中;每个线程粒度的负载权值在其被分发时被写入权值存储模块;每个线程粒度的负载权值在其执行完内核程序后,根据线程粒度所在的计算单元的地址(ID)从权值存储模块中被读出。
值得注意的是,本公开实施例的负载状态值不仅限于该软件定义的负载权值,也不仅限于该负载权值越大即代表计算单元的负载越小的方式,例如,值越大即代表计算单元的负载越大的其他类型的状态值,也能实现本公开实施例中获取工作组的目标计算单元的目的,即只要是能体现出计算单元的可用资源空间大小并能获取目标计算单元的各种表征形式的状态值均在本公开的保护范围内,且本公开实施例对此不做限制,也不做穷举和赘述。
需要说明的是,在本公开实施例中,上述各个示例提供的用于图形处理器的工作组的分配方法的流程可以包括更多或更少的操作,这些操作可以顺序执行或并行执行。虽然上文描述的工作组的分配方法的流程包括特定顺序出现的多个操作,但是应该清楚地了解,多个操作的顺序并不受限制。
此外,有关轮询调度方式与本公开上述实施例的实现方式,可以通过实验以验证技术效果,例如,分别在具有4个计算单元的GPGPU中进行了性能测试和比较,得到如下:如果在多个线程组中的工作组的大小与内核程序相差不大的情况下,两种方式的性能几乎相同。但是,如果多个线程组存在较大差异,例如一些线程组中的工作组较大,内核程序复杂,而一些线程组的工作组较小,内核程序简单,那么本公开上述实施例较轮询调度方式能够减少2000多个周期的执行时间。
基于上述可知,本公开上述实施例的用于图形处理器的工作组的分配方法,根据各个并行计算单元的实时负载情况将工作组分配给负载较小的计算单元,均衡各个计算单元的负载,充分利用每个计算单元的算力,从而提升图形处理器的整体性能。
本公开至少一实施例提供的一种图形处理器,该图形处理器包括资源管理器和多个计算单元。该多个计算单元可分别用于被分配的工作组的运行;该资源管理器接收将当前工作组待分配到多个计算单元之一的实时请求,根据多个计算单元中每个的实时负载状态以及当前工作组的大小,得到多个计算单元中每个的实时负载状态与当前工作组的大小之间的匹配结果,以在多个计算单元中选择用于当前工作组运行的目标计算单元,并将当前工作组分成多个线程粒度发送到目标计算单元。
例如,在一些示例中,在资源管理器包括多个负载状态寄存器,用于存储各计算单元的实时负载状态值。
例如,在一些示例中,资源管理器还包括线程粒度分发单元,用于将当前工作组分成多个线程粒度发送到目标计算单元。
例如,在一些示例中,如图8所示,资源管理器还包括负载状态更新逻辑电路,该负载状态更新逻辑电路与线程粒度分发单元和负载状态寄存器连接,以实时地更新负载状态寄存器的实时负载状态。
其中,负载状态更新逻辑电路包括权值存储模块和加法器。权值存储模块与线程粒度分发单元连接,权值存储模块在线程粒度被分发时,接收当前被分发的线程粒度的负载权值以进行存储,并且接收当前被分发的线程粒度所在的计算单元的地址。加法器与权值存储模块和负载状态寄存器连接,该加法器在线程粒度被分发时,接收当前被分发的线程粒度的负载权值,并将负载状态寄存器的更新前的负载权值减去当前被分发的线程粒度的负载权值,得到更新后的负载权值;加法器还在线程粒度执行完内核程序后根据线程粒度所在的计算单元的地址接收权值存储模块中存储的该线程粒度的负载权值,并将负载状态寄存器的更新前的负载权值加上当前已执行完内核程序的线程粒度的负载权值,得到更新后的负载权值;其中,加法器将更新后的负载权值发送至负载状态寄存器,以更新负载状态寄存器的实时负载状态。
例如,在一些示例中,资源管理器还包括目标计算单元选择模块。如图6所示,该目标计算单元选择模块包括多个按位与逻辑电路11、多个比较器12和多个选择器13。其中,多个按位与逻辑电路11分别与多个负载状态寄存器连接,按位与逻辑电路11输入每个计算单元的实时负载状态与当前工作组的大小之间的匹配结果,以及每个计算单元的相应负载状态寄存器的实时负载状态值,并且分别输出一布尔位运算结果。该匹配结果为0以表示不匹配,或该匹配结果为1以表示能匹配。布尔位运算结果对应地为零或负载状态寄存器的当前负载状态值,例如,当匹配结果为0时,对应输出的布尔位运算结果为零,则计算单元与当前工作组不匹配,当匹配结果为1时,对应输出的布尔位运算结果为相应的负载状态寄存器的实时负载状态值,则表明计算单元能够使当前工作组正常运行。多个比较器12与多个按位与逻辑电路11连接,比较器12根据多个计算单元对应的多个布尔位运算结果进行多次的比较;多个选择器13与多个比较器12连接,选择器根据比较器12的输出进行选择,选出负载最小的计算单元。
例如,在一些示例中,比较器分为N级比较器,每一级比较器包括一个或多个比较器,N为整数且N≥2。选择器包括负载状态值选择器,负载状态值选择器分为N-1级负载状态值选择器,每一级负载状态值选择器包括一个或多个负载状态值选择器。其中,每一级比较器用于比较多个布尔位运算结果中的两个,并且每一级负载状态值选择器的选择信号是当前级比较器的输出,当前级负载状态值选择器输入与当前级比较器的输入相同,以选出对应负载最小的负载状态值。其中,当i=1时,第i级比较器的输入是多个布尔位运算结果中的任意两个;当1<i≤N并且i为整数时,第i级比较器的输入是一个布尔位运算结果和一个第i-1级负载状态值选择器的输出,或者,第i级比较器的输入是一个第j级负载状态值选择器的输出和一个第i-1级负载状态值选择器的输出,j为整数并且1≤j<i,或者,第i级比较器的输入是两个第i-1级负载状态值选择器的输出。
例如,在一些示例中,选择器还包括计算单元地址选择器,计算单元地址选择器分为N级计算单元地址选择器,每一级计算单元地址选择器包括一个或多个计算单元地址选择器。其中,每一级比较器的输出作为当前级计算单元地址选择器的选择信号,当前级计算单元地址选择器的输入是当前级比较器的输入所对应的计算单元的地址,用以选择得出对应负载最小的计算单元的地址;并且,第N级地址选择器的输出是负载最小的计算单元的地址。
为了便于理解,下面以一些具体示例详细描述资源管理器的目标计算单元选择模块的组成和原理。
(一)首先,以一个具有四个计算单元的GPGPU为例,图9为本公开一些实施例提供的用于四个计算单元的GPGPU的目标计算单元选择模块的电路示意图。如图9所示,根据GPGPU的四个计算单元,资源管理器设置四个负载状态寄存器,分别为负载状态寄存器0、负载状态寄存器1、负载状态寄存器2和负载状态寄存器3。目标计算单元选择模块包含四个按位与逻辑电路、三个比较器、两个负载状态值选择器和三个计算单元地址选择器。三个比较器分别为图9中的比较器901、比较器902和比较器903,两个负载状态值选择器分别为图9中的负载状态值选择器911和负载状态值选择器912,三个计算单元地址选择器分别为图9中的计算单元地址选择器921、计算单元地址选择器922和计算单元地址选择器923。其中,每个按位与逻辑电路的输入是相应的负载状态寄存器的负载权值和匹配结果,经过按位与运算各自得到一个布尔位运算结果。在图9的示例中,计算单元的个数为偶数个(即四个),对应的负载状态寄存器和布尔位运算结果也为偶数个(即四个),该示例是将每两个布尔位运算结果作为一组开始比较。
示例地,首先,将负载状态寄存器0和负载状态寄存器1对应的两个布尔位运算结果作为比较器901(第1级比较器)的两个输入进行比较,并将负载状态寄存器2和负载状态寄存器3对应的两个布尔位运算结果作为比较器902(第1级比较器)的两个输入进行比较。
然后,将比较器901的输出作为负载状态值选择器911(第1级负载状态值选择器)的选择信号,将比较器902(第1级比较器)的输出作为负载状态值选择器912(第1级负载状态值选择器)的选择信号,同时,将比较器901的输出还作为计算单元地址选择器921(第1级计算单元地址选择器)的选择信号,比较器902的输出还作为计算单元地址选择器922(第1级计算单元地址选择器)的选择信号。
其中,负载状态值选择器911的输入和比较器901的输入相同(即负载状态寄存器0和负载状态寄存器1对应的布尔位运算结果),同样地,负载状态值选择器912的输入和比较器902的输入相同(即负载状态寄存器2和负载状态寄存器3对应的布尔位运算结果);另外,计算单元地址选择器921的两个输入是比较器901的两个输入所对应的计算单元的地址(即负载状态寄存器0对应的计算单元的地址ID0和负载状态寄存器1对应的计算单元的地址ID1),计算单元地址选择器922的输入是比较器902的两个输入所对应的计算单元的地址(即负载状态寄存器2对应的计算单元的地址ID2和负载状态寄存器3对应的计算单元的地址ID3)。
因此,负载状态值选择器911和负载状态值选择器912各自输出负载权值较大的一个,并且,计算单元地址选择器921和计算单元地址选择器922各自输出负载权值较大对应的计算单元的地址。
再将负载状态值选择器911和负载状态值选择器912的输出作为下一级的比较器903(第2级比较器)的两个输入,而且计算单元地址选择器921和计算单元地址选择器922的输出作为下一级的计算单元地址选择器923(第2级计算单元地址选择器)的输入,比较器903的输出直接作为计算单元地址选择器923的选择信号,最终计算单元地址选择器923输出目标计算单元的地址(ID),即负载权值最大的计算单元的地址。
由上可知,图9示例中的比较器分为2级,负载状态寄存器分为1级,计算单元地址选择器分为2级。其中,图9示例中,比较器901(第1级比较器)和比较器902(第1级比较器)的输入都是两个布尔位运算结果,比较器903(第2级比较器)的输入是两个第1级负载状态值选择器的输出,即图9中负载状态值选择器911和负载状态值选择器912的输出。
(二)图10为本公开另一些实施例提供的用于四个计算单元的GPGPU的目标计算单元选择模块的电路示意图。图10与图9的区别主要在于,图10不再按照图9中的将每两个布尔位运算结果作为一组开始比较,而是先是将其中的两个布尔位运算结果作为一组进行比较,然后将经过第一级比较后的结果再与第三个布尔位运算结果进行第二级比较,再将经过第二级比较的结果又和第四个布尔位运算结果进行第三级比较,最后完成比较。
如图10所示,根据GPGPU的四个计算单元,资源管理器设置四个负载状态寄存器,分别为负载状态寄存器0、负载状态寄存器1、负载状态寄存器2和负载状态寄存器3。目标计算单元选择模块包含四个按位与逻辑电路、三个比较器、两个负载状态值选择器和三个计算单元地址选择器。三个比较器分别为图10中的比较器1001、比较器1002和比较器1003,两个负载状态值选择器分别为图10中的负载状态值选择器1011和负载状态值选择器1012,三个计算单元地址选择器分别为图10中的计算单元地址选择器1021、计算单元地址选择器1022和计算单元地址选择器1023。其中,每个按位与逻辑电路的输入是相应的负载状态寄存器的负载权值和匹配结果,经过按位与运算各自得到一个布尔位运算结果。在图10的示例中,计算单元的个数为偶数个(即四个),对应的负载状态寄存器和布尔位运算结果也为偶数个(即四个)。
示例地,首先,将负载状态寄存器0和负载状态寄存器1对应的两个布尔位运算结果作为比较器1001(第1级比较器)的两个输入进行比较。
然后,将比较器1001的输出作为负载状态值选择器1011(第1级负载状态值选择器)的选择信号,负载状态值选择器1011的输入和比较器1001的输入相同(即负载状态寄存器0和负载状态寄存器1对应的两个布尔位运算结果),同时,比较器1001的输出还作为计算单元地址选择器1021(第1级计算单元地址选择器)的选择信号,计算单元地址选择器1021的输入是比较器1001的两个输入所对应的计算单元的地址(即负载状态寄存器0对应的计算单元的地址ID0和负载状态寄存器1对应的计算单元的地址ID1)。
因此,负载状态值选择器1011输出负载权值较大的一个,且计算单元地址选择器1021输出负载权值较大对应的计算单元的地址。
再将负载状态值选择器1011的输出作为下一级的比较器1002(第2级比较器)的其中一个输入,而比较器1002的另一个输入是与负载状态寄存器2对应的一个布尔位运算结果。
又将比较器1002的输出作为负载状态值选择器1012(第2级负载状态值选择器)的选择信号,并且,负载状态值选择器1012的输入和比较器1002的输入相同,同时,比较器1002的输出还作为计算单元地址选择器1022(第2级计算单元地址选择器)的选择信号,计算单元地址选择器1022的两个输入分别是计算单元地址选择器1021的输出以及负载状态寄存器2对应的计算单元的地址ID2。
因此,负载状态值选择器1012输出负载权值较大的一个,且计算单元地址选择器1022输出负载权值较大对应的计算单元的地址。
另外,又将负载状态寄存器2的输出作为又下一级的比较器1003(第3级比较器)的其中一个输入,而比较器1003的另一个输入是负载状态寄存器3对应的一个布尔位运算结果。
最后,将比较器1003的输出信号直接作为计算单元地址选择器1023的选择信号,并且,计算单元地址选择器1023的两个输入分别是计算单元地址选择器1022的输出和负载状态寄存器3对应的计算单元的地址ID3,最终计算单元地址选择器1023输出目标计算单元的地址(ID),即负载权值最大的计算单元的地址。
由上可知,图10示例中的比较器分为3级,负载状态寄存器分为2级,计算单元地址选择器分为3级。在图10示例中,比较器1001(第1级比较器)的输入是两个布尔位运算结果,比较器1002(第2级比较器)的输入是一个布尔位运算结果和一个第1级负载状态值选择器(即负载状态值选择器1011)的输出,比较器1003(第3级比较器)的输入是一个布尔位运算结果和一个第2级负载状态值选择器(即负载状态值选择器1012)的输出。
(三)图11为本公开一些实施例提供的用于五个计算单元的GPGPU的目标计算单元选择模块的电路示意图。如图11所示,根据GPGPU的五个计算单元,资源管理器设置五个负载状态寄存器,分别为负载状态寄存器0、负载状态寄存器1、负载状态寄存器2、负载状态寄存器3和负载状态寄存器4。目标计算单元选择模块包含五个按位与逻辑电路、四个比较器、三个负载状态值选择器和四个计算单元地址选择器。四个比较器分别为图11中的比较器1101、比较器1102、比较器1103和比较器1104,三个负载状态值选择器分别为图11中的负载状态值选择器1111、负载状态值选择器1112和负载状态值选择器1113,四个计算单元地址选择器分别为图11中的计算单元地址选择器1121、计算单元地址选择器1122、计算单元地址选择器1123和计算单元地址选择器1124。其中,每个按位与逻辑电路的输入是相应的负载状态寄存器的负载权值和匹配结果,经过按位与运算各自得到一个布尔位运算结果。在图11的示例中,计算单元的个数为奇数个(即五个),对应的负载状态寄存器和布尔位运算结果也为奇数个(即五个),并且图11的示例是先将每两个布尔位运算结果作为一组开始比较,再将剩下的最后一个布尔位运算结果和已经过两级比较的结果进行比较,最终完成比较。
示例地,首先,将负载状态寄存器0和负载状态寄存器1对应的两个布尔位运算结果作为比较器1101(第1级比较器)的两个输入进行比较,并将负载状态寄存器2和负载状态寄存器3对应的两个布尔位运算结果作为比较器1102(第1级比较器)的两个输入进行比较。
然后,将比较器1101的输出作为负载状态值选择器1111(第1级负载状态值选择器)的选择信号,将比较器1102的输出作为负载状态值选择器1112(第1级负载状态值选择器)的选择信号,同时,比较器1101的输出还作为计算单元地址选择器1121(第1级计算单元地址选择器)的选择信号,比较器1102的输出还作为计算单元地址选择器1122(第1级计算单元地址选择器)的选择信号。
其中,负载状态值选择器1111的输入和比较器1101的输入相同(即负载状态寄存器0和负载状态寄存器1对应的两个布尔位运算结果),同样地,负载状态值选择器1112的输入和比较器1102的输入相同(负载状态寄存器2和负载状态寄存器3对应的两个布尔位运算结果),另外,计算单元地址选择器1121的输入是比较器1101的两个输入所对应的计算单元的地址(即负载状态寄存器0对应的计算单元的地址ID0和负载状态寄存器1对应的计算单元的地址ID1),计算单元地址选择器1122的输入是比较器1102的两个输入所对应的计算单元的地址(即负载状态寄存器2对应的计算单元的地址ID2和负载状态寄存器3对应的计算单元的地址ID3)。
因此,负载状态值选择器1111和负载状态值选择器1112各自输出负载权值较大的一个,并且,计算单元地址选择器1121和计算单元地址选择器1122各自输出负载权值较大对应的计算单元的地址。
再将负载状态值选择器1111和负载状态值选择器1112的输出作为下一级的比较器1103(第2级比较器)的两个输入,同样地,计算单元地址选择器1121和计算单元地址选择器1122的输出作为下一级的计算单元地址选择器1123(第2级计算单元地址选择器)的输入。
又将比较器1103的输出作为负载状态值选择器1113(第2级负载状态值选择器)的选择信号,负载状态值选择器1113的输入和比较器1103的输入相同(即负载状态值选择器1111和负载状态值选择器1112的输出),同时,比较器1103的输出还作为计算单元地址选择器1123(第2级计算单元地址选择器)的选择信号。
因此,负载状态值选择器1113输出负载权值较大的一个,并且,计算单元地址选择器1123输出负载权值较大对应的计算单元的地址。
最后,将负载状态值选择器1113的输出和负载状态寄存器4对应的一个布尔位运算结果作为比较器1104(第3级比较器)的两个输入,并且比较器1104的的输出直接作为计算单元地址选择器1124(第3级计算单元地址选择器)的选择信号,计算单元地址选择器1124的两个输入分别为计算单元地址选择器1123的输出和负载状态寄存器4对应的计算单元的地址ID4,使得最终计算单元地址选择器1124输出目标计算单元的地址(ID),即负载权值最大的计算单元的地址。
由上可知,图11示例中的比较器分为3级,负载状态寄存器分为2级,计算单元地址选择器分为3级。在图11示例中,比较器1101(第1级比较器)和比较器1102(第1级比较器)的输入是两个布尔位运算结果,比较器1103(第2级比较器)的输入是两个第1级负载状态值选择器的输出,即图11中负载状态值选择器1111和负载状态值选择器1112的输出。比较器1104(第3级比较器)的输入是一个布尔位运算结果和一个第2级负载状态值选择器(即负载状态值选择器1113)的输出。
(四)图12为本公开另一些实施例提供的用于五个计算单元的GPGPU的目标计算单元选择模块的电路示意图。图12与图11的主要区别在于:在图12的示例中,首先是将其中的两个布尔位运算结果作为一组进行比较,将经过第一次比较后的结果再与第三个布尔位运算结果进行第二次比较,然后将经过第二次比较的结果又和第四个布尔位运算结果进行第三次比较,最后将经过第三次比较的结果和第五个布尔位运算结果进行第四次比较,最终完成比较。该示例的详细内容可以参照上述实施例以及图10与图11的内容,本公开在此不做赘述。
(五)图13为本公开又一些实施例提供的用于五个计算单元的GPGPU的目标计算单元选择模块的电路示意图。如图13所示,根据GPGPU的五个计算单元,资源管理器设置五个负载状态寄存器,分别为负载状态寄存器0、负载状态寄存器1、负载状态寄存器2、负载状态寄存器3和负载状态寄存器4。目标计算单元选择模块包含五个按位与逻辑电路、四个比较器、三个负载状态值选择器和四个计算单元地址选择器。四个比较器分别为图13中的比较器1301、比较器1302、比较器1303和比较器1304,三个负载状态值选择器分别为图13中的负载状态值选择器1311、负载状态值选择器1312和负载状态值选择器1313,四个计算单元地址选择器分别为图13中的计算单元地址选择器1321、计算单元地址选择器1322、计算单元地址选择器1323和计算单元地址选择器1324。其中,每个按位与逻辑电路的输入是相应的负载状态寄存器的负载权值和匹配结果,经过按位与运算各自得到一个布尔位运算结果。在图13的示例中,计算单元的个数为奇数个(即五个),对应的负载状态寄存器和布尔位运算结果也为奇数个(即五个),并且图13的示例是先将两个布尔位运算结果作为一组开始比较,而且还将另外的两个布尔位运算结果作为一组开始比较,再将经过第一级比较的一个结果和第三个布尔位运算结果进行第二级的比较,再将经过第二级比较的结果和剩下的一个经过第一级比较的结果进行第三级的比较,最终完成比较。
示例地,首先,将负载状态寄存器0和负载状态寄存器1对应的两个布尔位运算结果作为比较器1301(第1级比较器)的两个输入进行比较。
然后,将比较器1301的输出作为负载状态值选择器1311(第1级负载状态值选择器)的选择信号,同时,将比较器1301的输出还作为计算单元地址选择器1321(第1级计算单元地址选择器)的选择信号;负载状态值选择器1311的输入和比较器1301的输入相同(即负载状态寄存器0和负载状态寄存器1对应的布尔位运算结果),计算单元地址选择器1321的两个输入是比较器1301的两个输入所对应的计算单元的地址(即负载状态寄存器0对应的计算单元的地址ID0和负载状态寄存器1对应的计算单元的地址ID1)。
因此,负载状态值选择器1311输出负载权值较大的一个,并且,计算单元地址选择器1321输出负载权值较大对应的计算单元的地址。
再将负载状态值选择器1311的输出作为下一级的比较器1302(第2级比较器)的其中一个输入,该比较器1302的另一个输入是负载状态寄存器2对应的布尔位运算结果;比较器1302的输出作为负载状态值选择器1312(第2级负载状态值选择器)的选择信号,并且,比较器1302的输出还作为计算单元地址选择器1322(第2级计算单元地址选择器)的选择信号;其中,负载状态值选择器1312的输入和比较器1302的输入相同,而且,计算单元地址选择器1322的输入分别是计算单元地址选择器1321的输出和负载状态寄存器2对应的计算单元的地址ID2。
所以,负载状态值选择器1312输出负载权值较大的一个,并且计算单元地址选择器1322输出负载权值较大对应的计算单元的地址。
另外,负载状态寄存器3和负载状态寄存器4对应的两个布尔位运算结果作为比较器1303(第1级比较器)的两个输入进行比较,该比较器1303(第1级比较器)的输出作为负载状态值选择器1313(第1级负载状态值选择器)的选择信号,比较器1303的输出还作为计算单元地址选择器1323(第1级计算单元地址选择器)的选择信号,其中,负载状态值选择器1313的输入和比较器1303的输入相同(即负载状态寄存器3和负载状态寄存器4对应的布尔位运算结果),计算单元地址选择器1323的两个输入是比较器1303的两个输入所对应的计算单元的地址(即负载状态寄存器3对应的计算单元的地址ID3和负载状态寄存器4对应的计算单元的地址ID4);因此,负载状态值选择器1313输出负载权值较大的一个,并且计算单元地址选择器1323输出负载权值较大对应的计算单元的地址。
最后,将负载状态值选择器1312的输出和负载状态值选择器1313的输出作为再下一级的比较器1304(第3级比较器)的输入,该比较器1304的输出直接作为计算单元地址选择器1324(第3级计算单元地址选择器)的选择信号,并且,计算单元地址选择器1324的输入是比较器1304的两个输入所对应的计算单元的地址,即分别是计算单元地址选择器1322的输出和计算单元地址选择器1323的输出;最终,计算单元地址选择器1324输出目标计算单元的地址(ID),即负载权值最大的计算单元的地址。
由上可知,图13的示例中的比较器分为3级,负载状态寄存器分为2级,计算单元地址选择器分为3级。在图13示例中,比较器1301(第1级比较器)和比较器1303(第1级比较器)的输入都是两个布尔位运算结果,比较器1302(第2级比较器)的输入是一个第1级负载状态值选择器(即负载状态值选择器1311)的输出和一个布尔位运算结果,比较器1304(第3级比较器)的输入是一个第1级负载状态值选择器(即负载状态值选择器1313)的输出和一个第2级负载状态值选择器(即负载状态值选择器1312)的输出。
本公开至少一个实施例的目标计算单元选择模块还不仅限于上述的举例的的电路,还包括适用于任何个数的计算单元的电路,并且电路可以采用任意方式进行比较与选择,例如每层级的比较方式可以一样或者不一样,各层级的比较方式可以任何选择等,具体情况可以根据实际需要自由调整,本公开实施例对此不做限制,也不做穷举和赘述。
值得说明的是,无论GPGPU包含奇数个计算单元还是偶数个计算单元(载状态寄存器的个数与计算单元相同),更进一步地说,无论计算单元的个数是该奇数中的4a+1,还是奇数中的4a+3,a为整数,无论计算单元的个数是该偶数中4b还是该偶数中的4b+2,b为整数,又比如,无论是将每两个布尔位运算结果作为一组开始比较,还是先将一组或多组的两个布尔位运算结果先进行比较然后将第一级比较结果再和另外的布尔位运算结果进行下一次层级比较,又或者是其他的任意方式,等等,只要本公开实施例中每级中的每个比较器是从两个输入中进行比较得到输出,那么最后一级比较器(即第N级比较器)都不再匹配一个负载状态值选择器,则负载状态值选择器选择器器的级数总是比比较器的层级要少一层级,并且最后一级比较器的个数是一个,因为该最后一级比较器的输出可直接作为最后一级计算单元地址选择器的选择信号,就可以选出对应负载最小的计算单元的地址。上述各种示例中,第i级比较器的定义是指:其输入至少包括一个经过了i-1次比较而被负载状态值选择器选出的负载状态值,其剩下的一个输入可以是经过了i-1次比较而被负载状态值选择器选出的负载状态值,也可以是未经过比较的布尔位运算结果,还可以是经过了少于i-1次比较而负载状态值选择器选出的负载状态值,本公开实施例对此不做限制。对应地,第i级负载状态值选择器的定义是指选择第i级比较器的输出作为选择信号的负载状态值选择器。
同样地,在上述示例中,无论GPGPU包含奇数个计算单元还是偶数个计算单元(载状态寄存器的个数与计算单元相同),更进一步地说,无论计算单元的个数是该奇数中的4a+1,还是奇数中的4a+3,a为整数,无论计算单元的个数是该偶数中4b还是该偶数中的4b+2,b为整数,又比如,无论是将每两个布尔位运算结果作为一组开始比较,还是先将一组或多组的两个布尔位运算结果先进行比较然后将第一级比较结果再和另外的布尔位运算结果进行下一次层级比较,又或者是其他的任意方式,等等,只要本公开实施例中每级中的每个比较器是从两个输入中进行比较得到输出,而且每一级比较器的输出作为当前级计算单元地址选择器的选择信号,并且当前级计算单元地址选择器的输入是当前级比较器的输入所对应的计算单元的地址,因此,每一级中每一个比较器都配备一个计算单元地址选择器,也意味着,计算单元地址选择器的层级数和比较器的层级数总是相同,而且每一级的比较器的数目和对应层级的计算单元地址选择器的数目也相同。对应地,第i级计算单元地址选择器的定义是指选择第i级比较器的输出作为选择信号的计算单元地址选择器。
值得注意的是,因为当前工作组的目标计算单元一定是可用计算单元的其中一个,若工作组在当前次的分配请求过程中,资源管理器没有找到一个用于当前工作组的可用计算单元时,即上述示例中每个计算单元的实时负载状态与当前工作组的大小之间的匹配结果均为零,也就是上述示例中当前的多个布尔位运算结果均为零,此时无需执行后续的负载状态值的比较与选择以及计算单元的地址选择过程,直接跳转到步骤S1,继续续请求,并等待计算单元的资源释放。此外,若当前工作组在当前次的分配请求过程中,资源管理器找到一个或多个用于当前工作组的可用计算单元时,即有一个或多个计算单元的实时负载状态与当前工作组的大小之间的匹配结果为1,也就是说当前有一个或多个布尔位运算结果为1,则正常执行后续的负载状态值的比较与选择以及计算单元的地址选择,以选出负载最小的计算单元作为目标计算单元。
对于上述示例涉及的步骤S2中包括的步骤S202和步骤203,值得注意的是,本公开实施例并不限制其执行顺序,其本质含义是指目标计算单元一定是可以使当前工作组运行的可用计算单元,即目标计算单元一定是各个可用计算单元的其中一个,例如在上述一些示例中,相当于是在这些可用计算单元中选出的一个负载最小的计算单元。
换句话说,本公开实施例包括但不限制于以下的内容:步骤S2中可以是先执行完从所有单元选择出全部的可用单元,然后只在这些选出的可用单元中比较选择出最终的目标计算单元;或者还可以是上述示例体现的在所有的计算单元中一并比较挑选出既能供当前工作组正常运行并且负载最小的计算单元作为目标计算单元。对此,本公开实施例不做限制和赘述。
有以下几点需要说明:
(1)本公开实施例附图只涉及到本公开实施例涉及到的结构,其他结构可参考通常设计。
(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。
Claims (22)
1.一种用于图形处理器的工作组的分配方法,所述图形处理器包括多个计算单元,所述分配方法包括:
实时请求将当前工作组分配到所述图形处理器的多个计算单元之一;
根据所述多个计算单元中每个的实时负载状态以及所述当前工作组的大小,在所述多个计算单元中选择用于所述当前工作组运行的目标计算单元;
将所述当前工作组分成多个线程粒度发送到所述目标计算单元,
其中,根据所述多个计算单元中每个的实时负载状态以及所述当前工作组的大小,在所述多个计算单元中选择用于所述当前工作组运行的目标计算单元,包括:
根据每个计算单元的实时负载状态与所述当前工作组的大小之间的匹配结果,实时获取用于所述当前工作组的至少一个可用计算单元,并从所述至少一个可用计算单元中选择一个作为所述当前工作组的所述目标计算单元,
其中,所述可用计算单元是指实时负载状态可供所述当前工作组运行的计算单元。
2.如权利要求1所述的工作组的分配方法,其中,
响应于所得到的每个计算单元的实时负载状态与所述当前工作组的大小之间的匹配结果而实时获取当前所有计算单元中不存在一个用于所述当前工作组的可用计算单元,继续请求将所述当前工作组分配到所述多个计算单元之一,直至根据每个计算单元的实时负载状态和所述当前工作组的大小获取用于所述当前工作组的至少一个可用计算单元。
3.如权利要求1所述的工作组的分配方法,其中,
从所述至少一个可用计算单元中选择一个作为所述当前工作组的所述目标计算单元,包括:
所述目标计算单元的负载小于所述至少一个可用计算单元中其他可用计算单元中的至少一个计算单元的负载。
4.如权利要求1所述的工作组的分配方法,其中,
从所述至少一个可用计算单元中选择一个作为所述当前工作组的所述目标计算单元,包括:
从所述至少一个可用计算单元中选择负载最小的计算单元作为所述目标计算单元。
5.如权利要求4所述的工作组的分配方法,还包括:
根据所述当前工作组的大小,更新所述目标计算单元的负载状态。
6.如权利要求5所述的工作组的分配方法,还包括:
在所述目标计算单元的至少一个线程粒度执行完内核程序后,对所述目标计算单元进行负载释放,并且更新所述目标计算单元的负载状态。
7.如权利要求6所述的工作组的分配方法,其中,
每个所述计算单元的实时负载状态以实时负载状态值分别被存储在负载状态寄存器中。
8.如权利要求7所述的工作组的分配方法,其中,
从所述至少一个可用计算单元中选择负载最小的计算单元作为所述目标计算单元,包括:
根据每个所述计算单元的实时负载状态与所述当前工作组的大小进行比较的匹配结果,选择出实时负载状态可供所述当前工作组运行的一个或多个计算单元,并在已选择出的所述一个或多个计算单元中选出负载最小的计算单元作为所述目标计算单元。
9.如权利要求8所述的工作组的分配方法,其中,
从所述至少一个可用计算单元中选择负载最小的计算单元作为所述目标计算单元,包括:
将每个所述计算单元的实时负载状态与所述当前工作组的大小之间的匹配结果,与每个所述计算单元的相应负载状态寄存器的实时负载状态值进行按位与运算,分别得到一布尔位运算结果,其中,所述匹配结果为0以表示不匹配,或1以表示能匹配,所述布尔位运算结果为零或负载状态寄存器的实时负载状态值;
将多个所述计算单元对应的多个布尔位运算结果,通过比较器和选择器进行多次比较和选择,选出所述负载最小的计算单元。
10.如权利要求7~9任一所述的工作组的分配方法,其中,
所述负载状态值包括负载权值,其中,所述负载状态寄存器所存储的计算单元的所述负载权值越大时,所述负载状态寄存器对应的计算单元的负载越小;
所述负载最小的计算单元是指负载权值最大的计算单元。
11.如权利要求10所述的工作组的分配方法,还包括:
在分发所述线程粒度时,实时地更新所述负载状态寄存器的负载权值,将所述负载状态寄存器的更新前的负载权值减去当前被分发的线程粒度的负载权值,得到更新后的负载权值;
在所述线程粒度执行完内核程序后,实时地更新所述负载状态寄存器的负载权值,将所述负载状态寄存器的更新前的负载权值加上当前已执行完内核程序的线程粒度的负载权值,得到更新后的负载权值。
12.如权利要求11所述的工作组的分配方法,其中,
每个所述线程粒度的负载权值被存储在权值存储模块中;
每个所述线程粒度的负载权值在其被分发时被写入所述权值存储模块;每个线程粒度的负载权值在其执行完内核程序后,根据线程粒度所在的计算单元的地址从所述权值存储模块中被读出。
13.一种图形处理器,包括:
多个计算单元;
资源管理器,接收将当前工作组待分配到所述图形处理器的所述多个计算单元之一的实时请求,根据所述多个计算单元中每个的实时负载状态以及所述当前工作组的大小,得到所述多个计算单元中每个的实时负载状态与所述当前工作组的大小之间的匹配结果,以在所述多个计算单元中选择用于所述当前工作组运行的目标计算单元,并将所述当前工作组分成多个线程粒度发送到所述目标计算单元,
其中,根据所述多个计算单元中每个的实时负载状态以及所述当前工作组的大小,得到所述多个计算单元中每个的实时负载状态与所述当前工作组的大小之间的匹配结果,以在所述多个计算单元中选择用于所述当前工作组运行的目标计算单元,包括:
根据每个计算单元的实时负载状态与所述当前工作组的大小之间的匹配结果,实时获取用于所述当前工作组的至少一个可用计算单元,并从所述至少一个可用计算单元中选择一个作为所述当前工作组的所述目标计算单元,
其中,所述可用计算单元是指实时负载状态可供所述当前工作组运行的计算单元。
14.如权利要求13所述的图形处理器,其中,
所述资源管理器包括多个负载状态寄存器,其中,所述负载状态寄存器配置为存储各计算单元的实时负载状态值。
15.如权利要求14所述的图形处理器,其中,
所述资源管理器还包括目标计算单元选择模块,其中,所述目标计算单元选择模块包括:
多个按位与逻辑电路,分别与所述多个负载状态寄存器连接,所述按位与逻辑电路配置为输入每个所述计算单元的实时负载状态与所述当前工作组的大小之间的匹配结果,以及每个所述计算单元的相应负载状态寄存器的实时负载状态值,分别输出一布尔位运算结果;其中,所述匹配结果为0以表示不匹配,或1以表示能匹配,所述布尔位运算结果为零或负载状态寄存器的当前负载状态值;
多个比较器,与所述多个按位与逻辑电路连接,所述比较器配置为根据多个所述计算单元对应的多个布尔位运算结果进行多次的比较;
多个选择器,与所述多个比较器连接,所述选择器配置为根据所述比较器的输出进行选择,选出负载最小的计算单元。
16.如权利要求15所述的图形处理器,其中,
所述比较器分为N级比较器,其中,每一级比较器包括一个或多个所述比较器,N为整数且N≥2;
所述选择器包括负载状态值选择器,其中,所述负载状态值选择器分为N-1级负载状态值选择器,每一级负载状态值选择器包括一个或多个所述负载状态值选择器;
所述每一级比较器用于比较所述多个布尔位运算结果中的两个,并且所述每一级负载状态值选择器的选择信号是当前级比较器的输出,以选出对应所述负载最小的负载状态值;其中,当前级负载状态值选择器输入与所述当前级比较器的输入相同。
17.如权利要求16所述的图形处理器,其中,
所述选择器还包括计算单元地址选择器,其中,所述计算单元地址选择器分为N级计算单元地址选择器,每一级计算单元地址选择器包括一个或多个所述计算单元地址选择器;
所述每一级比较器的输出作为当前级计算单元地址选择器的选择信号,并且所述当前级计算单元地址选择器的输入是当前级比较器的输入所对应的计算单元的地址,用以选择得出对应所述负载最小的计算单元的地址;其中,第N级地址选择器的输出是所述负载最小的计算单元的地址。
18.如权利要求17所述的图形处理器,其中,
当i=1时,第i级比较器的输入是所述多个布尔位运算结果中的任意两个;当1<i≤N并且i为整数时,第i级比较器的输入是一个布尔位运算结果和一个第i-1级负载状态值选择器的输出,或者,第i级比较器的输入是一个第j级负载状态值选择器的输出和一个第i-1级负载状态值选择器的输出,j为整数并且1≤j<i,或者,第i级比较器的输入是两个第i-1级负载状态值选择器的输出。
19.如权利要求16~18任一所述的图形处理器,其中,
所述负载状态值包括负载权值,其中,所述负载状态寄存器所存储的计算单元的所述负载权值越大时,所述负载状态寄存器对应的计算单元的负载越小;
所述每一级比较器的输出是其输入中数值大的一个,所述每一级负载状态值选择器的输出是其输入中数值大的一个,所述负载最小的计算单元是指负载权值最大的计算单元。
20.如权利要求13~18任一所述的图形处理器,其中,
所述资源管理器还包括线程粒度分发单元,其中,所述线程粒度分发单元配置为将所述当前工作组分成多个线程粒度发送到所述目标计算单元的分发单元。
21.如权利要求20所述的图形处理器,其中,
所述资源管理器还包括负载状态更新逻辑电路,其中,所述负载状态更新逻辑电路配置为与所述线程粒度分发单元和所述负载状态寄存器连接,以实时地更新所述负载状态寄存器的实时负载状态。
22.如权利要求21所述的图形处理器,其中,
所述负载状态更新逻辑电路包括:
权值存储模块,与所述线程粒度分发单元连接,其中,所述权值存储模块配置为在线程粒度被分发时,接收当前被分发的线程粒度的负载权值以进行存储,并且接收所述当前被分发的线程粒度所在的计算单元的地址;
加法器,与所述权值存储模块和所述负载状态寄存器连接,其中,所述加法器配置为在所述线程粒度被分发时,接收当前被分发的线程粒度的负载权值,并将所述负载状态寄存器的更新前的负载权值减去所述当前被分发的线程粒度的负载权值,得到更新后的负载权值;所述加法器还配置为在所述线程粒度执行完内核程序后根据所述线程粒度所在的计算单元的地址接收所述权值存储模块中存储的线程粒度的负载权值,并将所述负载状态寄存器的更新前的负载权值加上当前已执行完内核程序的线程粒度的负载权值,得到更新后的负载权值;其中,所述加法器将所述更新后的负载权值发送至所述负载状态寄存器,以更新所述负载状态寄存器的实时负载状态。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011211150.9A CN112256435B (zh) | 2020-11-03 | 2020-11-03 | 用于图形处理器的工作组的分配方法以及图形处理器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011211150.9A CN112256435B (zh) | 2020-11-03 | 2020-11-03 | 用于图形处理器的工作组的分配方法以及图形处理器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112256435A CN112256435A (zh) | 2021-01-22 |
CN112256435B true CN112256435B (zh) | 2023-05-05 |
Family
ID=74267688
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011211150.9A Active CN112256435B (zh) | 2020-11-03 | 2020-11-03 | 用于图形处理器的工作组的分配方法以及图形处理器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112256435B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113763503A (zh) * | 2021-01-29 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 图形生成方法、装置和计算机可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103309786A (zh) * | 2012-03-09 | 2013-09-18 | 辉达公司 | 用于在非可抢占式图形处理单元上交互调试的方法和装置 |
CN109240820A (zh) * | 2018-07-03 | 2019-01-18 | 深圳市商汤科技有限公司 | 图像处理任务的处理方法及装置、电子设备及存储介质 |
CN111078394A (zh) * | 2019-11-08 | 2020-04-28 | 苏州浪潮智能科技有限公司 | 一种gpu线程负载均衡方法与装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11301256B2 (en) * | 2014-08-22 | 2022-04-12 | Advanced Micro Devices, Inc. | System and method for page-conscious GPU instruction |
CN105243280B (zh) * | 2015-10-30 | 2018-02-02 | 西安电子科技大学 | 基于cpu与gpu混合异步并行方式的时域物理光学计算方法 |
US10521875B2 (en) * | 2017-04-01 | 2019-12-31 | Intel Corporation | Thread scheduling over compute blocks for power optimization |
-
2020
- 2020-11-03 CN CN202011211150.9A patent/CN112256435B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103309786A (zh) * | 2012-03-09 | 2013-09-18 | 辉达公司 | 用于在非可抢占式图形处理单元上交互调试的方法和装置 |
CN109240820A (zh) * | 2018-07-03 | 2019-01-18 | 深圳市商汤科技有限公司 | 图像处理任务的处理方法及装置、电子设备及存储介质 |
CN111078394A (zh) * | 2019-11-08 | 2020-04-28 | 苏州浪潮智能科技有限公司 | 一种gpu线程负载均衡方法与装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112256435A (zh) | 2021-01-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8127300B2 (en) | Hardware based dynamic load balancing of message passing interface tasks | |
US8949841B2 (en) | Approach for a configurable phase-based priority scheduler | |
CN112988423A (zh) | 消息消费、消息分发方法、装置、服务器及存储介质 | |
US20210049146A1 (en) | Reconfigurable distributed processing | |
US9747132B2 (en) | Multi-core processor using former-stage pipeline portions and latter-stage pipeline portions assigned based on decode results in former-stage pipeline portions | |
CN112445616B (zh) | 资源分配方法以及装置 | |
CN107329822B (zh) | 面向多源多核系统的基于超任务网的多核调度方法 | |
CN105027075A (zh) | 具有共享前端单元的处理核 | |
CN112256435B (zh) | 用于图形处理器的工作组的分配方法以及图形处理器 | |
US20180107524A1 (en) | Adaptive parallelism of task execution on machines with accelerators | |
Awatramani et al. | Increasing gpu throughput using kernel interleaved thread block scheduling | |
WO2023020010A1 (zh) | 一种运行进程的方法及相关设备 | |
CN115293340A (zh) | 数据同步处理方法、装置、计算设备和存储介质 | |
US8589942B2 (en) | Non-real time thread scheduling | |
US20160267621A1 (en) | Graphic processing system and method thereof | |
CN116302504B (zh) | 线程块的处理系统、方法及相关设备 | |
CN110245756B (zh) | 用于处理数据组的可编程器件及处理数据组的方法 | |
CN115775199B (zh) | 数据处理方法和装置、电子设备和计算机可读存储介质 | |
CN116795503A (zh) | 任务调度方法、任务调度装置、图形处理器及电子设备 | |
CN112306670A (zh) | 一种Docker虚拟化场景下的服务器集群优化方法 | |
CN114265676B (zh) | 集群资源调度方法、装置、设备及介质 | |
CN112463218B (zh) | 指令发射控制方法及电路、数据处理方法及电路 | |
US20130166887A1 (en) | Data processing apparatus and data processing method | |
US20220129327A1 (en) | Latency sensitive workload balancing | |
Meyer et al. | Pipel: exploiting resource reorganisation to optimise performance of pipeline-structured applications in the cloud |
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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20230413 Address after: 610216 building 4, No. 171, hele'er street, Chengdu hi tech Zone, China (Sichuan) pilot Free Trade Zone, Chengdu, Sichuan Applicant after: CHENGDU HAIGUANG MICROELECTRONICS TECHNOLOGY Co.,Ltd. Address before: 300392 North 2-204 industrial incubation-3-8, No.18 Haitai West Road, Huayuan Industrial Zone, Tianjin Applicant before: Haiguang Information Technology Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |