虚拟化技术下的多GPU任务调度方法与流程

文档序号:17988688发布日期:2019-06-22 00:36阅读:484来源:国知局
虚拟化技术下的多GPU任务调度方法与流程

本发明涉及任务调度技术领域,特别涉及虚拟化技术下的多gpu任务调度方法。



背景技术:

随着计算机、通信和人工智能技术的发展,软件定义在各行各业发挥着越来越重要的左右作用,从软件定义无线电、软件定义雷达到软件定义网络、软件定义存储、软件定义数据中心,传统的以硬件为主,软件为辅的软硬件关系逐渐被扭转,硬件资源虚拟化,软硬件分离的新型软硬件关系开始在各个领域发挥重要的作用。随着gpgpu技术的快速发展,cpu+gpu异构平台由于其出色的计算能力,已经成为高性能异构平台中的重要发展助力。而软件定义背景下的新型软硬件关系对cpu+gpu异构平台的灵活性、扩展性以及平台的任务部署和调度等方面提出了更高的要求。

常用的任务调度算法根据在程序执行前能否精确获取应用的有向无环图(directionasyclicgraph,dag)以及处理器上的相关信息,将任务调度算法分为静态调度和动态调度两大类。动态调度算法是一种实时的任务调度算法,在进行任务调度时需要消耗大量的处理器资源,算法复杂度较高,稳定性较差,相比于动态调度算法,静态调度算法具有较好的稳定性和较低的复杂度。

常用的静态调度算法主要有基于列表的调度算法、基于任务复制的调度算法、基于启发式的调度算法以及基于任务聚类的调度算法。基于列表的调度算法是利用一定的策略,为节点和处理器赋予一定的优先级,根据优先级的大小生成有序的任务列表,再根据处理器的特点为任务列表中的任务分配相应的处理器。基于列表的调度算法相比于其他三种算法由于具有较小的算法复杂度和较高的鲁棒性而被广泛的使用在大量的异构平台中。常用的列表算法主要有hps(high-performancetaskscheduling)算法、pets(performanceeffectivetaskscheduling)算法、heft(heterogeneousearliestfinishtime)算法以及cpop(criticalpathonaprocessor)算法,其中heft算法根据dag图中节点到出口节点的最长路径进行排序,而hps算法根据节点的最大传输代价进行排序,这两个算法由于调度效率较高,成为重要的对比算法。

cpu+gpu异构平台是一种适合做密集型计算的一致性硬件平台,具有高吞吐量低传输速率的特点,其他常用的任务调度技术在cpu+gpu异构平台上出现了效率低,负载不均,通信开销大等问题。



技术实现要素:

针对上述问题,本发明提供虚拟化技术下的多gpu任务调度方法,提高了任务调度效率。

为了实现上述目的,本发明采用以下技术方案:

虚拟化技术下的多gpu任务调度方法,包括以下步骤:

步骤1:构建应用的dag图,所述dag图包括多个任务节点;

步骤2:利用拓扑排序的方式对dag图进行分层;

步骤3:通过任务节点的优先级对dag图中每一层的任务节点进行排序;

步骤4:计算目标任务节点在处理器上的预测最早完成时间,将任务节点映射到预测最早完成目标任务的gpu处理器上;

步骤5:通过预测最早完成任务时间最短的gpu处理器对任务进行调度。

进一步地,所述任务的dag图表示为dag=[v,e,c,tc,tp],其中v表示任务节点,e表示连接两个任务节点的有向边,c表示任务节点的计算量,tc表示任务节点待处理的数据量,tp表示数据产生量。

进一步地,所述任务节点的优先级通过任务节点的优先级公式得出,所述任务节点的优先级公式为:

priority=density+averdown(2)

其中priority表示任务节点的优先级的权值,density=en/vn2,density表示dag图的稀疏度,averdown表示任务父节点到任务子节点的平均传输量,en表示边数,vn表示节点数。

进一步地,所述节点在处理器上的预测最早完成时间由下式得到:

其中,表示的是任务父节点vj的最早完成时间,表示的是任务父节点vj传递给任务子节点vi的数据量,ts表示的是gpu之间的传输速率,表示的是vi的计算量,pck表示的是第k个gpu处理器的计算能力。

进一步地,所述gpu处理器的计算能力为:

computational=ln(smnum*warpnum)(1)

其中computational表示gpu处理器的计算能力,smnum表示的是gpu处理器上的sm的数量,warpnum表示一个sm上可以同时执行的warp数量,smnum*warpnum表示的是一个gpu处理器上可以同时并行的线程数量。

