我正在使用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上编译的