CN114003359A - 基于弹性持久的线程块的任务调度方法、***及gpu - Google Patents

基于弹性持久的线程块的任务调度方法、***及gpu Download PDF

Info

Publication number
CN114003359A
CN114003359A CN202111230110.3A CN202111230110A CN114003359A CN 114003359 A CN114003359 A CN 114003359A CN 202111230110 A CN202111230110 A CN 202111230110A CN 114003359 A CN114003359 A CN 114003359A
Authority
CN
China
Prior art keywords
function
running
kernel
elastic
thread block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202111230110.3A
Other languages
English (en)
Other versions
CN114003359B (zh
Inventor
陈�全
过敏意
赵涵
崔炜皞
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Jiaotong University
Original Assignee
Shanghai Jiaotong University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Jiaotong University filed Critical Shanghai Jiaotong University
Priority to CN202111230110.3A priority Critical patent/CN114003359B/zh
Publication of CN114003359A publication Critical patent/CN114003359A/zh
Application granted granted Critical
Publication of CN114003359B publication Critical patent/CN114003359B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/4493Object persistence
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提供一种基于弹性持久的线程块的任务调度方法、***及GPU,所述基于弹性持久的线程块的任务调度方法包括:对于每一个GPU内核函数,使用源对源编译的方式将该内核函数,转换为使用弹性持久线程块的函数版本,进而减少了内核函数的资源占用。对于每一个可能的混跑的内核函数对,使用混跑重合率判断两个混跑的内核函数的吞吐性能,进而找到最优的混跑配置。对于实时到来的内核函数,基于混跑重合率来构建混跑的内核函数对,以获得最大的吞吐。本发明可以在无需用户感知的前提下,最大化***吞吐,本发明的成果可以间接为潜在的配置多种计算单元的GPU提供调度技术的支持。

Description

基于弹性持久的线程块的任务调度方法、***及GPU
技术领域
本发明涉及图形处理器即GPU技术领域,特别是涉及一种基于弹性持久的线程块的任务调度方法、***及GPU。
背景技术
图形处理器,即GPU(Graphics Processing Unit),是一种用于加速图像处理的特殊处理器。由于GPU具有高并行度及强大的矩阵运算和浮点数计算能力,它又被广泛地应用到图像处理以外的计算密集型应用中,例如云计算、深度学习等,被称为通用图形处理器(General-purpose computing on graphics processing units,GPGPU)。
很多新型的应用比如说神经科学和深度学习,都是计算密集型应用。为了提供相应需求的算力,GPU被广泛的使用来承接这些任务。与此同时,由于深度学习应用强烈依赖矩阵乘操作,NVIDIA公司在Volta架构之后引入了Tensor Core来加速矩阵乘。一个GPU程序能够通过调用相应API来使用Tensor Core。如果不使用这些API,传统的深度学习应用和其他不使用矩阵乘的应用,无法利用到新引入的Tensor Core。
通常来说,一个GPU有多个流处理器(SM),一个GPU程序被调度到SM上执行。现在的SM上有两种计算单元:传统的CUDA Core和新引入的Tensor Core。两种计算单元是独立的,他们共享SM上的整个内存***。CUDA Core被用来执行通用计算,而Tensor Core只能用来执行矩阵乘计算。除此之外,一个GPU内核函数被称为一个GPU kernel,一个GPU kernel有多个线程块(thread block),每个thread block内的线程被划分为多个32线程的线程束(warp)。
GPU kernel在SM上以warp的粒度执行计算,而一个SM能够同时承载多个活跃的warp,这些warp在SM上切换执行。当一个warp需要的数据和计算资源都准备好时,它开始执行。因此,如果两个准备好的warp是使用不同硬件的,两种硬件的并行性便得到了利用。如果在一个GPU kernel内同时包含使用两种硬件的thread block,以利用到两种硬件的并行性来加速矩阵乘,需要小心的调整两种block的同步,这给编程人员带来了大量的编程麻烦。除此之外,不同GPU上的Tensor Core和CUDA Core的计算能力比例不同,编程人员很难实现一个通用的矩阵乘实现。因此,现有的GPU kernel要么仅仅使用Tensor Core,要么仅仅使用CUDA Core。
在这样情况下,利用到两种硬件并行性只能通过混跑两个使用不同硬件的GPUkernel来实现。NVIDIA公司提供了一种并行两个GPU kernel的调度接口CUDA stream。现有的CUDA stream的调度是kernel粒度的。仅仅当一个GPU kernel无法使用完SM上的资源时,另一个GPU kernel的线程块才能被调度到SM上进行计算。然而,GPU kernel通常都会包含大量线程块,以掩盖可能的计算间隙,所以CUDA stream导致了两个kernel的线性执行。因此,本实施例可以得到,CUDA stream的根源问题是粗粒度的kernel调度。
粗粒度的调度导致了两个问题。首先,CUDA stream不感知两个GPU kernel对线程槽(thread slot)的竞争。由于单个SM同时只能支持1024个活跃的线程,当一个kernel的线程块占据了所有的thread slot,另一个kernel的线程块则无法被调度到SM上。其次,CUDAstream不感知两个GPU kernel对内存资源的竞争。GPU kernel通常需要申请sharedmemory来加速内存访问,也需要register来辅助计算。当一个GPU kernel的线程块申请了大量的内存资源时,另一个GPU kernel的线程块则无法调度到SM上。因此,CUDA stream对内存资源竞争的不感知,也导致了两个GPU kernel无法调度到SM上同时进行计算。
除此之外,CUDA stream还有第三个问题。CUDA stream仅仅是一个底层的调度接口。当任务运行时随机到来,他无法单直接的用于任务调度。因此,CUDA stream无法支持运行时的任务调度。
发明内容
鉴于以上所述现有技术的缺点,本发明的目的在于提供一种基于弹性持久的线程块的任务调度方法、***及GPU,用于提高GPU的吞吐。
为实现上述目的及其他相关目的,本发明提供一种基于弹性持久的线程块的任务调度方法。所述方法包括:对于每一个GPU内核函数,使用源对源编译的方式将该内核函数,转换为使用弹性持久线程块的函数版本,进而减少了内核函数的资源占用;对于每一个可能的混跑的内核函数对,使用混跑重合率判断两个混跑的内核函数的吞吐性能,进而找到最优的混跑配置;对于实时到来的内核函数,基于混跑重合率来构建混跑的内核函数对,以获得最大的吞吐。
于本发明的一实施例中,所述对于每一个GPU内核函数,使用源对源编译的方式将该内核函数,转换为使用弹性持久线程块的函数版本包括:首先,将每一个GPU内核函数转换为使用持久线程块的函数版本,持久线程块数被配置为最优的持久线程块数;其次,将每一个GPU内核函数转换为使用弹性持久线程块的函数版本,也就是多个使用不同线程块大小的函数版本;最后,在每一个GPU内核函数被转换为弹性持久线程块的函数版本后,内核函数的资源占用被减少。
于本发明的一实施例中,所述内核函数最优的持久线程块数为它与原始GPU内存内核函数性能相等的最小线程块数量。
于本发明的一实施例中,所述弹性持久的线程块为比原始线程块尺寸小的持久线程块;基于弹性持久线程块,GPU内核函数有几种不同线程块尺寸的函数版本。
于本发明的一实施例中,在每一个GPU内核函数被转换为弹性持久线程块的函数版本后,内核函数的资源占用被减少;持久线程块减少了线程槽的占用,弹性线程块减少了共享内存和寄存器的占用。
于本发明的一实施例中,所述对于每一个可能的混跑的内核函数对,使用混跑重合率判断两个混跑的内核函数的吞吐性能,进而找到最优的混跑配置包括:首先,对每一个GPU内核函数的弹性持久线程块函数版本,搜索其最优的持久块数量;其次,对于每一个可能的混跑的内核函数对,基于混跑重合率,来搜索每个函数最优的混跑配置,即他们获得最优混跑性能的函数版本。
于本发明的一实施例中,对每一个GPU内核函数的弹性持久线程块函数版本,搜索其最优的持久块数量包括:以GPU内核原有的性能作为基准,持久线程块数量的搜索范围为1到该GPU内核函数在流式多处理器上的的最大驻留的线程块数量;采用二分的方法定位到最优持久线程块数量。
于本发明的一实施例中,所述GPU内核函数在流式多处理器上的最大驻留的线程块数量通过单个区块使用的资源量和流式多处理器上的资源总量计算得到。
于本发明的一实施例中,所述对于每一个可能的混跑的内核函数对,基于混跑重合率来搜索每个函数最优的混跑配置,即他们获得最优混跑性能的函数版本包括:对于每个混跑内核函数对,尝试所有的函数版本对,以找到最优混跑重合率的函数版本对,即最优的混跑配置;在此过程中,若一个函数版本对使用的资源量和超过了流处理器的资源总量,则跳过该函数版本对的性能测试,并丢弃该函数版本对;在此过程中,若一个函数版本对中的一个函数的性能下降超过了设定的阈值,则跳过该函数版本对的性能测试,并丢弃该函数版本对。
于本发明的一实施例中,所述对于实时到来的内核函数,基于混跑重合率来构建混跑的内核函数对,以获得最大的吞吐包括:基于在线任务的到来和内核间的时序关系,基于混跑重合率,实时决定内核的发射和混跑。
本发明的实施例还提供一种基于弹性持久的线程块的任务调度***。所述***包括:源对源编译模块,使用源对源编译的方式将每一个GPU内核函数,转换为使用弹性持久线程块的函数版本,进而减少了内核函数的资源占用;离线调度策略模块,对于每一个可能的混跑的内核函数对,使用混跑重合率判断两个混跑的内核函数的吞吐性能,进而找到最优的混跑配置;在线调度模块,对于实时到来的内核函数,基于混跑重合率来构建混跑的内核函数对,以获得最大的吞吐。
本发明的实施例还提供一种GPU,所述GPU应用如上所述的基于弹性持久的线程块的任务调度方法。
如上所述,本发明的一种基于弹性持久的线程块的任务调度方法、***及GPU,具有以下有益效果:
1、本发明可以在需用户感知的前提下,最大化***吞吐。
2、本发明的成果可以间接为潜在的配置多种计算单元的GPU提供调度技术的支持。
3、本发明的成果可以使构建具有商业意义的、配置多种计算单元的GPU芯片的动态任务调度***,面向用户提供任务调度服务。
附图说明
图1显示为本发明的一实施例中基于弹性持久的线程块的任务调度方法的整体流程示意图。
图2显示为本发明的一实施例中基于弹性持久的线程块的任务调度方法应用的硬件***架构图。
图3显示为本发明的一实施例中基于弹性持久的线程块的任务调度方法的实施过程逻辑图。
图4显示为本发明的一实施例中基于弹性持久的线程块的任务调度***的原理结构框图。
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。
本发明实施例的目的在于提供一种基于弹性持久的线程块的任务调度方法及服务器,用于提高GPU的吞吐。
本发明实施例旨在设计、实现一个高吞吐的利用到GPU上Tensor Core和CUDACore并行性的任务调度方法,该方法利用两种计算单元并行性所面临的的资源竞争问题,其次运行时调度相应的GPU kernel来利用到两种计算单元的并行性,以最大化GPU的吞吐。
以下将详细阐述本实施例的一种基于弹性持久的线程块的任务调度方法及服务器的原理及实施方式,使本领域技术人员不需要创造性劳动即可理解本实施例的一种基于弹性持久的线程块的任务调度方法及服务器。
如图1所示,本实施例提供一种基于弹性持久的线程块的任务调度方法,所述基于弹性持久的线程块的任务调度方法包括:
步骤S100,对于每一个GPU内核函数,使用源对源编译的方式将该内核函数,转换为使用弹性持久线程块的函数版本,进而减少了内核函数的资源占用;
步骤S200,对于每一个可能的混跑的内核函数对,使用混跑重合率判断两个混跑的内核函数的吞吐性能,进而找到最优的混跑配置;
步骤S300,对于实时到来的内核函数,基于混跑重合率来构建混跑的内核函数对,以获得最大的吞吐。
以下对本实施例的上述步骤S100至步骤S300进行详细说明。
步骤S100,对于每一个GPU内核函数,使用源对源编译的方式将该内核函数,转换为使用弹性持久线程块的函数版本,进而减少了内核函数的资源占用。
步骤S100解决混跑GPU kernel(内核)间的资源竞争问题。在现有的调度接口下,两个混跑的GPU kernel首先竞争SM(流式多处理器)上的thread slots(线程槽),其次竞争SM上的内存资源,比如说shared memory(共享内存)和register(寄存器)。
在这种情况下,本实施例发现一直在SM上保持最大数量的block(区块)可能不会达到最高的性能。因此,本实施例采用了持久线程块(persistent block)来调整一个GPUkernel在SM上驻留的线程块数量。持久线程块被抽象为block worker(线程块工作者),block worker(线程块工作者)一直驻留在GPU上直到完成所有的计算。
具体地,于本实施例中,所述对于每一个GPU内核函数,使用源对源编译的方式将该内核函数,转换为使用弹性持久线程块的函数版本包括:
首先,将每一个GPU内核函数转换为使用持久线程块的函数版本,持久线程块数被配置为最优的持久线程块数;
其次,将每一个GPU内核函数转换为使用弹性持久线程块的函数版本,也就是多个使用不同线程块大小的函数版本;
最后,在每一个GPU内核函数被转换为弹性持久线程块的函数版本后,内核函数的资源占用被减少。
所述弹性持久的线程块为比原始线程块尺寸小的持久线程块;基于弹性持久线程块,GPU内核函数有几种不同线程块尺寸的函数版本。
在每一个GPU内核函数被转换为弹性持久线程块的函数版本后,内核函数的资源占用被减少;持久线程块减少了线程槽的占用,弹性线程块减少了共享内存和寄存器的占用。
即本实施例中,每个持久线程块都负责多个原始线程块的计算。最优的持久线程块数量是它与原始GPU kernel性能相等的最小线程块数量。由于持久线程块避免了原有GPU kernel对thread slot(线程槽)不必要的占用,解决了两个混跑的GPU kernel对于thread slot的竞争。
虽然持久线程块解决了两个混跑GPU kernel对thread slot的竞争,两个GPUkernel仍然可能竞争shared memory和register。基于相应的观察,本实施例提出了弹性线程块技术,通过减少线程块大小(block size)来解决内存***的竞争。由于Tensor Core只能执行矩阵乘计算,而这个任务被广泛研究。矩阵乘任务通常将结果矩阵划分为多个tile(分片),每个tile由一个线程块负责。针对每个线程块,shared memory用来存储该tile需要的两个输入矩阵。由于该线程块内的所有线程,协同将数据从global memory读入到shared memory中,本实施例可以得出shared memory的使用量和tile size(分片大小)呈线性关系,而tile size和block size呈线性关系。因此,当本实施例减小block size时,tile size变小,这意味着shared memory size(共享内存大小)的减少。本实施例将使用更小block size的kernel,认为是该GPU kernel的弹性线程块版本。
具体地,于本实施例中,所述持久线程块为弹性持久的线程块,其中,所述弹性持久的线程块的确定方式为:从多个内核中选取区块尺寸小的内核对应持久线性块。
也就是说,所述内核函数最优的持久线程块数为它与原始GPU内存内核函数性能相等的最小线程块数量。
在此基础上,本实施例将使用Tensor Core的GPU kernel命名为TC kernel(使用Tensor Core的内核函数),使用CUDA Core的GPU kernel命名为CD kernel(使用CUDA Core的内核函数)。基于以上的设计,本实施例将集群上主流的TC kernel和CD kernel都通过源对源编译,生成他们的多个弹性持久的线程块版本。
步骤S200,对于每一个可能的混跑的内核函数对,使用混跑重合率判断两个混跑的内核函数的吞吐性能,进而找到最优的混跑配置。
步骤S200负责为主流的TC-CD kernel pair(使用Tensor Core的内核函数与使用CUDA Core的内核函数形成的内核函数对)定制最优的混跑策略。本实施例为每个GPUkernel生成多个版本,这几个版本有不同的block size,也可能有不同的性能。对于一个集群上主流的TC kernel和CD kernel,本模块生成所有可能的TC-CD kernel pair。对于这些kernel pair(内核函数对),通过测试两个kernel在不同配置下的的混跑性能。在这个过程中,本实施例定义了混跑重合率(Overlap Rate),如下公式所示。T1和T2分别为TC kernel和CD kernel的单独运行时间,Tcolo为两个kernel混跑的运行时间。根据混跑重合率,比较不同配置下的混跑性能,以找到最优的混跑配置。
Figure BDA0003313126720000071
具体地,于本实施例中,所述对于每一个可能的混跑的内核函数对,使用混跑重合率判断两个混跑的内核函数的吞吐性能,进而找到最优的混跑配置包括:
首先,对每一个GPU内核函数的弹性持久线程块函数版本,搜索其最优的持久块数量;
其次,对于每一个可能的混跑的内核函数对,基于混跑重合率,来搜索每个函数最优的混跑配置,即他们获得最优混跑性能的函数版本。
其中,所述对于每一个可能的混跑的内核函数对,基于混跑重合率来搜索每个函数最优的混跑配置,即他们获得最优混跑性能的函数版本包括:
1)对于每个混跑内核函数对,尝试所有的函数版本对,以找到最优混跑重合率的函数版本对,即最优的混跑配置;
2)在此过程中,若一个函数版本对使用的资源量和超过了流处理器的资源总量,则跳过该函数版本对的性能测试,并丢弃该函数版本对;
3)在此过程中,若一个函数版本对中的一个函数的性能下降超过了设定的阈值,则跳过该函数版本对的性能测试,并丢弃该函数版本对。
即于本实施例中,首先找到所有kernel的最优持久线程块数量;其次,加速所有kernel pair的配置搜索过程,以降低暴力搜索的开销。
具体地,于本实施例中,为每个GPU内核函数的不同线程块尺寸的函数版本,搜索最优弹性持久块数量包括:
1)以GPU内核原有的性能作为基准,持久线程块数量的搜索范围为1到该GPU内核函数在流式多处理器上的的最大驻留的线程块数量;
2)采用二分的方法定位到最优持久线程块数量。
于本实施例中,首先设计了基于二分法的搜索方法,以快速的搜索到每个kernel在不同block size下的最优持久线程块数量。在这个方法中,GPU kernel原有的性能被作为基准。持久线程块数量的搜索范围为1到该GPU kernel在SM上的的最大驻留的线程块数量。于本实施例中,所述GPU内核函数在流式多处理器上的最大驻留的线程块数量通过单个区块使用的资源量和流式多处理器上的资源总量计算得到。即该GPU kernel在SM上的最大驻留线程块数量可以通过单个block使用的资源量和SM上的资源总量计算得到。在这个搜索范围内,本模块采用二分的方法快速定位到最优持久线程块数量。相应的搜索算法如表1所示。
表1
Figure BDA0003313126720000081
其次,本实施例从两个方面减少搜索kernel pair(内核函数对)最优配置的开销。
第一,本实施例基于资源使用情况进行相应的判断。若两个原始kernel的资源使用量并没有超过SM的资源上限,本实施例跳过其他configuration pair(内核函数对对应的配置对)的测试。于本实施例中,在搜索过程中,若资源竞争阻止一个内核的区块发射,则跳过这个内核对的性能测试,并丢弃大于性能下降阈值的弹性线程块。即针对一个可能的configuration pair,如果资源竞争阻止了一个kernel的block来发射,本实施例跳过这个configuration pair的性能测试。
第二,本实施例减少了每个kernel的搜索的弹性线程块版本。由于弹性线程块版本会带来相应的性能下降,本实施例将丢弃那些有大于性能下降阈值的弹性线程块版本。在这里,本实施例将这个值设定为20%,这是因为两个kernel获得平均吞吐提升为20%左右,当弹性线程块版本有20%的性能下降后,两个kernel的混跑的混跑,很难获得吞吐提升。
经过以上两个优化,能够在2-3次搜索内为一个kernel pair搜索到最优的混跑配置。
步骤S300,对于实时到来的内核函数,基于混跑重合率来构建混跑的内核函数对,以获得最大的吞吐。
步骤S300负责调度实时到来的kernel进行混跑,以获得最大的吞吐。当主流的kernel pair搜索到最优的混跑配置,则制定在线调度决策。实际的应用可以被划分为TCtask(使用Tensor Core的任务)和CD task(使用CUDA Core的任务)。TC task包含TCkernel(使用Tensor Core的内核函数),并可能包含CD kernel(使用CUDA Core的内核函数)。CD task(使用CUDA Core的任务)仅仅包含CD kernel(使用CUDA Core的内核函数)。
具体地,于本实施例中,所述对于实时到来的内核函数,基于混跑重合率来构建混跑的内核函数对,以获得最大的吞吐包括:基于在线任务的到来和内核间的时序关系,基于混跑重合率,实时决定内核的发射和混跑。
即本实施例根据在线任务的到来和kernel间的时序关系,来实时决定kernel的发射和混跑。在线调度器,维护两个kernel queue(内核函数队列),这两个队列是TC kernelqueue and CD kernel queue(使用Tensor Core的内核函数队列,使用CUDA Core的内核函数队列)。当TC task(使用Tensor Core的任务)在往两个kernel队列发射kernel时,onlinescheduler(在线内核函数调度器)保存了相应的这些kernel相应的依赖关系。基于这些kernel的依赖关系,和两个kernel队列的状态,online scheduler(在线内核函数调度器)进行在线的kernel调度。当那儿有多个可能的混跑选项时,本模块根据overlap rate来决定最优的混跑决策。
如图2所示,显示为本实施例中基于弹性持久的线程块的任务调度方法应用的硬件***架构图,如图2所示,底层硬件是一个同时包含Tensor Core和CUDA Core的GPU架构。图是所述GPU架构的示意图。在图中,SM表示GPU上的流处理器。每个SM内都有两种计算单元,分别是Tensor Core和CUDA Core。这两种计算单元,共享SM内的内存***,包括缓存,shared memory(共享内存)和global memory(GPU全局内存)。
为使本领域技术人员进一步理解本实施例的基于弹性持久的线程块的任务调度方法,以下结合图3对本实施例的基于弹性持久的线程块的任务调度方法的实施过程进行说明。
如图3所示,本实施例的基于弹性持久的线程块的任务调度方法的实施过程如下:
1)用户提交任务:用户通过编写自己的程序,进而提交任务。
2)源对源编译:由于混跑的两个GPU kernel竞争SM上的资源。源对源编译模块在本模块中生成相应的GPU kernel版本,以解决资源竞争问题。
3)离线策略制定:由于两个GPU kernel竞争不同的资源,在生成有不同性能的GPUkernel版本时,为每个kernel pair搜索最优的混跑配置。
4)在线调度:根据相应的时序关系和混跑收益,来制定调度决策。
5)任务执行:GPU kernel按照调度的方式进行执行,执行完毕后返回实验结果。
如图4所示,本实施例还提供一种基于弹性持久的线程块的任务调度系,所述基于弹性持久的线程块的任务调度***100包括:源对源编译模块110,离线调度策略模块120以及在线调度模块130。
具体地,于本实施例中,所述源对源编译模块110使用源对源编译的方式将每一个GPU内核函数,转换为使用弹性持久线程块的函数版本,进而减少了内核函数的资源占用。其中,所述源对源编译模块110的实现方式和实现原理与上述方法中的步骤S100的实现方式和实现原理相同,在此不再赘述。
所述离线调度策略模块120对于每一个可能的混跑的内核函数对,使用混跑重合率判断两个混跑的内核函数的吞吐性能,进而找到最优的混跑配置。其中,所述离线调度策略模块120的实现方式和实现原理与上述方法中的步骤S200的实现方式和实现原理相同,在此不再赘述。
所述在线调度模块130对于实时到来的内核函数,基于混跑重合率来构建混跑的内核函数对,以获得最大的吞吐。其中,所述在线调度模块130的实现方式和实现原理与上述方法中的步骤S300的实现方式和实现原理相同,在此不再赘述。
此外,本发明的实施例还提供一种GPU,所述GPU应用如上所述的基于弹性持久的线程块的任务调度方法。上述已经对所述基于弹性持久的线程块的任务调度方法进行了详细说明,在此不再赘述。
综上所述,本发明可以在需用户感知的前提下,最大化***吞吐;本发明的成果可以间接为潜在的配置多种计算单元的GPU提供调度技术的支持;本发明的成果可以使构建具有商业意义的、配置多种计算单元的GPU芯片的动态任务调度***,面向用户提供任务调度服务。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。

