目次 (3.2.GNUコンパイラ)
3.2. GNUコンパイラ
3.2.1. コンパイラ環境変数の設定(GNUコンパイラ)
3.2.2. コンパイルコマンド(GNUコンパイラ)
3.2.3. MPI環境変数の設定(GNUコンパイラ)
3.2.3.1. Open MPI 1.6.5
3.2.3.2. MPICH2 1.4.1p1
3.2.4. コンパイラ、MPI環境の切替え
3.2.5. コンパイル・オプション(GNUコンパイラ)
3.2.6. コンパイル方法(GNUコンパイラ)
3.2.6.1. 逐次プログラム
3.2.6.2. OpenMPプログラム
3.2.6.3. MPIプログラム(OpenMPI、MPICH2、IntelMPI)
3.2.7. コンパイル時の注意点 (GNU コンパイラ)
3.2. GNU コンパイラ
コンパイル環境としてGCC 4.4.7 とGCC 4.8.2 を利用する事ができます。
標準でGCC 4.4.7 が利用できます。GCC 4.8.2 を利用するときは以下の3.3.1 の手順を実施して、環境を設定します。
3.2.1. コンパイラ環境変数の設定(GNU コンパイラ)
1.環境の設定
$ module load PrgEnv-gnu482 |
2.設定環境の確認
$ module list Currently Loaded Modulefiles: 1) PrgEnv-gnu482 |
3.環境の設定解除
$ module unload PrgEnv-gnu482 |
3.2.2. コンパイルコマンド(GNU コンパイラ)
各言語のコンパイルコマンドは以下の通りです。
使用言語 | コマンド | コマンド形式 |
---|---|---|
Fortran | gfortran | gfortran [オプション] ファイル… |
C 言語 | gcc | gcc [オプション] ファイル… |
C++ | g++ | g++ [オプション] ファイル… |
3.2.3. MPI 環境変数の設定(GNU コンパイラ)
3.2.3.1. Open MPI 1.6.5
1. 環境の設定
$ module load gnu/openmpi165 |
2. 設定環境の確認
$ module list Currently Loaded Modulefiles: 1) gnu/openmpi165 |
3. 環境の設定解除
$ module unload gnu/openmpi165 |
4.コンパイルコマンド
各言語のコンパイルコマンドは以下の通りです。
使用言語 | コマンド | コマンド形式 |
---|---|---|
MPI(Fortran) | mpif90 | mpif90 [オプション] ファイル… |
MPI(C 言語) | mpicc | mpicc [オプション] ファイル… |
MPI(C++) | mpicxx | mpixx [オプション] ファイル… |
3.2.3.2. MPICH2 1.4.1p1
1.環境の設定
$ module load gnu/mpich2141p1 |
2.設定環境の確認
$ module list Currently Loaded Modulefiles: 1) gnu/mpich2141p1 |
3.環境の設定解除
$ module unload gnu/mpich2141p1 |
4.コンパイルコマンド
各言語のコンパイルコマンドは以下の通りです。
使用言語 | コマンド | コマンド形式 |
---|---|---|
MPI(Fortran) | mpif90 | mpif90 [オプション] ファイル… |
MPI(C 言語) | mpicc | mpicc [オプション] ファイル… |
MPI(C++) | mpicxx | mpixx [オプション] ファイル… |
3.2.4. コンパイラ、MPI 環境の切替え
コンパイラ、MPI 環境を切り替えるコマンドは以下の通りです。
コンパイラ | MPI | 環境設定コマンド | 設定解除コマンド |
標準GNU(GNU 4.4.7) | OpenMPI | module load gnu/openmpi165 | module unload gnu/openmpi165 |
MPICH2 | module load gnu/mpich2141p1 | module unload gnu/mpich2141p1 | |
IntelMPI | module load impi | module unload impi | |
GNU4.8.2 | OpenMPI |
module load PrgEnv-gnu482 module load gnu/openmpi165 |
module unload PrgEnv-gnu482 module unload gnu/openmpi165 |
MPICH2 |
module load PrgEnv-gnu482 module load gnu/mpich2141p1 |
module unload PrgEnv-gnu482 module unload gnu/mpich2141p1 |
|
IntelMPI |
module load PrgEnv-gnu482 module load impi |
module unload PrgEnv-gnu482 module unload impi |
3.2.5. コンパイル・オプション(GNU コンパイラ)
GNU コンパイラの主なコンパイル・オプションを示します。
オプション | 説明 |
---|---|
-c | ソースファイルのコンパイル、または、アセンブルを行いますが、リンクは行いません。 |
-o file |
ソースファイルのコンパイル、または、アセンブルを行いますが、リンクは行いません。 -o file 出力先を引数file に指定します。このオプションはGCC が実行可能ファイル、オブジェクトファイル、アセンブラファイル、プリプロセス済みC コードなどの、いかなる種類の出力を行なう場合にも適用可能です。出力ファイルは1 つしか指定できないため、'-o'を複数の入力ファイルをコンパイルする際に使用することは、実行ファイルを出力する時以外は無意味です。'-o'オプションを指定しなかった場合のデフォルトは、実行ファイルを作る場 合 は'a.out'という名前であり、'source.suffix'の形式のファイル名を持ったソースファイルのオブジェクトファイルは'source.o'であり、アセンブラのファイルは'source.s'です。プリプロセス済みのC 言語は、全て標準出力に送られます。 |
-I | インクルードファイルのパスを指定します。 |
-g | デバッグ用の情報を保存します。 |
-l library |
デバッグ用の情報を保存します。 -l library 名前がlibrary であるライブラリをリンク時に使用します。 |
-static | ダイナミックリンクをサポートするシステムにおいて、このオプションは共有ライブラリとのリンクを抑制します。 |
-O2 | 高度な最適化を行います。サポートされている最適化手段のうち、空間と速度のトレードオフを含まないものはほとんど使用されます。例えばループのアンローリングや関数のインライン化は行われません。-O と比較して、このオプションはコンパイル時間と生成コードの性能の双方を増加させます。 |
-O3 | さらなる最適化を行います。これは-O2 が行う全ての最適化手段に加えて-finlinefunctionsも有効にします |
-O0 | 最適化を行いません。 |
3.2.6. コンパイル方法(GNU コンパイラ)
主なコンパイル方法を以下に示します。
3.2.6.1. 逐次プログラム
1. Fortran の例
$ gfortran test.f90 |
2. C 言語の例
$ gcc test.c |
3.C++の例
$ g++ test.cpp |
3.2.6.2. OpenMP プログラム
1. Fortran の例
$ gfortran –fopenmp test.f90 |
2. C 言語の例
$ gcc -fopenmp test.c |
3.C++の例
$ g++ -fopenmp test.cpp |
3.2.6.3. MPI プログラム(OpenMPI、MPICH2、IntelMPI)
1. Fortran の例
$ mpif90 test.f90 |
2. C 言語の例
$ mpicc test.c |
3.C++の例
$ mpiCC test.cpp |
3.2.7.コンパイル時の注意点 (GNU コンパイラ)
各システム毎でプロセッサーのアーキテクチャが異なります。コンパイル時に以下のオプション指定に注意してください。
GCC 4 の場合
オプション | Aシステム | Bシステム | Cシステム | Dシステム | Eシステム | Fシステム | Gシステム | Hシステム |
---|---|---|---|---|---|---|---|---|
-march=corei7 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
-march=corei7-avx | ☓ | ☓ | ☓ | ○ | ○ | ○ | ○ | ○ |
-march=corei-avx-i | ☓ | ☓ | ☓ | ○ | ○ | ○ | ☓ | ○ |
-march=corei-avx2 | ☓ | ☓ | ☓ | ☓ | ☓ | ○ | ☓ | ○ |
上記オプション無し | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
☓:指定すると動作しない
○:動作する
GCC 6 の場合
オプション | Aシステム | Bシステム | Cシステム | Dシステム | Eシステム | Fシステム | Gシステム | Hシステム |
---|---|---|---|---|---|---|---|---|
-march=westmere | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
-march=sandybridge | ☓ | ☓ | ☓ | ○ | ○ | ○ | ○ | ○ |
-march=ivybridge | ☓ | ☓ | ☓ | ○ | ○ | ○ | ☓ | ○ |
-march=broadwell | ☓ | ☓ | ☓ | ☓ | ☓ | ○ | ☓ | ○ |
上記オプション無し | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
☓:指定すると動作しない
○:動作する