このセクションでは、コマンドラインで OpenMP 互換ライブラリーを設定して使用するのに必要なステップを説明します。Windows* システムでは、Microsoft* Visual Studio* 開発環境で OpenMP 互換ライブラリーを使用してコンパイルされたアプリケーションをビルドすることもできます。
インテル® コンパイラーで提供されている互換ライブラリーおよびレガシー・ライブラリーのサポートについては、「OpenMP* ソース互換とその他のコンパイラーとの相互運用性」を参照してください。
OpenMP ライブラリーにより使用されるオプションとライブラリーのリストは、「OpenMP* のサポート・ライブラリー」を参照してください。
インテル® コンパイラーへのアクセスを確立するために環境を設定し、リンクで適切な OpenMP ライブラリーが利用できるようにします。Windows システムでは、適切なバッチ (.bat) ファイルを実行するか、またはすでに環境設定されているコマンドライン・ウィンドウ (コンパイラーのプログラムメニューから起動可能) を使用します。Linux* および Mac OS* X システムでは、適切なスクリプトファイルをソース (読み込み) します (「コマンドラインからのコンパイラーの起動」を参照)。ifortvars ファイルを使用するコンポーネントの場所の指定。
C/C++ コンパイルで、コンパイル時に使用される omp.h のバージョンがそのコンパイラーにより提供されているバージョンであることを確認します。例えば、Linux システムの場合、GNU C/C++ コンパイラーでのコンパイル時に、GNU C/C++ コンパイラーが提供している omp.h を使用します。同様に、Fortran コンパイルでは、コンパイル時に使用される omp_lib.h または omp_lib.mod のバージョンがコンパイラーで提供されているバージョンであることを確認します。
次の表は、C および C++ ソースファイルに使用するコンパイラーのコマンドをリストしています。
オペレーティング・システム |
C ソースモジュール |
C++ ソースモジュール |
---|---|---|
Linux |
GNU: gcc |
GNU: g++ |
Mac OS X |
GNU: gcc |
GNU: g++ |
Windows |
Visual C++: cl |
Visual C++: cl |
インテル® Fortran コンパイラーのコマンドは ifort (Linux、Mac OS X、Windows オペレーティング・システム) です。
インテル® コンパイラーで使用される OpenMP ライブラリーとオプションについての情報は、「OpenMP* サポート・ライブラリー」を参照してください。
コマンドライン例: Windows
Windows システムの Microsoft Visual Studio 環境で、Microsoft Visual C++ により互換ライブラリーを使用するには、「Visual Studio での OpenMP 互換ライブラリーの使用」を参照してください。
互換ライブラリーを使用して、1 つのコマンドでアプリケーション全体をコンパイルおよびリンク (ビルド) するには、次のインテル® コンパイラー・コマンドを指定します。
ファイルの種類 |
コマンド |
---|---|
C ソース、ダイナミック・リンク |
icl /MD /Qopenmp /Qopenmp-lib:compat hello.c |
C++ ソース、ダイナミック・リンク |
icl /MD /Qopenmp /Qopenmp-lib:compat hello.cpp |
デフォルトでは、インテル® コンパイラーは OpenMP ライブラリーのダイナミック・リンクを行います。スタティック・リンク (非推奨) を行うには、/MD オプションの代わりに、/MT オプションを使用し、/Qopenmp-link:static オプションを追加します。インテル® コンパイラー・オプションの /Qopenmp-link は、Windows OS システムでリンカーがスタティックまたはダイナミック OpenMP ライブラリーのいずれを使用するかを制御します (デフォルトは /Qopenmp-link:dynamic)。
Microsoft Visual C++ コンパイラーを使用する場合は、インテル® OpenMP 互換ライブラリーとリンクします。Microsoft OpenMP ランタイム・ライブラリー (vcomp) にリンクされるのを避け、リンカーオプション (/link の後) として、インテルの OpenMP 互換ライブラリー名を明示的に渡す必要があります。
ファイルの種類 |
コマンド |
---|---|
C ソース、ダイナミック・リンク |
icl /MD /openmp hello.c /link /nodefaultlib:vcomp libiomp5md.lib |
C++ ソース、ダイナミック・リンク |
icl /MD /openmp hello.cpp /link /nodefaultlib:vcomp libiomp5md.lib |
スタティック・リンクは推奨されていませんが、これを行うには上記の /MD オプションの代わりに、/MT オプションを使用します。
また、インテル® C++ コンパイラーと Visual C++ コンパイラーの両方を使用して、アプリケーションの一部をコンパイルし、オブジェクト・ファイルを作成することができます (オブジェクト・レベルの相互運用性)。この例では、インテル® コンパイラーはアプリケーション全体をリンクします。
ファイルの種類 |
コマンド |
---|---|
C ソース、ダイナミック・リンク |
icl /MD /openmp hello.cpp /c f1.c f2.c icl /MD /Qopenmp /Qopenmp-lib:compat /c f3.c f4.c icl /MD /Qopenmp /Qopenmp-lib:compat f1.obj f2.obj f3.obj f4.obj /Feapp /link /nodefaultlib:vcomp |
最初のコマンドは、Visual C++ コンパイラーでコンパイルされた 2 つのオブジェクト・ファイルを生成します。2 番目のコマンドはインテル® コンパイラーによってコンパイルされたさらに 2 つのオブジェクト・ファイルを生成します。最後のコマンドは 4 つのオブジェクト・ファイルをアプリケーションにリンクします。
また、下記の 3 行目は、Visual C++ リンカーを使用してアプリケーションをリンクし、互換ライブラリーの libiomp5md.lib を 3 番目のコマンドの終わりに指定しています。
ファイルの種類 |
コマンド |
---|---|
C ソース、ダイナミック・リンク |
icl /MD /openmp hello.cpp /c f1.c f2.c icl /MD /Qopenmp /Qopenmp-lib:compat /c f3.c f4.c link f1.obj f2.obj f3.obj f4.obj /out:app.exe /nodefaultlib:vcomp libiomp5md.lib |
次の例は、インテル® コンパイラーで複数のファイルのプロシージャー間の最適化を使用し、Visual C++ コンパイラーで複数のファイルをコンパイルし、Visual C++ リンカーでオブジェクト・ファイルをリンクして、実行ファイルを作成する例を示しています。
ファイルの種類 |
コマンド |
---|---|
C ソース、ダイナミック・リンク |
icl /MD /Qopenmp /Qopenmp-lib:compat /O3 /Qipo /Qipo-c f1.c f2.c f3.c cl /MD /openmp /O2 /c f4.c f5.c cl /MD /openmp /O2 ipo_out.obj f4.obj f5.obj /Feapp /link /nodefaultlib:vcomp libiomp5md.lib |
最初のコマンドは、インテル® C++ コンパイラーを使用して、デフォルトで、po_out.obj という名前の最適化された複数ファイル情報を持つ単一のオブジェクト・ファイルを生成します (/Fe オプションは必要ありません。「IPO の使用」を参照してください)。2 番目のコマンドは、Visual C++ コンパイラーを使用してさらに 2 つのオブジェクト・ファイルを生成します。3 番目のコマンドは、インテル® コンパイラーの OpenMP 互換ライブラリーを使用して、Visual C++ の cl コマンドで 3 つすべてのオブジェクト・ファイルをリンクします。スタティック・リンク (非推奨) を行うには、/MD オプションの代わりに、/MT オプションを使用します。
コマンドライン例: Linux および Mac OS X
互換ライブラリーを使用して、1 つのコマンドでアプリケーション全体をコンパイルおよびリンク (ビルド) するには、次のインテル® コンパイラー・コマンドを指定します。
ファイルの種類 |
コマンド |
---|---|
C ソース |
icc -openmp -openmp-lib=compat hello.c |
C++ ソース |
icpc -openmp -openmp-lib=compat hello.cpp |
デフォルトでは、インテル® コンパイラーは OpenMP ライブラリーのダイナミック・リンクを行います。スタティック・リンク (非推奨) を行うには、-openmp-link static オプションを追加します。インテル® コンパイラー・オプションの -openmp-link は、Linux OS および Mac OS X システムでリンカーがスタティックまたはダイナミック OpenMP ライブラリーのいずれを使用するかを制御します (デフォルトは -openmp-link dynamic)。
また、インテル® C++ コンパイラー (icc/icpc) と GNU コンパイラー (gcc/g++) の両方を使用して、アプリケーションの一部をコンパイルし、オブジェクト・ファイルを作成することができます (オブジェクト・レベルの相互運用性)。この例では、GNU コンパイラーは、C ファイルの foo.c (gcc オプション -fopenmp で OpenMP サポートは有効) をコンパイルし、インテル® コンパイラーは、OpenMP 互換ライブラリーを使用してアプリケーションをリンクしています。
ファイルの種類 |
コマンド |
---|---|
C ソース |
gcc -fopenmp -c foo.c icc -openmp -openmp-lib=compat foo.o |
C++ ソース |
g++ -fopenmp -c foo.cpp icpc -openmp -openmp-lib=compat foo.o |
インテル® コンパイラーの OpenMP 互換ライブラリーを使用して、GNU gcc または g++ コンパイラーでアプリケーションをリンクする場合は、-l オプションでインテル® OpenMP 互換ライブラリー名、-l オプションで GNU pthread ライブラリー、-L オプションでインテル® C++ コンパイラーがインストールされている場所にあるインテルのライブラリーへのパスを明示的に渡す必要があります。
ファイルの種類 |
コマンド |
---|---|
C ソース |
gcc -fopenmp -c foo.c bar.c gcc foo.o bar.o -liomp5 -lpthread -L<icc_dir>/lib |
オブジェクト・ファイルを混在させることもできますが、gcc -l オプション、-L オプション、-lpthread オプションを指定しなくても済むように、インテル® コンパイラーでアプリケーションをリンクするほうが簡単です。
ファイルの種類 |
コマンド |
---|---|
C ソース |
gcc -fopenmp -c foo.c icc -openmp -c bar.c icc -openmp -openmp=compat foo.o bar.o |
GNU gcc コンパイラー、インテル® C++ コンパイラー、インテル® Fortran コンパイラーでコンパイルされた OpenMP オブジェクト・ファイルを混在させることができます。この例では、インテル® Fortran コンパイラーを使用して、すべてのオブジェクトをリンクしています。
ファイルの種類 |
コマンド |
---|---|
C ソースと Fortran ソースの混在 |
ifort -openmp -c foo.f icc -openmp -c ibar.c gcc -fopenmp -c gbar.c ifort -openmp -openmp-lib=compat foo.o ibar.o gbar.o |
ファイルの種類 |
コマンド |
---|---|
C ソースと GNU Fortran ソースの混在 |
gfortran -fopenmp -c foo.f icc -openmp -c ibar.c gcc -fopenmp -c gbar.c gfortran foo.o ibar.o gbar.o -lirc -liomp5 -lpthread -lc -L<icc_dir>/lib |
また、インテル® コンパイラーを使用してアプリケーションをリンクするこができますが、-l オプションを使用して、リンク行で複数の gfortran ライブラリーを渡す必要があります。
ファイルの種類 |
コマンド |
---|---|
C ソースと Fortran ソースの混在 |
gfortran -fopenmp -c foo.f icc -openmp -c ibar.c icc -openmp -openmp-lib=compat foo.o bar.o -lgfortranbegin -lgfortran |
Visual Studio での OpenMP 互換ライブラリーの使用
Windows システムで、Visual C++ Visual Studio 2005 開発環境を一部変更すると、インテル® C++ コンパイラーと Visual C++ を使用して、インテル® コンパイラー OpenMP 互換ライブラリーを使用するアプリケーションを作成することができます。
Microsoft Visual C++* では、_OPENMP_NOFORCE_MANIFEST シンボルが定義されていなければなりません。定義されていない場合は、vcomp90 dll のマニフェストがインクルードされます。これにより、ビルドシステムでは問題ありませんが、この DLL がインストールされていない別のシステムにアプリケーションを移動すると問題が発生します。
プロジェクトの [プロパティ ページ] でインテルの OpenMP ランタイム・ライブラリーの場所を示します。
メインメニューでプロジェクトのプロパティー・ページを開きます ([Project (プロジェクト)] > [Properties (プロパティ)] を選択するか、プロジェクト名を右クリックして [Properties (プロパティ)] を選択します)。
[Configuration Properties (構成プロパティ)] > [Linker (リンカ)] > [General (全般)] > [Additional Library Directories (追加のライブラリディレクトリ)] を選択します。
インテル® コンパイラー・ライブラリーへのパスを入力します。例えば、IA-32 アーキテクチャー・システムの場合は、次のように入力します: < Intel_compiler_installation_path>\IA32\LIB
インテルの OpenMP ダイナミック・ランタイム・ライブラリーを実行時にアクセス可能にするには、対応するパスを指定しなければなりません。
メインメニューでプロジェクトのプロパティー・ページを開きます ([Project (プロジェクト)] > [Properties (プロパティ)] を選択するか、プロジェクト名を右クリックして [Properties (プロパティ)] を選択します)。
[Configuration Properties (構成プロパティ)] > [Debugging (デバッグ)] > [Environment (環境)] を選択します。
インテル® コンパイラー・ライブラリーへのパスを入力します。例えば、IA-32 アーキテクチャー・システムの場合は、次のように入力します:
PATH=%PATH%;< Intel_compiler_installation_path>\IA32\Bin
インテルの OpenMP ランタイム・ライブラリー名をリンカー・オプションに追加し、デフォルトの Microsoft の OpenMP ランタイム・ライブラリーを除外します。
メインメニューでプロジェクトのプロパティー・ページを開きます ([Project (プロジェクト)] > [Properties (プロパティ)] を選択するか、プロジェクト名を右クリックして [Properties (プロパティ)] を選択します)。
[Configuration Properties (構成プロパティ)] > [Linker (リンカ)] > [Command Line (コマンドライン)] > [Additional Options (追加のオプション)] を選択します。
OpenMP ライブラリー名と Visual C++ リンカー・オプション /nodefaultlib を入力します: