并行任务调度算法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


原文链接:https://eijest.journals.ekb.eg/article_385659.html

异构并行任务调度算法问题往往被转化成任务DAG的调度

基于列表的任务调度算法

主要分为四种调度思路:

HLF(Highest Level First):任务根据其在有向无环图(DAG)中的层级进行排序。位于层次结构较高位置(更接近根节点)的任务将优先调度。

LPT(Longest Processing Time):在执行时间较长的任务会被赋予更高优先级的情况下。

CP(Critical Path):该算法识别任务的关键路径并将其仅分配给单一处理器。

HEFT(Heterogeneous Earliest Finish Time):任务将按其最早完成时间进行优先级排序。同时考虑任务执行时间和处理器间通信。

具体算法实例:

MCP(Modified Critical Path)

MCP算法是一种为在预定数量处理器上调度有向无环图(DAG)而开发的启发式方法。该算法采用"尽可能晚开始"(ALAP)的概念处理每个任务。ALAP时间表示在不影响整体调度周期的前提下,任务最晚可以开始执行的时间点。这一指标作为确定调度优先级的基础。

MCP首先计算DAG中每个任务的ALAP时间,随后生成按ALAP时间升序排列的任务列表,优先调度允许延迟时间最早的任务。当两个任务ALAP时间相同时,该方法会比较它们各自子任务的ALAP时间来打破平局。此后,每个任务将通过基于插入的策略被调度到能使其尽可能早开始执行的处理器上。

ISH( Insertion Scheduling Heuristic)

ISH是一种静态调度启发式算法,专为将有向无环图(DAG)直接调度到有限数量的处理器上而设计。该算法通过利用部分调度中的空闲时间槽(即调度间隙),优先选择静态b-level值(节点到终止节点的最长路径)较高的节点来填充这些间隙。其工作流程如下:

  • 计算各节点的静态b-level值
  • 初始就绪列表仅包含入口节点,按b-level值降序排列。若b-level值相同则随机排序
  • 采用非插入式调度策略,将就绪列表中优先级最高的节点分配给最早可用的处理器
  • 若当前调度产生空闲间隙,则从就绪列表中筛选可插入该间隙且不适合在其他处理器提前执行的节点
  • 将新满足调度条件的节点加入就绪列表
  • 循环执行上述步骤直至所有节点完成调度

DLS(Dynamic Level Scheduling)

DLS算法提出了一种编译时调度方案,该方案在将DAG图映射到异构处理架构时,隐含了处理器间的通信开销。为避免共享资源竞争,该算法在时空双维度上进行调度,并采用动态优先级调整策略,在每一步将任务分配给处理器。DLS算法的分步执行流程如下:

  • 为辅助DL值计算,首先确定DAG图中各节点的静态b-level值
  • 初始阶段,入口节点构成就绪节点集合的唯一成员。重复下列步骤直至所有节点完成调度:
  • 计算每个处理器上各节点的最早最佳时间(EBT)
  • 选择DL值最优的节点-处理器组合
  • 将选定节点分配至对应处理器
  • 将新就绪节点加入就绪集合

MH(Mapping Heuristic)

MH是一种基于事件驱动的调度启发式算法。程序段被表示为带通信的有向无环图(DAG)中的节点,MH会将这些节点分配到任何机器拓扑结构中,同时考虑竞争延迟。MH维护着竞争信息列表,并根据特定事件更新这些列表,使其能够根据实时流量情况调度事件。该算法的步骤如下:

创建优先级节点列表:根据每个节点的层级确定优先级,若层级相同则随机或按直接后继节点数量打破平局。
初始化事件列表:为每个无直接前驱的节点在时间零点生成“任务就绪”事件,随后按任务层级优先级组织事件,将最高优先级的任务置于列表顶部。重复此过程直至事件列表为空,确保DAG中所有节点均被调度到处理单元上。
任务执行与完成:若事件显示任务就绪,则选择处理单元执行该任务;任务完成后,向事件列表追加“任务完成”事件。
后继状态更新:当“任务完成”事件触发时,更新该任务直接后继节点的状态。这意味着阻碍这些后继任务调度的条件将一次性减少。
子任务调度就绪:当某子任务的阻塞条件总数降为零时,该子任务即具备调度资格

