インテル® Fortran コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

OpenMP* ライブラリーの使用

このセクションでは、コマンドラインで OpenMP* ライブラリーを設定して使用するのに必要なステップを説明します。Windows* システムでは、Microsoft* Visual Studio* 開発環境で OpenMP* ライブラリーを使用してコンパイルされたアプリケーションをビルドすることもできます。

インテル® コンパイラーで提供されているライブラリーのサポートについては、「OpenMP* のソース互換性とその他のコンパイラーとの互換性」を参照してください。

OpenMP* ライブラリーにより使用されるオプションとライブラリーのリストは、「OpenMP* のサポート・ライブラリー」を参照してください。

インテル® Fortran コンパイラーへのアクセスを確立するために環境を設定し、リンクで適切な OpenMP* ライブラリーが利用できるようにします。Windows* システムでは、適切なバッチ (.bat) ファイルを実行するか、またはすでに環境設定されているコマンドライン・ウィンドウ (コンパイラーのプログラムメニューから起動可能) を使用します。Linux* および macOS* システムでは、適切なスクリプトファイルをソース (読み込み) します (ifortvars ファイル)。

gfortran コンパイラーを、OpenMP* API 関数を含むインテルの OpenMP* ライブラリーとともに使用するには、次の操作を行います。

  1. use omp_lib 文を使用して omp_lib.f90 ソースファイルをコンパイルします。このファイルはインテル® Fortran コンパイラーの include ディレクトリーにあります。

  2. 生成されたモジュールファイルへの適切なパスとともに、コマンドラインで -I オプションを追加します。

コンパイルで、コンパイル時に使用される omp_lib.h または omp_lib.mod のバージョンがコンパイラーで提供されているバージョンであることを確認します。

注意

gcc コンパイラーまたは Microsoft* コンパイラーの使用時は、不適切なヘッダー/モジュールファイルを誤って使用することがあるので注意してください。これを避けるには、別のディレクトリーにヘッダー/モジュールファイルをコピーし、-I オプションを使用して、正しい include パスを指定します。

プログラムでデータ構造やクラスが使用されており、それらが omp_lib.h ファイルで定義されるデータ型を持つメンバーを含む場合、そのようなデータ構造を使用するソースファイルはすべて同じ omp_lib.h ファイルでコンパイルする必要があります。

インテル® Fortran コンパイラーのコマンドは ifort です。

インテル® Fortran コンパイラーで使用される OpenMP* ライブラリーとオプションについての情報は、「OpenMP* サポート・ライブラリー」を参照してください。

コマンドラインの例 (Windows*)

互換ライブラリーを使用して、1 つのコマンドでアプリケーション全体をコンパイルおよびリンク (ビルド) するには、次のインテル® Fortran コンパイラー・コマンドを指定します。

ファイルの種類

コマンド

Fortran ソース、ダイナミック・リンク

ifort /MD /Qopenmp hello.f90

Microsoft* Visual C++* コンパイラーを使用する場合は、インテルの OpenMP* 互換ライブラリーとリンクします。Microsoft* OpenMP* ランタイム・ライブラリー (vcomp) にリンクされないように、リンカーオプションを使用して (/link の後で)、インテルの OpenMP* 互換ライブラリー名を明示的に渡す必要があります。

ファイルの種類

コマンド

C ソース、ダイナミック・リンク

cl /MD /openmp hello.c /link /nodefaultlib:vcomp libiomp5md.lib

また、インテル® Fortran コンパイラーと Visual C++* コンパイラーの両方を使用して、アプリケーションの一部をコンパイルし、オブジェクト・ファイルを作成することができます (オブジェクト・レベルの互換性)。この例では、インテル® Fortran コンパイラーはアプリケーション全体をコンパイルしてリンクします。

ファイルの種類

コマンド

C ソースと Fortran ソースの混在、ダイナミック・リンク

cl /MD /openmp /c f1.c f2.c

ifort /MD /Qopenmp /c f3.f f4.f

ifort /MD /Qopenmp f1.obj f2.obj f3.obj f4.obj /Feapp /link /nodefaultlib:vcomp

最初のコマンドは、Visual C++* コンパイラーでコンパイルされた 2 つのオブジェクト・ファイルを生成します。2 番目のコマンドはインテル® Fortran コンパイラーによってコンパイルされたさらに 2 つのオブジェクト・ファイルを生成します。最後のコマンドは 4 つのオブジェクト・ファイルをアプリケーションにリンクします。

また、下記の 3 行目は、Visual C++* リンカーを使用してアプリケーションをリンクし、互換ライブラリーの libiomp5md.lib を 3 番目のコマンドの終わりに指定しています。

ファイルの種類

コマンド

C ソースと Fortran ソースの混在、ダイナミック・リンク

cl /MD /openmp /c f1.c f2.c

