基于遗传算法的Codelet调度方法与流程

文档序号:11829188阅读:1840来源:国知局
基于遗传算法的Codelet调度方法与流程

本发明涉及一种多核数据流计算机系统任务调度方法的设计,特别涉及一种基于遗传算法的Codele调度方法。



背景技术:

长期以来,主流的计算机系统执行模型是以控制流为中心的冯诺依曼计算模型。该模型的特点是将一连串顺序执行的指令放入同一地址空间,并由一个单独的程序计数器控制。随着分布式存储计算机模型和多核系统的涌现,并行计算和并行访存成了异构多核计算机系统的基本要求,大数据算法的应用进一步推动了大规模数据流计算模型的发展。

数据流计算模型以其对算法支持的高弹性,较强的系统扩展性,性能功耗比高等特点,被广泛认为是以控制流为中心的传统并行计算模型的潜在替代方案。数据流计算模型是一种天然的、由数据驱动的并行执行模型,数据流的程序逻辑是基于数据流图表达的。当某个程序单元的所有输入数据均就绪时,该程序单元就会被激活。随后所需硬件资源都满足的情况下,该程序单元将在运行时(Runtime)环境下自动执行。这种基于数据流的并行处理模型符合当前多核计算系统基础架构的发展方向,可以有效提高大数据应用的规模化执行效率。

针对特拉华大学相关学者提出的一种新型的数据流并行执行模型Codelet,本发明提出一种基于遗传算法的Codelet调度方法。Codelet模型是一种细粒度的、由事件驱动的混合式并行执行模型,由基本的执行单元Codelet和充当容器的线程程序(Treaded Procedure)组成。这种按等级划分的执行模型,采用Codelet大规模并行执行的方式继承了数据流计算模型高并发的特点,还使用线程程序弥补了数据流计算模型空间局部性差的缺陷,成为当前数据流计算模型发展的典型代表。Codelet模型的运行时DARTS提供了三种原生的调度方法,分别为静态调度方法、动态调度方法以及密取(Work Stealing)调度方法。静态调度方法采用轮询的方式依次将激活的Codelet节点分配给各调度器,也可通过人为地设置Codelet的元数据来指定执行Codelet的调度器;动态调度方法将激活的Codelet全部放入线程程序调度器的就绪池(RP)中,调度器空闲时会统一地从该就绪池(RP)中取Codelet;密取调度方法与动态调度方法类似,当某个调度器空闲时,会随机地从其他调度器的就绪池(RP)中取Codelet。以上三种原生的Codelet调度方法的Codelet调度效率低、系统可扩展性差。

有效提高Codelet程序单元执行的高并发度是提高该系统性能的重要途径。因此,本发明提出了一种基于遗传算法的Codelet调度方法,相比于Codelet模型原生的三种调度方法,实验证明本调度方法具有明显的效果。



技术实现要素:

本发明是针对Codelet模型原生的静态调度和动态调度适应性差、系统并发执行度低的问题,提出了一种基于遗传算法的Codelet调度方法,以Codelet数据流计算模型为基础,设计了一种基于遗传算法的Codelet调度方法,并应用于实际的Codelet模型,该调度方法在求解任务调度问题时,采用显式二维数组的编码方式,通过杂交、变异等遗传算子操作,将两个数组“融合”产生新数组作为下一代的解。实验验证了该方法能提高多核并行系统任务执行的效率和硬件资源的利用率,证实了该方法的有效性。

本发明的技术方案为:一种基于遗传算法的Codelet调度方法,具体包括如下步骤:

1)导入一个Codelet数据流图,计算codelet的深度,并将任务转换成二维矩阵,计算调度时间:

一个Codelet数据流图包括

A、n个Codelet节点V={V0,V1,...,Vn-1};

B、各个Codelet节点间的有向边依赖关系<Vi,Vj>表示结点Vi与Vj的依赖关系,Vi是Vj的前继,Vj是Vi的后继,即Vi∈PRED(Vj),Vj∈SUCC(Vi);

C、每个Codelet节点的运行时间,Rt(Vi)表示运行结点Vi所花费的时间;

D、每个Codelet节点的深度,结点Vi的深度0≤d≤dm,dm是CDG图中最大的深度;

二维矩阵:

一个任务对应一个Codelet数据流图,m核处理器上执行一个任务,该m核系统的每个处理器核心分别对应一个调度器,共m个调度器,每个调度器内有根据调度任务顺序结合Codelet数据流图中节点依赖关系的任务执行序列,Qi表示第i个调度器中所包含的任务执行序列,即Qi=[Vli,V2i,…,Vki]T,其中k为该调度器依次执行节点的序列长度;

