首页 > 解决方案 > openmp taskwait 是否释放任务正在运行的核心?

问题描述

基本上问题说的是什么。

假设我有一个在核心上运行的任务,并且在某个时候我想等待它的子任务完成(使用 taskwait 指令)。任务在等待时,其他任务是否可以使用与等待任务绑定的核心?还是那个核心被阻塞了?

标签: openmp

解决方案


的,OpenMP 运行时可以在指令期间执行其他任务,taskwait因为该指令是 OpenMP 中的隐式调度点。但是,这不是强制性的。Intel/Clang OpenMP 运行时 (IOMP) 和 GCC (GOMP) 都可以做到这一点。大多数运行时为了性能而尝试这样做。

以下是 OpenMP 5.1 标准规定的内容:

第 2.12.6 节:
每当线程到达任务调度点时,实现可能会导致它执行任务切换,开始或恢复执行绑定到当前团队的不同任务。任务调度点隐含在以下位置:

  • [...] 在一个taskwait地区 [...]。

请注意,其他线程可以主动或被动地等待新的传入任务。因此,如果没有可用的任务(即核心不是空闲的),核心可能会忙于等待安排新任务。您可以使用环境变量来控制它OMP_WAIT_POLICY


推荐阅读