首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >线程等待如何影响程序的执行时间?

线程等待如何影响程序的执行时间?
EN

Stack Overflow用户
提问于 2018-04-19 20:42:57
回答 1查看 565关注 0票数 0

在我的C++程序中,我使用boost库进行并行编程。在程序的一部分中,有几个线程在其他线程上进行join()

对于某些输入,程序运行得相当慢。为了改进我的程序,我尝试使用Intel VTune查找热点。最耗时的热点显示是由boost::this_thread::interruptible_wait引起的

当我检查源代码中出现此热点的部分时,它显示了对join()的调用。我的印象是等待线程不会占用CPU时间。有人能帮我解释一下为什么线程join()操作占用这么多CPU时间吗?

任何关于如何修复这样一个热点的见解也将非常有帮助!我能想到的修复这样一个热点的一种方法是以某种方式detach()线程而不是join()它们。

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2018-04-19 20:53:50

我的印象是等待线程不会占用

时间

这真的取决于线程如何等待。他们可能是busy waiting (也就是旋转),以尽可能快地对他们等待的任何东西做出反应。在每次检查之后产生执行的替代方案意味着来自操作系统调度(和线程切换开销)的潜在更高的延迟。

VTune会毫不留情地占用你所有的线程库开销,你需要适当地过滤,以找出你的串行热点在哪里,以及你的并行化是否减轻了它们。

如果您的线程在连接上花费大量时间等待,则您的并行区可能不是很平衡。如果没有更多关于你的问题的信息,就很难说出原因是什么,或者如何减轻它,但你可能应该尝试更均匀地分配工作。

另一方面,最近的spectre/meltdown修复似乎增加了VTune的分析开销。我会小心地从表面上看结果(您的程序在分析和不分析的情况下运行的时间是否相同?)。

编辑:相关材料herehere。按照linked页面中的说明禁用内核保护对我的情况很有帮助,尽管我还没有在最新的VTune更新上对其进行测试。

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

https://stackoverflow.com/questions/49921445

复制
相关文章

相似问题

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