3.1.Intel コンパイラ

目次 (3.1.Intel コンパイラ)

3.1.   Intel コンパイラ
3.1.1.  コンパイラ環境の設定(Intelコンパイラ)
3.1.2.  コンパイルコマンド(Intelコンパイラ)
3.1.3.  MPI環境の設定(Intelコンパイラ)
3.1.3.1. Open MPI
3.1.3.2. MPICH2
3.1.3.3. Intel MPI
3.1.4.  コンパイラ、MPI環境の切替え
3.1.5.  コンパイル・オプション(Intelコンパイラ)
3.1.6.  コンパイル方法(Intelコンパイラ)
3.1.6.1. 逐次プログラム
3.1.6.2. 自動並列プログラム
3.1.6.3. OpenMPプログラム
3.1.6.4. MPIプログラム(IntelMPI)
3.1.6.5. MPIプログラム(OpenMPI)
3.1.6.6. MKL(Math Kernel Library)
3.1.7.  コンパイル時の注意点

 

 

▲このページの先頭へ

3.1. Intel コンパイラ

コンパイル環境として「インテル® Parallel Studio XE」を利用する事ができます。
なお、現在の設定環境は次のようにmodule listコマンドで確認します。

【設定環境の確認例-初期状態】

$ module list
No Modulefiles Currently Loaded.
$

【設定環境の確認例-設定状態】

$ module list
Currently Loaded Modulefiles:
 1) PrgEnv-intel-18.0.3.222 2) MPI-impi-18.3.222   ←Intel コンパイラとIntel MPI 環境が設定されている状態の例です。
$

▲このページの先頭へ

3.1.1. コンパイラ環境の設定(Intel コンパイラ)

1.環境の設定

$ module load PrgEnv-intel-18.0.3.222

※ MKL(Math Kernel Library)のリンク環境も同時に設定されます。

2.設定環境の確認

$ module list
Currently Loaded Modulefiles:
1) PrgEnv-intel-18.0.3.222

3.環境の設定解除

$ module unload PrgEnv-intel-18.0.3.222

▲このページの先頭へ

3.1.2. コンパイルコマンド(Intel コンパイラ)

各言語のコンパイルコマンドは以下の通りです。

使用言語 コマンド コマンド形式
Fortran ifort ifort [オプション] ファイル…
C 言語 icc icc [オプション] ファイル…
C++ icpc icpc [オプション] ファイル…

 

▲このページの先頭へ

3.1.3. MPI 環境の設定(Intel コンパイラ)

3.1.3.1. Open MPI

1. 環境の設定

$ module load MPI-openmpi-2.1.3+intel-17.0.1.132

2. 設定環境の確認

$ module list
Currently Loaded Modulefiles:
1) MPI-openmpi-2.1.3+intel-17.0.1.132

3. 環境の設定解除

$ module unload MPI-openmpi-2.1.3+intel-17.0.1.132

4.コンパイルコマンド

各言語のコンパイルコマンドは以下の通りです。

使用言語 コマンド コマンド形式
MPI(Fortran) mpif90 mpif90 [オプション] ファイル…
MPI(C 言語) mpicc mpicc [オプション] ファイル…
MPI(C++) mpicxx mpixx [オプション] ファイル…

 

▲このページの先頭へ

3.1.3.2. MPICH2

現在MPICH2環境のmoduleは提供していません。

▲このページの先頭へ

3.1.3.3. Intel MPI

1. 環境の設定

$ module load MPI-impi-18.3.222

2.設定環境の確認

$ module list
Currently Loaded Modulefiles:
1) MPI-impi-18.3.222

3.環境の設定解除

$ module unload MPI-impi-18.3.222

4.コンパイルコマンド

各言語のコンパイルコマンドは以下の通りです。

使用言語 コマンド コマンド形式
MPI(Fortran) mpiifort mpiifort [オプション] ファイル…
MPI(C 言語) mpiicc mpiicc [オプション] ファイル…
MPI(C++) mpiicpc mpiicpc [オプション] ファイル…

FOCUSスパコン環境では旧バージョンのIntel MPIも提供しておりますが、旧バージョンには不具合がある場合があります。
特にバージョンを指定する必要が無い場合は、FOCUSスパコン環境で提供されている最新版のIntel MPIをご利用下さい。

▲このページの先頭へ

3.1.4. コンパイラ、MPI 環境の切替え

コンパイラ、MPI 環境を切り替えるコマンドは以下の通りです。

