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

Nat*_*mal 5 c++ concurrency performance multithreading

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

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

Nat*_*mal 5

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

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

struct protected_data
{
   std::mutex m;
   char padding[65536];
   my_data data_to_protect; 
}; 
Run Code Online (Sandbox Code Playgroud)

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


sjd*_*ing 3

这个问题的答案与任何其他性能问题几乎相同,都是“我如何知道 X 是否正在减慢我的程序速度?” 或“Y 会更快吗”,答案是您打开分析器并对其进行分析。

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

您可能想阅读这篇文章以了解更多信息


归档时间:

查看次数:

913 次

最近记录:

11 年,7 月 前