英特尔编译器使用的 OpenMP 支持环境变量 KMP_BLOCKTIME
( docs ),我相信它控制着线程等待新工作所花费的忙等待(自旋锁定)时间(链接文档声称这默认为 200 毫秒)。
Gnu 编译器使用的 OpenMP 支持环境变量 GOMP_SPINCOUNT
( docs ),我相信它也控制着该库的等效实现细节(尽管显然表示为迭代计数而不是时间) .
我的问题是:Microsoft 提供什么控件(如果有)来控制 Microsoft 编译器使用的 OpenMP 中的此参数?(目前我感兴趣的是 VS2010。)
(我很清楚,如果我的程序的并行性完全基于 OpenMP,那么就没有理由担心这一点,但我的兴趣是由大型复杂系统的一些 vtune 跟踪引起的,该系统也大量使用了 TBB。 )
最佳答案
Microsoft Visual Studio 2010 SP1 及更高版本似乎支持 OMP_WAIT_POLICY,如本 Knowledge base article 所示
将 OMP_WAIT_POLICY 设置为 PASSIVE 确实解决了我在使用 Visual Studio 2013 进行编译时遇到的问题。
关于c++ - 微软的OpenMP自旋锁时间如何控制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20748066/