调度S表示成一个二维数组矩阵,即S=[Q1,Q2,...,Qm];

调度时间:

根据调度S结合任务中每个Codelet节点运行时间和深度,计算出系统按照调度S执行所有Codelet节点所花费的总时间T(S);

2)随机生成初始解群POP(t),t=0:

初始解群采用平均分配的方式随机生成,即每个调度器上的任务队列所包含的Codelet数量基本相同,从而缩小完成每个调度器上任务队列所需时间的差距;

3)根据选定的适应函数,计算初始解群各解的适应值;

4)检测是否满足迭代收敛中止条件,若满足跳至步骤10),否则执行步骤5);

5)使用轮盘赌,选择杂交的母体:

计算解群中各个解的适应值,并相加得出适应值总和;计算个体解的适应值与适应值总和的比值,得出的比值为选择个体的概率值;根据概率值从解群中选择适应强的两个个体解作为杂交操作的父代个体;

6)根据经验设定概率Pc,根据步骤5)选定的个体的概率值大于Pc,则执行外部杂交操作,小于Pc执行内部杂交操作;

7)根据经验设定概率Pm,以概率Pm执行变异操作;

8)使用精英策略,保留原有解群中的最优解:

保留原解群中适应值最高的解,记为B(t)=Best(POP(t));计算新解群中个体解的适应值,记新解群中的最优解为B(t+1)=Best(POP(t+1));将POP(t+1)中的最差解替换成POP(t)中的最优解;

9)将最优解作为新的解群POP(t+1),t=t+1,计算新的解群各解的适应值,返回执行步骤4);

10)输出近似最优解。

所述步骤6)中外部杂交操作步骤如下:

执行交换操作的部分是所有调度之间的所有任务序列:

(1)随机选取两个调度S1和S2;

(2)随机生成两个数d’1和d’2作为杂交点的深度,且0<=d’1,d’2<=dm

(3)由d’1和d’2确定交叉操作的方式和位置;

(4)若d’1与d’2相等,执行两点交叉操作,将调度S1与S2中两个杂交点之间的部分(任务序列片段的集合)相互交换;

(5)若d’1与d’2不等,执行单点交叉操作,将调度S1与S2杂交点后的部分相互交换。

所述步骤6)中内部杂交操作步骤如下:

执行交换操作的部分是每个调度器中的所有任务序列之间执行交换操作:

I、从一个调度S中随机选取两个任务序列Q1和Q2;

II、随机生成两个数d’1和d’2作为杂交点的深度,且0<=d’1,d’2<=dm

III、由d’1和d’2确定交叉操作的方式和位置;

IV、若d’1与d’2相等,执行两点交叉操作,将任务序列Q1与Q2中两个杂交点之间的部分(Codelet的集合)相互交换;

V、若d’1与d’2不等,执行单点交叉操作,将任务序列Q1与Q2中杂交点后的部分相互交换。

所述步骤7)中变异操作:随机交换一个调度中同一深度下的两个结点,随机生成一个数d’,使0<d’<dm;随机选择两个深度为d’的结点;交换两个结点,产生新解。

本发明的有益效果在于:本发明基于遗传算法的Codelet调度方法,将基于多核处理器并行系统的遗传算法调度方法与Codelet模型的任务调度相结合,是一种能够适应多核计算系统的并行任务调度方法。该调度方法可有效提高任务的并行执行效率,降低执行单元的空闲时间,提高片上多核系统的资源利用率。该方法也可以扩展应用到其他类型的数据流模型,实现任务在多核系统中的并行执行。

附图说明

图1为本发明Codelet模型示意图;

图2为本发明对应的算法流程图;

图3为本发明任务在单片双核系统上的Codelet调度图;

图4为本发明调度算法中的外部杂交操作图;

图5为本发明调度算法中的内部杂交操作图;

图6为本发明调度算法中的变异交换操作图。

具体实施方式

本发明基于Codelet模型作为任务在多核并行系统中的基础执行模型。Codelet是包含一连串机器指令的计算单元或程序的片段,对应于数据流图中的一个执行节点。Codelet模型是由执行单元Codelet及线程程序TP组成。以图1Codelet模型的示意图为例,S和E分别表示Codelet图的开始节点和结束节点,A、B、C、D分别是任务执行过程中间的程序单元节点;线程程序是每个调度器中所有Codelet节点的容器,负责调度器内的数据共享以及调度器间的任务协调。Codelet节点执行的语义为:当且仅当Codelet的同步接口对应的依赖数据均就绪时,Codelet节点被自动激活,并在硬件资源满足的情况下由Codelet任务调度器控制执行Codelet节点内的程序片段(指令序列)。该模型通过将任务转换成包含多重依赖关系的Codelet数据流图,并将Codelet节点按照某种指定的调度方法分配至每个调度器对应的任务队列中。