与现有技术相比,本发明具有的有益效果:

本发明通过虚拟化gpu的计算能力,实现cpu+gpu异构平台中软硬件的分离,通过拓扑排序的方式,实现dag图的分层,以各个节点子图的稀疏度以及节点到子节点的平均传输代价之和作为优先级准则,采用广度遍历的思想,根据每一层节点的优先级顺序,为其分配最早完成时间最小的处理器。通过仿真验证和测试,可以发现,本发明对gpu计算能力虚拟化模型,不仅行之有效,而且其调度效率在一定程度上要优于其他两种调度算法。在随机dag图的测试过程中,本发明负载更加均衡,调度效率相比于heft算法有了8%的性能提升,相比于hps算法有了12%的性能提升,在实际应用的调度测试中,调度效率相比于heft算法和hps算法分别提升了10%和15%。

附图说明

图1为本发明实施例的虚拟化技术下的多gpu任务调度方法的基本流程图。

图2为本发明又一实施例的虚拟化技术下的多gpu任务调度方法的基本流程图。

图3为本发明实施例的硬件架构模型示意图。

图4为本发明实施例的典型dag图。

图5为本发明实施例的典型dag图时间流对比图。

图6为本发明实施例的随机dag图仿真slr结果对比图。

图7为本发明实施例的随机dag图归一化负载方差对比图。

图8为本发明实施例的随机dag图调度成功概率对比图。

图9为本发明实施例的5阶矩阵高斯消去法任务图。

图10为本发明实施例的硬件平台测试模型示意图。

图11为本发明实施例的高阶矩阵高斯消去法dag图测试slr对比图。

图12为本发明实施例的高阶矩阵高斯消去法dag图测试归一化负载方差对比图。

具体实施方式

下面结合附图和具体的实施例对本发明做进一步的解释说明:

实施例一:

如图1所示,一种虚拟化技术下的多gpu任务调度方法,包括以下步骤:

步骤s101:构建应用的dag图,所述dag图包括多个任务节点;

具体地,所述任务的dag图表示为dag=[v,e,c,tc,tp],其中v表示任务节点,e表示连接两个任务节点的有向边,c表示任务节点的计算量,tc表示任务节点待处理的数据量,tp表示数据产生量。

步骤s102:利用拓扑排序的方式对dag图进行分层;

步骤s103:通过任务节点的优先级对dag图中每一层的任务节点进行排序;

具体地,所述任务节点的优先级通过任务节点的优先级公式得出,所述任务节点的优先级公式为:

priority=density+averdown(2)

其中priority表示任务节点的优先级的权值,density=en/vn2,density表示dag图的稀疏度,averdown表示任务父节点到任务子节点的平均传输量,en表示边数,vn表示节点数。

步骤s104:计算目标任务节点在处理器上的预测最早完成时间,将任务节点映射到预测最早完成目标任务的gpu处理器上;

具体地,所述节点在处理器上的预测最早完成时间由下式得到:

其中,表示的是任务父节点vj的最早完成时间,表示的是任务父节点vj传递给任务子节点vi的数据量,ts表示的是gpu之间的传输速率,表示的是vi的计算量,pck表示的是第k个gpu处理器的计算能力。

具体地,所述gpu处理器的计算能力为:

computational=ln(smnum*warpnum)(1)

其中computational表示gpu处理器的计算能力,smnum表示的是gpu处理器上的sm的数量,warpnum表示一个sm上可以同时执行的warp数量,smnum*warpnum表示的是一个gpu处理器上可以同时并行的线程数量。

步骤s105:通过预测最早完成任务时间最短的gpu处理器对任务进行调度。

实施例二:

如图2所示,另一种虚拟化技术下的多gpu任务调度方法,包括:

步骤s201:构建cpu+gpu硬件模型;

随着cpu制作工艺带来的性能提升速率渐入瓶颈,gpu的轻量级多线程计算的高吞吐量的优点逐渐凸显出来,厂商将cpu的逻辑控制能力与gpu的浮点计算能力相结合,形成cpu主控gpu主运算的异构协同处理平台,其平台模型如图3所示。

cpu与gpu通过pcie总线进行连接,而多gpu之间有两种连接方式,一种是多gpu在同一个pcie总线上,gpu之间可以通过pcie总线直接进行数据的传输;另一种是gpu需要借助cpu中转的方式进行数据的传输。而pcie总线资源有限,所能连接的外设资源有限,因此,对于大多数的cpu+gpu异构平台来说,多个gpu之间的数据通信需要借助cpu才能够完成。

