openmp - openmp taskwait 是否释放任务正在运行的核心?
问题描述
基本上问题说的是什么。
假设我有一个在核心上运行的任务,并且在某个时候我想等待它的子任务完成(使用 taskwait 指令)。任务在等待时,其他任务是否可以使用与等待任务绑定的核心?还是那个核心被阻塞了?
解决方案
是的,OpenMP 运行时可以在指令期间执行其他任务,taskwait
因为该指令是 OpenMP 中的隐式调度点。但是,这不是强制性的。Intel/Clang OpenMP 运行时 (IOMP) 和 GCC (GOMP) 都可以做到这一点。大多数运行时为了性能而尝试这样做。
以下是 OpenMP 5.1 标准规定的内容:
第 2.12.6 节:
每当线程到达任务调度点时,实现可能会导致它执行任务切换,开始或恢复执行绑定到当前团队的不同任务。任务调度点隐含在以下位置:
- [...] 在一个
taskwait
地区 [...]。
请注意,其他线程可以主动或被动地等待新的传入任务。因此,如果没有可用的任务(即核心不是空闲的),核心可能会忙于等待安排新任务。您可以使用环境变量来控制它OMP_WAIT_POLICY
。
推荐阅读
- java - 如何制作一个所有行都可以用作键的java表?
- r - 循环变异R中的多列
- mysql - MySQL中交叉检查用户行的外键约束
- php - Laravel 多关系数据获取
- java - 管理器应用程序上的 Tomcat 8 403 访问被拒绝(使用 Docker 设置)
- reactjs - 迁移到 monorepo 结构后 Styled-jsx 打字稿错误。“DetailedHTMLProps”类型上不存在属性“jsx”
- java - 突然关闭时关闭系统创建的所有进程
- node.js - 当我打开项目文件夹时,vs 代码终端(cmd)不起作用
- r - R在2个数据帧中使用多个键相应地获取值
- seaborn - 翻转 Seaborn 热图的颜色条