无法确定谁调用lock_wait

时间:2016-05-27 11:33:56

标签: c++ linux multithreading profiling perf

我有一个多线程应用程序。我可以设置要运行的线程数(简单数据并行)。尝试使用超过4个线程运行它时,我发现性能显着下降。 Profiler显示了__lll_unlock_wake__lll_lock_wait消耗的大量时间,分别由_L_unlock_532_L_lock_926调用。我怀疑堆操作是否锁定,因为每个线程都会分配并释放大量数据。

问题是,任何经过测试的探查器(perf,google的pperf)都不会显示调用者_L_lock_926以上,所以我无法检查我的函数是否导致此锁定。我想使用一些内存池技术来减少堆操作的数量,但我不想在每个数据集合上执行此操作。有没有办法增加此函数的调用堆栈深度?

预期建议:

  • 我用`-fno-omit-frame-pointer'
  • 编译了代码
  • 谷歌的tcmalloc似乎没有帮助
  • 我无法使用fork(),因为我的应用也需要在Windows上运行

0 个答案:

没有答案