Claims (11)

1.一种基于弹性持久的线程块的任务调度方法,其特征在于:所述方法包括:
对于每一个GPU内核函数,使用源对源编译的方式将该内核函数,转换为使用弹性持久线程块的函数版本,进而减少了内核函数的资源占用;
对于每一个可能的混跑的内核函数对,使用混跑重合率判断两个混跑的内核函数的吞吐性能,进而找到最优的混跑配置;
对于实时到来的内核函数,基于混跑重合率来构建混跑的内核函数对,以获得最大的吞吐。
2.根据权利要求1所述的基于弹性持久的线程块的任务调度方法,其特征在于:所述对于每一个GPU内核函数,使用源对源编译的方式将该内核函数,转换为使用弹性持久线程块的函数版本包括:
首先,将每一个GPU内核函数转换为使用持久线程块的函数版本,持久线程块数被配置为最优的持久线程块数;
其次,将每一个GPU内核函数转换为使用弹性持久线程块的函数版本,也就是多个使用不同线程块大小的函数版本;
最后,在每一个GPU内核函数被转换为弹性持久线程块的函数版本后,内核函数的资源占用被减少。
3.根据权利要求2所述的基于弹性持久的线程块的任务调度方法,其特征在于:所述内核函数最优的持久线程块数为它与原始GPU内存内核函数性能相等的最小线程块数量。
4.根据权利要求2所述的基于弹性持久的线程块的任务调度方法,其特征在于:所述弹性持久的线程块为比原始线程块尺寸小的持久线程块;基于弹性持久线程块,GPU内核函数有几种不同线程块尺寸的函数版本。
5.根据权利要求2所述的基于弹性持久的线程块的任务调度方法,其特征在于:在每一个GPU内核函数被转换为弹性持久线程块的函数版本后,内核函数的资源占用被减少;持久线程块减少了线程槽的占用,弹性线程块减少了共享内存和寄存器的占用。
6.根据权利要求1所述的基于弹性持久的线程块的任务调度方法,其特征在于:所述对于每一个可能的混跑的内核函数对,使用混跑重合率判断两个混跑的内核函数的吞吐性能,进而找到最优的混跑配置包括:
首先,对每一个GPU内核函数的弹性持久线程块函数版本,搜索其最优的持久块数量;
其次,对于每一个可能的混跑的内核函数对,基于混跑重合率,来搜索每个函数最优的混跑配置,即他们获得最优混跑性能的函数版本。
7.根据权利要求6所述的基于弹性持久的线程块的任务调度方法,其特征在于:所述GPU内核函数在流式多处理器上的最大驻留的线程块数量通过单个区块使用的资源量和流式多处理器上的资源总量计算得到。
8.根据权利要求6所述的基于弹性持久的线程块的任务调度方法,其特征在于:所述对于每一个可能的混跑的内核函数对,基于混跑重合率来搜索每个函数最优的混跑配置,即他们获得最优混跑性能的函数版本包括:
对于每个混跑内核函数对,尝试所有的函数版本对,以找到最优混跑重合率的函数版本对,即最优的混跑配置;
在此过程中,若一个函数版本对使用的资源量和超过了流处理器的资源总量,则跳过该函数版本对的性能测试,并丢弃该函数版本对;
在此过程中,若一个函数版本对中的一个函数的性能下降超过了设定的阈值,则跳过该函数版本对的性能测试,并丢弃该函数版本对。
9.根据权利要求1所述的基于弹性持久的线程块的任务调度方法,其特征在于:所述对于实时到来的内核函数,基于混跑重合率来构建混跑的内核函数对,以获得最大的吞吐包括:基于在线任务的到来和内核间的时序关系,基于混跑重合率,实时决定内核的发射和混跑。
10.一种基于弹性持久的线程块的任务调度***,其特征在于:所述***包括:
源对源编译模块,使用源对源编译的方式将每一个GPU内核函数,转换为使用弹性持久线程块的函数版本,进而减少了内核函数的资源占用;
离线调度策略模块,对于每一个可能的混跑的内核函数对,使用混跑重合率判断两个混跑的内核函数的吞吐性能,进而找到最优的混跑配置;
在线调度模块,对于实时到来的内核函数,基于混跑重合率来构建混跑的内核函数对,以获得最大的吞吐。
11.一种GPU,其特征在于:所述GPU应用如权利要求1至权利要求10任一权利要求所述的基于弹性持久的线程块的任务调度方法。
CN202111230110.3A 2021-10-20 2021-10-20 基于弹性持久的线程块的任务调度方法、***及gpu Active CN114003359B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111230110.3A CN114003359B (zh) 2021-10-20 2021-10-20 基于弹性持久的线程块的任务调度方法、***及gpu

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111230110.3A CN114003359B (zh) 2021-10-20 2021-10-20 基于弹性持久的线程块的任务调度方法、***及gpu

