Cilk工作窃取性能

时间:2016-08-22 13:57:22

标签: scheduling multicore cilk work-stealing

我正在阅读描述Cilk的工作窃取调度性能的论文。

1)我的理解是调度程序不知道关键路径的任务,而只是试图通过窃取非深层次的任务来维持其执行。在任务图中。这是对的吗?

2)此外,Cilk窃取调度程序是否假设所有任务都具有相似的复杂性?如果任务的复杂性不统一,那么调度程序在实现最佳性能(即最佳负载平衡)方面的灵活性会降低吗?

1 个答案:

答案 0 :(得分:1)

回答(1)的最佳方法可能是Cilk调度在窃取任务时是广度优先的,但深度优先。

(2)的答案是Cilk任务调度程序无视任务的复杂性。

要理解的一个关键原则是“布伦特的引理”(Graham先前发现)。这个引理表明(在PRAM假设下)给出了一个贪婪的调度程序(如果有工作要做,它永远不会让工人闲置),那么绝对最好的时间表不会比最差的时间表快2倍,无论如何什么是任务的复杂性。

2x背后的直觉是限制是在执行期间,如果没有工人在关键路径上工作(在关键路径上咀嚼),那么每个工人都忙着(咀嚼整个工作)。关键路径加上总工作量不能超过算法总工作量的两倍。

PRAM假设可能是真实机器的最薄弱环节,其中缓存未命中的时间比缓存命中时间多100倍。因此,担心任务的复杂性不如缓存考虑因素重要。根据Cilk的使用方式,它可以很好地处理缓存(递归程序)或者很糟糕(背对背的cilk_for循环)。