您的位置:首页 > 产品设计 > UI/UE

Dplasma调度方式——DAGUE_SCHEDULER_LFQ(Local Flat Queues)

2016-01-15 14:24 351 查看

数据结构

dague_scheduler_t sched_local_flat_queues = {

.name = “Local Flat Queues”,

.global_init = init_local_flat_queues,

.thread_init = NULL,

.schedule_task = schedule_local_queues,

.select_task = choose_job_local_queues,

.display_stats = NULL,

.finalize = finalize_local_flat_queues

};

init

为每个EU(处理器的计算核心)创建了3个队列分别为:

system_queue(VP中所有EU共用一个queue,即每个VP对应一个system_queue)

hierarch_queues(hierarch_queues[0] = task_queue)

task_queue(size 为 4*处理器的EU数,parent为system_queue



steal策略

根据HWLOC库计算EU间的距离,然后将自己的分层队列按照距离和其它EU的task_queue相连,规则如下hierarch_queues的第i层和第i近的EU的task_queue相连。

schedule

初始状态将第DAG的根节点放入到第0个EU的task_queue中

当DAG中某个节点在某个EU上执行完成后会释放其子节点,并将其子节点根据VP(处理器)放入到对应的VP的readyList中,当前VP(包含当前EU)的readyList放入当前正在执行的EU的task_queue中,其它VP的readyList放入对应的第0个EU中。如:VP0 和VP1 分别都包含EU0,EU1,当VP1的EU1执行完task_i,释放task_j,task_k时,若task_i放入VP0的readList,task_j放入VP1的readList,那么由于当前的EU为VP1的EU1,VP1的readList会加入到其

EU1(当前EU)的task_queue中,而VP0的readList则会加入到其EU0的task_queue中。

在将readList加入task_queue中,如果task_queue已满,那么放入其parent中,这里为system_queue中。

choose

从当前EU的taskqueue中安装优先级取出task来执行,如果当前taskqueue为空,那么从其hierarch_queues中取,hierarch中第0层的优先级最高,如果hierarch_queues中为空,那么就从system_queue中取。在各个queue中取task时都是按照priority来取的,而不是按照先后顺序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dplasma