本发明的核心思想是将某个任务分割成多个子任务,并表示成一个有向无环的数据流图;再将该数据流图映射至Codelet模型上。根据多核计算系统硬件资源的配置可将Codelet数据流图显式转换成一个二维数组矩阵,该其中的某个二维数组向量对应任务在某个Codelet节点上的调度次序。在满足各Codelet间数据依赖关系的前提下,首先随机地将Codelet节点分配到硬件资源上,完成对任务调度的初始化;然后根据遗传算法经过多次迭代进化得出Codelet模型执行该任务的最优调度方案。

基于遗传算法的Codelet调度流程如图2所示:具体步骤如下:

(1)导入一个Codelet数据流图(CDG),计算codelet的深度,并将任务转换成二维矩阵,计算调度时间;

(2)随机生成初始解群POP(t),t=0;

(3)根据适应函数,通过调度时间计算初始解群各解的适应值;

(4)检测是否满足收敛中止条件,若满足跳至步骤(10),否则执行步骤(5);

(5)使用轮盘赌,选择杂交的母体;

(6)根据经验设定概率Pc,根据选定的母体的概率值大于Pc,则执行外部杂交操作,小于Pc执行内部杂交操作;

(7)根据经验设定概率Pm,以概率Pm执行变异操作;

(8)使用精英策略,保留原有解群中的最优解;

(9)将最优解作为新的解群POP(t+1),t=t+1,计算新的解群各解的适应值,返回执行步骤(4);

(10)输出近似最优解。

本发明中的调度方法生成最优解的过程包括四个核心模块:(1)Codelet调度的表示,(2)适应函数的表示,(3)初始解群的生成,(4)操作算子。

1.Codelet调度的表示

首先,任务在Codelet模型中可转换成一个Codelet图(CDG)(中文名称Codelet数据流图),相应的数据流图CDG可以转化对应于一个二维矩阵。二维数组矩阵的维度对应某个集群或多核计算系统所包含的调度器数量。因此,对于任务在Codelet模型中的调度问题,本发明给出以下几点定义:

i.记G为某个CDG图,该图可表示为G=<V,E,Rt,d>,则有:

·V表示n个节点(Codelet)的集合,即V={V0,V1,...,Vn-1};

·E表示节点间的有向边(依赖关系)的集合,<Vi,Vj>表示结点Vi与Vj的依赖关系,Vi是Vj的前继,Vj是Vi的后继,即Vi∈PRED(Vj),Vj∈SUCC(Vi);

·Rt表示某个Codelet节点的运行时间,Rt(Vi)表示运行结点Vi所花费的时间;

·d表示某个Codelet节点的深度,结点Vi的深度可定义为:

0≤d≤dm,dm是CDG图中最大的深度。

其中,深度是CDG图的一个重要参数,用于生成初始解群及判断遗传算法解的合法性。

图3为任务在单片双核系统上的Codelet调度图,其中图3(a)所示Codelet数据流图,该CDG图包含了7个Codelet节点(V0~V6),每个结点的信息包括Codelet的运行时间Rt和深度d(例如V0的Rt为3,d为0),箭头代表了Codelet节点间的依赖关系。

ii.记S为某个CDG图的调度,该调度可表示为S=<C,Q>,则有:

·C表示m个调度器的集合,即C=[C0,C1,...,Cm-1],Ci表示ID为i的调度器;

·Qi表示调度器Ci中所包含的Codelet任务执行序列,即Qi=[V1i,V2i,…,Vki]T,其中k为该调度器Ci依次执行Codelet节点的序列长度;

·调度S可表示成一个二维数组矩阵,即S=[Q1,Q2,...,Qm]。

·由于调度器是按照任务序列的顺序依次执行Codelet的,打乱CDG图中原有的依赖关系可能会使任务无法正常执行。因此,为了保证系统能够按照调度正常执行Codelet,在执行调度方法计算前先对任务序列中的节点按节点深度进行升序排列。

