7

OpenMP を使用して計算を高速化する C++11 プロジェクトで Xcode 4.5 を使用しています。

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

アクティビティ モニターには、プログラムによって複数のスレッドが使用されていることが示されますが、使用されているコアは 1 つだけであることがわかりました。

コードを実行しているアクティビティ モニターのスクリーンショット

また、GCC 4.7 を使用して Ubuntu で同じコードを実行したところ、すべてのコアで競合が発生しました。Apple LLVM で OpenMP サポートが削除された可能性はありますか? OpenMP に代わるものはありますか? C++11 の機能を使用しているため、GCC に切り替えることはできません。

4

1 に答える 1

12

編集:この回答は部分的に古くなっています。最新のClangはOpenMPをサポートしていますが、Xcodeで配布されているAppleのビルドはサポートしていません。Homebrewまたは別のパッケージ済みリポジトリからOpenMP対応コンパイラを入手することが可能です。

ClangまだOpenMPをサポートしていません(削除されていません-そもそも存在していませんでした)。AppleのGrandCentralDispatch(GCD)タスクシステムを使用するか、代わりにIntelのThreading Building Blocks(TBB)を使用することができます。

于 2012-12-05T09:46:36.860 に答える