Publications (2)

Publication Number Publication Date
CN114003359A true CN114003359A (zh) 2022-02-01
CN114003359B CN114003359B (zh) 2024-07-16

Family

ID=79923592

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111230110.3A Active CN114003359B (zh) 2021-10-20 2021-10-20 基于弹性持久的线程块的任务调度方法、***及gpu

Country Status (1)

Country Link
CN (1) CN114003359B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116302504A (zh) * 2023-02-23 2023-06-23 海光信息技术股份有限公司 线程块的处理***、方法及相关设备

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050273760A1 (en) * 2004-06-08 2005-12-08 Willy Chuang Computer system and related method for generating program codes describing relationships of numerous function names and numerous control codes of a device
CN101799763A (zh) * 2009-02-10 2010-08-11 华为技术有限公司 内核在线补丁的方法、装置和***
CN104866297A (zh) * 2014-02-26 2015-08-26 华为技术有限公司 一种优化核函数的方法和装置
US20190042232A1 (en) * 2018-09-28 2019-02-07 Intel Corporation Technologies for automatic compilation of storage offloads
US20200210229A1 (en) * 2019-01-01 2020-07-02 International Business Machines Corporation Reducing minimum operating voltage through heterogeneous codes
CN112835695A (zh) * 2021-01-28 2021-05-25 北京市商汤科技开发有限公司 Pod间通信的方法和分布式计算***
CN113377524A (zh) * 2020-03-09 2021-09-10 辉达公司 协作并行存储器分配
CN113407333A (zh) * 2020-12-18 2021-09-17 上海交通大学 Warp级别调度的任务调度方法、***、GPU及设备
CN113448736A (zh) * 2021-07-22 2021-09-28 东南大学 一种近似计算任务在多核异构处理平台上基于能量和QoS联合优化的任务映射方法

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050273760A1 (en) * 2004-06-08 2005-12-08 Willy Chuang Computer system and related method for generating program codes describing relationships of numerous function names and numerous control codes of a device
CN101799763A (zh) * 2009-02-10 2010-08-11 华为技术有限公司 内核在线补丁的方法、装置和***
CN104866297A (zh) * 2014-02-26 2015-08-26 华为技术有限公司 一种优化核函数的方法和装置
US20190042232A1 (en) * 2018-09-28 2019-02-07 Intel Corporation Technologies for automatic compilation of storage offloads
US20200210229A1 (en) * 2019-01-01 2020-07-02 International Business Machines Corporation Reducing minimum operating voltage through heterogeneous codes
CN113377524A (zh) * 2020-03-09 2021-09-10 辉达公司 协作并行存储器分配
CN113407333A (zh) * 2020-12-18 2021-09-17 上海交通大学 Warp级别调度的任务调度方法、***、GPU及设备
CN112835695A (zh) * 2021-01-28 2021-05-25 北京市商汤科技开发有限公司 Pod间通信的方法和分布式计算***
CN113448736A (zh) * 2021-07-22 2021-09-28 东南大学 一种近似计算任务在多核异构处理平台上基于能量和QoS联合优化的任务映射方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
HAN ZHAO: ""ISPA:Exploiting Intra-SM Parallelism in GPUs via Fine-Grained Resource Management"", 《IEEE TRANSACTIONS ON COMPUTERS》, vol. 72, no. 5, 12 October 2022 (2022-10-12), pages 1473 - 1487 *
JIN WANG: ""Dynamic Thread Block Launch:A lightweight execution mechanism to support irregular applicatios on GPUs"", 《2015 ACM/IEEE 42ND ANNUAL INTERNATIONAL SYMPOSIUM ON COMPUTER ARCHITECTURE (ISCA)》, 1 October 2015 (2015-10-01), pages 528 - 540 *
何纪澎: ""基于GPGPU-Sim模拟的GPU功耗研究"", 《中国优秀硕士学位论文全文数据库 信息科技辑》, no. 2016, 15 July 2016 (2016-07-15), pages 137 - 35 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116302504A (zh) * 2023-02-23 2023-06-23 海光信息技术股份有限公司 线程块的处理***、方法及相关设备