步骤s202:构建应用的dag图,所述dag图包括多个任务节点;

任务的静态调度以应用生成的dag图为基础,因此,在调度之前需要根据应用生成对应的任务dag图,具体地,所述任务的dag图表示为dag=[v,e,c,tc,tp],其中v表示任务节点,e表示连接两个任务节点的有向边,c表示任务节点的计算量,tc表示任务节点待处理的数据量,tp表示数据产生量。

为了更好的应对软件定义技术在cpu+gpu异构平台技术的变革,更好的适应应用的实时性、通用性提出的新要求,以及能够更好的对复杂多变的环境做出快速反映,将各算法(加、减、乘、除、平方等运算)的核心内容封装成相应组件,根据处理环境的变化以及应用的不同需求,组合各种组件,生成相应应用的执行流程,完成任务的需求。因此,相应组件中所需要执行的内容也随之确定,确定了输入的数据量后,就可以确定整个组件的计算量,就可以进一步确定各个任务节点的计算量。而组件化的调度方式,能够更好的实现软硬件分离,可以有效的提高平台的扩展能力,能够根据需求的变换进行快速的组件切换,大大提升了平台在复杂环境下的处理能力。

步骤s203:利用拓扑排序的方式对dag图进行分层;

得到应用的dag图后,根据dag图的连接关系,进行任务的划分和调度。而基于dag图的任务调度可以视为对图的遍历过程,遍历主要分为深度优先和广度优先两种,对于cpu+gpu异构平台来讲,由于节点之间的传输效率低,采用深度优先的方式,会造成大量的节点等待时间,因此,本实施例采用广度遍历的思想来进行任务的调度。在进行广度遍历之前,要为dag图进行分层,本实施例利用拓扑排序的方式进行分层。拓扑排序的分层方式,可以有效的避免在进行广度遍历过程中出现重复遍历的现象,提升了分层的准确性,降低了遍历算法的复杂度,提高了广度遍历的效率。

步骤s204:通过任务节点的优先级对dag图中每一层的任务节点进行排序;

具体地,所述任务节点的优先级通过任务节点的优先级公式得出,所述任务节点的优先级公式为:

priority=density+averdown(2)

其中priority表示任务节点的优先级的权值,density=en/vn2,density表示dag图的稀疏度,averdown表示任务父节点到任务子节点的平均传输量,en表示边数,vn表示节点数。

值得说明的是,任务节点具体包括任务父节点和任务子节点,dag图中上一层的每个任务节点均为下一层的任务父节点,下一层的每个任务节点均为上一层的任务子节点。

图的稀疏度定义如下:

定义:vn表示节点数,en表示边数,用density=en/vn2表示dag图的稀疏度,将en<<vn2的dag图称为稀疏图,反之称为稠密图。

dag图的density可以用来衡量一个dag图中节点的连接程度。本实施例将每一个任务节点作为图的入口节点(dag图中初始端任务节点),根据应用的连接关系,将任务节点到出口节点的所有后继节点作为任务节点对应的dag子图,根据dag图的density的定义,计算任务节点对应的dag子图的density。

多gpu之间通信开销问题是限制cpu+gpu异构平台处理效率的一个重要因素。任务节点到出口节点(dag图中最末端任务节点)的图的稀疏度,可以衡量该节点与后继节点的连接情况,稀疏度大的节点,说明节点间的连接关系更加复杂,后继节点的等待时间就会增加,而稀疏度小的节点,说明后继节点连接关系简单,后继节点的等待时间较小。将节点的density与averdown之和作为节点的排序准则,其目的在于优先处理每一层中后继节点连接复杂且后续通信量大的节点,并利用gpu的折叠传输的能力,实现传输延迟的隐藏。

步骤s205:计算目标任务节点在处理器上的预测最早完成时间,将任务节点映射到预测最早完成目标任务的gpu处理器上;

具体地,所述节点在处理器上的预测最早完成时间由下式得到:

其中,表示的是任务父节点vj的最早完成时间,表示的是任务父节点vj传递给任务子节点vi的数据量,ts表示的是gpu之间的传输速率,表示的是vi的计算量,pck表示的是第k个gpu处理器的计算能力。

由于nvidia公司推出的cuda架构,大大降低了gpu编程的难道,因此,在进行gpu编程时,首选nvidia显卡,目前,nvidia已经相继推出了femi、kelper、maxwell、pascal、volta等多种gpu架构的显卡。而由于架构的不同也带来了gpu处理能力的不同。

