微软的 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 时间如何控制?的主要内容,如果未能解决你的问题,请参考以下文章

Linux内核中mutex,spinlock的使用

四色可选!好价!Microsoft微软Surface 13.5寸轻薄触控笔记本(i5/8GB/256GB)$999

如何调用spin_lock函数

如何判断 OpenMP 是不是正常工作?

如何在 OpenMP 中分叉大量线程?

如何在 XCode 7 中应用支持 OpenMP