【问题标题】:What's the meaning of thread concurrency overhead time in the profiler output?探查器输出中的线程并发开销时间是什么意思?
【发布时间】: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


【解决方案1】:

抱歉,我不是 pthread 或英特尔 VTune 放大器方面的专家,但是是的,锁定和解锁互斥锁可能会计入开销时间。

锁定和解锁互斥锁可以作为系统调用来实现,分析器可能会在线程开销下混为一谈。

【讨论】:

    【解决方案2】:

    我对 vTune 不熟悉,但线程之间存在操作系统开销切换。每次一个线程停止并在处理器上加载另一个线程时,都需要存储当前线程上下文,以便在线程下一次运行时可以恢复它,然后需要恢复新线程的上下文以便它可以继续处理。

    问题可能是您有太多线程,因此处理器大部分时间都在它们之间切换。如果线程数与处理器数相同,多线程应用程序将最有效地运行。

    【讨论】:

      【解决方案3】:

      我也不是这方面的专家,虽然我自己也尝试过使用pthread

      为了说明我对开销时间的理解,让我们以一个简单的单线程程序来计算数组和:

      for(i=0;i<NUM;i++) {
          sum += array[i];
      }
      

      在该代码的简单 [合理完成] 多线程版本中,可以将数组分解为每个线程的一部分,每个线程保留自己的总和,在线程完成后,总和被求和。

      在一个写得很糟糕的多线程版本中,数组可以像以前一样被分解,每个线程都可以atomicAdd 得到一个全局总和。

      在这种情况下,原子添加一次只能由一个线程完成。我相信开销时间是衡量所有其他线程在等待自己的atomicAdd 时花费的时间(你可以尝试编写这个程序来检查你是否想确定)。

      当然,它还考虑了处理切换信号量和互斥体所需的时间。在您的情况下,这可能意味着在 mutex.lock 和 mutex.unlock 的内部花费了大量时间。

      我不久前对一个软件进行了并行化(使用pthread_barrier),并且遇到了运行障碍比仅使用一个线程需要更长的时间的问题。事实证明,必须有 4 个屏障的循环执行得足够快,以至于开销不值得。

      【讨论】:

        猜你喜欢
        • 2018-01-06
        • 2021-12-30
        • 2012-04-11
        • 1970-01-01
        • 2022-11-08
        相关资源
        最近更新 更多