ETF(Earliest Task First )

ETF算法最初是为同构计算机网络设计的,但适用于多样化任务图场景。该算法概念最早见于文献,后经时间复杂度简化和性能优化,最终形成ETF标准算法。其核心原理是通过迭代调度方式,基于已调度任务选择可最早启动的任务进行分配。

ETF算法执行流程如下:

  • 步骤1:计算各节点的静态b-level值
  • 步骤2:初始化就绪节点列表,仅包含入口节点
  • 步骤3:循环执行以下操作:
    • 为所有处理器上的每个节点计算最早开始时间(EST)
    • 采用非插入式策略,选择能提供最小EST的节点-处理器组合。若存在并列情况,则将静态b-level值较大的节点分配到所选处理器
    • 将新可达节点加入就绪节点集合
  • 步骤4:完成调度

HEFT(Heterogeneous-Earliest-Finish-Time)

HEFT是一种基于DAG的调度算法,专为具有有限处理器数量的异构计算环境设计。由于其简洁性和优越的性能,HEFT已被证明是一种极具竞争力且流行的调度算法。HEFT主要包含两个阶段:任务优先级分配阶段和处理器选择阶段。

任务优先级分配阶段:

  • 给每个任务分配一个等级(rank),该等级基于其预估的完成时间及其前驱任务的等级。
  • 等级较高的任务被视为更关键的任务,优先进行调度。

处理器选择阶段:

  • 对于每个未调度的任务,算法遍历所有可用处理器。
  • 选择能为该任务提供最早预估完成时间的处理器进行调度。

通过这两个阶段,HEFT实现了在异构环境中高效且优先级合理的任务调度,兼顾任务的关键度和处理器的性能差异,从而优化整体的执行效率。

算法静态/动态时间复杂度
MCP静态 O ( v 2 l o g v ) O(v² log v) O(v2logv)
ISH静态 O ( v 3 ) O(v^3) O(v3)
DLS动态 O ( p 2 v ) O(p^2 v) O(p2v)
MH静态 O ( v ( p + e ) ) O(v (p + e)) O(v(p+e))
ETF静态 O ( v 2 p ) O(v^2 p) O(v2p)
HEFT静态 O ( v 2 p ) O(v^2 p) O(v2p)

基于任务复制的调度算法

DSH(Duplication Scheduling Heuristic)

DSH [19,32,33] 基于复制的启发式算法通过在某些处理单元(PE)上复制选定任务来提升性能。研究表明,当增加更多PE时,性能会持续改善[33]。该算法的具体步骤如下:

  • 确定各节点的b-level值,并按静态b-level降序排列节点
  • 每个PE选择具有最高b-level的就绪节点作为调度候选
  • 将选定节点分配给能使其执行开始时间最小化的处理器
  • 若候选节点产生空闲时段,则考虑复制其尚未在该处理器上调度且导致最长等待时间的父节点
  • 若复制成功,则更新该节点的开始时间,并将其父节点选为后续候选随后算法递归回溯节点父系,重复复制过程直至无法继续复制

BTDH(Bottom-Up Top-Down Duplication Heuristic)

BTDH算法被视为DSH算法的扩展。该算法的主要优势在于,即使在复制时隙完全耗尽后,仍能复制节点的父节点——这一特性使其显著优于DSH算法。该方法旨在全面提升调度性能,即便可能暂时延迟节点的启动时间。其核心理念在于:复制所有必要的前驱节点最终可能缩短启动时间。然而由于BTDH采用静态层级分配优先级,往往无法准确反映节点在调度过程中的实际相对重要性。尽管存在这一差异,研究者指出BTDH与DSH的整体性能仍保持相近。

CPFD(Critical Path Fast Duplication)

