目次 (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 1.6.5
3.1.3.2. MPICH2 1.4.1p1
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、MPICH2)
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 2) impi ←Intel コンパイラとIntel MPI 環境が設定されている状態の例です。 $ |
3.1.1. コンパイラ環境の設定(Intel コンパイラ)
1.環境の設定
$ module load PrgEnv-intel |
※ MKL(Math Kernel Library)のリンク環境も同時に設定されます。
2.設定環境の確認
$ module list Currently Loaded Modulefiles: 1) PrgEnv-intel |
3.環境の設定解除
$ module unload PrgEnv-intel |
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.6.5
1. 環境の設定
$ module load intel/openmpi165 |
2. 設定環境の確認
$ module list Currently Loaded Modulefiles: 1) intel/openmpi165 |
3. 環境の設定解除
$ module unload intel/openmpi165 |
4.コンパイルコマンド
各言語のコンパイルコマンドは以下の通りです。
使用言語 | コマンド | コマンド形式 |
---|---|---|
MPI(Fortran) | mpif90 | mpif90 [オプション] ファイル… |
MPI(C 言語) | mpicc | mpicc [オプション] ファイル… |
MPI(C++) | mpicxx | mpixx [オプション] ファイル… |
3.1.3.2. MPICH2 1.4.1p1
1.環境の設定
$ module load intel/mpich2141p1 |
2.設定環境の確認
$ module list Currently Loaded Modulefiles: 1) intel/mpich2141p1 |
3.環境の設定解除
$ module unload intel/mpich2141p1 |
4.コンパイルコマンド
各言語のコンパイルコマンドは以下の通りです。
使用言語 | コマンド | コマンド形式 |
---|---|---|
MPI(Fortran) | mpif90 | mpif90 [オプション] ファイル… |
MPI(C 言語) | mpicc | mpicc [オプション] ファイル… |
MPI(C++) | mpicxx | mpixx [オプション] ファイル… |
3.1.3.3. Intel MPI
1. 環境の設定
$ module load impi |
2.設定環境の確認
$ module list Currently Loaded Modulefiles: 1) impi |
3.環境の設定解除
$ module unload impi |
4.コンパイルコマンド
各言語のコンパイルコマンドは以下の通りです。
使用言語 | コマンド | コマンド形式 |
---|---|---|
MPI(Fortran) | mpiifort | mpiifort [オプション] ファイル… |
MPI(C 言語) | mpiicc | mpiicc [オプション] ファイル… |
MPI(C++) | piicpc | mpiicpc [オプション] ファイル… |
FOCUSスパコン環境では旧バージョンのIntel MPIも提供しておりますが、旧バージョンには後述するコマンドの不具合があることを確認しております。
特にバージョンを指定する必要が無い場合は、FOCUSスパコン環境で提供されている最新版のIntel MPIをご利用下さい。
※最新版の環境は module load impi コマンドを使用することで自動的に設定されます。
Intel MPI 4.1.1をお使いになる必要がある場合、4.1.1に含まれるmpirunコマンドには、ノード名を処理する箇所に不具合がございます。
この不具合は、hostfileオプションを使用しノードの一覧を明示的に指定することで回避することが出来ます。
mpirunコマンド使用の際には、ジョブスクリプトを以下のように変更し、ご使用下さい。
module load PrgEnv-intel module load impi411 NODEFILE=`generate_pbs_nodefile` mpirun -hostfile ${NODEFILE} -np ${SLURM_NTASKS} 実行ファイル |
3.1.4. コンパイラ、MPI 環境の切替え
コンパイラ、MPI 環境を切り替えるコマンドは以下の通りです。
コンパイラ | MPI | 環境設定コマンド | 設定解除コマンド |
Intel コンパイラ | OpenMPI |
module load PrgEnv-intel module load intel/openmpi165 |
module unload PrgEnv-intel module unload intel/openmpi165 |
MPICH2 |
module load PrgEnv-intel module load intel/mpich2141p1 |
module unload PrgEnv-intel module unload intel/mpich2141p1 |
|
IntelMPI |
module load PrgEnv-intel module load impi |
module unload PrgEnv-intel module unload impi |
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)。一部の最適化は、インテル® マイクロプロセッサーのみに適用される場合があります。
|
-[no]restrict | restrict キーワードとともに指定すると、ポインターの一義化が有効[無効]になります。デフォルトではオフです(C/C++)。 |
-mkl[=parallel,sequential,cluster] |
数値演算ライブラリIntel Math Kernel Library(MKL)をリンクします。最適化されたBLAS,LAPACK,ベクトル演算ライブラリなどを利用する場合に用います。
|
-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.c |
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、MPICH2)
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 言語(icc、mpicc)のみを記述していますが、Fortran(ifort、mpiifort)、C++(icpc、mpiicpc)はコマンドを読み替えてください。
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システム | Cシステム | Dシステム | Eシステム | Fシステム | Gシステム | Hシステム |
---|---|---|---|---|---|---|---|---|
-fast | ☓ | ☓ | ☓ | ○ | ○ | ○ | ○ | ○ |
-xHOST | ☓ | ☓ | ☓ | ○ | ○ | ○ | ○ | ○ |
-xSSE4.2 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
-xAVX | ☓ | ☓ | ☓ | ○ | ○ | ○ | ○ | ○ |
-xCORE-AVX-I | ☓ | ☓ | ☓ | ○ | ○ | ○ | ☓ | ○ |
-xCORE-AVX2 | ☓ | ☓ | ☓ | ☓ | ☓ | ○ | ☓ | ○ |
上記オプション無し | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
☓:指定すると動作しない
○:動作する