コンパイラ MPI 環境設定コマンド 設定解除コマンド
Intel コンパイラ OpenMPI module load PrgEnv-intel-17.0.1.132
module load MPI-openmpi-2.1.3+intel-17.0.1.132
module unload PrgEnv-intel-17.0.1.132
module unload MPI-openmpi-2.1.3+intel-17.0.1.132
IntelMPI module load PrgEnv-intel-18.0.3.222
module load MPI-impi-18.3.222
module unload PrgEnv-intel-18.0.3.222
module unload MPI-impi-18.3.222

 

▲このページの先頭へ

3.1.5. コンパイル・オプション(Intel コンパイラ)

Intel コンパイラの主なコンパイル・オプションを示します。

オプション 説明
-c オブジェクトファイルが生成された後、コンパイル処理を停止します。コンパイラは、CまたはC++の各ソースファイルまたは前処理されたソースファイルからオブジェクトファイルを生成します。
-C 前処理されたソースの出力にコメントを配置します。
-o filename 実行可能ファイル名を指定します。省略時はa.out で作成されます。
-g 一般的な開発環境のデバッガーで使用できるデバッグ情報を生成します。このオプションは、/O2(-O2)(または別のO オプション)が指定されない限り、/O2(-O2)をオフにして/Od(-O0)をデフォルトにします。
-O0 最適化は行われません。このオプションは、アプリケーション開発の初期段階およびデバッグ時に使用します。アプリケーションが正常に動作することを確認した後は、より高度なオプションを使用してください。
-O1 サイズを考慮した最適化を行います。オブジェクトのサイズを増やす傾向がある最適化を省略します。多くの場合、最小限のサイズで最適化されたコードが作成されます。
コードサイズが大きいため、メモリーページングが問題になる巨大なサーバ/データベース・アプリケーションにおいて、このオプションは効果的です。
-O2 最速化します(デフォルト設定)。ベクトル化と実行速度を改善する多くの最適化を有効にします。多くの場合、/O1(-O1)よりも速いコードを作成します。
-O3 /O2(-O2)の最適化に加えて、スカラ置換、ループアンロール、分岐を除去するコード反復、効率的にキャッシュを使用するループ・ブロッキング、データ・プリフェッチ機能など、強力なループ最適化およびメモリーアクセス最適化を行います。
/O3(-O3)オプションは、特に浮動小数点演算を多用するループや大きなデータセットを処理するループを含むアプリケーションに推奨します。この最適化は、場合によって/O2(-O2)の最適化よりもアプリケーションの実行が遅くなることがあります。
-fast プログラム全体の速度を最大限にします。次のオプションを設定します。
-ipo-O3-no-prec-div-static-xHost
-static 静的ライブラリをリンクします。
-opt-report [n] 最適化レポートを作成し、stderr 出力します。n には、0(レポートなし)から3(最大限の情報)の範囲で詳細レベルを指定します。デフォルトは2 です。
-openmp OpenMP* 指示句がある場合、その指示によるマルチスレッド・コードが生成されます。
スタックのサイズを増やさなければならないことがあります。
-par-report[n] 自動並列化の診断レベルを制御します。n には、0(レポートなし)から3(最大限の情報)の範囲で詳細レベルを指定します。デフォルトは0 です。
-ip 単一ファイルの最適化を行います。現在のソースファイルを対象にしたインライン展開を含むプロシージャー間の最適化です。
-ipo[n] インライン展開およびその他のプロシージャー間の最適化を複数のソースファイルに対して行います。オプションのn 引数には、コンパイル時に生成するオブジェクトファイルの最大数を指定します。デフォルトのn は0 です(コンパイラが最適なファイル数を自動選択)。
警告:条件によってはコンパイル時間とコードサイズが大幅に増加する場合があります。
-prof-gen プロファイル最適化で参照する動的なパフォーマンス・データを生成するため、プログラムにインストルメント・コードを埋め込みます。
-prof-use 最適化中に-prof-genオプションで生成した実行ファイルのプロファイリング情報を参照します。
-prof-dir dir プロファイル出力ファイル*.dyn および*.dpi を格納するディレクトリを指定します。
-fp-model name 浮動小数点演算における演算モデルを制御します。特定の最適化を制限して浮動小数点結果の一貫性を強化します。name の値は次のとおりです。

fast=[1|2] – 精度や一貫性を多少低くすることにより、さらに強力な最適化が可能になります(デフォルトは、fast=1)。一部の最適化は、インテル® マイクロプロセッサーのみに適用される場合があります。
precise – 精度に影響しない最適化のみ有効にします。
double/extended/source – 中間結果をそれぞれ倍精度、拡張精度、ソースの精度で丸めます。変更されない限り、precise も適用されます。インテル® Fortranコンパイラでは、double オプションおよび extended オプションは利用できません。
except – 浮動小数点例外セマンティクスを使用します。
strictprecise オプションと except オプションの両方を有効にし、デフォルトの浮動小数点環境を想定しません。

