OpenMP を使って C++ で並列プログラムを書きたいので、OpenMP を使い始めています。言い換えれば、私は初心者であり、インストール方法を説明する優れた OpenMP ガイドが必要です。Windows に OpenMP をインストールし、プログラムをコンパイルして実行する方法を知っている人はいますか?
3 に答える
OpenMP はインストールするものではありません。コンパイラに付属しています。OpenMP をサポートする適切なコンパイラが必要であり、通常はデフォルトで無効になっている OpenMP サポートを有効にする方法を知る必要があります。
Windows の標準コンパイラは Microsoft から提供されており、Visual Studio の Microsoft Visual C/C++ コンパイラです。残念ながら、その OpenMP サポートは少し古くなっています。最新かつ最高の Visual Studio でさえ、OpenMP 2.0 (2002 年からの古い標準バージョン) しかサポートしていません。Visual Studio で OpenMP を使用する方法の詳細については、こちらを参照してください。インテル C/C++ コンパイラー (商用ライセンスが必要) と GCC (無料で入手可能) の両方が新しい OpenMP バージョンをサポートし、他のコンパイラーも使用できます。
ここにある OpenMP Web サイトにアクセスして、OpenMP の学習を開始できます。また、Lawrence Livermore National Laboratory による OpenMP に関する優れたチュートリアルがここから入手できます。
2020 年の更新: Microsoft は、Visual Studio と共に Clang for Windows を出荷するようになりました。少し複雑ですが、Clang-cl ツールセットを (ab) 使用して、動作する32 ビットOpenMP プログラムを作成できます。いくつかの手順が必要です。
- まだインストールされていない場合は、Visual Studio 2019 インストーラーを使用して Clang と Clang-cl を追加します。
- プロジェクトのプラットフォーム ツールセット (プロジェクトプロパティ -> 一般 -> プラットフォーム ツールセット) を「LLVM (clang-cl)」に設定します。
-Xclang -fopenmp
プロジェクトのProperties -> C/C++ -> All Options -> Additional Optionsでコンパイラ オプションを追加して、Clang OpenMP サポートを有効にします。
重要:プラットフォーム ツールセットを切り替える前に、OpenMP サポートが無効になっていることを確認してください(これは、新しい C++ プロジェクトのデフォルトです)。/openmp
Clang の言語構成に OpenMP のオプションがなくても、VS は設定を記憶しているように見えます。clang-cl.exe
ビルド中にエラー MSB8055 (サポートされていないオプション) がスローされる場合は/openmp
、プラットフォーム ツールセットを "Visual Studio 2019 (vXXX)" に戻し、Properties -> C/C++ -> Language -> OpenMP Support で OpenMP サポートを無効にしてから、プラットフォームを切り替えます。ツールセットを「LLVM (Clang-cl)」に戻します。- プロジェクトのProperties -> Linker -> Input -> Additional Dependencies
libomp.lib
で追加のライブラリに追加します。 - プロジェクトのProperties -> Linker -> General -> Additional Library Directories
libomp.lib
に値を含む新しいエントリを追加して、リンカー検索パスにパスを追加します。$(LLVMInstallDir)\lib
LLVM をプロジェクト出力ディレクトリにコピーするビルド後のアクションを追加します (この手順がないと、DLL 検索パスに
libomp.dll
ない限り、実行可能ファイルの実行は失敗します)。libomp.dll
プロジェクトのプロパティ -> ビルド イベント -> ビルド後のイベント -> コマンド ライン:xcopy /y "$(LLVMInstallDir)\bin\libomp.dll" "$(SolutionDir)$(Configuration)"
プロジェクトをビルドして実行します。
注: これは Microsoft によってまだサポートされていない可能性が非常に高く、VS に同梱されている LLVM ライブラリは 32 ビットのみであるため、x86 プロジェクトでのみ機能します。
そこで、Windows 10 PC で OpenMP を最終的に動作させるために私が行ったことは次のとおりです。
- MinGW を入手する - 基本的な gcc コンパイラと g++ パッケージを入手するために必要なものをダウンロードして入手します (非常に簡単です)。いつでも実行
g++ -v
して、稼働していることを確認できます - 走る
mingw-get upgrade --recursive "gcc<4.7.*" "gcc-g++<4.7.*"
これは「楽しい」部分です。現時点では、4.9.* バージョンでサポートされている libgomp ライブラリがなかったため、私の gcc は<omp.h>
最後のサポート バージョンが 4.7.2 であることを認識できませんでした。
コンパイルして実行するg++ -fopenmp myOpenMPFile.cpp -o myOpenMP
と、そこからすべてが機能します
gcc -fopenmp myOpenMPFile.cpp -o myOpenMP
Cコードでも機能します