3.2.GNUコンパイラ

目次 (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
3.2.3.2. MPICH2
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、IntelMPI)
3.2.7.  コンパイル時の注意点 (GNU コンパイラ)

 

 

▲このページの先頭へ

3.2. GNU コンパイラ

コンパイル環境としてGCC 4.4.7 とGCC 6.3.0 を利用する事ができます。
標準でGCC 4.4.7 が利用できます。GCC 6.3.0 を利用するときは以下の3.2.1 の手順を実施して、環境を設定します。

 

3.2.1. コンパイラ環境変数の設定(GNU コンパイラ)

1.環境の設定

$ module load PrgEnv-gnu-6.3.0

2.設定環境の確認

$ module list
Currently Loaded Modulefiles:
1) PrgEnv-gnu-6.3.0

3.環境の設定解除

$ module unload PrgEnv-gnu-6.3.0

▲このページの先頭へ

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. 環境の設定

$ module load MPI-openmpi-2.1.1+gnu-6.3.0

2. 設定環境の確認

$ module list
Currently Loaded Modulefiles:
1) MPI-openmpi-2.1.1+gnu-6.3.0

3. 環境の設定解除

$ module unload MPI-openmpi-2.1.1+gnu-6.3.0

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

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

▲このページの先頭へ

3.2.3.2. MPICH2

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

▲このページの先頭へ

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

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

コンパイラ MPI 環境設定コマンド 設定解除コマンド
標準GNU (GNU 4.4.7) OpenMPI module load MPI-openmpi-2.1.3+gnu-4.4.7
module unload MPI-openmpi-2.1.3+gnu-4.4.7
GNU6.3.0 OpenMPI module load PrgEnv-gnu-6.3.0
module load MPI-openmpi-2.1.1+gnu-6.3.0
module unload PrgEnv-gnu-6.3.0
module unload MPI-openmpi-2.1.1+gnu-6.3.0

 

▲このページの先頭へ

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)

1. Fortran の例

$ mpif90 test.f90

2. C 言語の例

$ mpicc test.c

3.C++の例

$ mpicxx test.cpp

▲このページの先頭へ

3.2.7.コンパイル時の注意点 (GNU コンパイラ)

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

GCC 4 の場合

オプション Aシステム Bシステム Dシステム Eシステム Fシステム Gシステム Hシステム Vシステム
-march=corei7
-march=corei7-avx × ×
-march=corei-avx-i × × ×
-march=corei-avx2 × × × × ×
上記オプション無し

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

 

GCC 6 の場合

オプション Aシステム Bシステム Dシステム Eシステム Fシステム Gシステム Hシステム Vシステム
-march=westmere
-march=sandybridge × ×
-march=ivybridge × × ×
-march=broadwell × × × × ×
上記オプション無し

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