线程等待如何影响程序的执行时间? 在我的C++程序中,我使用Boost库进行并行编程。在程序的一部分中,有几个线程连接到其他线程上
对于某些输入,程序运行非常慢。。。为了改进我的程序,我尝试使用“英特尔VTune”查找热点。最耗时的热点出现在boost::this_thread::interruptable_wait: 当我检查源代码中出现这个热点的部分时,它显示了对join的调用。我的印象是等待线程不会占用CPU时间。有人能帮我理解为什么线程连接操作占用这么多CPU时间吗 任何关于如何修复此类热点的见解都将非常有用!我能想到的一种修复此类热点的方法是以某种方式分离线程,而不是加入它们 提前谢谢 我的印象是等待线程不会占用CPU时间 这实际上取决于线程如何等待。它们可能正在旋转,以尽快对它们等待的任何东西作出反应。在每次检查后执行的替代方法意味着操作系统调度和线程切换开销可能会带来更高的延迟 VTune将无情地占用线程库的所有开销,您需要进行适当的筛选,以确定串行热点在哪里,以及并行化是否减轻了它们 如果线程花费大量时间等待连接,那么并行部分可能不平衡。如果没有关于你的问题的更多信息,很难知道原因是什么或者如何减轻它,但是你可能应该尝试更平均地分配工作 另一方面,最近的幽灵/熔毁修复似乎增加了VTune的评测开销。我会小心地从表面上看结果,你的程序在有和没有评测的情况下运行的时间是否接近相同线程等待如何影响程序的执行时间? 在我的C++程序中,我使用Boost库进行并行编程。在程序的一部分中,有几个线程连接到其他线程上,c++,multithreading,boost-thread,condition-variable,intel-vtune,C++,Multithreading,Boost Thread,Condition Variable,Intel Vtune,对于某些输入,程序运行非常慢。。。为了改进我的程序,我尝试使用“英特尔VTune”查找热点。最耗时的热点出现在boost::this_thread::interruptable_wait: 当我检查源代码中出现这个热点的部分时,它显示了对join的调用。我的印象是等待线程不会占用CPU时间。有人能帮我理解为什么线程连接操作占用这么多CPU时间吗 任何关于如何修复此类热点的见解都将非常有用!我能想到的一种修复此类热点的方法是以某种方式分离线程,而不是加入它们 提前谢谢 我的印象是等待线程不会占用C
编辑:相关材料和文件。按照页面中关于禁用内核保护的说明进行操作在我的案例中有所帮助,尽管我还没有在最新的VTune更新中对其进行测试。谢谢您的回答!目前,我不太关心如何平衡并行部分,因为手头的问题很难在平衡线程工作负载的同时并行化。我主要关心的是boost库中的join函数是否会进行繁忙的等待。。。如果没有评测,我测试的输入速度大约快50%。是的,听起来很熟悉。对于我来说,OMP并行化代码在几次更新中几乎没有并行工作,因此基本热点从未正常工作过,但我不知道这有多普遍。您是否尝试过高级热点、常规探索或Visual Studio性能分析器?它们使用不同的采样技术,根据我的经验,可以得到更好的结果,但是在Windows和VTune更新之间,很难给出一个一般性的说明。我以前尝试过高级热点。那么,我的基本热点结果是否不正确?也就是说,join函数不占用CPU时间吗?如果您的程序在评测时运行时间延长50%,那么结果将一文不值——要么是因为您正在测量实际评测开销,要么是因为基本热点无法正常工作。然而,这并不意味着join不需要CPU时间。高级热点在您尝试时是否起作用?另外,请检查“我的答案”中的编辑。在您的相关资料中,英特尔建议不要使用高级热点。他们还说,基本热点工作正常。是的,我记得高级热点有时会给我显示一个结果,有时会崩溃。