gpu的计算能力由同时并行的线程数决定,而同时并行的线程数由gpu上的硬件资源sm(streamingmultiprocessor)决定。gpu上的指令都是由基本处理单元sp(streamingprocessor)来执行的,一个sp对应于一个线程,gpu上的并行计算就是利用多个sp同时执行一个指令。多个sp以及一些其他的资源就组成了sm,sm相当于一个gpu核,它以32个线程为一个warp(warp是调度和运行的基本单元),进行任务的调度和执行。应用在gpu上执行之前要事先为应用配置thread和block资源,一个block中的thread是在同一个sm上执行的。当一个block中的线程过多时,在gpu上的执行就不在是逻辑上规划的同时执行,而是具有一定的先后顺序。因此,根据gpu的硬件结构可以计算出gpu的计算能力,计算公式如下所示:

computational=ln(smnum*warpnum)(1)

其中computational表示gpu的计算能力,smnum表示的是gpu上的sm的数量,warpnum表示一个sm上可以同时执行的warp数量,smnum*warpnum表示的是一个gpu上可以同时并行的线程数量。公式(1)是利用gpu架构下的硬件资源进行的性能抽象,可以更加准确的量化gpu的处理能力,可以适用于所有的gpu架构。

步骤s206:通过预测最早完成任务时间最短的gpu处理器对任务进行调度。

为了更好的衡量本实施例方法(另一种虚拟化技术下的多gpu任务调度方法)的调度效率,对文献1(topcuogluh,hariris,wumy.performance-effectiveandlow-complexitytaskschedulingforheterogeneouscomputing[j].ieeetransactionsonparallel&distributedsystems,2002,13(3):260-274)中的调度长度比率(schedulinglengthratio,slr)进行优化,将应用dag图的所有节点的平均计算时间与所有边的传输时间之和sumnodeedg作为分母,代替关键路径任务的最小计算代价,slr值越小,本实施例方法的结果越优越。调度长度比率slr公式如下:

其中makespan(solution)表示根据solution算法得出的调度时间。

为了衡量本实施例方法的负载的分配情况,利用各个gpu处理器的负载方差loadvar来评判实施例的负载分配的均衡情况。负载方差loadvar公式如下:

其中pronum表示gpu处理器的数量,proloadn表示n号gpu处理器上的负载数,表示gpu处理器上的平均负载量。

a.典型dag图仿真对比

为了测试本实施例方法的调度的有效性,利用文献1中的典型dag图进行实验仿真验证,典型的dag图如图4所示。节点的计算量、传输量以及处理器的处理能力均取随机值,通过计算得到的节点在各个处理器上的执行时间记录在表1中,数据的传输时间记录到datatran矩阵中,其中aij∈datatran表示节点vi到节点vj的传输时间,将调度的结果以时间流图的形式与heft算法以及hps算法进行比较,如图5所示。

表1任务节点在各个gpu处理器上的执行时间

通过图5的时间流图的对比可以看出heft算法的调度跨度为386.05,调度的顺序为:[v1,v2,v5,v3,v6,v4,v8,v9,v7,v10]。hps算法的调度跨度为398.21,调度的顺序为[v1,v3,v2,v4,v5,v6,v8,v9,v7,v10]。本实施例方法的调度跨度为363.74,调度的顺序为[v1,v5,v3,v2,v4,v6,v8,v9,v7,v10]。在典型dag图的情况下,对比heft算法、hps算法和本实施例方法的调度跨度,可以看出:本实施例方法相比于heft算法节省了5%的调度时间,相比于hps算法节省了约8%的调度时间。

根据表1和datatran矩阵中的数据,可以计算出公式(3)中的sumnodeedg=1268.34,根据公式(3)可以计算出heft算法、hps算法和本实施例方法的slr值并记录到表2中。

表2.heft算法、hps算法和本实施例方法的关于典型dag图的slr值

通过对比表2中heft算法、hps算法和本实施例方法的slr值,可以看出本实施例方法在典型dag上的调度效率要优于heft算法以及hps算法。

为了对比heft算法、hps算法和本实施例方法的负载均衡情况,将heft算法、hps算法和本实施例方法在各个gpu处理器上的任务数记录到表3中,并计算heft算法、hps算法和本实施例方法的loadvar值。

表3.heft算法、hps算法和本实施例方法关于典型dag图各个处理器负载量

