使用动态线程数的性能差异

时间:2014-09-12 14:01:41

标签: c++ dynamic openmp

我正在使用openMP对一些重型循环进行并行化,并且它按预期工作。

测试显示该指令提供了最佳性能:

#pragma omp parallel for num_threads(7)

但是,这可能因机器而异。此外,我希望能够使用运行时开关打开/关闭线程。

因此,我想我可以使用这样的东西:

if(shouldThread)
    omp_set_num_threads(optimalNumberOfThreadsForThisMachine);
else
    omp_set_num_threads(1);

在我的计算机上,在此示例中,最佳线程数为7。然后,改为使用此指令:

#pragma omp parallel for

它运行良好 - 除了用第二个指令编译的代码慢大约50%。这是预期的吗?我认为运行时必须进行动态调度和工作调度,而我认为编译时指令可以添加某种优化。

代码是使用msvc 2013在核心i7-3740上编译的

0 个答案:

没有答案