Also Published As

Publication number Publication date
CN114003359B (zh) 2024-07-16

Similar Documents

Publication Publication Date Title
Chen et al. Accelerating mapreduce on a coupled cpu-gpu architecture
Grasso et al. LibWater: heterogeneous distributed computing made easy
Kang et al. Lalarand: Flexible layer-by-layer cpu/gpu scheduling for real-time dnn tasks
Hölzle Brawny cores still beat wimpy cores, most of the time
US20080155197A1 (en) Locality optimization in multiprocessor systems
Wang et al. Simultaneous multikernel: Fine-grained sharing of gpus
Robson et al. Runtime coordinated heterogeneous tasks in Charm++
Banerjee et al. Hybrid algorithms for list ranking and graph connected components
Chen et al. Improving GPGPU performance via cache locality aware thread block scheduling
Carvalho et al. Kernel concurrency opportunities based on GPU benchmarks characterization
Tan et al. Optimizing the LINPACK algorithm for large-scale PCIe-based CPU-GPU heterogeneous systems
Zhao et al. Exploiting intra-sm parallelism in gpus via persistent and elastic blocks
CN111045800A (zh) 一种基于短作业优先的优化gpu性能的方法及***
CN114003359B (zh) 基于弹性持久的线程块的任务调度方法、***及gpu
Usha et al. A comprehensive comparison and analysis of openacc and openmp 4.5 for nvidia gpus
Toledo et al. Static graphs for coding productivity in openacc
Yeh et al. Pagoda: A GPU runtime system for narrow tasks
CN115964164A (zh) 计算机实现的方法、硬件加速器以及存储介质
Niknam et al. Resource optimization for real-time streaming applications using task replication
Zhao et al. ISPA: Exploiting Intra-SM Parallelism in GPUs via Fine-Grained Resource Management
Lifflander et al. Dynamic scheduling for work agglomeration on heterogeneous clusters
Karnagel et al. Limitations of intra-operator parallelism using heterogeneous computing resources
Wu et al. A model-based software solution for simultaneous multiple kernels on GPUs
Singh Toward predictable execution of real-time workloads on modern GPUs
Wu Dynamic scheduling strategy for block parallel cholesky factorization based on activity on edge network

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