2013-02-28 21 views
7

OS X 10.8 "Mountain Lion"にアップグレードしたばかりで、後悔します。OS X 10.8、llvm、CMakeを使ったOpenMP

OpenMPを使用する私の(単純な)並列コードをビルドすることができなくなりました。

ここを見れば、Appleはもうgccを使っていないが、llvmはライセンス関連の問題の可能性が高いと理解している。残念ながら、 'llvm'はOpenMPをサポートしていません。

OpenMPをベースにした多くのプログラムがOS Xで動作しなくなるとは思わないので、私の質問は次のとおりです。Mountain LionでOpenMPを有効にするにはどうすればいいですか?


フリスト・イリエフの優れた答えを読んだ後、私は私が最初に思ったよりも多くの行方不明だと思います。

私はXCodeを使用していません。建物はCMakeとmake/gccに基づいています。昨日私はmacports経由でgcc 4.2をインストールしましたが、今日のように私のコードはソースフォームになっています。なぜなら、いくつかの奇妙な理由から、コンパイルをgcc(OpenMPに関する同じエラー)に切り替えることができないからです。

問題は今CMakeがllvmコンパイラを使い続けていることです。

set(CMAKE_C_COMPILER "/opt/local/bin/gcc-apple-4.2") 
set(CMAKE_CXX_COMPILER "/opt/local/bin/gcc-apple-4.2") 

と私はまた、2つの環境変数を追加しました::ルートCMakeLists.txtで は、私は次の2行を追加

export CXX=/opt/local/bin/gcc-apple-4.2 
export CC=/opt/local/bin/gcc-apple-4.2 

cmakeのは、OpenMPは(FIND_PACKAGEは(OpenMPの))私が手を見つけるためにしようとすると次の出力:

-- The compiler is /opt/local/bin/gcc-apple-4.2 
-- Try OpenMP C flag = [-fopenmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
[...] 
CMake Error at /opt/local/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:97 (message): 
Could NOT find OpenMP (missing: OpenMP_C_FLAGS OpenMP_CXX_FLAGS) 
Call Stack (most recent call first): 
/opt/local/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:291 (_FPHSA_FAILURE_MESSAGE) 
/opt/local/share/cmake-2.8/Modules/FindOpenMP.cmake:159 (find_package_handle_standard_args) 
demo/CMakeLists.txt:8 (FIND_PACKAGE) 

は私が手動で/opt/local/bin/gcc-apple-4.2を実行しようと、それは欠落libgompによる失敗しました。

よろしく

+1

10.8にgccをインストールするだけです:http://stackoverflow.com/questions/9353444/how-to-use-install-gcc-on-mac-os-x-10-8-xcode-4-4 –

+1

私はその質問を見つけましたが、それはコマンドラインツールのインストールに関連していました。今、私は実際のgccのインストールに関連する答えを見てきました。ありがとうございました。 –

+0

XCodeコマンドラインツールに付属しているので、MacportからGCC 4.2を追加する必要はありませんでした。あなたは[GUIから追加でインストールする]必要があります(http://developer.apple.com/library/ios/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_3.html)。それでも、XCodeを使用しないので、私はあなた自身のGCC 4.7.2をビルドすることを強く推奨します - OpenMP 3.1の機能をサポートする最新かつ最大のもの: –

答えて

11

LLVMは、Appleが(特にOpenGLの実装で)OS Xで広く使用コンパイラフレームワークではなく、コンパイラそのものです。古いGCCベースの1つのllvm-gcc(OpenMP 2.5をサポート)と新しいclang(OpenMPをサポートしていない)の2つのLLVMフロントエンドがXcodeで利用可能です。 clangには広範な静的コード解析機能があり、特にC++コードでのエラー報告が非常に優れています。これがAppleがGCCに投資し、GCCから離れている理由の大半を占めている(反対側のFreeBSDプロジェクトは、純粋にライセンス関連の理由でGCCをclangに置き換えることを目指している)。 OpenMP対応のバージョンclangを作成しようとしている進行中のプロジェクトclomp(IntelのCluster OpenMPと間違えてはいけません)がありますが、それは成熟していません。

明示的なタスクのような新しいOpenMP構成を必要とせず、いくつかのbugsと一緒に暮らすことができるなら、古いGCCフロントエンドを引き続き使用できます。ただ、LLVM GCC 4.2にプロジェクト設定でコンパイラスイートを切り替える:

Compiler suite chooser

この1は本当に古代のGCC 4.2.1に基づいて、もはや開発されるように思われます。新しいバージョンのGCCが必要な場合は、単純にbuild oneです。残念ながら、私はそれをXcodeに統合する方法に関する情報を提供することはできません。コマンドラインでGCC 4.7.1とOS X 10.8.2(と私は多くのXcodeを使用していません)で動作します。

4

優れたHristoの答えに数単語を追加するだけで、MacPorts経由でgccをインストールできます。これは、手ですべてをコンパイルするよりはるかに簡単です(そして、gccを最初からコンパイルすることは、依存関係のために本当に簡単な作業かもしれません)。

MacPortsをインストールして「sudo port install gcc47」を実行して、数時間待つと、OpenMPコードをコンパイルできるgcc-mp-4.7で終わります。

+3

自作でも入手できます。 OpenMP対応の – FreeNickname

+6

は '$ brew install gcc --without-multilib'を使用します –

関連する問題