【发布时间】: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 编译器。
标签: c++ visual-studio-2010 visual-studio openmp spinlock