CN110308982A - 一种共享内存复用方法及装置 - Google Patents
一种共享内存复用方法及装置 Download PDFInfo
- Publication number
- CN110308982A CN110308982A CN201810228758.9A CN201810228758A CN110308982A CN 110308982 A CN110308982 A CN 110308982A CN 201810228758 A CN201810228758 A CN 201810228758A CN 110308982 A CN110308982 A CN 110308982A
- Authority
- CN
- China
- Prior art keywords
- processor
- active threads
- block
- sum
- thread
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
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/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
Abstract
本申请涉及信息技术领域,公开了一种共享内存复用方法及装置,方法的实现包括编译阶段和运行时阶段,其中编译阶段可以由CPU执行,也可以由GPU执行,主要是根据GPU的硬件结构参数,估算SM的活动线程块总数,以及各个活动线程块对应的任务队列;运行时阶段可以有GPU执行,主要是将所述活动线程块总数对应的多个活动线程块分发到各个SM上,并且并发执行每个活动线程块对应的任务队列,这样,一方面可以改善硬件调度器多次调度带来的开销大的问题,另一方面,GPU加载到一个活动线程块所占用的共享内存空间中的数据被所述活动线程块中的多个待执行的任务共享,提高了共享内存空间的复用率。
Description
技术领域
本申请涉及信息技术领域,尤其涉及一种共享内存复用方法及装置。
背景技术
从2012年开始,人工智能(AI)发展迅速,在语音识别和计算机视觉等应用领域均取得重大突破:图像识别和语音识别正确率均超过了人类水平。这些技术突破的背后离不开深度学习算法,图像处理器(Graphics Processing Units,GPU)则为这些算法提供强大算力。目前,大数据、深度学习等领域都十分依赖GPU来加速整个计算流程。
GPU可以作为协处理器,在接收CPU(central processing unit,中央处理器)的内核指令时,GPU会创建大量的线程来执行该内核指令。其中,GPU编程与CPU编程有着完全不同的方法论:CPU的缓存(如一级缓存L1、二级缓存L2、三级缓存L3)资源丰富且量大,运行在CPU上的程序的性能主要取决于如何高效使用各级缓存,其特点是如何利用缓存来隐藏数据和指令延迟;GPU只有L1、L2二级缓存且量小,但有大量的计算核心,一次能并发运行成千上万个线程,GPU编程特点是主要依靠大量线程切换来隐藏延迟。
图1是通用并行计算架构(Compute Unified Device Architecture,CUDA)编程的线程的逻辑组织方式,在编写CUDA内核函数(kernel)时,需定义线程块(BLOCK)及线程网格(GRID)的大小,BLOCK的大小是指每个BLOCK定义了多少个线程,GRID的大小是指定义了多少个线程块,图1中每个BLOCK定义了15个线程,GRID中有6个BLOCK。当内核执行时,BLOCK会被GPU的硬件调度器分发到流多处理器(Stream Multi-processors,SM)上执行,如图2所示,一种方式是平均分发到两个SM上执行,另一种方式是平均分发到四个SM上执行。由于CUDA编程是依靠大量的线程切换来隐藏延迟,编程人员通常的做法是根据计算任务规模来定义BLOCK的个数,当计算任务规模较大时,往往会申请大量的BLOCK,当一个BLOCK执行任务因延迟出现阻塞时,就会切换其他非阻塞的BLOCK在SM上执行,以这种方式来确保计算核心的占用率。因为GPU只有L1、L2二级缓存且量小,所以共享内存属稀缺资源,假设每个SM上的共享内存大小为48KB,若BLOCK申请共享内存的量为XKB,则SM上的活动线程块(活动线程块是指在一个时间片SM上可以并发执行的BLOCK)为48/X个(忽略寄存器等其他因素对SM的个数影响)。若BLOCK申请使用的共享内存量大,则一个时间片上SM能并发执行的线程块的个数将会很少,导致需要排队等待直到其他线程块执行完任务并释放所申请的共享内存,GPU的硬件调度器才会调度剩下的线程块到SM上执行,所以共享内存空间的复用率偏低。
发明内容
有鉴于此,本申请提供了一种共享内存复用方法及装置,用以提高共享内存空间的复用率。
第一方面,本申请实施例提供了一种共享内存复用方法,该方法由第一处理器和第二处理器执行,该方法包括:第一处理器首先获取第二处理器的硬件结构参数,然后根据硬件结构参数,确定第二处理器的内核函数中的活动线程块总数,这里的活动线程块总数指的是第二处理器的各个SM上能够并发执行的线程块,然后第一处理器根据待执行任务的数量和活动线程块总数,对待执行任务进行分配,确定每个活动线程块所对应的任务队列,紧接着,第一处理器向第二处理器发送指令,第二处理器接收到指令之后,就会将与活动线程块总数对应的多个活动线程块分发到各个SM上,并在单位时间片上并发执行每个活动线程块对应的任务队列。
因为第二处理器加载到一个活动线程块所占用的共享内存空间中的数据被所述活动线程块中的多个待执行的任务所复用,所以第二处理器中的各个SM中线程块所占用的共享内存空间得到复用,而且本申请实施例不再根据任务量定义活动线程块个数,而且根据GPU硬件结构参数,确定活动线程块个数,所以第二处理器的硬件处理器可以通过一次调度将所有的活动线程块分发到各个SM上,减少了硬件调度的次数,所以开销小。
在一种可能的设计中,第一处理器是CPU,第二处理器是GPU,也就是说CPU获取GPU的硬件结构参数,然后确定出活动线程块总数,以及根据待执行任务的数量和所述活动线程块总数,确定每个活动线程块对应的任务队列,继而GPU根据CPU的确定结果执行任务。
这样做是因为CPU可以感知GPU卡的硬件特性,利用感知的硬件结构参数估算GPU内核函数中的活动线程块总数,这个总数对应的活动线程块可以被GPU一次调度分发至各个SM上,减少了硬件调度次数。
其中,第一处理器根据硬件结构确定活动线程块总数的方法,在一种可能的设计中可以是:第一处理器可以根据所述第二处理器中的SM总数、SM上的共享内存空间大小、一个线程块申请的共享内存空间,确定所述第二处理器的内核函数中的活动线程块总数;在另一种可能的设计中可以是:第一处理器可以根据所述第二处理器中的SM总数、以及一个SM上寄存器文件大小,每个线程使用的寄存器个数,每个线程块中的线程的个数,确定所述第二处理器的内核函数中的活动线程块总数;在第三种可能的设计中可以是:第一处理器结合上述两种实施方式的确定结果,综合来确定最终第二处理器的内核函数中的活动线程块总数。例如,第一处理器取上述两种实施方式所分别确定的活动线程块总数中的最小值,作为最终第二处理器的内核函数中的活动线程块总数。
在一种可能的设计中,第一处理器可以先根据待执行任务的数量与所述活动线程块总数的比值,确定各个活动线程块的待执行的任务数量;然后依据各个活动线程块的待执行的任务数量,将所述待执行任务平均分配给各个活动线程块,其中每个活动线程块中的多个任务均构成一个任务队列。
之所以平均分配,一方面可以保证各个SM上的活动线程块数目大致一致,各个SM上的负载平均,另一方面可以有效地利用SM,提高运行速度。
在一种可能的设计中,所述第二处理器的硬件调度器将所述活动线程块总数对应的所有活动线程块一次分发到所述第二处理器的所有SM上。这样,第二处理器就可以依据第一处理器确定的活动线程块总数和活动线程块对应的任务队列,通过一次调度将所有的活动线程块分发到各个SM上。
在一种可能的设计中,针对任意一个活动线程块,所述第二处理器的软件调度器在所述单位时间片上从全局内存中加载一次数据至所述活动线程块所占用的共享内存空间中;然后在所述单位时间片上调度所述活动线程块中的各个线程依次并发执行所述活动线程块对应的任务队列中的每个任务;当所述任务队列中的所有任务执行完成后,软件调度器释放所述活动线程块所占用的共享内存空间。所以说任务队列的所有任务复用了同一个共享内存,提供了共享内存的复用率。
第二方面,本申请实施例还提供了一种共享内存复用方法,该方法由一个处理器执行,该方法包括:处理器获取硬件结构参数,并根据所述硬件结构参数,确定内核函数中的活动线程块总数,然后处理器根据待执行任务的数量和所述活动线程块总数,确定每个活动线程块对应的任务队列,最终依据确定结果,将所述活动线程块总数对应的多个活动线程块分发到各个SM上,并在单位时间片上并发执行每个活动线程块对应的任务队列。一般地,该处理器为GPU,这样GPU加载到一个活动线程块所占用的共享内存空间中的数据被所述活动线程块中的多个待执行的任务所复用,所以GPU中的各个SM中线程块所占用的共享内存空间得到复用,而且本申请实施例不再根据任务量定义活动线程块个数,而且根据GPU硬件结构参数,确定活动线程块个数,所以第二处理器的硬件处理器可以通过一次调度将所有的活动线程块分发到各个SM上,减少了硬件调度的次数,所以开销小。
在其它可能的设计中,在第一方面中由第一处理器确定活动线程块总数,以及任务队列的过程均可以由本实施例中的GPU来执行,第二方面中由第二处理器分发活动线程块和执行任务的过程均可以由本实施例中的GPU来执行,此处不再赘述。
第三方面,本申请实施例还提供了一种计算机系统,该计算机系统包括第一处理器和第二处理器,第一处理器具有实现上述第一方面方法示例中第一处理器所执行的方法行为的功能,第二处理器具有实现上述第二方面方法示例中第二处理器所执行的方法行为的功能,此处不再赘述。
第四方面,本申请实施例还提供了一种装置,该装置具有实现上述第二方面方法示例中处理器行为的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或所述软件包括一个或多个与上述功能相对应的模块。
在一个可能的设计中,所述装置的结构中包括确定单元、处理单元,其中,确定单元,用于根据处理器中的硬件结构参数,确定所述处理器的内核函数中的活动线程块总数,并根据待执行任务的数量和所述活动线程块总数,确定每个活动线程块对应的任务队列。
处理单元,用于将所述活动线程块总数对应的多个活动线程块分发到各个SM上,并且并发执行每个活动线程块对应的任务队列,其中,所述处理器加载到一个活动线程块所占用的共享内存空间中的数据被所述活动线程块中的多个待执行的任务复用。
在一种可能的设计中,确定单元具体用于:根据所述处理器中的SM总数、SM上的共享内存空间大小、一个线程块申请的共享内存空间,确定所述处理器的内核函数中的活动线程块总数;或者是根据所述处理器中的SM总数、以及一个SM上寄存器文件大小,每个线程使用的寄存器个数,每个线程块中的线程的个数,确定所述处理器的内核函数中的活动线程块总数;或者是上述两种确定方式相结合。因这些单元可以执行上述第二方面方法示例中相应功能,具体参见方法示例中的详细描述,此处不做赘述。
在一种可能的设计中,确定单元具体用于:根据待执行任务的数量与所述活动线程块总数的比值,确定各个活动线程块的待执行的任务数量;并依据各个活动线程块的待执行的任务数量,将所述待执行任务分配给各个活动线程块,其中每个活动线程块中的多个任务构成一个任务队列。
在一种可能的设计中,处理单元具体用于:将所述活动线程块总数对应的所有活动线程块一次分发到所述GPU的所有SM上。
在一种可能的设计中,处理单元具体用于:针对任意一个活动线程块,在所述单位时间片上从全局内存中加载一次数据至所述活动线程块所占用的共享内存空间中;
在所述单位时间片上调度所述活动线程块中的各个线程依次并发执行所述活动线程块对应的任务队列中的每个任务;当所述任务队列中的所有任务执行完成后,释放所述活动线程块所占用的共享内存空间。
第五方面,本申请实施例提供了一种计算机,包括执行上述第二方面示例方法流程的处理器。
第六方面,本申请实施例中还提供一种计算机存储介质,该存储介质中存储软件程序,该软件程序在被第一处理器和第二处理器读取并执行时可实现第一方面或上述第一方面的任意一种设计提供的方法。
第七方面,本申请还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面或各种可能的实现方式所述的共享内存复用方法。
第八方面,本申请实施例中还提供一种计算机存储介质,该存储介质中存储软件程序,该软件程序在GPU读取并执行时可实现第二方面或上述第二方面的任意一种设计提供的方法。
第九方面,本申请还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第二方面或各种可能的实现方式所述的共享内存复用方法。
本申请实施例提供的共享内存复用方法不再根据待执行任务量,而是依据处理器的硬件结构参数确定活动线程块总数,这样确定出来的活动线程块可以通过少数几次甚至一次的调度分发,被完全分发至各个SM上,另外每个活动线程块中的任务队列是根据待执行任务量和活动线程块总数平均分配的,任务队列中可能存在多个任务,多个任务可以共享该活动线程块所申请的共享内存空间,所以提高了共享内存的复用率。
附图说明
图1为现有技术提供的一种CUDA编程的线程逻辑组织方式流程图;
图2为现有技术提供的一种GPU线程块调度逻辑示意图一;
图3a为本申请实施例提供的一种服务器的系统架构示意图;
图3b为本申请实施例提供的一种GPU系统硬件结构示意图;
图3c为本申请实施例提供的一种GPU硬件结构示意图;
图4为本申请实施例提供的一种计算机的结构示意图;
图5为现有技术提供的一种GPU线程块调度示意图二;
图6为本申请实施例提供的一种GPU线程块调度逻辑示意图;
图7为本申请实施例提供的一种由第一处理器和第二处理器执行的共享内存复用方法示意图;
图8为本申请实施例提供的一种由一个处理器执行的共享内存复用方法示意图;
图9为本申请实施例提供的一种装置结构示意图。
具体实施方式
首先,对本申请中的部分用语进行解释说明,以便使本领域技术人员理解。
1、内核指令,是指需要由GPU执行的一段指令代码,通常GPU在执行内核指令时会创建线程来执行所述内核指令。
2、线程,GPU在需要执行内核指令时,会创建多个线程一同执行内核指令,每个线程基于所述线程对应的数据来执行内核指令。
3、共享内存(Shared memory),是不同于L1、L2二级缓存的另外一种片上缓存,共享内存具备如下特性,因此在CUDA编程中被广泛使用。
1)能提供高带宽、低延迟的数据读、写访存操作;
2)非连续访问不影响性能;
3)线程块内的线程可通过共享内存实现通信;
4)易用性强,在程序中可定义共享内存数组(如__shared__float arr[10])。
4、活动线程块,指在同一个时间片能够在各个SM上并发执行的线程块。
5、多个,指两个或两个以上。
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述。
本申请实施例提供的共享内存复用方法,可以适用于如图3a所示的计算机的系统架构中,该系统架构包括CPU110、GPU120,其中所述CPU110中包含有第一传输模块111、编译模块112、存储器113。
编译模块112用于在所述CPU确定需要执行内核指令时,对存储在存储器113中的内核指令进行编译,并将编译后的内核指令传输至第一传输模块111;第一传输模块111用于将编译模块112处理后的内核指令及执行所述内核指令所需数据传输给GPU120,以使GPU120将数据保存在内存空间中,以使所述GPU120后续建立线程,使线程读取内存空间中存储的所述数据,以执行所述内核指令。
存储器113用于存储数据和指令,例如存储器113可以用于存储内核指令以及执行内核指令所需数据。
所述GPU120中包含有第二传输模块121、处理模块122、存储器123。
所述第二传输模块121用于接收所述第一传输模块111传输的内核指令和所述内核指令对应的数据,并将所述内核指令传输至处理模块122,将所述内核指令对应的数据传输至存储器123;所述处理模块122用于调用存储器123中存储的数据执行内核指令;所述存储器123中包含有与各个线程对应的内存空间。
下面结合图3a所示的计算机的系统架构,对本申请实施例的共享内存复用方法进行说明。
一种实施方式是,处理模块122调用存储器123中存储的数据执行内核指令,即在时间片(指一段时长)上创建多个用于执行该内核指令的线程。另外,处理模块122根据GPU的硬件结构参数,确定出活动线程块总数和每个活动线程块对应的任务队列,然后根据确定结果,然后将创建的线程分配至活动线程块总数对应的多个活动线程块中,并将所有的活动线程块分发到GPU的各个SM上,紧接着各个SM在该时间片上并发执行活动线程块对应的任务队列,其中,活动线程块的各个线程并发执行任务队列中的同一任务。处理模块122会将线程的执行结果传输至第二传输模块121,由第二传输模块121将执行结果返回至CPU110。
另一种实施方式是,编译模块112通过第一传输模块111获取GPU的硬件结构参数,再根据GPU的硬件结构参数,确定出活动线程块总数和每个活动线程块对应的任务队列,紧接着将确定的结果通过编译结果文件的形式存储至存储器123。编译模块112通过第一传输模块111将包括编译结果文件的路径信息的内核指令传输至第二传输模块121,GPU120的处理模块122根据第二传输模块121接收的内核指令,获取编译结果文件,并从编译结果文件中获取每个活动线程块对应的任务队列信息,然后各个SM在同一个时间片上调度每活动线程块中的各个线程,依次并发执行任务队列中的同一个任务,当所述任务队列中的所有任务执行完成后,释放该活动线程块所占用的共享内存空间。
本申请实施例进一步提供GPU120的硬件结构,其中,GPU的硬件结构与CPU的硬件结构不同,图3b显示了一个位于PCI-E总线另一侧的多GPU系统。从图中可以看出,GPU的硬件由以下几个关键模块组成:内存(全局内存、常量内存、共享内存)、流多处理器、流处理器(Stream Processor,SP),值得说明的是,GPU实际上是一个SM的阵列,每个SM包含N个核(G80和GT200中有8个核,费米架构中有32~48个核,开普勒架构中至少再增加8个核,如图3c所示)。一个GPU设备中包含一个或多个SM,这是处理器具有可扩展性的关键因素。如果向设备中增加更多的SM,GPU就可以在同一时刻处理更多的任务,或者对于同一任务,如果有足够的并行性的话,GPU可以更快地完成它。
其中,每个SM都是由不同数量的一些关键部件组成,为了简单起见,没有在图中画出。最重要的部分是每个SM中有若干个SP,图3c中显示的是8个SP,在费米架构中增加至32~48个,在开普勒架构中增加到192个。每个SM都需要访问一个所谓的寄存器文件(register File),这是一组能够以与SP相同速度工作的存储单元,所以访问这组存储单元几乎不需要任何等待时间。不同型号GPU中,寄存器文件的大小可能是不同的。它用来存储SP上运行的线程内部活跃的寄存器。另外,还有一个只供每个SM内部访问的共享内存(shared memory),这可以用作“程序可控的”高速缓存。对于纹理内存(texture memory)、常量内存(constant memory)和全局内存(global memory),每一个SM都分别设置有独立访问它们的总线,其中,全局内存的特点是所有线程都可以访问,没有缓存。
另外,每个SM还有两个甚至更多的专用单元(Special-Purpose Unit,SPU),SPU专门执行诸如高速的24位正弦函数/余弦函数/指数函数操作等类似的特殊硬件指令。
另外,本发明实例提供的一种共享内存复用方法,也同样适用于如图2所示的计算机,下述先简单介绍计算机的具体结构组成。
参考图4所示,为本申请实施例应用的计算机的硬件结构示意图。如图4所示,计算机200包括显示设备210、处理器220以及存储器230。存储器230可用于存储软件程序以及数据,处理器220通过运行存储在存储器230的软件程序以及数据,从而执行计算机200的各种功能应用以及数据处理。存储器230可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统信息、至少一个功能所需的应用程序(比如数值计算功能等)等;存储数据区可存储根据计算机200的使用所创建的数据(比如音频数据、图像数据等)等。此外,存储器230可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。处理器220是计算机200的控制中心,利用各种接口和线路连接整个计算机的各个部分,通过运行或执行存储在存储器130内的软件程序和/或数据,执行计算机200的各种功能和处理数据,从而对计算机进行整体监控。处理器220可以包括一个或多个通用处理器,还可包括一个或多个GPU,用于执行相关操作,以实现本申请实施例所提供的技术方案。
计算机200中还包括用于拍摄图像或视频的摄像头260。摄像头260可以是普通摄像头,也可以是对焦摄像头。
计算机200还可以包括输入设备240,用于接收输入的数字信息、字符信息或接触式触摸操作/非接触式手势,以及产生与计算机200的用户设置以及功能控制有关的信号输入等。
显示设备210,包括的显示面板211,用于显示由用户输入的信息或提供给用户的信息以及计算机200的各种菜单界面等,可选的,显示面板可以采用液晶显示器(liquidcrystal display,LCD)或OLED(organic light-emitting diode,有机发光二极管)等形式来配置显示面板211。
除以上之外,计算机200还可以包括用于给其他模块供电的电源250。计算机200还可以包括一个或多个传感器270,例如图像传感器、红外传感器、激光传感器等。计算机200还可以包括无线射频(radio frequency,RF)电路280,用于与无线网络设备进行网络通信,还可以包括WiFi模块290,用于与其他设备进行WiFi通信,获取其他设备传输的图像或者数据等。
现有技术通常根据任务量定义m个BLOCK,这m个BLOCK组成线程块队列(BLOCKQueue),如图5所示。线程块队列中的BLOCK等待GPU的硬件调度器来调度到SM上执行。假设根据BLOCK申请的共享内存大小,计算出每个SM的活动BLOCK个数为J,则每时间片内一个SM上最多能并发执行J个BLOCK。若GPU卡有15个SM,则在该时间片内共有15*J个BLOCK并发执行,线程块队列中剩下的BLOCK则闲置等待,直到15个SM上所有BLOCK执行完计算任务并释放共享内存,然后硬件调度器才会从线程块队列中调度若干个BLOCK到SM上执行。
可见,若BLOCK申请使用的共享内存量大,则一个时间片上一个SM能并发执行的线程块的个数J将会很小,导致上述定义的大量BLOCK闲置等待,硬件调度器需要多次调度,才会把所有BLOCK分发到SM上执行。此外,每个BLOCK在SM上执行时,都要从片下的全局内存(Global Memory)加载数据到片上的共享内存,当定义的BLOCK个数越多,数据加载次数就越多,延迟越大。这种情形下,硬件调度器的调度开销和加载数据的开销导致GPU程序性能不高。
为此,本申请提供一种共享内存复用方法及装置,用以解决共享内存稀缺导致硬件调度器多次调度带来的开销大的问题、硬件调度中共享内存复用率低的问题,以及硬件调度中加载数据到共享内存的次数多的问题。其中,方法和设备是基于同一发明构思的,由于方法及设备解决问题的原理相似,因此设备与方法的实施可以相互参见,重复之处不再赘述。
具体来说,如图6所示,本申请实施例提供的共享内存复用的实现是由编译阶段和运行时阶段共同完成:
第一,编译阶段:
步骤a,估算SM的活动线程块总数。
首先,在编译阶段会获取GPU卡硬件特性,例如SM个数num_SM为15个、每个SM的共享内存总量为48KB、每个BLOCK申请的共享内存数量为XKB。那么该SM上单位时间片上的活动线程块数J等于48KB/XKB个,这15个SM在该单位时间片上共有15×J个活动线程块。
步骤b,计算各个活动线程块的任务队列的深度L(各个活动线程块的线程数)。
假设任务量为m,也就是GPU在该单位时间片上创建的用于执行内核指令的线程为m个,当线程块个数变为num_SM×J后,每个BLOCK的线程数变为m/num_SM×J,即每个活动线程块中任务队列的队列深度L为m/num_SM×J,如图7中BLOCK的Wq任务队列包括L个任务。
第二,运行时阶段
步骤c,当GPU内核函数(Kernel)开始执行时,GPU的硬件调度器将在编译阶段估算的num_SM×J个活动线程块分发到GPU卡的所有SM上,即通过一次调度即将任务队列中的num_SM×J个活动线程块分发完毕。
步骤d,硬件调度完成后,每个SM上都有J个活动线程块在并发执行,如图6所示,每个活动线程块依次执行各自任务队列中的任务。
需要说明的是,上述编译阶段可以由CPU执行,也可以由GPU执行。
第一种场景,当上述编译阶段由CPU执行时,则本申请实施例提供的一种共享内存复用方法由CPU和GPU共同实现。
具体来说,以所述计算机200为例进行描述,但是并不限制本发明实施例应用到其他类型的设备中。参阅图7所示,本申请实施例提供的一种共享内存复用方法的具体流程可以包括:
步骤301,第一处理器获取第二处理器的硬件结构参数,并根据所述第二处理器的硬件结构参数,确定所述第二处理器的内核函数中的活动线程块总数。
步骤302,第一处理器根据待执行任务的数量和所述活动线程块总数,确定每个活动线程块对应的任务队列,所述任务队列中包括多个待执行的任务。
步骤303,第一处理器向第二处理器发送指令,指令包括所述活动线程块总数和所述每个活动线程块对应的任务队列。
步骤304,第二处理器根据所述指令,将所述活动线程块总数对应的多个活动线程块分发到各个SM上,并且并发执行每个活动线程块对应的任务队列,其中,所述第二处理器加载到一个活动线程块所占用的共享内存空间中的数据被所述活动线程块中的多个待执行的任务复用。
结合图3a来说,第一处理器可以指代CPU,第二处理器可以指代GPU,即本申请实施例适用于于CPU和GPU相结合的服务器或者是计算机,CPU生成关于活动线程块总数的编译结果,而GPU基于这一编译结果执行任务。
其中,GPU的硬件结构参数主要指的是GPU中的流多处理器SM总数、SM上的共享内存空间大小、一个线程块申请的共享内存空间、以及一个SM上寄存器文件大小,每个线程使用的寄存器个数,每个线程块中的线程的个数等参数信息,例如GPU中有15个SM,一个SM占用的共享内存空间为48KB等。
需要说明的是,GPU在并发执行每个活动线程块对应的任务队列的过程中,该线程块先加载数据到共享内存,然后依次并发执行该线程块对应的任务队列中的任务,任务的执行过程中只需从共享内存中读取数据,即线程块只需加载一次数据到共享内存,也就是加载到一个活动线程块所占用的共享内存空间中的数据被所述活动线程块中的多个待执行的任务共享,从而实现了共享内存复用的目的。当任务队列中的所有任务执行完毕后,线程块中的线程才会退出,该活动线程块所占用的共享内存空间才会被释放掉。
具体来说,本申请实施例不再根据任务量定义活动线程块个数,而且根据GPU硬件结构参数,确定活动线程块个数。因GPU硬件结构参数不同,确定活动线程块个数的方式也存在不同。
方式一:CPU可以根据所述GPU中的流多处理器SM总数、SM上的共享内存空间大小、一个线程块申请的共享内存空间,确定所述GPU的内核函数中的活动线程块总数。
例如GPU中有15个SM,一个SM占用的共享内存空间为48KB,假设一个BLOCK申请的共享内存大小为X KB,那么该SM上单位时间片上的活动线程块为48KB/XKB个,这个15个SM在该单位时间片上共有15×48KB/XKB个活动线程块。
方式二:CPU可以根据所述GPU中的流多处理器SM总数、以及一个SM上寄存器文件大小,每个线程使用的寄存器个数,每个线程块中的线程的个数,确定所述GPU的内核函数中的活动线程块总数。
例如,一个SM上有5000KB大小的寄存器文件,每个线程使用的寄存器个数为10个,线程块中的线程的个数为10个,那么该SM上单位时间片上的活动线程块为5000/10×10,这个15个SM在该单位时间片上共有15*50个活动线程块。
方式三:CPU可以结合方式一和方式二,取两种计算结果的最小值,作为最终的GPU的内核函数活动线程块总数。
具体来说,根据公式一确定所述GPU的内核函数中的活动线程块总数,所述公式一为:
Z=min(S/X×K,R/h×BS×K)……公式[1]
其中,Z表示活动线程块总数,K表示所述GPU中的流多处理器总数,S表示一个SM占用的共享内存空间,X表示一个BLOCK申请的共享内存大小,R表示一个SM上寄存器文件大小,h表示每个线程使用的寄存器个数,BS表示线程块中的线程的个数。
这样,当确定出活动线程块个数之后,CPU再将全部的任务量平均分配到各个活动线程块中,也就是CPU根据待执行任务的数量与所述活动线程块总数的比值,确定各个活动线程块的待执行的任务数量;然后依据各个活动线程块的待执行的任务数量,将所述待执行任务分配给各个活动线程块,这样每个活动线程块中的多个任务构成一个任务队列。因为活动线程块总数是根据GPU的硬件特性确定的,所以GPU的硬件调度器就可以通过少数几次,甚至是一次调度就可以将所有的线程块分发到各个SM上,而且GPU的软件调度器仅需要一次数据加载,即在所述单位时间片上从全局内存中加载一次数据至所述活动线程块所占用的共享内存空间中;然后在所述单位时间片上调度所述活动线程块中的各个线程依次并发执行所述活动线程块对应的任务队列中的每个任务,当所述任务队列中的所有任务执行完成后,软件调度器释放所述活动线程块所占用的共享内存空间。因此就可以将共享内存中的数据加载到该活动线程块所占用的共享内存空间中,减少了硬件调度开销,这样每个活动线程块所加载到共享内存数组的数据可以供该BLOCK的每个线程使用,减少了数据加载次数,提高了共享内存的复用率。
第二种场景,当上述编译阶段由GPU执行时,则本申请实施例提供的一种共享内存复用方法由GPU单独实现。
这种场景下,参见图8所示,本申请实施例提供的一种共享内存复用方法的具体流程可以包括:
步骤401,处理器根据所述硬件结构参数,确定内核函数中的活动线程块总数;
步骤402,处理器根据待执行任务的数量和所述活动线程块总数,确定每个活动线程块对应的任务队列;
步骤403,处理器将所述活动线程块总数对应的多个活动线程块分发到各个SM上,并在单位时间片上并发执行每个活动线程块对应的任务队列。
需要说明的是,本实施例中的处理器可以指代GPU。也就是说,GPU获取自身硬件结构参数,然后根据待执行任务的数量和所述活动线程块总数,确定每个活动线程块对应的任务队列,最终依据确定的结果执行任务。
在一种实施方法下,因GPU硬件结构参数不同,所以确定活动线程块个数的方式也存在不同,具体确定方式可以参见上述方式一、方式二、至方式三,此处不再赘述。
在本实施例中,除了CPU的动作均由GPU执行之外,在本申请实施例中,共享内存复用可能实现方法可以参见上文列举的各种实施方式,在此不再赘述。
综上,本申请实施例本质上解决了使用共享内存的GPU计算场景的性能瓶颈问题,通过编译阶段确定活动线程块总数(与计算任务规模无关)和每个活动线程块的任务队列的深度,化硬件调度为软件调度,减少了硬件调度开销,增加了调度的灵活性。同时软件调度方式实现了活动线程块的所有任务队列共享共享内存中的数据,即一次数据加载,任务队列中L个任务复用,极大地减少了数据加载次数且提高了数据复用率。所以说本申请实施例不是采用内存优化技术来改进访存效率,而是从GPU计算的硬件特点出发,整体考虑内核计算过程,从共享内存的数据加载次数及复用率的角度出发,提出了化硬件调度为软件调度的策略,减少了数据加载次数和提高了复用率,从而提升了性能。
需要说明的是,本申请实施例可以应用于“以图搜图”项目中相关GPU内核计算以及人脸检索项目中的哈西(Hash)算法中汉明距离计算以及OPQ算法中的查表计算距离;而且本申请实施例并不局限于“以图搜图”和人脸检索相关的计算,在深度学习卷积计算中同样有效。
针对上述方法流程,本申请提供一种计算机系统,该计算机系统包括第一处理器和第二处理器,第一处理器和第二处理器的具体执行内容可参照上述图7对应方法流程,本申请实施中,该计算机系统包括第一处理器和第二处理器可以执行上述第一方面图7示例的方法流程中相应功能,具体参见方法示例中的详细描述,此处不做赘述。
针对上述第一处理器执行的共享内存复用方法流程,本申请提供一种装置,该装置的具体执行内容可参照上述图8示例的方法流程,图9为本申请提供的一种装置的结构示意图,所述装置包括:确定单元501、处理单元502。
确定单元501,用于根据GPU中的硬件结构参数,确定所述GPU的内核函数中的活动线程块总数,并根据待执行任务的数量和所述活动线程块总数,确定每个活动线程块对应的任务队列。
处理单元502,用于将所述活动线程块总数对应的多个活动线程块分发到各个SM上。
也就是说,确定单元501可以用于执行上述图8流程中步骤401和步骤402,处理单元502可以用于执行上述图8流程中的步骤403,另外,确定单元501和处理单元502也可以对应图3a中处理模块122。
本申请实施中,这些单元可以执行上述图8中由GPU执行的方法示例中相应功能,具体参见方法示例中的详细描述,此处不做赘述。
本申请可以根据上述方法示例对第一处理器进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
本申请实施例还提供一种芯片,所述芯片与存储器相连,所述存储器中存储有计算机程序,所述芯片用于读取并执行所述存储器中存储的计算机程序,以实现如图7所示的流程中的第一处理器所执行的编译过程,或者以实现如图8所示的流程中的GPU所执行的运行过程、或者图8所示的流程中的GPU执行的编译过程和运行过程。
本申请实施例还提供了一种计算机存储介质,储存程序代码,存储的程序代码在被处理器执行时用于实现本申请中如图7所示的流程中的第一处理器和第二处理器的方法。
本申请实施例还提供了一种计算机存储介质,储存程序代码。存储的程序代码在被处理器执行时用于实现本申请中如图8所示的流程中的GPU的方法。
本申请实施例还提供了计算机程序产品。该计算机程序产品包括计算机软件指令,该计算机软件指令可通过处理器进行加载来实现本申请中如图7所示的流程中的第一处理器和第二处理器所执行的方法。
本申请实施例还提供了计算机程序产品。该计算机程序产品包括计算机软件指令,该计算机软件指令可通过处理器进行加载来实现本申请中如图8所示的流程中的GPU所执行的方法。
尽管在此结合各实施例对本申请进行了描述,然而,在实施所要求保护的本申请过程中,本领域技术人员通过查看所述附图、公开内容、以及所附权利要求书,可理解并实现所述公开实施例的其他变化。在权利要求中,“包括”(comprising)一词不排除其他组成部分或步骤,“一”或“一个”不排除多个的情况。单个处理器或其他单元可以实现权利要求中列举的若干项功能。相互不同的从属权利要求中记载了某些措施,但这并不表示这些措施不能组合起来产生良好的效果。
本领域技术人员应明白,本申请的实施例可提供为方法、装置(设备)、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式,这里将它们都统称为“模块”或“系统”。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。计算机程序存储/分布在合适的介质中,与其它硬件一起提供或作为硬件的一部分,也可以采用其他分布形式,如通过Internet或其它有线或无线电信系统。
本申请是参照本申请实施例的方法、装置(设备)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管结合具体特征及其实施例对本申请进行了描述,显而易见的,在不脱离本申请的精神和范围的情况下,可对其进行各种修改和组合。相应地,本说明书和附图仅仅是所附权利要求所界定的本申请的示例性说明,且视为已覆盖本申请范围内的任意和所有修改、变化、组合或等同物。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (19)
1.一种共享内存复用方法,其特征在于,该方法包括:
第一处理器获取第二处理器的硬件结构参数,并根据所述硬件结构参数,确定所述第二处理器的内核函数中的活动线程块总数,所述活动线程块是指所述第二处理器中的各个流多处理器上能够并发执行的线程块;
所述第一处理器根据待执行任务的数量和所述活动线程块总数,确定每个活动线程块对应的任务队列,所述任务队列中包括多个待执行的任务;
所述第一处理器向所述第二处理器发送指令,所述指令包括所述活动线程块总数和所述每个活动线程块对应的任务队列;
所述第二处理器根据所述指令,将所述活动线程块总数对应的多个活动线程块分发到各个SM上,并且并发执行每个活动线程块对应的任务队列,其中,所述第二处理器加载到一个活动线程块所占用的共享内存空间中的数据被所述活动线程块中的多个待执行的任务复用。
2.根据权利要求1所述的方法,其特征在于,所述第一处理器根据所述硬件结构参数,确定所述第二处理器的内核函数中的活动线程块总数,包括:
所述第一处理器根据所述第二处理器中的SM总数、SM上的共享内存空间大小、一个线程块申请的共享内存空间,确定所述第二处理器的内核函数中的活动线程块总数;
和/或,所述第一处理器根据所述第二处理器中的SM总数、以及一个SM上寄存器文件大小,每个线程使用的寄存器个数,每个线程块中的线程的个数,确定所述第二处理器的内核函数中的活动线程块总数。
3.根据权利要求1或2所述的方法,其特征在于,所述第一处理器根据所述第二处理器的硬件结构参数,确定所述第二处理器的内核函数中的活动线程块总数,包括:
所述第一处理器根据公式一确定所述第二处理器的内核函数中的活动线程块总数,所述公式一为:
Z=min(S/X×K,R/h×BS×K)
其中,Z表示活动线程块总数,K表示所述第二处理器中的流多处理器总数,S表示一个SM占用的共享内存空间,X表示一个BLOCK申请的共享内存大小,R表示一个SM上寄存器文件大小,h表示每个线程使用的寄存器个数,BS表示线程块中的线程的个数。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述第一处理器根据待执行任务的数量和所述活动线程块总数,确定每个活动线程块对应的任务队列,包括:
所述第一处理器根据待执行任务的数量与所述活动线程块总数的比值,确定各个活动线程块的待执行的任务数量;
所述第一处理器依据各个活动线程块的待执行的任务数量,将所述待执行任务分配给各个活动线程块,其中每个活动线程块中的多个任务构成一个任务队列。
5.根据权利要求1至4任一项所述的方法,其特征在于,所述第二调度器将所述活动线程块总数对应的多个活动线程块分发到各个SM上,包括:
所述第二处理器的硬件调度器将所述活动线程块总数对应的所有活动线程块一次分发到所述第二处理器的所有SM上。
6.根据权利要求1至5任一项所述的方法,其特征在于,所述第二调度器并发执行每个活动线程块对应的任务队列,包括:
针对任意一个活动线程块,所述第二调度器的软件调度器从全局内存中加载一次数据至所述活动线程块所占用的共享内存空间中;
所述软件调度器调度所述活动线程块中的各个线程依次并发执行所述活动线程块对应的任务队列中的每个任务;
当所述任务队列中的所有任务执行完成后,所述软件调度器释放所述活动线程块所占用的共享内存空间。
7.根据权利要求1至6任一项所述的方法,其特征在于,所述第一处理器为中央处理器CPU,所述第二处理器为图像处理器GPU。
8.一种共享内存复用方法,其特征在于,该方法包括:
处理器根据所述处理器中的硬件结构参数,确定所述处理器的内核函数中的活动线程块总数,所述活动线程块是指所述处理器的各个流多处理器SM上能够并发执行的线程块;
所述处理器根据待执行任务的数量和所述活动线程块总数,确定每个活动线程块对应的任务队列,所述任务队列中包括多个待执行的任务;
所述处理器将所述活动线程块总数对应的多个活动线程块分发到各个SM上,并且并发执行每个活动线程块对应的任务队列,其中,所述处理器加载到一个活动线程块所占用的共享内存空间中的数据被所述活动线程块中的多个待执行的任务复用。
9.根据权利要求8所述的方法,其特征在于,所述处理器根据所述硬件结构参数,确定所述处理器的内核函数中的活动线程块总数,包括:
所述处理器根据所述处理器中的SM总数、SM上的共享内存空间大小、一个线程块申请的共享内存空间,确定所述处理器的内核函数中的活动线程块总数;
和/或,所述处理器根据所述处理器中的SM总数、以及一个SM上寄存器文件大小,每个线程使用的寄存器个数,每个线程块中的线程的个数,确定所述第二处理器的内核函数中的活动线程块总数。
10.根据权利要求8或9所述的方法,其特征在于,所述处理器根据所述处理器的硬件结构参数,确定所述处理器的内核函数中的活动线程块总数,包括:
所述处理器根据公式一确定所述处理器的内核函数中的活动线程块总数,所述公式一为:
Z=min(S/X×K,R/h×BS×K)
其中,Z表示活动线程块总数,K表示所述处理器中的SM总数,S表示一个SM占用的共享内存空间,X表示一个BLOCK申请的共享内存大小,R表示一个SM上寄存器文件大小,h表示每个线程使用的寄存器个数,BS表示线程块中的线程的个数。
11.根据权利要求8至10任一项所述的方法,其特征在于,所述处理器根据待执行任务的数量和所述活动线程块总数,确定每个活动线程块对应的任务队列,包括:
所述处理器根据待执行任务的数量与所述活动线程块总数的比值,确定各个活动线程块的待执行的任务数量;
所述处理器依据各个活动线程块的待执行的任务数量,将所述待执行任务分配给各个活动线程块,其中每个活动线程块中的多个任务构成一个任务队列。
12.根据权利要求8至11任一项所述的方法,其特征在于,所述处理器将所述活动线程块总数对应的多个活动线程块分发到各个SM上,包括:
所述处理器的硬件调度器将所述活动线程块总数对应的所有活动线程块一次分发到所述第二处理器的所有SM上。
13.根据权利要求8至12任一项所述的方法,其特征在于,所述处理器并发执行每个活动线程块对应的任务队列,包括:
针对任意一个活动线程块,所述处理器的软件调度器从全局内存中加载一次数据至所述活动线程块所占用的共享内存空间中;
所述软件调度器调度所述活动线程块中的各个线程依次并发执行所述活动线程块对应的任务队列中的每个任务;
当所述任务队列中的所有任务执行完成后,所述软件调度器释放所述活动线程块所占用的共享内存空间。
14.一种计算机系统,包括第一处理器和第二处理器,其特征在于,
所述第一处理器,用于获取第二处理器的硬件结构参数,并根据所述硬件结构参数,确定所述第二处理器的内核函数中的活动线程块总数,并且根据待执行任务的数量和所述活动线程块总数,确定每个活动线程块对应的任务队列;
其中,所述活动线程块是指各个流多处理器SM上能够并发执行的线程块,所述任务队列中包括多个待执行的任务;
所述第一处理器,还用于向所述第二处理器发送指令;
所述第二处理器,用于接收所述第一处理器发送的指令,根据所述指令,在单位时间片上并发执行每个活动线程块对应的任务队列,其中,所述第二处理器加载到一个活动线程块所占用的共享内存空间中的数据被所述活动线程块中的多个待执行的任务复用。
15.根据权利要求14所述的计算机系统,其特征在于,所述第一处理器具体用于:
根据所述第二处理器中的SM总数、SM上的共享内存空间大小、一个线程块申请的共享内存空间,确定所述第二处理器的内核函数中的活动线程块总数;
和/或,根据所述第二处理器中的SM总数、以及一个SM上寄存器文件大小,每个线程使用的寄存器个数,每个线程块中的线程的个数,确定所述第二处理器的内核函数中的活动线程块总数。
16.根据权利要求14或15所述的计算机系统,其特征在于,所述第一处理器具体用于:
根据公式一确定所述第二处理器的内核函数中的活动线程块总数,所述公式一为:
Z=min(S/X×K,R/h×BS×K)
其中,Z表示活动线程块总数,K表示所述第二处理器中的流多处理器总数,S表示一个SM占用的共享内存空间,X表示一个BLOCK申请的共享内存大小,R表示一个SM上寄存器文件大小,h表示每个线程使用的寄存器个数,BS表示线程块中的线程的个数。
17.根据权利要求14至16任一项所述的计算机系统,其特征在于,所述第二处理器包括硬件调度器,所述第二处理器的硬件调度器还用于:
将所述活动线程块总数对应的所有活动线程块一次分发到所述第二处理器的所有SM上。
18.根据权利要求14至17任一项所述的计算机系统,其特征在于,所述第二处理器包括软件调度器,所述第二处理器的软件调度器具体用于:
针对任意一个活动线程块,在所述单位时间片上从全局内存中加载一次数据至所述活动线程块所占用的共享内存空间中;
在所述单位时间片上调度所述活动线程块中的各个线程依次并发执行所述活动线程块对应的任务队列中的每个任务;
当所述任务队列中的所有任务执行完成后,释放所述活动线程块所占用的共享内存空间。
19.根据权利要求14至18任一项所述的计算机系统,其特征在于,所述第二处理器具有用于:
根据待执行任务的数量与所述活动线程块总数的比值,确定各个活动线程块的待执行的任务数量;
根据所述每个活动线程块的待执行的任务数量,将所述待执行任务分配给各个活动线程块,其中每个活动线程块中的多个任务构成一个任务队列。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810228758.9A CN110308982B (zh) | 2018-03-20 | 2018-03-20 | 一种共享内存复用方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810228758.9A CN110308982B (zh) | 2018-03-20 | 2018-03-20 | 一种共享内存复用方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110308982A true CN110308982A (zh) | 2019-10-08 |
CN110308982B CN110308982B (zh) | 2021-11-19 |
Family
ID=68073385
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810228758.9A Active CN110308982B (zh) | 2018-03-20 | 2018-03-20 | 一种共享内存复用方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110308982B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111797985A (zh) * | 2020-07-22 | 2020-10-20 | 哈尔滨工业大学 | 一种基于gpu的卷积运算内存访问优化方法 |
CN112445544A (zh) * | 2020-12-09 | 2021-03-05 | 武汉乐程软工科技有限公司 | 一种可迭代对象预加载的装置及方法 |
CN112836327A (zh) * | 2019-11-22 | 2021-05-25 | 中国石油天然气股份有限公司 | 三维波动方程有限差分数值模拟方法及装置 |
WO2021253875A1 (zh) * | 2020-06-18 | 2021-12-23 | 上海商汤智能科技有限公司 | 内存管理方法和相关产品 |
CN114116238A (zh) * | 2022-01-28 | 2022-03-01 | 深圳市迈科龙电子有限公司 | 数据处理优化方法、装置、电子设备及可读存储介质 |
CN114138449A (zh) * | 2021-12-14 | 2022-03-04 | 河南省儿童医院郑州儿童医院 | 一种基于虚拟现实的康复训练系统 |
CN116069504A (zh) * | 2023-01-28 | 2023-05-05 | 广汽埃安新能源汽车股份有限公司 | 自动驾驶仿真中多核处理器的调度方法及装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103427844A (zh) * | 2013-07-26 | 2013-12-04 | 华中科技大学 | 一种基于gpu和cpu混合平台的高速无损数据压缩方法 |
CN104102513A (zh) * | 2014-07-18 | 2014-10-15 | 西北工业大学 | 一种基于Kepler架构的CUDA运行时参数透明优化方法 |
US9235871B2 (en) * | 2014-02-06 | 2016-01-12 | Oxide Interactive, LLC | Method and system of a command buffer between a CPU and GPU |
CN106648546A (zh) * | 2016-09-07 | 2017-05-10 | 北京大学 | 用于gpu寄存器分配和并行度管理的协同优化编译方法 |
CN106648545A (zh) * | 2016-01-18 | 2017-05-10 | 天津大学 | 一种gpu中用于分支处理的寄存器文件结构 |
US20170206630A1 (en) * | 2014-12-04 | 2017-07-20 | Advanced Micro Devices, Inc. | Memory management in graphics and compute application programming interfaces |
-
2018
- 2018-03-20 CN CN201810228758.9A patent/CN110308982B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103427844A (zh) * | 2013-07-26 | 2013-12-04 | 华中科技大学 | 一种基于gpu和cpu混合平台的高速无损数据压缩方法 |
US9235871B2 (en) * | 2014-02-06 | 2016-01-12 | Oxide Interactive, LLC | Method and system of a command buffer between a CPU and GPU |
CN104102513A (zh) * | 2014-07-18 | 2014-10-15 | 西北工业大学 | 一种基于Kepler架构的CUDA运行时参数透明优化方法 |
US20170206630A1 (en) * | 2014-12-04 | 2017-07-20 | Advanced Micro Devices, Inc. | Memory management in graphics and compute application programming interfaces |
CN106648545A (zh) * | 2016-01-18 | 2017-05-10 | 天津大学 | 一种gpu中用于分支处理的寄存器文件结构 |
CN106648546A (zh) * | 2016-09-07 | 2017-05-10 | 北京大学 | 用于gpu寄存器分配和并行度管理的协同优化编译方法 |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112836327A (zh) * | 2019-11-22 | 2021-05-25 | 中国石油天然气股份有限公司 | 三维波动方程有限差分数值模拟方法及装置 |
CN112836327B (zh) * | 2019-11-22 | 2022-11-04 | 中国石油天然气股份有限公司 | 三维波动方程有限差分数值模拟方法及装置 |
WO2021253875A1 (zh) * | 2020-06-18 | 2021-12-23 | 上海商汤智能科技有限公司 | 内存管理方法和相关产品 |
TWI783401B (zh) * | 2020-06-18 | 2022-11-11 | 大陸商上海商湯智能科技有限公司 | 記憶體管理方法和相關產品 |
CN111797985A (zh) * | 2020-07-22 | 2020-10-20 | 哈尔滨工业大学 | 一种基于gpu的卷积运算内存访问优化方法 |
CN111797985B (zh) * | 2020-07-22 | 2022-11-22 | 哈尔滨工业大学 | 一种基于gpu的卷积运算内存访问优化方法 |
CN112445544A (zh) * | 2020-12-09 | 2021-03-05 | 武汉乐程软工科技有限公司 | 一种可迭代对象预加载的装置及方法 |
CN114138449A (zh) * | 2021-12-14 | 2022-03-04 | 河南省儿童医院郑州儿童医院 | 一种基于虚拟现实的康复训练系统 |
CN114116238A (zh) * | 2022-01-28 | 2022-03-01 | 深圳市迈科龙电子有限公司 | 数据处理优化方法、装置、电子设备及可读存储介质 |
CN114116238B (zh) * | 2022-01-28 | 2022-05-03 | 深圳市迈科龙电子有限公司 | 数据处理优化方法、装置、电子设备及可读存储介质 |
CN116069504A (zh) * | 2023-01-28 | 2023-05-05 | 广汽埃安新能源汽车股份有限公司 | 自动驾驶仿真中多核处理器的调度方法及装置 |
CN116069504B (zh) * | 2023-01-28 | 2023-11-10 | 广汽埃安新能源汽车股份有限公司 | 自动驾驶仿真中多核处理器的调度方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN110308982B (zh) | 2021-11-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110308982A (zh) | 一种共享内存复用方法及装置 | |
Warneke et al. | Exploiting dynamic resource allocation for efficient parallel data processing in the cloud | |
CN105893126B (zh) | 一种任务调度方法及装置 | |
EP2232368B1 (fr) | Systeme comportant une pluralite d'unites de traitement permettant d'executer des taches en parallele, en mixant le mode d'execution de type controle et le mode d'execution de type flot de donnees | |
Zhang et al. | vGASA: Adaptive scheduling algorithm of virtualized GPU resource in cloud gaming | |
US9183063B2 (en) | Power-constrained compiler code generation and scheduling of work in a heterogeneous processing system | |
US20070150895A1 (en) | Methods and apparatus for multi-core processing with dedicated thread management | |
KR102616212B1 (ko) | 다수의 컴퓨팅 코어들상의 데이터 드라이브 스케줄러 | |
CN105378668B (zh) | 多处理器系统中的操作系统管理的中断引导 | |
CN107168806A (zh) | 分发调度机的资源调度方法、系统以及计算机设备 | |
Shafique et al. | Minority-game-based resource allocation for run-time reconfigurable multi-core processors | |
CN107729267A (zh) | 资源的分散分配以及用于支持由多个引擎执行指令序列的互连结构 | |
US10585716B2 (en) | Parallel computing | |
López-Ortiz et al. | Paging for multi-core shared caches | |
US11875425B2 (en) | Implementing heterogeneous wavefronts on a graphics processing unit (GPU) | |
US20150212859A1 (en) | Graphics processing unit controller, host system, and methods | |
Chandrashekhar et al. | Performance framework for HPC applications on homogeneous computing platform | |
US10580106B2 (en) | Graphics processing method utilizing predefined render chunks | |
Gonthier et al. | Memory-aware scheduling of tasks sharing data on multiple gpus with dynamic runtime systems | |
Ahrens et al. | PaTraCo: a framework enabling the transparent and efficient programming of heterogeneous compute networks | |
US8090762B2 (en) | Efficient super cluster implementation for solving connected problems in a distributed environment | |
CN109491785A (zh) | 内存访问调度方法、装置及设备 | |
CN102736949B (zh) | 改善对非连贯设备要执行的任务的调度 | |
Steinberger | On dynamic scheduling for the gpu and its applications in computer graphics and beyond | |
CN110275771A (zh) | 一种业务处理方法、物联网计费基础设施系统及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |