7

我们在一个 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
    }
}

尽管活动监视器显示程序正在使用多个线程,但我们观察到只使用了一个内核:

运行我的代码的活动监视器的屏幕截图

我们还在使用 GCC 4.7 的 Ubuntu 上运行相同的代码,并观察到所有内核上的争用。会不会是 Apple LLVM 中删除了 OpenMP 支持?有没有 OpenMP 的替代品?由于我们使用 C++11 特性,我们无法切换到 GCC。

4

1 回答 1

12

编辑:这个答案现在已经部分过时了。Modern Clang 确实支持 OpenMP,只是不支持 Apple 的随 Xcode 分发的构建。可以从 Homebrew 或其他预打包的存储库中获取支持 OpenMP 的编译器。

Clang还不支持 OpenMP(它还没有被删除 - 它从一开始就不存在)。您可以使用 Apple 的 Grand Central Dispatch (GCD) 任务系统,也可以使用 Intel 的线程构建模块(TBB)。

于 2012-12-05T09:46:36.860 回答