首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >区域线程亲和性的OpenMP并行

区域线程亲和性的OpenMP并行
EN

Stack Overflow用户
提问于 2013-02-06 10:32:18
回答 1查看 2.5K关注 0票数 2

假设我有以下OpenMP区域:

代码语言:javascript
运行
复制
omp_set_num_threads(3);
#pragma omp parallel for
{
 //start
 ...
 //somewhere in the middle
 ...
 //end
}

假设我有8核系统。例如,在"start“之后,假设线程0在内核4上运行,线程1在内核5上运行,线程2在内核6上运行。线程是否可能在"end”之前的“中间某处”从"start“之后分配的各自内核迁移?也就是说,线程0-2是否有可能在"start“之后被分配给核心4-5,而”中间某处“的线程则分别被分配到核心5-7?甚至有可能线程就在内核0-2的"end“之前吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-06 16:23:02

据我所知,OpenMP 3.1规范没有提供任何重新绑定线程的方法。

实际上,控制线程绑定的唯一方法是通过OMP_PROC_BIND环境变量:

OMP_PROC_BIND环境变量设置全局绑定变量ICV的值。此环境变量的值必须为truefalse。如果环境变量设置为true,则执行环境不应在处理器之间移动OpenMP线程。如果环境变量设置为false,则执行环境可能会在处理器之间移动OpenMP线程。如果OMP_PROC_BIND的值既不是true也不是false,则程序的行为是由实现定义的。

OpenMP 4.0草案扩展了OMP_PROC_BIND的可能值,并添加了OMP_PLACES环境变量,该变量允许选择线程绑定到资源的方式。尽管如此,没有重新绑定线程的标准方法。

如果这一行为对您来说是绝对必要的,那么您可以考虑使用hwloc库,特别是CPU binding部件。

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

https://stackoverflow.com/questions/14720642

复制
相关文章

相似问题

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