CN108205465B - 流式应用程序的任务动态调度方法和装置 - Google Patents
流式应用程序的任务动态调度方法和装置 Download PDFInfo
- Publication number
- CN108205465B CN108205465B CN201611183070.0A CN201611183070A CN108205465B CN 108205465 B CN108205465 B CN 108205465B CN 201611183070 A CN201611183070 A CN 201611183070A CN 108205465 B CN108205465 B CN 108205465B
- Authority
- CN
- China
- Prior art keywords
- task
- streaming application
- computing
- tasks
- units
- 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.)
- Active
Links
Images
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/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
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- 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/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multi Processors (AREA)
Abstract
本发明提供一种流式应用程序的任务动态调度方法,包括:1)可用计算单元数目发生变化时,读取预存的当前流式应用程序静态最优策略;2)选出为当前流式应用程序保留的Nr个计算单元;3)基于最优静态策略下所有计算单元的任务负载之和,以及当前的可用计算单元个数Nr,得到保持负载均衡所需的每个可用计算单元的负载阈值;4)基于负载阈值将剩下的需释放的N‑Nr个计算单元上的任务映射到保留的Nr个计算单元上;对于静态最优策略下在不同计算单元上并行执行的多个任务,基于所述负载阈值,尽量将这些任务合并至同一计算单元下。本发明还提供了对应的任务动态调度装置。本发明能够完整地支持在多种资源变化场景下提升用户体验,且计算复杂度低。
Description
技术领域
本发明涉及嵌入式系统技术领域,具体地说,本发明涉及流式应用程序在嵌入式系统中的数据处理技术。
背景技术
近年来,嵌入式系统应用程序对计算能力的需求不断增长。例如第四代无线通信系统标准的长期演进技术(Long Term Evolution,LTE)R13版本技术标准系统的峰值速率已经达到下行600Mbps,上行300Mbps;多媒体音视频处理领域随着增强现实(AugmentedReality,AR)、虚拟现实(Virtual Reality,VR)等技术的成熟,对于计算能力的需求也达到了1000GOPS甚至更高。不同于高性能处理机和桌面机系统,嵌入式系统的应用程序以流式应用程序为主,需要对源源不断到来的数据进行处理,而且对实时性具有很高要求。
面对嵌入式系统的发展现状,随着半导体集成电路设计能力不断增长,异构片上多核系统成为嵌入式系统的主流解决方案。一个片上系统中往往集成了一到多个通用处理处理器和多个专用DSP处理器,通用处理器负责完成系统的主要控制和调度,而专用处理器完成对密集数据的运算。这就需要充分挖掘应用程序各个层次的并行度从而充分利用硬件提供的资源。由于嵌入式系统对实时性要求较高,所以应用程序的并行度提取、任务划分和计算资源分配等大多在离线完成,可以使用复杂的算法来获得优化的策略,实际运行的系统直接使用经过优化的策略即可。
然而,近年来嵌入式随着应用程序的不断复杂和多样化,嵌入式系统面临着比以往更加复杂的场景。有时,多个应用程序以动态变化的方式共享同一个异构多核计算平台。例如,一个视频处理程序占用整个异构计算平台的处理资源,当另一个拍照程序启动的时候,视频处理程序不得不动态改变它的任务映射,因为一部分处理单元将分配给拍照程序。这意味着,系统需要在线地改变任务的并行度和映射,来适应变化的计算资源。
面对上述复杂的应用场景,有人提出了一种半静态的解决方案,即离线地准备多个不同计算资源场景下的任务并行度和映射方案,根据实际情况进行在线选择。然而,这种方案能够适应的场景会受到预先考虑的场景的限制,并且,由于需要额外的存储资源去保存这些预先设计好的任务划分和映射的方案,这种方案还会消耗大量的存储资源。
现有技术中还存在一些动态的解决方案。然而,为了控制在线算法的复杂度,现有的动态解决方案往往只考虑了动态改变任务分配或者部分并行度,欠缺对各种不同类型的并行度的深入分析,导致资源分配方案的优化效果不佳,直接影响系统性能。
另一方面,不同于任务的动态调度由操作系统来完成的传统高性能计算和桌面机领域,嵌入式系统对实时性的要求很高。与此同时,流式应用程序需要处理源源不断到来的数据,这本身就具备与通用计算的应用程序不同的特征,所以传统的操作系统对任务的动态调度方式并不适用于此。
综上所述,已有的技术方案难以解决流式应用程序在异构多核片上系统上的复杂场景动态调度问题(例如多个应用程序以动态变化的方式共享同一个异构多核计算平台这一场景下的调度问题),当前迫切需要一种流式应用程序的任务动态调度的解决方案。
发明内容
因此,本发明的任务是提供一种流式应用程序的任务动态调度的解决方案。
根据本发明的一个方面,提供了一种流式应用程序的任务动态调度方法,包括:
1)在当前流式应用程序的可用计算单元数目发生变化时,启动任务动态调度流程,读取预存的当前流式应用程序静态最优策略,该静态最优策略是以可用计算单元数目为最大计算单元数目N为前提而得出任务分配策略;获取当前的可用计算单元数目Nr;
2)选出为当前流式应用程序保留的Nr个计算单元;
3)基于最优静态策略下所有计算单元的任务负载之和,以及当前的可用计算单元个数Nr,得到保持负载均衡所需的每个可用计算单元的负载阈值;
4)然后基于所述负载阈值将剩下的需释放的N-Nr个计算单元上的任务映射到保留的Nr个计算单元上;其中,对于静态最优策略下在不同计算单元上并行执行的多个任务,基于所述负载阈值,尽量将这些任务合并至同一计算单元下。
其中,所述步骤3)中,所述负载阈值包括第一负载阈值和略大于第一负载阈值的第二负载阈值,所述第一负载阈值等于最优静态策略下所有计算单元的任务负载之和除以当前的可用计算单元个数Nr。
其中,所述步骤4)包括下列子步骤:
41)对于所述的需释放的N-Nr个计算单元上的每一个任务,探测当前任务是否属于并行的任务,如果是,在不使保留的计算单元的任务负载超过所述第二负载阈值的前提下,将当前任务和与它并行的任务合并;如果否,继续探测下一个任务;
42)对于未被合并的任务,在不使保留的计算单元的任务负载超过所述第一负载阈值的前提下,将这些任务映射至各个保留的计算单元上。
其中,所述步骤3)中,所述第二负载阈值是所述第一负载阈值的110%。
其中,所述步骤4)中,所述并行执行的多个任务的并行类型包括:数据级并行、任务级并行和流水线并行。
其中,所述步骤2)中,将所有计算单元按照最优静态策略下被分配的任务个数由低到高排序,将前Nr个计算单元选择为保留的计算单元。
其中,所述步骤42)中,采用贪心算法将剩余任务映射给各个保留的计算单元。
其中,所述的流式应用程序的任务动态调度方法还包括步骤:
5)依据步骤4)所得到的当前流式应用程序的各个任务与保留的Nr个计算单元的映射关系,将各个任务调度到对应的计算单元上执行。
根据本发明的另一方面,还提供了一种流式应用程序的任务动态调度装置,包括:
配置信息读取单元,用于在当前流式应用程序的可用计算单元数目发生变化时,启动任务动态调度流程,读取预存的当前流式应用程序静态最优策略,该静态最优策略是以可用计算单元数目为最大计算单元数目N为前提而得出任务分配策略;获取当前的可用计算单元数目Nr;
计算单元选择单元,用于选出为当前流式应用程序保留的Nr个计算单元;
阈值计算单元,用于基于最优静态策略下所有计算单元的任务负载之和,以及当前的可用计算单元个数Nr,得到保持负载均衡所需的每个可用计算单元的负载阈值;以及
映射单元,用于基于所述负载阈值将剩下的需释放的N-Nr个计算单元上的任务映射到保留的Nr个计算单元上;其中,对于静态最优策略下在不同计算单元上并行执行的多个任务,基于所述负载阈值,尽量将这些任务合并至同一计算单元下。
与现有技术相比,本发明具有下列技术效果:
1、本发明考虑到了不同种类的并行度伸缩,能够完整地支持多种资源变化场景。
2、本发明能够在计算资源紧张时动态地收缩并行度以避免并行带来的额外开销,在计算资源丰富时动态地提高并行度以提高流式应用的处理速度,进而提升用户体验。
3、本发明的调度方案计算复杂度低,能够满足嵌入式系统的实时要求,并且很好地利用流式应用程序的自身特征,优化效果优异。
附图说明
以下,结合附图来详细说明本发明的实施例,其中:
图1是根据本发明的一个实施例的任务流图;
图2是根据本发明的一个实施例的动态并行度伸缩调度的流程图;
图3是根据本发明的一个实施例的适用于流式应用程序在异构片上多核计算平台上进行动态并行度伸缩调度装置的框图;
图4是根据本发明的一个实施例的流水线调度的不同时期示意图。
具体实施方式
为了使本发明的目的,技术方案及优点更加清楚明白,以下结合附图通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
根据本发明的一个实施例,提供了一种流式应用程序的任务动态调度方法,该方法在完整的考虑数据级、任务级、流水线级等不同种类的并行度动态伸缩的基础上,完成任务划分和计算资源分配策略的动态计算;并依据流式应用程序本身的特征,完成流式应用程序在异构片上多核系统上的动态调度。
本实施例的流式应用程序的任务动态调度方法具体包括下列步骤:
步骤1:预处理步骤。本实施例中,预处理包括:a)获取作为处理对象的流式应用程序的任务流图;以及b)获取作为处理对象的流式应用程序的静态最优策略,该静态最优策略是以可用计算单元数目为最大计算单元数目N为前提而得出任务分配策略。
在绘制流式应用程序的任务流图时,对不同种类的并行进行分类。本实施例中,将流式应用程序中的并行类型分为数据级并行、任务级并行和流水线并行。其中,流式应用程序中的数据级并行是指同时对不同的数据集进行相同的计算处理,例如无线通信系统中对多天线射频接收的不同数据集进行相同的采样滤波、时频转换等前端处理。流式应用程序中的任务级并行是两个没有生产-消费关系的计算任务可以并行的执行,例如MPEG2解码程序中运动向量译码和块译码的并行执行。而流水线并行的含义如下:流式应用程序往往要迭代多次处理源源不断到达的数据流,所以流式应用程序的最外层包含着一个隐式的循环。将这个隐式循环进行循环展开,并通过在具有生产-消费关系的任务中间添加缓存存储生产者在上一次迭代中已经生产的数据,消费者依赖于该缓存的数据从而消除生产者和消费者的直接依赖关系,那么来自不同迭代周期的生产者任务和消费者任务就可以并行地执行,这就是流式应用程序的流水线并行。
对不同种类的并行度进行定义和表征。本实施例使用水平并行来定义和表征数据级并行和任务级并行,在任务流图中,它们都可以被表示为水平并列的图节点。使用垂直并行来定义和表征流水线并行,因为流水线并行来自于对任务流图外层隐式循环的展开,使得原本级联的具有数据生产-消费关系的两个任务可以并行的执行。
图1示出了根据本发明实施例的一个任务流图。节点表示计算任务(本文中有时也简称为任务),有向边表示数据从生产者流向消费者。任务流图中,除了基本的计算任务节点T之外,还有两种特殊的节点S和J。S节点表示任务流分开,后面跟随多个计算节点T;相对的,J节点表示前序任务流合并。具体的任务流图的提取和建模可以参考文献:M.Gordon,W.Thies and S.Amarasinghe.“Exploiting Coarse-Grained Task Data and PipelineParallelism in Stream Programs”,in International Conference of ArchitectureSupport for Programming Languages and Operating Systems,2006.。本文中不再赘述。
进一步地,在一个实施例中,获取作为处理对象的流式应用程序的静态最优策略的方法如下:由于嵌入式系统对实时性的较高要求,动态并行度伸缩和资源重分配算法不可能采用复杂度极高的寻优算法,此时以一个最优化的静态策略作为该动态算法的参考可以在降低动态算法复杂度的同时更大程度的保持性能。最优静态并行度和资源分配策略基于异构计算平台上所有的计算资源可用的情况,这样所有动态计算资源变化的场景都基于静态场景对并行度进行收缩并完成资源的重分配。也就是说,该实施例中,选择基于异构计算平台上所有计算资源的最优化并行度和资源分配策略作为动态并行度伸缩和资源重分配计算的参考。本文中简称这个基于所有计算资源可用场景的最优化并行度和资源分配的策略为最优静态策略。在一个例子中,已知计算资源(例如计算单元)数目的前提下,采用整数规划(例如0-1规划)对问题进行建模和求解,从而获得最优化并行度和资源分配的策略。该整数规划算法具体可参见A.H.Hormati,Y.Choi,M.Kudlur,R.Rabbah,T.Mudge,andS.Mahlke,“Flextream:Adaptive compilation of streaming applications forheterogeneous architectures,”in International Conference on ParallelArchitectures and Compilation Techniques,2009.,本文中不再赘述。
以上预处理的结果可以通过现有的算法进行离线数据处理获得,然后预存在异构片上多核系统中,作为流式应用程序的任务动态调度的基础。
步骤2:当异构片上多核系统运行流式应用程序时,如果当前流式应用程序的可用计算单元数目发生变化,则启动任务动态调度流程。这里可用计算单元数目发生变化既可能是变多,也可能是变少。每次变化时,系统根据变化后的可用计算单元数目重新确定计算资源分配策略,然后再依据重新确定的计算资源分配策略将当前流式应用程序的各个任务调度到对应的计算单元上执行,以达到动态优化效果。
本实施例中,在可用计算单元数目发生变化时,触发任务动态调度流程。例如,一个视频处理程序原先占用整个异构计算平台的处理资源,当另一个拍照程序启动的时候,该视频处理程序的可用计算单元数目就变少了,因为一部分处理单元将分配给拍照程序。此时,就需要对这个视频处理程序进行任务动态调度。
在一个实施例中,已知异构计算平台上总共的计算单元数N,动态变化的场景中可用的计算单元个数Nr,已知当前流式应用程序的最优静态策略,已知最优静态策略下每个计算单元的任务负载,已知最优静态策略下每个计算单元被分配的任务个数。图2示出了一种对当前流式应用程序的任务动态调度流程,该流程通过对任务的动态调度来调整各类并行度,使并行度动态地伸缩来适应可用计算单元的减少和增加,从而达到优化效果。具体地,对当前流式应用程序的任务动态调度流程包括下列子步骤:
步骤21:确定被保留的计算单元。通常来说,可以默认最优静态策略下各个计算单元的负载是均衡的,因此,一个计算单元上的任务个数越多,代表该计算单元上的任务粒度越细,而一个任务的任务粒度细就意味着它更便于被迁移到其它计算单元上。基于上述分析,本实施例中将所有计算单元按照最优静态策略下被分配的任务个数由低到高排序,前Nr个计算单元在变化的场景中被保留,后N-Nr个计算单元被释放,因此,原先被分配到该计算单元上的任务将重新进行资源分配。在一个例子中,保留下来的计算单元构成集合Preserve,需要释放的计算单元构成集合Prelease。由于集合Prelease中的计算单元将被释放,则静态最优策略中分配到Prelease中的计算单元的计算任务需要重新分配计算单元,这些计算任务构成集合Vvictim,其余不需要重新分配计算单元的任务构成集合Vreserve。
步骤22:计算在动态变化场景下计算单元任务负载的阈值,该阈值等于将最优静态策略下所有计算单元的任务负载之和除以动态变化场景下可用的计算单元个数Nr。在一个例子中,用任务流图中所有任务的复杂度(指任务在处理器上执行的周期数)除以新场景下剩余的计算单元个数Nr,表示在新的场景下任务绝对均衡分配的理想情况下每个计算单元任务负载的阈值。为了与下文中的其它阈值区分,这里将理想情况下每个计算单元任务负载的阈值称为第一负载阈值。
步骤23:检测各个被释放的任务节点是否属于并行任务节点,如果属于并行任务节点,则将与其并行且处于保留计算单元上的任务节点作为候选目标节点。在一个实施例中,对于每个被释放的节点,判断它属于水平并行还是垂直并行,然后确定并行度收缩的候选目标节点。该候选目标节点是与当前被释放节点并行且处于保留计算单元上的任务节点。如果当前被释放的节点属于水平并行,则其水平邻居节点成为其合并收缩并行度的候选目标节点;如果当前被释放节点属于垂直并行,则其垂直邻居节点成为其合并收缩并行度的目标节点。
在一个例子中,探测需要重新分配的计算任务的并行类型。根据图1示出的任务流图和前述方法对并行类型的分类和定义,需要重新分配的计算任务的并行类型有水平并行和垂直并行两种类型。如果需要重新分配的计算资源任务节点前驱为S类型的节点,后继为J类型的节点,那么该任务节点属于水平并行;如果需要重新分配计算资源的任务节点的前驱或者后继节点是计算任务节点T,那么该任务节点则属于垂直并行。
步骤24:通过合并节点收缩并行度。对于每一个被释放的节点,步骤23中确定了收缩并行度的候选目标节点。将各个候选目标节点所在的计算单元按照任务负载由低到高排列,选择负载最低的计算单元所对应的候选目标节点作为目标节点,将被释放节点与目标节点进行合并,合并之后新的节点将在原先负载最低的计算单元上执行,此时更新该计算单元的任务负载,如果负载超过第一负载阈值的10%则放弃此次节点合并,计算单元的任务负载不变,否则此次节点合并生效,计算单元的任务负载更新生效。可以看出,本步骤实际上利用了一个略大于第一负载阈值的新的阈值来判断放弃此次节点合并。为便于描述,将这个新的阈值称为第二负载阈值。第二负载阈值的取值不限于第一负载阈值的110%,在其它实施例中,可以根据实际情况选择略大于第一负载阈值的其它取值。第二负载阈值的优选取值范围通常小于第一负载阈值的120%。
在一个例子中,如果步骤23中检测出的并行类型是水平并行,那么则遍历有相同的前驱S节点和后继J节点的水平邻居节点,这些邻居节点中属于集合Vreserve的节点是当前被释放节点进行节点合并的候选节点。每一个候选节点对应了计算单元集合Preserve中的一个计算单元,选择这些计算单元中任务负载最小的一个所对应的候选节点,将当前节点与之合并,更新对应计算单元的任务负载,如果负载不超过阈值10%,则合并生效,否则不能合并(这是因为通过局部合并节点调整并行度的同时,也要考虑全局的负载均衡)。相对地,如果步骤23中检测出的是垂直并行,那么则遍历当前需要重新分配计算资源的任务节点的垂直邻居节点(前驱节点和后继节点),如果属于集合Vreserve,则作为节点合并的候选节点。每一个候选节点对应了计算单元集合Preserve中的一个计算单元,选择这些计算单元中任务负载最小的一个所对应的候选节点,将当前节点与之合并,更新对应计算单元的任务负载,如果负载不超过阈值10%,则合并生效,否则不能合并。
步骤25:为未进行节点合并的被释放节点进行计算资源分配。将所有的可用计算单元根据任务负载从低到高升序排列,将所有未进行节点合并的被释放节点根据任务复杂度从高到低进行降序排列,采用贪心算法将剩余节点映射给计算单元。
在一个例子中,将集合Vvictim中的剩余节点按照任务负载降序排列,将集合Preserve中的所有计算单元按照任务负载升序排列。依序选择Vvictim中的计算任务分配给Preserve中的计算单元,当任务负载大于阈值时,则选择升序排列的下一个计算单元。
在执行上述步骤21至25后,就获得了当前可用计算单元数目下的新的计算资源分配策略,依据这个新的计算资源分配策略将当前流式应用程序的各个任务调度到对应的计算单元上执行,即可达到动态优化效果。
本实施例的动态任务调度方案考虑到了不同种类的并行度伸缩,能够完整地支持多种资源变化场景,在计算资源紧张时动态地收缩并行度以避免并行带来的额外开销,在计算资源丰富时动态地提高并行度以提高流式应用的处理速度,进而提升用户体验;另一方面,该调度方案计算复杂度低,能够满足嵌入式系统的实时要求,并且很好地利用流式应用程序的自身特征,优化效果优异。
值得注意的是,虽然上述实施例中,采用的是收缩并行度的方式来进行动态的任务重分配,但这并不妨碍片上计算资源由少到多变化的情况(指当前可用计算资源多于前一时刻的可用计算资源的情况)下的任务重分配。因为每一种可能的可用计算资源场景下的并行度和计算资源分配策略都可以基于全部计算资源可用的最优静态策略,通过对最优静态策略进行并行度收缩和计算将资源重分配,进而得到适于当前片上计算资源数目的动态资源分配策略。
进一步地,图3示出了根据本发明另一个实施例的适用于流式应用程序在异构片上多核计算平台上进行动态并行度伸缩调度的装置。如图3所示,该装置包括初始化单元201,在线调度单元202,在线决策单元203以及结束释放单元204。下面,将对这四个模块分别进行描述:
初始化单元201负责初始化异构计算平台上的各个计算单元,为各个计算单元创建任务队列并初始化为空,初始化存储资源等。
在线调度单元202主要负责流式应用程序在异构平台上的调度方案的执行。典型的流水线调度的执行包含三个时期,分别为流水的建立期、核心期和退出期,如图4所示。在流水的建立期,通过逐步添加各个迭代周期的计算任务到各个计算单元,在每两个存在数据依赖的任务之间添加足够的缓存空间,使得数据的消费者节点并不直接依赖于其生产者的数据,而是使用生产者上一次产生的缓存数据。进入核心期后,计算任务就可以并行执行。退出期即当没有新数据到达时,逐步释放掉已经完成的计算任务。流水线调度的执行方法可参考文献:Allan V,Jones R,Lee R et al.Software pipelining.ACM CSUR,1995,27:367-432.。
在线决策单元203根据异构平台上所有的计算单元均可用场景下的静态最优决策和当前变化的可用计算单元的场景,调整应用程序的并行度并为计算任务进行资源的重分配。在线决策单元已知流式应用程序的任务流图,已知当所有计算单元可用场景下的最优资源分配策略,已知动态的变化后可用的计算单元个数Nr。本实施例中,在线决策单元203就是用于完成流式应用程序的任务动态调度决策的装置,在线调度单元202负载执行在线决策单元203所得出的任务动态调度决策结果。
在一个实施例中,在线决策单元203包括:
配置信息读取单元,用于在当前流式应用程序的可用计算单元数目发生变化时,启动任务动态调度流程,读取预存的当前流式应用程序静态最优策略,该静态最优策略是以可用计算单元数目为最大计算单元数目N为前提而得出任务分配策略;获取当前的可用计算单元数目Nr;
计算单元选择单元,用于选出为当前流式应用程序保留的Nr个计算单元;
阈值计算单元,用于基于最优静态策略下所有计算单元的任务负载之和,以及当前的可用计算单元个数Nr,得到保持负载均衡所需的每个可用计算单元的负载阈值;以及
映射单元,用于基于所述负载阈值将剩下的需释放的N-Nr个计算单元上的任务映射到保留的Nr个计算单元上;其中,对于静态最优策略下在不同计算单元上并行执行的多个任务,基于所述负载阈值,尽量将这些任务合并至同一计算单元下。
结束释放单元204负责释放异构计算平台上各个计算单元的任务队列,释放为其分配的存储空间,并置各个计算单元为空闲状态。
为验证本发明的技术效果,发明人在Parallell开发板(参见:Parallellareference manual.[Online].Available:http://www.parallella.org/docs/parallella manual.pdf)上对StremIT基准测试集(参见:StreamIt benchmarks.[Online].Available:http://groups.csail.mit.edu/cag/streamit/shtml/benchmarks.shtml)的典型流式应用程序进行了测试。同时以文献A.H.Hormati,Y.Choi,M.Kudlur,R.Rabbah,T.Mudge,andS.Mahlke,“Flextream:Adaptive compilation of streaming applications forheterogeneous architectures,”in International Conference on ParallelArchitectures and Compilation Techniques,2009.的方案作为对比方案。测试结果显示,采用前述实施例的流式应用程序的任务动态调度(并行度动态伸缩的调度)的算法可以使得流水核心期的性能提升17%,与此同时,动态分配和调度的切换开销降低7%。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。
Claims (9)
1.一种流式应用程序的任务动态调度方法,包括:
1)在当前流式应用程序的可用计算单元数目发生变化时,读取预存的当前流式应用程序静态最优策略,该静态最优策略是以可用计算单元数目为最大计算单元数目N为前提而得出任务分配策略;获取当前的可用计算单元数目Nr;
2)选出为当前流式应用程序保留的Nr个计算单元;
3)基于最优静态策略下所有计算单元的任务负载之和,以及当前的可用计算单元个数Nr,得到保持负载均衡所需的每个可用计算单元的负载阈值;
4)然后基于所述负载阈值将剩下的需释放的N-Nr个计算单元上的任务映射到保留的Nr个计算单元上;其中,对于静态最优策略下在不同计算单元上并行执行的多个任务,基于所述负载阈值,将这些任务合并至同一计算单元下。
2.根据权利要求1所述的流式应用程序的任务动态调度方法,其特征在于,所述步骤3)中,所述负载阈值包括第一负载阈值和略大于第一负载阈值的第二负载阈值,所述第一负载阈值等于最优静态策略下所有计算单元的任务负载之和除以当前的可用计算单元个数Nr。
3.根据权利要求2所述的流式应用程序的任务动态调度方法,其特征在于,所述步骤4)包括下列子步骤:
41)对于所述的需释放的N-Nr个计算单元上的每一个任务,探测当前任务是否属于并行的任务,如果是,在不使保留的计算单元的任务负载超过所述第二负载阈值的前提下,将当前任务和与它并行的任务合并;如果否,继续探测下一个任务;
42)对于未被合并的任务,在不使保留的计算单元的任务负载超过所述第一负载阈值的前提下,将这些任务映射至各个保留的计算单元上。
4.根据权利要求3所述的流式应用程序的任务动态调度方法,其特征在于,所述步骤3)中,所述第二负载阈值小于所述第一负载阈值的120%。
5.根据权利要求1所述的流式应用程序的任务动态调度方法,其特征在于,所述步骤4)中,所述并行执行的多个任务的并行类型包括:数据级并行、任务级并行和流水线并行。
6.根据权利要求1所述的流式应用程序的任务动态调度方法,其特征在于,所述步骤2)中,将所有计算单元按照最优静态策略下被分配的任务个数由低到高排序,将前Nr个计算单元选择为保留的计算单元。
7.根据权利要求3所述的流式应用程序的任务动态调度方法,其特征在于,所述步骤42)中,采用贪心算法将剩余任务映射给各个保留的计算单元。
8.根据权利要求1所述的流式应用程序的任务动态调度方法,其特征在于,还包括步骤:
5)依据步骤4)所得到的当前流式应用程序的各个任务与保留的Nr个计算单元的映射关系,将各个任务调度到对应的计算单元上执行。
9.一种流式应用程序的任务动态调度装置,包括:
配置信息读取单元,用于在当前流式应用程序的可用计算单元数目发生变化时,读取预存的当前流式应用程序静态最优策略,该静态最优策略是以可用计算单元数目为最大计算单元数目N为前提而得出任务分配策略;获取当前的可用计算单元数目Nr;
计算单元选择单元,用于选出为当前流式应用程序保留的Nr个计算单元;
阈值计算单元,用于基于最优静态策略下所有计算单元的任务负载之和,以及当前的可用计算单元个数Nr,得到保持负载均衡所需的每个可用计算单元的负载阈值;以及
映射单元,用于基于所述负载阈值将剩下的需释放的N-Nr个计算单元上的任务映射到保留的Nr个计算单元上;其中,对于静态最优策略下在不同计算单元上并行执行的多个任务,基于所述负载阈值,将这些任务合并至同一计算单元下。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611183070.0A CN108205465B (zh) | 2016-12-20 | 2016-12-20 | 流式应用程序的任务动态调度方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611183070.0A CN108205465B (zh) | 2016-12-20 | 2016-12-20 | 流式应用程序的任务动态调度方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108205465A CN108205465A (zh) | 2018-06-26 |
CN108205465B true CN108205465B (zh) | 2021-06-15 |
Family
ID=62603308
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611183070.0A Active CN108205465B (zh) | 2016-12-20 | 2016-12-20 | 流式应用程序的任务动态调度方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108205465B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021097962A1 (zh) * | 2019-11-20 | 2021-05-27 | 深圳先进技术研究院 | 一种异构芯片的任务处理方法、任务处理装置及电子设备 |
CN116382921A (zh) * | 2023-05-08 | 2023-07-04 | 深圳市欧朗博科技有限公司 | 一种数据流预分配及并行度自调整的基带芯片架构及方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7765536B2 (en) * | 2005-12-21 | 2010-07-27 | Management Services Group, Inc. | System and method for the distribution of a program among cooperating processors |
CN102355448B (zh) * | 2011-06-29 | 2015-07-01 | 北京原力创新科技有限公司 | 云流媒体数据传输方法及系统 |
CN102520995B (zh) * | 2011-12-06 | 2014-11-12 | 北京航空航天大学 | 软件远程流式加载方法及系统 |
CN102681902A (zh) * | 2012-05-15 | 2012-09-19 | 浙江大学 | 一种基于多核系统任务分配的负载均衡方法 |
CN105871603B (zh) * | 2016-03-29 | 2019-01-18 | 中国科学院软件研究所 | 一种基于内存数据网格的实时流式数据处理失效恢复系统及方法 |
-
2016
- 2016-12-20 CN CN201611183070.0A patent/CN108205465B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN108205465A (zh) | 2018-06-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2466460B1 (en) | Compiling apparatus and method for a multicore device | |
US8028286B2 (en) | Methods and apparatus for scheduling threads on multicore processors under fair distribution of cache and other shared resources of the processors | |
Jog et al. | Exploiting core criticality for enhanced GPU performance | |
US8332873B2 (en) | Dynamic application instance placement in data center environments | |
US9317331B1 (en) | Interactive scheduling of an application on a multi-core target processor from a co-simulation design environment | |
Lim et al. | Zico: Efficient {GPU} memory sharing for concurrent {DNN} training | |
CN110069341B (zh) | 边缘计算中结合功能按需配置的有依赖关系任务的调度方法 | |
Singh et al. | A hybrid strategy for mapping multiple throughput-constrained applications on MPSoCs | |
CN111158790B (zh) | 面向云端深度学习推理的fpga虚拟化方法 | |
KR20210148586A (ko) | 스케줄러, 스케줄러의 동작 방법 및 이를 포함한 가속기 시스템 | |
CN108205465B (zh) | 流式应用程序的任务动态调度方法和装置 | |
CN112015765B (zh) | 基于缓存价值的Spark缓存淘汰方法及系统 | |
Pathania et al. | Distributed fair scheduling for many-cores | |
CN111176637A (zh) | 基于缓存抢占延迟约束下aadl模型的可调度性分析方法 | |
CN103959276A (zh) | 基于用户意图和进程独立性的知识的资源分配优先化 | |
CN116204324A (zh) | 一种任务执行的方法、装置、存储介质及电子设备 | |
Ali et al. | Critical-path-first based allocation of real-time streaming applications on 2D mesh-type multi-cores | |
CN113886057B (zh) | 异构众核上基于剖析技术以及数据流信息的动态资源调度方法 | |
Ravi et al. | Mobile computation bursting: An application partitioning and offloading decision engine | |
KR101558807B1 (ko) | 호스트 프로세서와 협업 프로세서 간에 협업 처리를 위한 프로세서 스케줄링 방법 및 그 방법을 수행하는 호스트 프로세서 | |
KR20230068709A (ko) | 스케줄러, 스케줄러의 동작 방법 및 이를 포함한 전자 장치 | |
CN117573379B (zh) | 一种基于对称放缩合并的微服务部署方法 | |
Popp et al. | Automatic control flow generation for OpenVX graphs | |
CN112379998B (zh) | 一种基于任务融合和任务调度的切换时延优化方法 | |
Caccamo et al. | Real-time scheduling for embedded systems |
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 |