9da*_*dan 8 c c++ multithreading profiling
如果有英特尔VTune放大器经验丰富的人告诉我这个问题,我将非常感激.
最近我收到了其他使用英特尔VTune放大器的人的性能分析报告.它告诉我,线程并发区域的开销时间很长.
开销时间的含义是什么?他们不知道(问我),我没有访问英特尔VTune Amplifier.
我有一些模糊的想法.这个程序有许多线程睡眠调用,因为pthread condition在目标平台上不稳定(或者我做得很糟糕)所以我改变了很多例程来在循环中做的工作如下所示:
while (true)
{
mutex.lock();
if (event changed)
{
mutex.unlock();
// do something
break;
}
else
{
mutex.unlock();
usleep(3 * 1000);
}
}
Run Code Online (Sandbox Code Playgroud)
这可以标记为开销时间?
有什么建议?
我从英特尔网站上找到了有关开销时间的帮助文档. http://software.intel.com/sites/products/documentation/hpc/amplifierxe/en-us/win/ug_docs/olh/common/overhead_time.html#overhead_time
摘抄:
开销时间是从共享资源的发布开始并以收到该资源结束的持续时间.理想情况下,开销时间的持续时间非常短,因为它减少了线程必须等待获取资源的时间.但是,并行应用程序中的所有CPU时间可能不会用于执行实际的工资负载工作.在并行运行时(英特尔®线程构建模块,OpenMP*)使用效率低的情况下,可能会在并行运行时内花费大量时间在高并发级别上浪费CPU时间.例如,这可能是由于递归并行算法中的低粒度工作分割造成的:当工作负载大小变得太低时,分割工作和执行内务工作的开销变得很大.
仍然令人困惑..这是否意味着"你做了不必要/太频繁的锁定"?
抱歉,我不是pthread英特尔 VTune 放大器方面的专家,但是,锁定互斥锁并解锁它可能会计入开销时间。
锁定和解锁互斥体可以作为系统调用来实现,分析器可能会将其归入线程开销之下。