インテル® C++ コンパイラー XE 13.1 ユーザー・リファレンス・ガイド
このセクションでは、コマンドラインで OpenMP* ライブラリーを設定して使用するのに必要なステップを説明します。Windows* システムでは、Microsoft* Visual Studio* 開発環境で OpenMP* ライブラリーを使用してコンパイルされたアプリケーションをビルドすることもできます。
インテル® コンパイラーで提供されているライブラリーのサポートについては、「OpenMP* ソース互換とその他のコンパイラーとの相互運用性」を参照してください。
OpenMP* ライブラリーにより使用されるオプションとライブラリーのリストは、「OpenMP* のサポート・ライブラリー」を参照してください。
インテル® コンパイラーへのアクセスを確立するために環境を設定し、リンクで適切な OpenMP* ライブラリーが利用できるようにします。Windows* システムでは、適切なバッチ (.bat) ファイルを実行するか、またはすでに環境設定されているコマンドライン・ウィンドウ (コンパイラーのプログラムメニューから起動可能) を使用します。Linux* および OS X* システムでは、適切なスクリプトファイルをソース (読み込み) します (iccvars ファイル)。
コンパイルで、コンパイル時に使用される omp.h のバージョンがそのコンパイラーにより提供されているバージョンであることを確認します。 例えば、Linux* システムの場合、GNU C/C++ コンパイラーでのコンパイル時に、GNU C/C++ コンパイラーが提供している omp.h を使用します。
GNU*/Microsoft* コンパイラーの使用時は、不適切なヘッダー/モジュールファイルを誤って使用することがあるので注意してください。これを避けるには、別のディレクトリーにヘッダー/モジュールファイルをコピーし、-I オプションを使用して、正しい include パスを指定します。
プログラムでデータ構造やクラスが使用されており、それらが omp.h ファイルで定義されるデータ型を持つメンバーを含む場合、そのようなデータ構造を使用するソースファイルはすべて同じ omp.h ファイルでコンパイルする必要があります。
次の表は、C および C++ ソースファイルに使用するコンパイラーのコマンドをリストしています。
オペレーティング・システム |
C ソースモジュール |
C++ ソースモジュール |
---|---|---|
Linux* |
GNU*: gcc |
GNU*: g++ |
OS X* |
GNU*: gcc |
GNU*: g++ |
Windows* |
Visual C++*: cl |
Visual C++*: cl |
インテル® コンパイラーで使用される OpenMP* ライブラリーとオプションについての情報は、「OpenMP* サポート・ライブラリー」を参照してください。
Windows* システムで、Visual Studio* の Visual C++* 開発環境を一部変更すると、インテル® 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 を入力します。
インテルの OpenMP* ライブラリーを使用して、1 つのコマンドでアプリケーション全体をコンパイルおよびリンク (ビルド) するには、次のインテル® コンパイラー・コマンドを指定します。
デフォルトでは、インテル® コンパイラーは OpenMP* ライブラリーのダイナミック・リンクを行います。スタティック・リンク (非推奨) を行うには、-openmp-link static オプションを追加します。 インテル® コンパイラー・オプションの -openmp-link は、Linux* および 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 foo.o |
C++ ソース |
g++ -fopenmp -c foo.cpp icpc -openmp foo.o |
インテル® コンパイラーの OpenMP* 互換ライブラリーを使用して、GNU* gcc または g++ コンパイラーでアプリケーションをリンクする場合は、-l オプションでインテルの OpenMP* ライブラリー名、-l オプションで Linux* pthread ライブラリー、-L オプションでインテル® C++ コンパイラーがインストールされている場所にあるインテルのライブラリーへのパスを明示的に渡す必要があります。
オブジェクト・ファイルを混在させることもできますが、gcc -l オプション、-L オプション、-lpthread オプションを指定しなくても済むように、インテル® コンパイラーでアプリケーションをリンクするほうが簡単です。
GNU* gcc コンパイラー、インテル® C++ コンパイラー、インテル® Fortran コンパイラーでコンパイルされた OpenMP* オブジェクト・ファイルを混在させることができます。
インテル® Fortran コンパイラーと gfortran コンパイラーでコンパイルされたオブジェクト・ファイルは混在させることはできません。
次の表は、インテル® Fortran コンパイラーまたは GNU* Fortran を使用して、すべてのオブジェクトをリンクする例を示しています。
ファイルの種類 |
コマンド |
---|---|
C ソースと Fortran ソースの混在 |
ifort -openmp -c foo.f icc -openmp -c ibar.c gcc -fopenmp -c gbar.c ifort -openmp 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 ライブラリーを渡す必要があります。