通过表2表3中的数据可以发现,heft算法和本实施例方法在典型dag图中的任务调度中,负载量相同的情况下,本实施例方法的调度效率要优于heft算法,并将调度的时间减小了约5%。

b.随机dag图仿真对比

为了测试本实施例方法的调度效率以及算法的鲁棒性,利用随机生成的dag图做调度仿真。通过观察heft算法、hps算法以及本实施例方法的slr值和归一化loadvar值随着节点数增加的变化情况,并记录重复实验过程中各个算法优于其他两种算法的次数,求其概率。实验结果如图6、图7所示。

随机产生大量不同节点数的dag图,并尽可能包含各种情况的dag连接关系,对相同节点数的实验结果求平均,比较相同节点数下heft算法、hps算法和本实施例方法的调度情况,对比slr值,如图6所示,可以看出,在不同的节点数情况下,本实施例方法的slr值相比于heft算法约有8%的性能提升,相比于hps算法,约有12%的性能提升。由此可以看出本实施例方法的调度效率在三种算法中最高。

比较相同节点数下heft算法、hps算法和本实施例方法的归一化loadvar,如图7所示,归一化loadvar越小,说明各个gpu处理器上的负载更加均衡,通过对比,可以看出,在不同节点数量的dag图任务调度中,本实施例方法负载相比于其他两种算法更为均衡。

通过图8可以看出,在对大量的随机dag图进行任务调度时,发现大约只有大约60%的情况是本实施例方法的调度优于其他两种算法的调度,另外,随机产生的dag图中存在着大量的串行连接,而三种算法在面对串行连接的情况下,调度的效率基本一致。总体来说,本实施例方法在随机dag图的任务调度过程中,相比于其他两种算法,效率更高,负载更加均衡,且适用范围更广。

c.实际应用仿真测试

以对不同阶数的矩阵运用高斯消去法求解上三角矩阵为例,通过对实际的应用图的测试,比较heft算法、hps算法以及本实施例方法的性能差异。

以文献2(周娜琴.分布式环境下异构多处理机的相关任务的调度方法研究[d].华南理工大学,2017)中的5阶矩阵为例,生成应用的dag图如图9所示。

其中各个节点的计算量(计算次数)可以由2.3中的方法得到,并记录在表4中。

表4五阶矩阵高斯消去法dag图任务节点的计算量

实验测试的硬件平台模型如图10所示。

根据本实施例方法可以得出图9的执行顺序为[v1,v3,v5,v2,v4,v6,v9,v8,v7,v10,v11,v12,v13,v14],heft算法的执行顺序为[v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14],hps算法的执行顺序为:[v1,v3,v5,v4,v2,v6,v9,v8,v7,v10,v11,v12,v13,v14]。由于cpu+gpu异构平台适合于进行密集型的数据计算,因此,对于五阶矩阵的求解传输代价较高,测试效果不佳。为了验证heft算法、hps算法和本实施例方法的调度效率,通过分析五阶矩阵的执行过程,测试了更高阶矩阵的求解过程,并对比三种算法的slr值和负载方差,其结果如图11、图12所示。

对比heft算法、hps算法和本实施例方法在相同节点数下的slr值,如图11所示,可以看出,本实施例方法相比于heft算法调度效率大约有10%的性能提升,相比于hps算法的调度效率大约有15%的性能提升。

通过以上的实验可以看出,针对cpu+gpu异构平台设计的一致性硬件模型和传输成本高所设计的本实施例方法在cpu+gpu异构平台上相比于heft算法以及hps算法更能够发挥重要作用,可以有效的提升平台的执行效率,使处理器上的负载能够更加均衡。

软件定义技术的飞速发展推动着异构平台向着软硬件分离的新型软硬件关系转变。cpu+gpu异构平台作为重要的异构平台,由于其一致性硬件模型的特点,使其硬件资源虚拟化的实现变为可能。基于cpu+gpu硬件资源虚拟化的基础上,分析cpu+gpu异构平台的硬件特点和限制异构平台效率提升的瓶颈,设计了适合于cpu+gpu异构平台的本实施例方法。本实施例方法在实现dag图分层的基础上,将广度遍历与优先级排序相结合的任务划分策略与节点最早完成时间最小的处理器分配策略相结合,实现了应用的高效调度。将算法与heft算法以及hps算法进行比较,通过实验仿真和测试,证明了本实施例方法相比于其他两种算法具有更广泛的应用场景,更好的调度效率,负载更加均衡的优点。

以上所示仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1