我很难理解cilk中多线程编程中贪婪调度的完整步骤和不完整步骤。
以下是供参考的电源点演示文稿。
Cilk ++ Multi-threaded Programming
我理解的问题是从幻灯片#32 - 37开始。
有人可以特别解释一下
Complete step>=P threads ready to run
incomplete steps < p threads ready
感谢您的时间和帮助
答案 0 :(得分:1)
首先,请注意幻灯片中提到的“线程”与人们可能认为的OS线程不同。他们对线程的定义在幻灯片10中给出:"a maximal sequence of instructions not containing parallel control (spawn, sync, return)"
。为了避免进一步的混淆,让我把它称为任务。
在幻灯片32-35上,圆圈表示任务(“线程”),边缘表示任务之间的依赖关系。你询问的句子实际上是定义:当P或更多任务准备好运行时(所有P处理器都忙着做一些工作),情况称为完整步骤,而如果少于P任务准备就绪,这种情况被称为不完整的一步。为了简化分析,(隐式)假设所有任务包含相同的工作(大小为1)。
然后,幻灯片35上的定理提供了贪婪的调度程序运行程序所需的时间上限。由于所有执行都是一系列完整和不完整的步骤,因此执行时间是所有步骤的总和。由于每个完整步骤都执行精确的P工作,因此完整步骤的数量不能大于T1(总工作量)除以P.然后,每个不完整步骤必须执行属于关键路径的任务(因为每个步骤至少有一个关键路径)路径任务必须准备好,不完整的步骤执行所有就绪任务);所以不完整步骤的总数不超过跨度T_inf(关键路径长度)。因此,T1 / P和T_inf的总和给出了执行时间的上限。“调度理论”部分中的其他幻灯片非常简单。