Xcode 4.5和带有Clang的OpenMP(Apple LLVM)仅使用一个核心

Pas*_*cal 6 c++ xcode openmp clang

我们在C++ 11项目中使用Xcode 4.5,我们使用OpenMP来加速计算:

#pragma omp parallel for
for (uint x=1; x<grid.width()-1; ++x) {
    for (uint y=1; y<grid.height()-1; ++y) {
         // code
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然活动监视器显示程序正在使用多个线程,但我们发现只使用了一个核心:

运行我的代码的Activity Monitor的屏幕截图

我们还使用GCC 4.7在Ubuntu上运行相同的代码,我们观察到所有核心上的争用.是否已在Apple LLVM中删除了OpenMP支持?有没有替代OpenMP?由于我们使用C++ 11功能,因此无法切换到GCC.

Hri*_*iev 11

还支持OpenMP的(它已不被删除-它从来没有摆在首位存在).您可以使用Apple的Grand Central Dispatch(GCD)任务系统,也可以使用英特尔的线程构建模块(TBB).