Nat*_*mal 5 c++ concurrency performance multithreading
我正在调整一个高性能的多线程应用程序,我怀疑虚假共享可能是导致性能不佳的原因.我如何验证是否是这种情况?
我正在使用gcc 4.82在Ubuntu 12.04上运行C++.
我将发布一些我刚刚从C++ Concurrency in Action中发现的东西.
测试错误共享的一种方法是在数据元素之间添加大量填充块,这些块可以由不同的线程同时访问.
struct protected_data
{
std::mutex m;
char padding[65536];
my_data data_to_protect;
};
Run Code Online (Sandbox Code Playgroud)
如果这可以提高性能,那么您就知道错误共享是一个问题.
这个问题的答案与任何其他性能问题几乎相同,都是“我如何知道 X 是否正在减慢我的程序速度?” 或“Y 会更快吗”,答案是您打开分析器并对其进行分析。
对于这个特定的示例,您可能会感兴趣的是访问内存的指令是否花费了异常多的时间。此外,如果您使用 CPU 供应商的分析器(AMD 的 CODEXL 或 Intel 的 VTune Pro),那么您可以通过缓存未命中进行分析,并查看哪些代码和指令行正在刷新您的缓存行。
您可能想阅读这篇文章以了解更多信息。
| 归档时间: |
|
| 查看次数: |
913 次 |
| 最近记录: |