数据结构
dague_scheduler_t sched_global_dequeue = {
.name = “Global Dequeues”,
.global_init = init_global_dequeue,
.thread_init = NULL,
.schedule_task = schedule_global_dequeue,
.select_task = choose_job_global_dequeue,
.display_stats = NULL,
.finalize = finalize_global_dequeue
};
init
为每个EU(处理器的计算核心)定义一个queue (VP中所有EU共用一个queue,即每个VP对应一个system_queue)
schedule
初始状态将第DAG的根节点放入到system_queue中
当DAG中某个节点在某个EU上执行完成后会释放其子节点,并将其子节点根据VP(处理器)放入到对应的VP的readyList中,然后再将VP的readyList放入其queue中。在将任务放入queue的过程中根据是否为高优先级来决定放入队头还是队尾。
choose
从queue中取出最前面的task出来执行。