CN106407006A - 一种基于Whippletree模型的GPU动态任务分配方法 - Google Patents
一种基于Whippletree模型的GPU动态任务分配方法 Download PDFInfo
- Publication number
- CN106407006A CN106407006A CN201610789786.9A CN201610789786A CN106407006A CN 106407006 A CN106407006 A CN 106407006A CN 201610789786 A CN201610789786 A CN 201610789786A CN 106407006 A CN106407006 A CN 106407006A
- Authority
- CN
- China
- Prior art keywords
- whippletree
- model
- gpu
- task
- method based
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
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
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及一种基于Whippletree模型的GPU动态任务分配方法,包括以下步骤:1)构建Whippletree模型,包括数据元素单元、代码单元、任务单元和代码集合单元;2)测试所述Whippletree模型的正确性和性能;3)以经过测试的Whippletree模型进行GPU动态任务分配。与现有技术相比,本发明具有提高GPU利用率等优点。
Description
技术领域
本发明涉及一种GPU调度方法,尤其是涉及一种基于Whippletree模型的GPU动态任务分配方法。
背景技术
随着信息时代的发展,计算机处理器处理的信息量日渐增大,其数据处理能力要求越来越高,传统的微处理器体系结构已经逐渐无法有效地适应大信息量的高效处理,从传统的指令级并行发展到线程级并行,成为提高处理器性能的一个趋势。
大规模并行的SIMD(Single Instruction Multiple Data,单指令多数据流)计算机体系结构最近成为众多研究的热点,GPU作为协处理器近年来在高性能计算、图像处理等领域得到广泛应用,然而GPU上的调度模型对于均衡的作业有比较理想的性能,却在动态作业调度的开发上进展有限。调度在系统设计上是一个重要的课题。CPU上的调度模型比较成熟,但GPU的体系架构与CPU的体系架构在几个基础的特性上有所差异,因此,将CPU上的成熟调度模型直接简单地移植到GPU上不可行的,主要原因包括分支复杂和数据结构分层等,无法直接使用。
尽管许多研究人员已经开始关注动态任务分配,但是数据局部性却未受到足够的重视,至今没有针对数据的研究来有效地支持不同类型的并行。
发明内容
本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种提高GPU利用率的基于Whippletree模型的GPU动态任务分配方法。
本发明的目的可以通过以下技术方案来实现:
一种基于Whippletree模型的GPU动态任务分配方法,包括以下步骤:
1)构建Whippletree模型,包括数据元素单元、代码单元、任务单元和代码集合单元;
2)测试所述Whippletree模型的正确性和性能;
3)以经过测试的Whippletree模型进行GPU动态任务分配。
所述Whippletree模型为面向CUDA层面建立。
所述数据元素单元存储有执行过程中要处理的数据元素;
所述代码单元存储有用于处理所述数据元素的代码,并限定了处理单个所述数据元素需要的线程数;
所述任务单元中存储有根据需要处理的数据元素与相应代码生成的任务,所述任务具有不同等级。
所述Whippletree模型执行的内核函数由持续从队列中读取任务的工作块构成,每一所述代码分配有一个队列。
所述队列具有多种类型的入列和出列策略。
对于包含多线程的代码,所述Whippletree模型在执行新的内核函数前进行线程的同步。
所述不同等级的任务使用不同特性的GPU架构,不同等级的任务放入不同的队列中。
所述步骤2)的测试包括正确性测试和矩阵乘法测试;
所述正确性测试具体为:对不同层次的任务进行测试,根据GPU上线程的分配结果测试Whippletree模型的正确性;
所述矩阵乘法测试具体为:通过不同尺寸的矩阵乘法进行测试,分析Whippletree模型的性能。
与现有技术相比,本发明具有以下优点:
1)本发明实现动态任务的GPU调度,通过对任务分级,使得并行块更加稀疏分散,在程序负载不均衡时仍可以获得较高的GPU利用效率。
2)本发明的Whippletree模型通过细粒度的资源调度和开发稀疏分散的并行,根据任务和数据的切分,将整个程序合理地分配给GPU上的线程,从而提高GPU的利用效率。
3)本发明通过小的工作块来进行有效的填充,使得处理器单元的负载连贯。
4)本发明Whippletree模型支持多指令流多数据流(MIMD),任务可以动态地创建而且调度考虑到了数据局部性。
5)本发明可对线程进行同步,队列在每个点不使用额外的锁,可以提高队列的执行效率。
附图说明
图1为本发明的流程示意图。
具体实施方式
下面结合附图和具体实施例对本发明进行详细说明。本实施例以本发明技术方案为前提进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。
如图1所示,本实施例提供一种基于Whippletree模型的GPU动态任务分配方法,包括以下步骤:
1)构建Whippletree模型。Whippletree模型为基于CUDA层面的任务分配模型。CUDA编程模型将CPU作为主机,GPU作为协处理器或者设备。在一个系统中可以存在一个主机和若干个设备。CPU、GPU各自拥有相互独立的存储地址空间:主机端内存和设备端显存。CUDA对内存的操作与一般的C程序基本相同,但是增加了一种新的pinned memory;操作显存则需要调用CUDA API存储器管理函数。一旦确定了程序中的并行部分,就可以考虑把这部分计算工作交给GPU。运行在GPU上的CUDA并行计算函数称为内核函数。一个完整的CUDA程序是由一系列的设备端kernel函数并行步骤和主机端的串行处理步骤共同组成的。这些处理步骤会按照程序中相应语句的顺序依次执行,满足顺序一致性。CUDA(ComputeUnified Device Architecture),是显卡厂商NVIDIA推出的运算平台。CUDATM是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。开发人员现在可以使用C语言来为CUDATM架构编写程序,C语言是应用最广泛的一种高级编程语言。所编写出的程序可以在支持CUDATM的处理器上以超高性能运行。
在Whippletree中使用动态并行策略,即允许代码直接调用GPU上的内核,以前的动态并行策略要求跟踪内核的层次,这限制了程序的性能;此外,为了避免阻塞GPU,必须支持线程块的调度;最后,数据间要通过缓慢的全局内存进行通信。
建立的Whippletree模型包括数据元素单元、代码单元、任务单元和代码集合单元。数据元素单元work items存储有执行过程中要处理的数据元素;代码单元procedures存储有用于处理数据元素的代码,每个procedure声明其在处理单个数据元素所需要的线程数;任务单元tasks中存储有根据需要处理的数据元素与相应代码生成的任务,任务具有不同等级。代码集合单元programs指的是procedures组成的集合,内部的procedure可以相互之间创建任务。
Whippletree模型根据数据局部性和程序的特点对任务进行分级,不同等级的任务使用不同特性的GPU架构,不同等级的任务放入不同的队列中。level-0的任务可以使用束等级的特性,在同一个SIMD组中执行;level-1的任务可以使用块等级的特性,在同一个流处理器中执行;而level-2的任务只能使用GPU全局的特性。不同等级的任务放入不同的队列中,再通过GPU的工作块从队列中读取任务。
Whippletree模型执行的内核函数由持续从队列中读取任务的工作块构成,每一代码分配有一个队列。我们为每个procedure分配一个队列,使得不同的任务类型能够以不同的方式执行,在执行过程中可以创建任意类型的新任务。
Whippletree模型的队列管理:为适应具有不同特性的程序,本发明通过模板库为Whippletree模型添加不同类型的入列和出列策略,可以根据应用的特征选择不同的策略,从而提高模型的适用性。
因为访问全局内存的代码较高,共享内存队列对于提高程序的性能至关重要,然而共享内存有限,而且可能在任务执行过程中使用,因此共享内存队列相对较少,在决定工作块的大小后,可以用剩余的共享内存来完成本地的队列管理任务。
Whippletree模型的线程同步:在程序包含多阶段的procedure时,我们需要在开始执行新的内核函数之前进行线程的同步。由于队列不支持同时的入列和出列操作,因此队列在每个点不使用额外的锁,可以提高队列的执行效率。
2)测试Whippletree模型的正确性和性能,具体为:
通过对不同层次的任务进行测试,根据GPU上线程的分配结果测试模型的正确性。我们选择十个level-2任务和四十个level-0任务进行测试,根据测试结果可知每个level-2任务由单个线程执行,而每个level-0任务由单个线程束执行,与Whippletree模型设计思想相符。
通过不同尺寸的矩阵乘法进行测试,比较Whippletree模型与cuda的内置函数(cuda_matmul)的性能并分析结果。本实施例分别选择尺寸为3200,6400,9600的矩阵进行测试。
通过不同尺寸的矩阵乘法进行测试,比较Whippletree模型与另一个基于动态作业调度的GPU模型的性能并分析结果。在与cuda内置函数比较后,本实施例分别选择尺寸为3200,6400,9600的矩阵进行下一步测试。
测试服务器的主要参数为:中央处理器Processor E5-2695 v3@2.30GHz,内存12GB,GPU Tesla K40,CUDA核心数目为2880。
结果显示,对于不同等级的任务,线程的分配情况与我们预期一致,证明了Whippletree模型的正确性;通过与cuda的内置函数(cuda_matmul)比较,发现Whippletree模型的性能要优于cuda的内置函数,加速比为1.084x;通过与另一个基于动态作业调度的GPU模型比较,发现Whippletree模型的性能要更优,加速比为3.743x。这一实验表明,本发明方法构建的Whippletree模型对于GPU上的作业调度有着优异的性能和适用性。
3)以经过测试的Whippletree模型进行GPU动态任务分配。
Claims (8)
1.一种基于Whippletree模型的GPU动态任务分配方法,其特征在于,包括以下步骤:
1)构建Whippletree模型,包括数据元素单元、代码单元、任务单元和代码集合单元;
2)测试所述Whippletree模型的正确性和性能;
3)以经过测试的Whippletree模型进行GPU动态任务分配。
2.根据权利要求1所述的基于Whippletree模型的GPU动态任务分配方法,其特征在于,所述Whippletree模型为面向CUDA层面建立。
3.根据权利要求1所述的基于Whippletree模型的GPU动态任务分配方法,其特征在于,所述数据元素单元存储有执行过程中要处理的数据元素;
所述代码单元存储有用于处理所述数据元素的代码,并限定了处理单个所述数据元素需要的线程数;
所述任务单元中存储有根据需要处理的数据元素与相应代码生成的任务,所述任务具有不同等级。
4.根据权利要求3所述的基于Whippletree模型的GPU动态任务分配方法,其特征在于,所述Whippletree模型执行的内核函数由持续从队列中读取任务的工作块构成,每一所述代码分配有一个队列。
5.根据权利要求4所述的基于Whippletree模型的GPU动态任务分配方法,其特征在于,所述队列具有多种类型的入列和出列策略。
6.根据权利要求4所述的基于Whippletree模型的GPU动态任务分配方法,其特征在于,对于包含多线程的代码,所述Whippletree模型在执行新的内核函数前进行线程的同步。
7.根据权利要求3所述的基于Whippletree模型的GPU动态任务分配方法,其特征在于,所述不同等级的任务使用不同特性的GPU架构,不同等级的任务放入不同的队列中。
8.根据权利要求1所述的基于Whippletree模型的GPU动态任务分配方法,其特征在于,所述步骤2)的测试包括正确性测试和矩阵乘法测试;
所述正确性测试具体为:对不同层次的任务进行测试,根据GPU上线程的分配结果测试Whippletree模型的正确性;
所述矩阵乘法测试具体为:通过不同尺寸的矩阵乘法进行测试,分析Whippletree模型的性能。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610789786.9A CN106407006A (zh) | 2016-08-31 | 2016-08-31 | 一种基于Whippletree模型的GPU动态任务分配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610789786.9A CN106407006A (zh) | 2016-08-31 | 2016-08-31 | 一种基于Whippletree模型的GPU动态任务分配方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106407006A true CN106407006A (zh) | 2017-02-15 |
Family
ID=58001510
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610789786.9A Pending CN106407006A (zh) | 2016-08-31 | 2016-08-31 | 一种基于Whippletree模型的GPU动态任务分配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106407006A (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101963918A (zh) * | 2010-10-26 | 2011-02-02 | 上海交通大学 | 实现cpu/gpu异构平台的虚拟执行环境的方法 |
CN102609393A (zh) * | 2012-02-08 | 2012-07-25 | 浪潮(北京)电子信息产业有限公司 | 一种线性方程组的数据处理方法及装置 |
CN103336718A (zh) * | 2013-07-04 | 2013-10-02 | 北京航空航天大学 | 一种gpu线程调度优化方法 |
CN103713949A (zh) * | 2012-10-09 | 2014-04-09 | 鸿富锦精密工业(深圳)有限公司 | 动态任务分配系统及方法 |
-
2016
- 2016-08-31 CN CN201610789786.9A patent/CN106407006A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101963918A (zh) * | 2010-10-26 | 2011-02-02 | 上海交通大学 | 实现cpu/gpu异构平台的虚拟执行环境的方法 |
CN102609393A (zh) * | 2012-02-08 | 2012-07-25 | 浪潮(北京)电子信息产业有限公司 | 一种线性方程组的数据处理方法及装置 |
CN103713949A (zh) * | 2012-10-09 | 2014-04-09 | 鸿富锦精密工业(深圳)有限公司 | 动态任务分配系统及方法 |
CN103336718A (zh) * | 2013-07-04 | 2013-10-02 | 北京航空航天大学 | 一种gpu线程调度优化方法 |
Non-Patent Citations (2)
Title |
---|
MARKUS STEINBERGER 等: "Whippletree: Task-based Scheduling of Dynamic Workloads on the GPU", 《ACM TRANSACTIONS ON GRAPHICS》 * |
施伯乐: "《数据结构教程》", 30 June 2011 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2707797B1 (en) | Automatic load balancing for heterogeneous cores | |
CN102902512B (zh) | 一种基于多线程编程及消息队列的多线程并行处理方法 | |
Wang et al. | Dynamic thread block launch: A lightweight execution mechanism to support irregular applications on gpus | |
US11243816B2 (en) | Program execution on heterogeneous platform | |
CN102981807B (zh) | 一种基于cuda并行环境的gpu程序优化方法 | |
CN105468439B (zh) | 在cpu-gpu异构框架下遍历固定半径内邻居的自适应并行方法 | |
CN102708009B (zh) | 一种基于cuda实现多任务共享gpu的方法 | |
US20100223213A1 (en) | System and method for parallelization of machine learning computing code | |
US20140108403A1 (en) | License Reconciliation with Multiple License Types and Restrictions | |
US10268519B2 (en) | Scheduling method and processing device for thread groups execution in a computing system | |
CN103279379A (zh) | 用于在没有指令解码的情况下调度指令的方法和装置 | |
Otterness et al. | Inferring the scheduling policies of an embedded CUDA GPU | |
US20110131554A1 (en) | Application generation system, method, and program product | |
Wahib et al. | Optimization of parallel genetic algorithms for nVidia GPUs | |
Ruan et al. | A comparative study of large-scale cluster workload traces via multiview analysis | |
KR101177059B1 (ko) | 병렬 제어 모듈을 동적으로 할당하는 방법 | |
CN111666202A (zh) | 二进制插桩来跟踪图形处理器代码 | |
El-Khamra et al. | Performance evaluation of r with intel xeon phi coprocessor | |
CN105637482A (zh) | 基于gpu的数据流处理方法和装置 | |
Zhang et al. | To co-run, or not to co-run: A performance study on integrated architectures | |
CN106407006A (zh) | 一种基于Whippletree模型的GPU动态任务分配方法 | |
US20220413849A1 (en) | Providing atomicity for complex operations using near-memory computing | |
CN114067917A (zh) | 基于调优参数的gatk超级计算机系统 | |
Belviranli et al. | A paradigm shift in GP-GPU computing: task based execution of applications with dynamic data dependencies | |
Siddiqui et al. | Design space exploration of embedded applications on heterogeneous cpu-gpu platforms |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170215 |
|
RJ01 | Rejection of invention patent application after publication |