一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种面向CPU-GPU异构资源的任务调度方法与流程

2022-08-17 09:33:16 来源:中国专利 TAG:

一种面向cpu-gpu异构资源的任务调度方法
技术领域
1.本发明涉及异构计算资源任务调度技术领域,具体涉及一种面向cpu-gpu异构资源的任务调度方法。


背景技术:

2.随着算法应用对计算资源算力需求的增长,cpu的计算能力无法满足算力需求,采用cpu-gpu异构计算系统可为计算密集型应用提供更加强大的计算能力,因此得到了广泛应用。cpu具有较大的缓存容量和大量数字逻辑运算单元,擅长逻辑运算,gpu是基于大吞吐量的设计,擅长大规模的并行计算。研究如何根据计算任务属性将其分配至合适的计算资源上执行以提升计算效率,同时考虑如何通过任务调度解决系统负载均衡问题变得更加有意义。典型任务调度方法分为静态调度和动态调度,静态调度指在程序运行前已确定好调度方案,其优点为调度开销小,容易实施,但是容易造成负载不均衡。动态调度是指根据计算资源的负载状态,实时调整任务分配,使得各计算单元负载均衡,但动态调度相比于静态调度内存和时间开销较大。


技术实现要素:

3.本技术提供了一种面向cpu-gpu异构资源的任务调度方法,根据静态调度策略进行计算图切分,实现了算法应用计算任务在异构计算资源上的分配执行,同时通过对gpu资源状态的监控,调整子图调度策略,为解决计算单元负载不均问题提供了有效技术途径。
4.本发明的发明目的采用以下技术方案实现:
5.一种面向cpu-gpu异构资源的任务调度方法,其特征在于,所述方法包括:
6.步骤1:根据算法应用,构建程序任务计算图;
7.步骤2:根据预先定义的静态调度策略,将所述程序任务计算图,切分为适合cpu上执行的cpu程序任务计算子图,和适合gpu上执行的gpu程序任务计算子图;
8.步骤3:将cpu程序任务计算子图映射到cpu上执行,将gpu程序任务计算子图映射到gpu上执行;
9.步骤4:在cpu程序任务计算子图和gpu程序任务计算子图的执行过程中,实时监控cpu和gpu计算资源状态,根据计算单元资源状态,实时调整剩余的程序任务计算子图的调度策略,以实现计算单元负载均衡;
10.步骤5:重复步骤4,实时调整子图执行策略,并在不同计算单元上依次完成剩余子图执行,输出计算结果。
11.优选的,所述程序任务计算图为有向无环图,所述有向无环图为没有环的有向图,由节点和有向边构成的集合,节点与节点间通过有向边连接,具有单一方向。
12.优选的,所述静态调度策略为结合各计算节点在不同计算单元上执行完成的耗时,并预估数据在cpu和gpu间搬移造成的耗时,综合考虑节点执行和数据搬移耗时,进行子图的切分。
13.优选的,所述步骤3包括:
14.根据子图优先级,依次执行各个程序任务计算子图,并进行各个程序任务计算子图输入输出数据的搬移。
15.优选的,所述步骤4包括:
16.在子图执行过程中,对计算单元gpu的资源占用状态进行监控,若gpu无其他程序占用,则按照之前划分,将gpu程序任务计算子图依次分配至gpu端执行。
17.优选的,所述步骤4包括:
18.在子图执行过程中,对计算单元gpu的资源占用状态进行监控,若监控到gpu资源被占,则将gpu程序任务计算子图调度至cpu端执行,以减小程序等待时间。
19.优选的,所述步骤4还包括:
20.监控cpu计算单元资源状态,若处于空闲状态,可将后续gpu上的部分gpu程序任务计算子图分配到cpu端进行执行,从而保证各计算单元的负载均衡,减小计算资源的闲置浪费问题。
21.优选的,将所述程序任务计算图,切分为适合cpu上执行的cpu程序任务计算子图,和适合gpu上执行的gpu程序任务计算子图,具体包括:
22.根据代价评估函数实现子图的切分:
[0023][0024]
其中,c
op
为节点的耗时,t
cpu
为在cpu执行该节点的耗时,t
gpu
为在gpu上执行该节点的耗时,t
data_t
为在gpu上执行该子图时上传和下载数据所造成的数据搬移耗时;
[0025][0026]
cb为子图在cpu或gpu计算单元上的总耗时,选择最终耗时最小的计算单元为该子图计算分配的计算后端,根据该策略,完成子图切分。
[0027]
本发明具有以下技术效果:
[0028]
1、本发明提供的一种面向cpu-gpu异构资源的任务调度方法,针对异构计算单元属性和算法应用计算属性,根据静态调度策略将构建出的计算图进行子图切分,并完成各子图在cpu和gpu端的分配,实现了算法应用在cpu和gpu计算单元上的异构运行。
[0029]
2、本发明提供的一种面向cpu-gpu异构资源的任务调度方法,在算法执行过程中,通过实时监控计算单元cpu和gpu的资源状态,调整子图分配策略,尽可能实现各计算单元上的工作负载均衡,为消除异构计算资源负载不均问题提供了有效的解决思路。
附图说明
[0030]
为进一步说明本发明的技术内容,以下结合附图及实施案例对本发明详细说明如下,其中:
[0031]
图1是面向cpu-gpu异构资源的任务调度流程图。
[0032]
图2是根据算法应用构建的计算图示意图。
[0033]
图3是根据静态调度策略进行子图切分后的结果示意图。
[0034]
图4是动态子图切分策略示意图。
具体实施方式
[0035]
本发明的主要目的在于提供了一种面向cpu-gpu异构资源的任务调度方法,根据算法应用,构建程序任务计算图,结合计算资源各单元属性和任务节点属性,根据自定义的静态调度策略,将计算图切分为适合cpu或gpu上执行的两部分计算子图,在计算子图执行过程中,根据计算单元gpu资源监控状态,实时调整子图调度策略,以实现各计算单元的负载均衡。本发明提供的面向cpu-gpu异构资源的任务调度方法根据静态调度策略进行计算图切分,实现了算法应用计算任务在异构计算资源上的分配执行,同时通过对gpu资源状态的监控,调整子图调度策略,为解决计算单元负载不均问题提供了有效技术途径。
[0036]
下面详细描述本发明的实施方式,所述实施方式的示例在附图中示出。
[0037]
实施例一
[0038]
一种面向cpu-gpu异构资源的任务调度方法,包括如下步骤:
[0039]
步骤1:根据算法应用,构建程序任务计算图;
[0040]
步骤2:将所述程序任务计算图,根据预先定义的静态调度策略,切分为适合cpu上执行的cpu程序任务计算子图,和适合gpu上执行的gpu程序任务计算子图;
[0041]
步骤3:将cpu程序任务计算子图映射到cpu上执行,将gpu程序任务计算子图映射到gpu上执行;
[0042]
步骤4:在cpu程序任务计算子图和gpu程序任务计算子图的执行过程中,实时监控cpu和gpu计算资源状态,根据计算单元资源状态,实时调整剩余的程序任务计算子图的调度策略,以实现计算单元负载均衡;
[0043]
步骤5:重复步骤4,实时调整子图执行策略,并在不同计算单元上依次完成剩余子图执行,输出计算结果。
[0044]
作为本发明的一种优选方案,所述步骤1中的程序任务计算图为有向无环图,即没有环的有向图,由节点和有向边构成的集合,节点与节点间通过有向边连接,具有单一方向。
[0045]
作为本发明的一种优选方案,所述步骤2的静态调度策略结合各计算节点在不同计算单元上执行完成的耗时,并预估数据在cpu和gpu间搬移造成的耗时,综合考虑节点执行和数据搬移耗时,进行子图的切分。
[0046]
需要说明的是,节点执行耗时主要是指在cpu或gpu单元上执行该节点的完成时间,数据搬移耗时是指将前一个节点的输出数据结果搬移到当前节点执行的计算单元上的耗时和当前节点输出结果搬移到下一个节点计算单元上的耗时之和。通过该策略评估后,可切分得到分别在cpu和gpu端最适合执行的子图。
[0047]
作为本发明的一种优选方案,所述步骤3根据步骤2得到的cpu和gpu端计算子图,分别在计算单元上运行包括:根据子图优先级,依次执行各个程序任务计算子图,并进行各个程序任务计算子图输入输出数据的搬移。
[0048]
需要说明的是,子图优先级为各子图执行的先后顺序,由步骤1中程序任务计算图决定,即计算图中最先执行的子图其优先级最高,后续执行的子图优先级依次降低。
[0049]
作为本发明的一种优选方案,所述步骤4包括:
[0050]
在子图执行过程中,对计算单元gpu的资源占用状态进行监控,若gpu无其他程序占用,则按照之前划分,将gpu程序任务计算子图依次分配至gpu端执行;若监控到gpu资源被占,则将gpu程序任务计算子图调度至cpu端执行,以减小程序等待时间。
[0051]
同时可监控cpu计算单元资源状态,若处于空闲状态,可将后续gpu上的部分gpu程序任务计算子图分配到cpu端进行执行,从而保证各计算单元的负载均衡,减小计算资源的闲置浪费问题。通过动态调整cpu和gpu的工作负载,以最大限度平衡计算单元间工作负载,提高异构计算单元利用率。
[0052]
所述步骤5重复步骤4,以实时动态调整剩余的程序任务计算子图分配方式,根据实时调整的分配策略,完成子图的执行并输出计算结果。
[0053]
实施例二
[0054]
一种面向cpu-gpu异构资源的任务调度方法,包括根据算法应用构建计算图、根据静态策略进行子图切分、子图执行、通过监控计算资源状态动态调整调度策略、执行调整后的子图、最后输出计算结果等过程,如图1所示。
[0055]
面向cpu-gpu异构资源的任务调度过程中,根据算法应用采用有向无环图思想进行程序计算图的构建,采用广度搜索和深度搜索找到全部节点,构建得到的计算图。如图2所示,每个节点为程序任务的独立算子,即单个可分离功能计算块,每个节点拥有数据输入、输出流,节点间通过边连接,具有方向性,后方节点需要前方节点的结果输出作为数据输入。当数据从起点走完整个节点到输出时,由最终节点输出的数据即为程序任务计算图结果。如节点1输入,到节点11的输出即为最终计算结果。
[0056]
根据静态调度策略,进行计算子图切分,得到适合在gpu和cpu上执行的子图。该策略具体如下。
[0057]
根据所提出一种代价评估函数实现子图的切分,即
[0058][0059]
其中,c
op
为节点的耗时,t
cpu
为在cpu执行该节点的耗时,t
gpu
为在gpu上执行该节点的耗时,t
data_t
为在gpu上执行该子图时上传和下载数据所造成的数据搬移耗时。
[0060][0061]
cb为子图在cpu或gpu计算单元上的总耗时,选择最终耗时最小的计算单元最为该子图计算分配的计算后端。根据该策略,完成子图切分,该切分过程具体为:首先根据各独立算子是否能在cpu或gpu上执行,构建所有可能的切分子图集合,每个切分后的子图集合,均可以实现整个计算图功能;然后根据代价评估函数计算每个子图集合的总耗时,比较后选择总耗时最小的子图集作为静态策略切分后的子图。如图3中所示,虚线部分为gpu端子图,实线部分为cpu端子图,cpu端子图分别为:节点1、节点2、节点7、节点10、节点11五个,gpu端子图为节点节点5、节点3-6-9、节点4-8三个。
[0062]
对切分后的子图在对应计算单元上进行执行,运行过程中根据计算单元提供的状态获取接口,实时获取计算资源占用状态,如获取gpu当前的计算负载,当前子图计算完毕后,根据资源状态调整下一个子图的调度策略,如下一个子图,如虚框内所示子图,按照之
前静态调度策略分配的计算后端为gpu,但通过资源监控发现gpu资源已被其他程序占用,此时将该子图由原来的gpu分配至空闲状态的cpu,以降低等待时间,提升整体执行效率,如图4所示。
[0063]
在执行开始执行新的子图前,均进行计算单元资源状态监控,并根据监控结果,调整子图调度策略,尽可能实现计算单元计算负载均衡,直到所有子图计算完毕,得到计算最终结果。
[0064]
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献