CPFD调度算法基于任务复制策略,从调度过程起始阶段就尝试为每个任务寻找最早启动时机。理解该算法需先掌握以下核心概念:

  • 关键路径(CP):有向无环图中连接入口节点与终止节点的最长路线
  • 关键路径节点(CPN):位于关键路径上的节点
  • 内分支节点(IBN):非关键路径节点,但其输出边指向关键路径节点
  • 外分支节点(OBN):既非内分支节点也非关键路径节点
  • 节点优先级列表:将前述节点分类生成降序排列的节点清单,该机制确保关键路径节点优先调度,同时满足任务执行的先后序约束

关键路径快速复制算法步骤:

  • 步骤1:识别关键路径(CP),通过选择总执行时间较长的路径来解决平局情况。构建CPN主导序列。
  • 步骤2:将CPN主导序列中的第一个CPN作为调度候选。
  • 步骤3:定义PSET为包含一个空闲处理器及所有运行着候选节点父节点的处理器集合。
  • 步骤4:计算候选节点在PSET中每个处理器P上的最早开始时间(EST)。
  • 步骤5:当CPN主导序列中的所有CPN都完成调度后,将候选节点分配到能提供最小EST值的处理器P上。
  • 步骤6:对CPN主导序列中的每个OBN重复上述流程。

DFRN(Duplication First and Reduction Next )
DFRN是一种基于任务复制的调度算法。该算法采用通用框架,可兼容任何用作节点选择机制的列表调度算法。其核心策略是对计算复杂度较低的任何汇合节点的父节点进行复制(汇合节点指具有多条入边的节点)。DFRN首先会批量复制所有可同时复制的父节点,采用自底向上方式将这些父节点复制至同一处理器,且不评估复制操作的影响。随后删除所有不符合特定标准的已复制任务。该算法仅在关键处理器上执行复制操作,因该处理器被判定为管理汇合节点的最优选择。DFRN算法流程可概括如下:

  • 初始化:按执行时间降序排列的节点优先级列表

循环处理列表中每个节点直至全部调度完成:

  • 非汇合节点处理:若直接父节点(ip)为末位节点,则直接在其后调度;若非末位节点,则将直至ip的任务复制至空闲处理器,使当前节点能获得与ip完成时间(ECT)相同的最早开始时间(EST)
  • 汇合节点处理:识别关键ip及其处理器后实施DFRN方法,包含两个核心流程:
  • 尝试复制:递归自底向上搜索能为当前节点提供最大可用时间(MAT)的ip进行复制
  • 尝试删除:按序评估每个复制节点,根据预设条件删除冗余任务

LCTD(Linear Clustering with Task Duplication )

LCTD算法是一种基于有向无环图(DAG)线性聚类的静态任务划分与调度算法。在分布式内存机器(DMMs)中,该算法通过采用顺序化任务执行策略和任务复制技术,实现计算量与处理器间通信延迟的最小化。

LCTD算法包含四个阶段:

  • 任务划分:基于关键路径(CP)分析对任务进行聚类,并将其从DAG中剥离以生成线性任务簇。
  • 任务调度:采用最近邻优先启发式方法,将线性任务簇分配给处理器。该策略会根据执行完成时间的优先级,将两个连通任务簇分配至同一处理器或相邻处理器。
  • 任务复制:通过在处理器间复制部分任务来减少处理器间通信延迟。此阶段重点复制那些被分配至不同处理器的父任务。
  • 任务合并:分析两个直接相连处理器间的调度模式,旨在不延长最大调度时间的前提下将其合并为新模式。

基于集群的调度算法

LC(Linear Clustering)
当同一聚类被分配给两个独立任务时,该聚类被视为非线性。若无独立任务共享聚类,则称为线性聚类。LC算法是基于关键路径技术的线性聚类方法,其将共享相同关键路径的节点合并为单一聚类。算法流程如下:

  • 初始将所有边标记为未检测
  • 重复下列步骤:
    • 仅考虑尚未检测的边来确定关键路径
    • 通过将关键路径上所有边权设为零来创建聚类
    • 将关键路径关联边及新建聚类中节点相连的边标记为已检测
    • 循环执行直至所有边完成检测
    • 识别忙闲时段无重叠的聚类,合并这些聚类
    • 重复上一步直至聚类数量无法继续减少