ifort /MD /Qopenmp /c f3.f f4.f

link f1.obj f2.obj f3.obj f4.obj /out:app.exe /nodefaultlib:vcomp libiomp5md.lib

次の例は、インテル® Fortran コンパイラーで複数のファイルのプロシージャー間の最適化を使用し、Visual C++* コンパイラーで複数のファイルをコンパイルし、Visual C++* リンカーでオブジェクト・ファイルをリンクして、実行ファイルを作成する例を示しています。

ファイルの種類

コマンド

C ソースと Fortran ソースの混在、ダイナミック・リンク

ifort /MD /Qopenmp /O3 /Qipo /Qipo-c f1.f f2.f f3.f

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

最初のコマンドは、インテル® Fortran コンパイラーを使用して、デフォルトで、ipo_out.obj という名前の最適化された複数ファイル情報を持つ単一のオブジェクト・ファイルを生成します (/Fe オプションは必要ありません)。2 番目のコマンドは、Visual C++* コンパイラーを使用してさらに 2 つのオブジェクト・ファイルを生成します。3 番目のコマンドは、インテル® Fortran コンパイラーの OpenMP* ライブラリーを使用して、Visual C++* の cl コマンドで 3 つすべてのオブジェクト・ファイルをリンクします。

コマンドラインの例 (Linux*)

Linux* 上でインテルの OpenMP* ライブラリーを使用して、1 つのコマンドでアプリケーション全体をコンパイルおよびリンク (ビルド) するには、次のインテル® Fortran コンパイラー・コマンドを指定します。

ファイルの種類

コマンド

Fortran ソース

ifort -qopenmp hello.f90

デフォルトでは、インテル® Fortran コンパイラーは OpenMP* ライブラリーのダイナミック・リンクを行います。スタティック・リンク (非推奨) を行うには、-qopenmp-link=static オプションを追加します。インテル® Fortran コンパイラー・オプションの -qopenmp-link は、Linux* および macOS* システムでリンカーが使用する OpenMP* ライブラリー (スタティックまたはダイナミック) を制御します (デフォルトは -qopenmp-link=dynamic)。

また、インテル® C++ コンパイラー (icc/icpc) と gcc/g++ コンパイラーの両方を使用して、アプリケーションの一部をコンパイルし、オブジェクト・ファイルを作成することができます (オブジェクト・レベルの互換性)。

この例では、gcc コンパイラーは、C ファイルの foo.c (gcc オプション -fopenmp で OpenMP* サポートは有効) をコンパイルし、インテル® Fortran コンパイラーは、インテルの OpenMP* ライブラリーを使用してアプリケーションをリンクしています。

ファイルの種類

コマンド

C ソース

gcc -fopenmp -c foo.c

ifort -qopenmp foo.o

インテル® Fortran コンパイラーの OpenMP* 互換ライブラリーを使用して、gcc または g++ コンパイラーでアプリケーションをリンクする場合は、-l オプションでインテルの OpenMP* ライブラリー名、-l オプションで Linux* 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 オプションを指定しなくても済むように、インテル® Fortran コンパイラーでアプリケーションをリンクするほうが簡単です。

ファイルの種類

コマンド

C ソース

gcc -fopenmp -c foo.c

icc -qopenmp -c bar.c (Linux* および macOS*)

ifort -qopenmp foo.o bar.o (Linux* および macOS*)

gcc コンパイラー、インテル® C++ コンパイラー、インテル® Fortran コンパイラーでコンパイルされた OpenMP* オブジェクト・ファイルを混在させることができます。

インテル® Fortran コンパイラーと gfortran コンパイラーでコンパイルされたオブジェクト・ファイルは混在させることはできません。

次の表は、インテル® Fortran コンパイラーを使用して、すべてのオブジェクトをリンクする例を示します。

ファイルの種類

コマンド

C ソースと Fortran ソースの混在

icc -qopenmp -c ibar.c

gcc -fopenmp -c gbar.c

ifort -qopenmp -c foo.f

ifort -qopenmp foo.o ibar.o gbar.o

インテル® Fortran コンパイラーを使用する際、インテル® Fortran コンパイラー (ifort) でコンパイルされたメインプログラムが Fortran オブジェクト・ファイルにない場合は、リンク時に -nofor-main オプションを ifort コマンドラインに指定します。

GNU* Fortran コンパイラー (gfortran) でインテル® Fortran コンパイラー (ifort) により作成されたオブジェクトを混在させないでください。代わりに、すべての Fortran ソースを同じ Fortran コンパイラーで再コンパイルしてください。GNU* Fortran コンパイラーは、Linux* オペレーティング・システムでのみ利用できます。

