循环模型处理器调度中的资源分配算法

时间:2011-08-14 20:29:03

标签: algorithm scheduling round-robin

背景:我将独立任务显示为数据流图(永远迭代)。非常简单的例子:
    任务1:b1 - > c
    任务2:e - > b2

给出了处理器分配。图表本身解释了可在其上执行的处理器。对于上面的例子,b1和b2在处理器b上执行,c在c和e上执行。

所有任务的执行时间在编译时都是已知的。由于它是循环建模,因此修改每个任务的最坏情况执行时间以捕获循环调度的资源仲裁即可。示例:假设最初上面示例中的所有任务都有exec时间1.然后我们将时间更改为b1,b2更改为2个时间单位,c和e取1.这是coz处理器b运行以下代码:     而(1)     {     run_task_b1();     run_task_b2();     } 因此,如果我们分析task1(用于吞吐量等)以说任务b1需要2个时间单位,那么就足够了,在处理器b上共享b1和b2就足够了。

我的问题:每个任务都使用其他资源(DMA)。假设我们有2个DMA。如果我们天真地按如下方式分配D1和D2:
b1得到D1
c得到D2
e得到D1
b2得到D2
然后循环建模后b1和b2获得执行时间3(coz b1与e和b1共享D1 ,b2共享处理器b,1 + 1 + 1 = 3),c和e得到时间2(coz c与b2共享D2,e与D1共享D1)。所以时间是3,2,2,3。

但是如果我们给分配为:b1得到D1,则得到D2,e得到D2,b2得到D1,建模执行次数为2,2,2,2。

那么如何使算法在编译时找到资源(DMA)分配(静态分配)给定任务图,使得建模的RR时间最短?如上例所示,列表调度将产生效率低下的结果。

1 个答案:

答案 0 :(得分:0)

这闻起来像Job Shop Scheduling,这是NP完全的。 由于您可能没有处理器时间来找到该问题的全局最优值, 只需将任务放入队列中(按某种任务优先级/难度降序排序)并每次都取得最高级别。这不是最佳的,但它将是实用的:)

另外,您可能需要查看工作窃取队列