推奨:浮動小数点演算の一貫性や再現性が重要な状況では、/fp:precise /fp:source(-fp-model precise –fp-model source)を推奨します。

-[no]restrict restrict キーワードとともに指定すると、ポインターの一義化が有効[無効]になります。デフォルトではオフです(C/C++)。
-mkl[=parallel, sequential, cluster] 数値演算ライブラリIntel Math Kernel Library(MKL)をリンクします。最適化されたBLAS,LAPACK,ベクトル演算ライブラリなどを利用する場合に用います。

-mkl=parallel 並列のインテル® MKL ライブラリを使用
-mkl=sequential シーケンシャルなインテル® MKL ライブラリを使用
-mkl=cluster クラスタのインテル® MKL ライブラリを使用

-mcmodel[=small, medium, large] コードとデータサイズを指定します。

-mcmodel=small : デフォルト、コードとデータサイズが2GB までの制限あり
-mcmodel=medium : コードが2GB までの制限あり、データサイズは制限なし
-mcmodel=large : コードとデータサイズに制限なし

 

▲このページの先頭へ

3.1.6. コンパイル方法(Intel コンパイラ)

主なコンパイル方法を以下に示します。

3.1.6.1. 逐次プログラム

1. Fortran の例

$ ifort test.f90

2. C 言語の例

$ icc test.

3.C++の例

$ icpc test.cpp

▲このページの先頭へ

3.1.6.2. 自動並列プログラム

1. Fortran の例

$ ifort -parallel test.f90

2. C 言語の例

$ icc -parallel test.c

3.C++の例

$ icpc -parallel test.cpp

▲このページの先頭へ

3.1.6.3. OpenMP プログラム

1. Fortran の例

$ ifort -openmp test.f90

2. C 言語の例

$ icc -openmp test.c

3.C++の例

$ icpc -openmp test.cpp

▲このページの先頭へ

3.1.6.4. MPI プログラム(IntelMPI)

1. Fortran の例

$ mpiifort test.f90

2. C 言語の例

$ mpiicc test.c

3.C++の例

$ mpiicpc test.cpp

▲このページの先頭へ

3.1.6.5. MPI プログラム(OpenMPI)

1. Fortran の例

$ mpif90 test.f90

2. C 言語の例

$ mpicc test.c

3.C++の例

$ mpicxx test.cpp

▲このページの先頭へ

3.1.6.6. MKL(Math Kernel Library)

MKL ライブラリは、工学、科学、金融系ソフトウェアの開発者向けに 線形代数ルーチン、高速フーリエ変換、ベクトル・マス・ライブラリ関数、乱数生成関数を利用することができます。
前述の手順『3.1.1 コンパイラ環境の設定(Intel コンパイラ)』で、MKL のリンク環境も同時に設定されます。
以下にC 言語のコンパイルの例を示します。C 言語(iccmpicc)のみを記述していますが、Fortran(ifortmpiifort)、C++(icpcmpiicpc)はコマンドを読み替えてください。

1. 並列/動的ライブラリ

$ icc test.c -mkl
または
$ icc test.c -mkl= parallel

2. 並列/静的ライブラリ

$ icc test.c -mkl -static-intel
または
$ icc test.c -mkl= parallel -static-intel

3.シーケンシャル/動的ライブラリ

$ icc test.c -mkl=sequential

4. シーケンシャル/静的ライブラリ

$ icc test.c -mkl=sequential -static-intel

5. MPI/動的ライブラリ

$ mpicc mpisample.c -mkl=cluster

6. MPI/静的ライブラリ

$ mpicc mpisample.c -mkl=cluster -static-intel

▲このページの先頭へ

3.1.7.コンパイル時の注意点 (Intel コンパイラ)

各システム毎でプロセッサーのアーキテクチャが異なります。コンパイル時に以下のオプション指定に注意してください。

オプション Aシステム Bシステム Dシステム Eシステム Fシステム Gシステム Hシステム Vシステム
-fast × ×
-xHOST × ×
-xSSE4.2
-xAVX × ×
-xCORE-AVX-I × × ×
-xCORE-AVX2 × × × × ×
上記オプション無し

×:指定すると動作しない
○:動作する

 

▲このページの先頭へ