同様に、GNU* Fortran コンパイラー (gfortran) でリンクすると、インテル® C++ コンパイラー、GNU* C/C++ コンパイラー、GNU* Fortran コンパイラー (gfortran) でコンパイルされたオブジェクト・ファイルを混在させることができます。インテル® Fortran コンパイラーの OpenMP* 互換ライブラリーを使用して、GNU* gfortran コンパイラーによりアプリケーションをリンクする場合は、-l オプションでインテルの OpenMP* 互換ライブラリー名とインテルの irc ライブラリー、-l オプションで Linux* pthread ライブラリー、-L オプションでインテル C++ コンパイラーがインストールされている場所にあるインテルのライブラリーへのパスを明示的に渡す必要があります。リンク行で -fopenmp オプションを指定する必要はありません。

ファイルの種類

コマンド

C ソースと GNU* Fortran ソースの混在

icc -qopenmp -c ibar.c

gcc -fopenmp -c gbar.c

gfortran -fopenmp -c foo.f

gfortran foo.o ibar.o gbar.o -lirc -liomp5 -lpthread -lc -L<icc_dir>/lib

また、インテル® Fortran コンパイラーを使用してアプリケーションをリンクするこができますが、-l オプションを使用して、リンク行で複数の gfortran ライブラリーを渡す必要があります。

ファイルの種類

コマンド

C ソースと Fortran ソースの混在

gfortran -fopenmp -c foo.f

icc -qopenmp -c ibar.c

ifort -qopenmp foo.o ibar.o -lgfortranbegin -lgfortran

コマンドラインの例 (macOS*)

macOS* 上でインテルの OpenMP* ライブラリーを使用して、1 つのコマンドでアプリケーション全体をコンパイルおよびリンク (ビルド) するには、次のインテル® Fortran コンパイラー・コマンドを指定します。

ファイルの種類

コマンド

Fortran ソース

ifort -qopenmp hello.f90

デフォルトでは、インテル® Fortran コンパイラーは OpenMP* ライブラリーのダイナミック・リンクを行います。スタティック・リンク (非推奨) を行うには、-qopenmp-link=static オプションを追加します。インテル® Fortran コンパイラー・オプションの -qopenmp-link は、Linux* および macOS* システムでリンカーが使用する OpenMP* ライブラリー (スタティックまたはダイナミック) を制御します (デフォルトは -qopenmp-link=dynamic)。

また、インテル® C++ コンパイラー (icc/icpc/icl) と gcc/g++ コンパイラーの両方を使用して、アプリケーションの一部をコンパイルし、オブジェクト・ファイルを作成することができます (オブジェクト・レベルの互換性)。

古いバージョンの macOS* プラットフォームでは、インテル® C++ コンパイラーと GCC コンパイラーを併用してコンパイルできます。最新の macOS* 10.x プラットフォームには、GCC コンパイラーの代わりに Clang コンパイラーが含まれていますが、このコンパイラーは OpenMP* 実装をサポートしていません。Clang コンパイラーの将来のバージョンでは OpenMP* 実装がサポートされる可能性があります。

この例では、icl/icc は C ファイルの foo.c をコンパイルし、icpc は C++ ファイルの ifoo.cpp をコンパイルします。Qopenmp (Windows*) または qopenmp (Linux* および macOS*) は OpenMP* サポートを有効にして、インテル® C++Fortran コンパイラーが、インテルの OpenMP* ライブラリーを使用してアプリケーションをリンクするようにします。

ファイルの種類

コマンド

C ソース

icc -qopenmp -c foo.c

C++ ソース

icpc -qopenmp -c ifoo.cpp

ifort -qopenmp foo.o ifoo.o

macOS* 10.9 以降 (Xcode* 5.x 以降) には GCC コンパイラーが含まれていません。ただし、インテル® C++ コンパイラーと一緒に GCC コンパイラーをインストールできます。

オブジェクト・ファイルを混在させることもできますが、gcc-l オプション、-L オプション、-lpthread オプションを指定しなくても済むように、インテル® コンパイラーでアプリケーションをリンクするほうが簡単です。

ファイルの種類

コマンド

C ソース

icc -qopenmp -c bar.c

ifort -qopenmp -c foo.f90

ifort -qopenmp foo.o bar.o

インテル® Fortran コンパイラーを使用する際、インテル® Fortran コンパイラー (ifort) でコンパイルされたメインプログラムが Fortran オブジェクト・ファイルにない場合は、リンク時に -nofor-main オプションを ifort コマンドラインに指定します。

また、インテル® Fortran コンパイラーを使用してアプリケーションをリンクするこができますが、-l オプションを使用して、リンク行で複数の gfortran ライブラリーを渡す必要があります。

ファイルの種類

コマンド

C ソースと Fortran ソースの混在

gfortran -fopenmp -c foo.f

icc -qopenmp -c ibar.c

ifort -qopenmp foo.o ibar.o -lgfortranbegin -lgfortran

関連情報