如图3(b)所示CDG图的调度示意图,假定在某个多核处理器上执行某个任务T,该多核系统的每个处理器核心分别对应一个调度器。如果对于该双核系统有两个调度S1和S2,两个调度S1和S2可完成执行相同的任务T,每个调度分别对应一个任务序列,每个任务序列表示调度器执行Codelet节点的次序。图中S1可表示成{[V0,V1,V3,V6],[V2,V4,V5]},S2可表示成{[V0,V2,V5],[V1,V3,V4,V6]}。

iii.记T(S)为系统按照调度S执行所有Codelet节点所花费的总时间,Ts(Qi)为执行任务序列Qi下所有Codelet所花费的总时间,则有T(S)=MAX(Ts(Qi)),图3(c)为根据图3(b)的调度任务顺序结合图3(a)每个Codelet节点运行时间和深度绘制的系统执行总时间的示意图,调度S1和S2执行花费时间分别为T(S1)=14,T(S2)=13。

根据以上定义,一个任务在Codelet模型中的调度最终可转换成一个二维数组矩阵。Codelet调度的目标是为多核系统寻找一种全局最佳的调度S,使Codelet节点按照既定的次序在多个调度器中并行执行,并使系统执行任务的总时间最小,即MIN(T(S)),

2.适应函数

适应函数描述了使用各Codelet节点的执行时间及Codelet间的通信开销来预计任务在系统中的执行总时间,并以该函数的适应值作为某个解优劣性的评价指标。例如:图3展示了同一任务在单片多核处理器上执行两种调度的执行总时间,调度S1的执行时间为14,而调度S2的执行时间为13。因此,根据适应值T(S1)>T(S2),那么调度S2要优于调度S1。

适应值是遗传算法中用来评价个体优劣的标准,本发明将适应函数定义为f(S)=c-T(S),其中,c设定为某个足够大的常数,比如可以取值为所有Codelet预执行时间的总和,即T(S)为系统在分配完Codelet节点后,执行所有Codelet的总时间。因此,f(S)越大,表示系统执行完成该任务的总时间越短。如图3(c),调度S1的执行时间为T(S1)=14,所有Codelet执行时间总和为c=20,则适应值f(S1)=c-T(S1)=6,调度S2对应的适应值f(S2)=c-T(S2)=7,适应函数可以根据计算自主设定,本发明用了减法,用加法也可以。

3.初始解群

初始解群采用平均分配的方式随机生成,即每个调度器上的任务队列所包含的Codelet节点数量基本相同,从而缩小完成每个调度器上任务队列所需时间的差距。为了进一步提高初始解群的质量,该算法会先生成M个初始解,之后计算各个解的适应值,从中选取N(N<M)个适应值大的解作为初始解群。

由于Codelet模型是一种数据流并行计算模型,可以将Codelet节点均匀地分配给调度器。记n(i)为CDG图中深度为i的Codelet节点数量,m为调度器的数量,并设ave(i)=□n(i)/m□,则同一深度的Codelet节点分配到各调度器的数量为[ave(i),ave(i)+1],且各调度器分配到的Codelet节点数量的总和应等于n(i)。将同一调度器下的Codelet按深度升序排列就可得到一个合法的任务序列,为一个初始解,各个调度器的Codelet按深度升序排列得到每个合法的任务序列,组成一个初始解群。

初始解群的优劣决定了遗传算法收敛的速度,且初始生成的解具有很强的随机性。为了进一步加快算法求解的速度,防止过早收敛,会事先随机生成多个初始解,在计算各解的适应值后,从中筛选适应值高的优秀解作为实际的初始解,以提高初始解群的质量。

4.操作算子

在遗传算法中,解群的选择和进化是由一系列操作算子来实现的。这些操作算子包括选择算子、杂交算子以及变异算子,选择算子可以采用轮盘赌作为选取个体解的方法,并采用精英策略作为保留优秀个体解至下一代的方法;为了扩大搜索域,杂交算子根据杂交对象的不同又可分为外杂交算子和内部杂交算子;根据杂交点是否相同,杂交的交叉操作又分为单点交叉和两点交叉;变异算子采用传统的交换操作,即交换单个解内的两个Codelet节点。

i.选择算子-轮盘赌

选择机制是根据适应值的大小选择和保留优秀个体,淘汰劣质个体的过程。本发明采用轮盘赌的方式来决定每次迭代进行杂交的父代个体。具体过程如下:

(1)计算解群中各个解的适应值,并相加得出适应值总和;

(2)计算个体解的适应值与适应值总和的比值,得出的比值为选择个体的概率值;

(3)根据概率值越大越优的原则(根据本发明的适应值算法,越大越优),从解群中选取两个个体解作为杂交操作的父代个体。

