我相信我遇到了使用OpenMP的虚假共享。有什么方法可以识别并修复它吗?OpenMP虚假共享
我的代码是:https://github.com/wchan/libNN/blob/master/ResilientBackpropagation.hpp线36
使用4芯CPU相比单线程1芯版本中额外的性能仅产生10%。当使用NUMA 32物理(64虚拟)CPU系统时,CPU利用率停留在1.5核心左右,我认为这是虚假共享的直接症状,无法扩展。
我也试着用英特尔VTune分析器来运行它,它说大部分时间都花在了“f()”和“+ =”函数上。我相信这是合理的,并不能真正解释为什么我得到如此糟糕的缩放......
任何想法和建议?
谢谢。
虚假分享不会减少您的CPU利用率。它只会导致大量的缓存未命中。 – Mysticial 2012-01-27 00:52:34
@Mystical - 我的理解是,如果调度程序调度拥有该页面的处理器上的所有线程以避免过度迁移它,则可能是在NUMA上。 – Flexo 2012-01-27 18:54:37
@awoodland这当然是一种可能 - 尽管将所有事物都记忆在一起的另一个后果。 (因为你在我的联合国中遗漏了第二个'我',所以我没有得到你的支持。) – Mysticial 2012-01-27 20:59:08