微软的 OpenMP spinlock 时间如何控制?
Posted
技术标签:
【中文标题】微软的 OpenMP spinlock 时间如何控制?【英文标题】:How can Microsoft's OpenMP spinlock time be controlled? 【发布时间】:2013-12-23 17:13:26 【问题描述】:英特尔编译器使用的 OpenMP 支持环境变量 KMP_BLOCKTIME
(docs),我相信它控制线程等待新工作的忙等待(自旋锁定)时间(链接文档声称这默认为 200 毫秒)。
Gnu 编译器使用的 OpenMP 支持环境变量 GOMP_SPINCOUNT
(docs),我相信它也控制着该库的等效实现细节(尽管显然表示为迭代计数而不是时间)。
我的问题是:Microsoft 提供哪些控件(如果有)来控制 Microsoft 编译器使用的 OpenMP 中的此参数?(我目前感兴趣的是 VS2010。) p>
(我很清楚,如果我的程序的并行性完全基于 OpenMP,则几乎没有理由担心这一点,但我的兴趣是由大型复杂系统的一些 vtune 跟踪引起的,该系统也大量使用了 TBB。 )
【问题讨论】:
看起来不太好,即 VS 没有解决方案:see this SO post 和 this social MSDN post 表示这样。 感谢您的链接;来自 MS 的“无法修复” - 哎哟!很高兴看到这不仅仅是我。实际上,我在使用更标准的 OMP_WAIT_POLICY 控制 Gnu 的 OMP 等待方面取得了一些成功,但是无论附带什么版本的 OpenMP,MS 都不支持它msdn.microsoft.com/en-us/library/6sfk977f%28v=vs.100%29(或者在 2012/2013 年)。OMP_WAIT_POLICY
在 OpenMP 3.0 中添加。微软的 OpenMP 实现是 2.0,即使使用了最新最好的 MSVC 编译器。
【参考方案1】:
Microsoft Visual Studio 2010 SP1 及更高版本似乎确实支持 OMP_WAIT_POLICY,如 Knowledge base article 所示
将 OMP_WAIT_POLICY 设置为 PASSIVE 确实可以解决我在使用 Visual Studio 2013 编译时遇到的问题。
【讨论】:
以上是关于微软的 OpenMP spinlock 时间如何控制?的主要内容,如果未能解决你的问题,请参考以下文章