如何检测错误共享会降低性能?

时间:2014-10-16 12:25:02

标签: c++ multithreading performance concurrency

我正在调整一个高性能的多线程应用程序,我怀疑错误共享可能是导致性能不佳的原因。我如何验证是否是这种情况?

我使用gcc 4.82在Ubuntu 12.04上运行C ++。

2 个答案:

答案 0 :(得分:5)

我将发布一些我刚刚从C ++ Concurrency in Action中发现的东西。

测试错误共享的一种方法是在可以由不同线程同时访问的数据元素之间添加大块填充。

struct protected_data
{
   std::mutex m;
   char padding[65536];
   my_data data_to_protect; 
}; 

如果这可以提高性能,那么您就知道错误共享是一个问题。

答案 1 :(得分:3)

这个问题的答案几乎与任何其他性能问题相同,这个问题与“我如何知道X是否会减慢我的程序速度”有关?或者“你会更快”,而答案是你打破你的探查器并对其进行分析。

对于这个特定的例子,您会对访问内存的指令花费不寻常的时间感兴趣。此外,如果您使用的是CPU供应商的分析器(AMD的CODEXL或英特尔的VTune Pro),那么您可以通过缓存未命中进行分析,并查看哪些代码和说明正在刷新缓存行。

您可能需要read this article for more