DSC(Dominant sequence clustering)

一种基于集群的启发式算法DSC被提出,用于在无限数量全连接处理器上调度有向无环图(DAG)。该算法采用与LC算法类似的关键路径(CP)技术,但相比LC算法融入了更多启发式规则和先进技术。

DSC算法通过标记DAG中的主导序列(DS)来实现调度。在部分规划完成的DAG中,主导序列即代表该图的关键路径。算法简要流程如下:

  • 将所有顶点标记为未检查状态,随后创建包含所有入口就绪顶点的列表
  • 为所有就绪节点计算底层级(b-level)和顶层级(t-level)
  • 若列表中首个节点位于主导序列,则调整该节点与其父节点间的边以降低顶层级。若无法调整,则将其置于独立集群
  • 若节点不在主导序列,则根据特定标准调整该节点与某个父节点间的边以降低其顶层级
  • 重新计算后继节点的顶层级和底层级,并将当前节点标记为已检查
  • 持续该过程直至所有节点完成检查

MD(Mobility Directed )

MD 是一种基于关键路径和节点相对移动性属性的静态调度算法。节点n的相对移动性定义为n的可移动范围长度除以n的执行时间。可移动范围是指在不延迟关键路径上其他节点执行的前提下,n可以开始执行的时间区间。相对移动性计算公式为:
(关键路径长度-(b层级(n)+t层级(n))) / (执行时间(n))

MD算法步骤如下:

  • 步骤1:计算每个节点的相对移动性,并初始分组到集合𝐿中。
  • 步骤2:从𝐿集合派生出子集𝐿’,筛选具有最低相对移动性的节点。从𝐿’中选择一个不存在前驱节点的节点,尝试将其调度到第一个集群。若不可行,则尝试后续集群。一旦节点被分配到任一集群,需将该节点与同集群内其他节点之间的所有边权重归零。
  • 步骤3:若节点被分配到同一集群内其他节点之前或之后,需将二者之间的边权重归零。检查新增边是否形成循环依赖,若存在循环则将该节点重新分配到下一个可用时隙。
  • 步骤4:根据更新后的有向无环图(DAG)重新计算相对移动性。
  • 步骤5:持续执行上述操作,直至𝐿集合中无剩余任务。

DCP(Dynamic Critical Path)
DCP算法由文献提出。该算法属于静态调度算法类别,用于将有向无环图(DAG)分配到全连接多处理器系统。DCP算法的设计核心在于强调任务移动性的重要性,采用前瞻策略为特定节点寻找更合适的计算集群。其执行步骤如下:

初始化阶段:

  • 计算每个节点的绝对最早开始时间(AEST)与绝对最晚开始时间(ALST)
  • 确定各节点AEST与ALST的差值

节点选择阶段:

  • 优先调度AEST与ALST差值最小的节点
  • 若出现相同差值,则选择AEST值较小的节点

处理器选择阶段:

  • 当存在未分配节点时:从列表中选择首个可用处理器
  • 在处理器调度表中为选定节点寻找合适时间槽
  • 若找到合适时间槽,则将该节点调度至该处理器
  • 若未找到时间槽,检查是否违反前驱规则。若发生冲突,则尝试下一个处理器
  • 重复节点选择与处理器选择步骤,直至所有节点完成调度

EZ(Edge zeroing)

EZ调度算法可理解为基于优先级的算法,其优先级被分配给图模型中各条边。每条边的优先级由其权重决定。以下步骤简要描述EZ算法:

  • 合并任务:将频繁通信的两个任务合并,置于同一处理单元(PE)上执行,以最小化任务图的总完成时间
  • 初始聚类:初始阶段每个任务独立置于各自聚类中
  • 边排序:根据通信权重按降序对边进行排序
  • 边检查:依次检查排序列表中的每条边
  • 边归零:若归零操作不会延长总工期,则执行边归零
  • 重复上述步骤直至检查完所有边
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值