回答
我将发布一些我刚刚从C++ Concurrency in Action中遇到的内容。
测试错误共享的一种方法是在可由不同线程同时访问的数据元素之间添加大量填充块。
struct protected_data
{
std::mutex m;
char padding[65536];
my_data data_to_protect;
};
如果这可以提高性能,那么您知道虚假共享是一个问题。
填充确实可以帮助很多,虽然64k可能是过度的。请参阅http://stackoverflow.com/questions/8620303/how-many-bytes-does-a-xeon-bring-into-the-cache-per-memory-access,并访问被接受的答案中链接的文章。另外,不要手动添加填充,你可以使用'aligned'类型属性[在gcc上可用](https://gcc.gnu.org/onlinedocs/gcc-3.1/gcc/Type-Attributes.html) – fvu 2014-10-17 15:40:39
对此的回答几乎与其他任何性能问题相同,如“我如何知道X是否会减慢我的程序?”或者“会不会更快”,这个答案是你打破你的分析器,并且你可以分析它。
对于这个特定的例子,你会感兴趣的是在访问存储器的指令上花费了不寻常的时间。此外,如果您正在使用您的CPU供应商的分析器(CODEXL for AMD或VTune Pro for Intel),那么您可以通过缓存未命中进行配置,并查看哪些代码和指令行正在刷新缓存行。您可能想要read this article for more。
- 1. OpenMP虚假共享
- 2. 与虚假共享相关的性能计数器事件
- 3. 虚假检测Opencv
- 4. 如何避免虚假亮点检测?
- 5. 在C/C++应用程序中检测虚假共享的工具
- 6. 多线程 - 效率降低,可能是`虚假共享'所致[
- 7. 你会如何避免这种情况下的虚假共享?
- 8. 检测共享IP
- 9. 如何使用actionscript检测“共享”?
- 10. Javascript性能:如何检查什么是减慢页面?
- 11. Yosys逻辑循环虚假检测
- 12. 检测屏幕共享
- 13. 检测Facebook共享成功?
- 14. c#表达式 - 如何检查虚假
- 15. C++中的假共享
- 16. 虚假的防护成员变量共享?
- 17. NUMA系统,虚拟页面和假共享
- 18. 如果性能测试太慢,性能测试会失败吗?
- 19. 检测用于共享某些内容的共享者
- 20. MySQL的性能减慢where子句
- 21. C#MemoryStream减慢程序性能
- 22. 使用appendTo多次减慢性能
- 23. 是否cursor.observe减慢服务器性能?
- 24. 其他加入减慢性能
- 25. GCD dispatch_apply共享只读资源减慢执行速度
- 26. C和OpenMP的:指向共享只读数据减慢执行
- 27. 从虚拟机共享文件夹缓慢svn结帐
- 28. jQuery检查虚假条目
- 29. C#布尔操作来检测任何虚假申报
- 30. EC2比共享主机慢?
这是远远没有足够的信息给你任何有用的信息。 – sjdowling 2014-10-16 12:31:49
删除虚假共享并查看性能是否提高。 – molbdnilo 2014-10-16 12:42:09
@molbdnilo我怀疑它正在发生,但我不知道它是否是。我正在寻找一种明确的方式来说“是的错误分享正在发生”,然后我可以删除它,看看是否性能提高。 – 2014-10-16 12:46:16