【发布时间】:2011-06-23 23:22:47
【问题描述】:
如果有英特尔 VTune 放大器的良好经验的人告诉我这件事,我将不胜感激。
最近,我收到了其他人的性能分析报告,他们使用英特尔 VTune Amplifier 来处理我的程序。它表明,线程并发区域存在高开销时间。
开销时间是什么意思?他们不知道(问我),我无权访问英特尔 VTune 放大器。
我的想法很模糊。这个程序有很多线程睡眠调用,因为pthread condition 在目标平台上是不稳定的(或者我做得很糟糕),所以我改变了很多例程以在循环中执行如下所示的工作:
while (true)
{
mutex.lock();
if (event changed)
{
mutex.unlock();
// do something
break;
}
else
{
mutex.unlock();
usleep(3 * 1000);
}
}
这可以标记为开销时间?
有什么建议吗?
我在英特尔网站上找到了关于 Overhead Time 的帮助文档。 http://software.intel.com/sites/products/documentation/hpc/amplifierxe/en-us/win/ug_docs/olh/common/overhead_time.html#overhead_time
摘录:
开销时间是从释放共享资源开始到接收该资源结束的持续时间。理想情况下,开销时间的持续时间非常短,因为它减少了线程必须等待获取资源的时间。但是,并非并行应用程序中的所有 CPU 时间都可以用于执行真正的有效负载工作。如果并行运行时(英特尔® 线程构建模块、OpenMP*)的使用效率低下,则很大一部分时间可能会花在并行运行时内,从而在高并发级别上浪费 CPU 时间。例如,这可能是由于递归并行算法中的工作拆分粒度过低:当工作负载大小变得太低时,拆分工作和执行内务工作的开销会变得很大。
仍然令人困惑..这是否意味着“您进行了不必要/过于频繁的锁定”?
【问题讨论】:
-
我不知道您的确切设计,但是恕我直言,我们也可能会为此开销增加上下文切换时间。
标签: c++ c multithreading profiling