首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用openmp时运行的线程数不一致

使用openmp时运行的线程数不一致
EN

Stack Overflow用户
提问于 2015-02-02 14:15:50
回答 1查看 118关注 0票数 0

我有一个带有openmp的c程序,并行for.The机器有24个内核。每个并行任务访问mmap文件中的不同位置,并进行一些计算。我没有设置任何特定的线程数。我让openmp来决定。当我查看htop时,我发现一次运行的线程数量有很大的不一致。有时,所有24个核心都被100%使用,整个任务很快就完成了,但在其他时候,htop显示只有2-3个线程(与除我的程序之外的所有其他进程/线程相结合)在运行。我还看到,当只有2-3个线程在运行时,大多数内核几乎不会被占用。

在任何给定时间运行的线程数量不一致的原因可能是什么,是否有一种方法可以通过我的程序控制行为,使结果在某种程度上是可预测的。目前,我的程序可能需要7秒甚至超过1分钟才能完成。

提前感谢!

添加gprof输出

代码语言:javascript
复制
Each sample counts as 0.01 seconds.
%   cumulative   self              self     total
time   seconds   seconds    calls  ms/call  ms/call  name
43.50     26.62    26.62                             __libc_csu_init
41.91     52.26    25.65     4985     5.14     5.14  _get_entity
9.08     57.81     5.55                             __libc_csu_fini
4.61     60.64     2.82     5000     0.56     0.56  common_count_2
0.74     61.09     0.45        1   450.27   450.27  _get_first_entity
0.16     61.19     0.10                             main
0.00     61.19     0.00        1     0.00     0.00  copy_index
EN

回答 1

Stack Overflow用户

发布于 2015-02-03 02:59:04

OpenMP试图通过减少线程数量来帮助您,因为它认为您的并行性不够。此行为可由代码中的OMP_DYNAMIC环境变量或omp_set_dynamic函数调用控制。默认情况下,它应该被禁用,但它值得仔细检查。

动态一词的这种用法不应与表示动态调度的调度( dynamic )相混淆。OMP_DYNAMIC指的是动态数量的线程,而不是动态地将工作调度到固定数量的线程(调度(动态)。

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

https://stackoverflow.com/questions/28272075

复制
相关文章

相似问题

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