Parallel processing OpenMP任务调度策略
我想知道OpenMP任务队列的任务调度是如何执行的 我读到,默认情况下,OpenMP强制使用广度优先的调度程序,并且他们做了一些FIFO与LIFO的测试,但他们没有对默认设置做任何说明。因为我只有一个线程(我使用单指令)来创建多个任务,所以我认为比较广度优先和工作优先调度没有任何意义 那么,默认的先进先出还是后进先出?有可能改变吗 谢谢 我想知道OpenMP任务队列的任务调度是如何执行的 摘要版本 OpenMP中的任务调度是由实现定义的,尽管对算法施加了一些限制。如果您需要操作调度程序,搜索的地方是您要针对的特定OpenMP实现 长话短说 定义所有任务调度机制的基本概念是任务调度点(见第2.11.3节): 每当线程到达任务调度点时,实现 可能导致它执行任务切换,开始或恢复执行 绑定到当前团队的不同任务的 在下面的注释中,他们对预期行为(重点是我的行为)给出了更广泛的解释: 任务调度点动态地将任务区域划分为多个部分。 每个部分从头到尾都不间断地执行。不同部分 同一任务区域的所有任务都将按其执行的顺序执行 遇到。在没有任务同步构造的情况下 线程执行不同可调度任务的部分的顺序 没有具体说明 一个正确的程序必须正确且与所有 与规则兼容的可想象的调度序列 在上面 该标准还规定了,其中暗示了任务调度点:Parallel processing OpenMP任务调度策略,parallel-processing,scheduled-tasks,task,openmp,Parallel Processing,Scheduled Tasks,Task,Openmp,我想知道OpenMP任务队列的任务调度是如何执行的 我读到,默认情况下,OpenMP强制使用广度优先的调度程序,并且他们做了一些FIFO与LIFO的测试,但他们没有对默认设置做任何说明。因为我只有一个线程(我使用单指令)来创建多个任务,所以我认为比较广度优先和工作优先调度没有任何意义 那么,默认的先进先出还是后进先出?有可能改变吗 谢谢 我想知道OpenMP任务队列的任务调度是如何执行的 摘要版本 OpenMP中的任务调度是由实现定义的,尽管对算法施加了一些限制。如果您需要操作调度程序,搜索的地
- 生成显式任务后紧接着的点
- 在任务区域的完成点之后
- 在一个地区
- 在taskwait区域中
- 在任务组区域的末尾
- 在隐式和显式势垒区域中
- 生成目标区域后紧接着的点
- 在目标数据区域的开始和结束处
- 在目标更新区域中
- 开始执行绑定到当前团队的绑定任务
- 恢复绑定到当前团队的任何挂起的任务区域
- 开始执行绑定到当前团队的未绑定任务
- 恢复绑定到当前团队的任何挂起的未绑定任务区域
每个调度算法都必须完成才能被视为符合要求。只是我没有在答案中加上一个注释:在你链接的文章中,他们说
OpenMP…没有指定这些任务的调度应该如何完成(尽管它施加了一些限制)
。我想你可能误解了一些说法,当你说OpenMP强加了一个广度优先的调度程序…那么队列中等待执行的任务呢?任务队列的访问顺序是什么?没有这方面的信息吗?@fc67除了这四个约束之外,其他一切都是特定实现特有的。