ii.外部杂交算子

在进行杂交操作之前,根据经验设定进行外部杂交概率Pc,一般Pc=0.7~0.9,所选择的父代个体的概率值大于选定的概率Pc时进行外部杂交操作,外部杂交操作所选择的父代个体为调度,即由选择算子得到的两个调度,执行交换操作的部分是两个调度的所有任务序列。具体过程如下:

(1)随机选取两个调度S1和S2;

(2)随机生成两个数d’1和d’2作为杂交点的深度,且0<=d’1,d’2<=dm

(3)由d’1和d’2确定交叉操作的方式和位置;

(4)若d’1与d’2相等,执行两点交叉操作,将调度S1与S2中两个杂交点之间的部分(任务序列片段的集合)相互交换;

(5)若d’1与d’2不等,执行单点交叉操作,将调度S1与S2杂交点后的部分相互交换。

如图4所示,两个调度执行了外部杂交操作,图中两个杂交点的深度分别为0和2,因此,需对两个调度内深度在0与2之间的Codelet(即深度为1和2的Codelet)执行两点交叉操作,即交换图4中调度S1与调度S2的虚框部分。(S1和S2中的Q2均出现了深度为2两个Codelet,根据图4解释怎么外部交叉)

iii.内部杂交算子

与外部杂交不同的是,内部杂交的操作对象为个体解而非解群,即对两个调度器中任意一个调度器中的两个任务序列Q1和Q2执行交换操作,因此一般不做外部杂交的情况下作内部杂交,在不确定的情况下可以将外部杂交和内部杂交效果进行比对,再确定。内部杂交具体过程如下:

(1)从一个调度S中随机选取两个任务序列Q1和Q2;

(2)(3)步骤同外部杂交操作相同;

(4)若d’1与d’2相等,执行两点交叉操作,将任务序列Q1与Q2中两个杂交点之间的部分(Codelet的集合)相互交换;

(5)若d’1与d’2不等,执行单点交叉操作,将任务序列Q1与Q2中杂交点后的部分相互交换。

图5展示了两次内部杂交操作,其中,调度S1对应的杂交点深度分别为1和2,因此执行的是两点交叉操作,交叉的部分为两个任务序列中深度在1与2之间的Codelet(即深度为2的Codelet);由于调度S2的杂交点深度均为1,因此执行的是单点交叉操作,交叉的部分为两个任务序列中深度大于1的Codelet。

iv.变异算子

变异操作是迭代产生新个体的辅助方式,通过变异可维持了解群的多样性,加快最优解的收敛速度。变异算子采用传统的交换操作,即随机交换一个调度中同一深度下的两个结点。具体过程如下:

(1)随机生成一个数d’,使0<d’<dm

(2)随机选择两个深度为d’的结点;

(3)交换两个结点,产生新解。

如图6所示,调度S1执行了变异操作,选择变异的深度为2,满足条件的Codelet有V3、V4和V5,因此这三个Codelet在执行变异操作时,会随机选取两个互换位置。

v.选择算子-精英策略

由于轮盘赌的选择方式是基于概率选择的,因此存在统计误差,为了将优秀个体保留至下一代,保证每次迭代最优解的适应值单调递增,保留机制采用精英策略,该策略的主要思想是保持解群中的适应值大的优秀解不丢失。具体过程如下:

(1)保留原解群中适应值最高的解,记为B(t)=Best(POP(t));

(2)计算新解群中个体解的适应值,记新解群中的最优解为B(t+1)=Best(POP(t+1));

(3)将POP(t+1)中的最差解替换成POP(t)中的最优解。

旧解群通过以上各遗传算子的操作,最终得到了新解群,而新生成解群的适应值必定不小于原来的解群,因此,该遗传算法可在多次迭代后逐渐向最优解(即最优调度)收敛。

5.收敛条件

设置合理的收敛中止条件,可使遗传算法所生成的解更接近理想的最优解。为了在尽可能短的时间内生成优秀的解,本发明设置了以下两个收敛条件:

(1)在给定的迭代收敛阈值后遗传算法收敛,适应值维持不变(在该发明的测试实验设置阈值为500,可根据测试对象定),将最近生成的解作为最终的结果输出;

(2)如果遗传算法在给定的迭代收敛阈值后仍然不收敛,当迭代次数超过给定的最大迭代阈值(在该发明的测试试验中设置的最大迭代阈值为2000,可根据测试对象定)后,为避免在生成最优解的过程中耗费太多的时间,将最近生成的解作为近似的最优解输出。

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