首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当任务按处理时间排序时,openMp动态调度是否与LPT调度相同?

当任务按处理时间排序时,openMp动态调度是否与LPT调度相同?
EN

Stack Overflow用户
提问于 2019-09-26 04:59:04
回答 1查看 405关注 0票数 0

我对动态调度和LPT调度感到困惑(我认为它是静态的)。

我学到的是基于块大小的动态调度选择任务,当一个线程完成了它的任务时,它会选择另一个任务。LPT调度根据每个任务所需的最长处理时间来选择任务。

因此,如果我根据处理时间对任务进行排序,然后应用块大小为1的动态调度,那么它是否与LPT调度相同?

例如,假设有一个15次迭代的循环。在每一次迭代中,计算向量的CartesianProduct。但在每个项目中,矢量的大小是不同的,这意味着负载是不平衡的。如果我计算出每个迭代的结果大小,并按降序排序,然后调度(dynamic,1),理论上这与LPT相同吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-27 08:56:36

首先,OpenMP调度子句适用于循环,而不是任务,因此在这种上下文中讨论任务是很混乱的,因为OpenMP也有任务(甚至taskloop)。为了避免混淆,我将循环调度实体称为“块”,因为它是一个连续的迭代块。

假设您想讨论循环上的schedule子句,那么

  1. 假设块执行时间的先验知识的调度算法与OpenMP允许的不需要此类知识的任何算法之间有根本的区别。从
  2. 到OpenMP 4.5,现在有一个调度修饰符(monotonicnonmonotonic),它可以应用于dynamic调度(以及其他调度),并影响调度所能生成的序列。OpenMP 5.0中的
  3. (默认的、未修饰的schedule(dynamic) )等价于schedule(nonmonotonic:dynamic),后者允许使用schedule(monotonic:dynamic)无法执行的序列,并且很可能破坏您的映射(不过,您可以使用schedule(monotonic:dynamic),所有的OpenMP调度行为都是根据机器的执行状态来描述的。)当然有可能产生的序列不是您所期望的,因为机器状态表示基本事实,反映来自其他机器负载的干扰等问题,而像LPT这样的调度方案是基于假设的执行时间先验知识,而实际情况中可能没有反映。

您可以在schedule(nonmonotonic:dynamic)上看到关于https://www.openmp.org/wp-content/uploads/SC18-BoothTalks-Cownie.pdf的讨论

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58109820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档