--- title: GNUコンパイラ taxonomy: category: - docs external_links: process: true no_follow: true target: _blank mode: active published: true --- [toc] ## 利用環境{#enviroment} ### 利用できるバージョン・システム{#version} バージョン | モジュールファイル名 | システムA | システムB/C | システムG | クラウドシステム | 備考 --- | --- | --- | --- | --- | ---| --- 12.2.0 | gcc/12.2.0 | + | + | + | + | 2022年11月導入 8.5.0 | - | + | + | + | + | OS標準 \+ : すべてのユーザが利用可能 \- : 利用不可 システムにログインした時点では、IntelコンパイラもしくはNVIDIA HPC SDKコンパイラがデフォルトで利用できるようになっています。以下のようにmoduleコマンドを実行し、コンパイラを切り替えてください。 ```nohighlight (システムA、B、C、クラウド) $ module switch PrgEnvIntel PrgEnvGCC (システムG) $ module switch PrgEnvNvidia PrgEnvGCC ``` システムにログインした時点で、バージョン8.5.0が使えます。バージョン12.2.0を使いたい場合は、PrgEnvGCC がロードされている状態で、以下のようにmoduleコマンドを実行してください。 ```nohighlight $ module load gcc/12.2.0 ``` <!-- GNUコンパイラのバージョンを切り替えたい場合は、PrgEnvGCC がロードされている状態で、以下のようにmoduleコマンドを実行してください。 ```nohighlight $ module switch gcc/4.8.2 gcc/4.6.2 ``` ログイン時に自動で環境設定を行いたい場合は、ログインシェルの起動ファイルに必要なmoduleコマンドを記述してください。詳細は [環境設定](/config) をご覧ください。 moduleコマンドの詳細は [Modules](/config/modules) をご覧ください。 --> ## コンパイル方法{#usage} ### コマンド{#command} 言語 | コマンド | 実行形式 --------- | --------- | ---------------------------- Fortran | gfortran | gfortran オプション ファイル名 C | gcc | gcc オプション ファイル名 C++ | g++ | g++ オプション ファイル名 ### オプション{#option} * **主要オプション(並列化、最適化など)** オプション名 | 説明 --------------------------------------- | -------------------------------- -o _FILENAME_ | オブジェクトファイルの名前を指定します。 -mcmodel=medium | 2Gbyteを超えるメモリをサポートします。 -fopenmp | OpenMP指示子を有効にしてコンパイルします。 -O0/-O1/-O2/-O3 | 最適化のレベルを指定します(デフォルトは-O0)。 * **メッセージ出力とデバッグのオプション** オプション名 | 説明 ------- | ------------------ -Wall | すべての警告メッセージを表示します。 * **Fortran言語固有オプション** オプション名 | 説明 --------------- | ---------------------------- -ffixed-form | プログラムが固定形式で記述されていることを指示します。 -ffree-form | プログラムが自由形式で記述されていることを指示します。 -pedantic | Fortran拡張の利用を警告します。 -fimplicit-none | 暗黙の型宣言を警告します。 ## コンパイル例{#sample} ### 逐次プログラム{#serial} ```nohighlight $ gfortran test.f90 # Fortranの例 $ gcc test.c # C言語の例 $ g++ test.cpp # C++の例 $ tssrun ./a.out # 実行 ``` ### OpenMPの利用{#openmp} OpenMPは、プログラムの並列化のためのオープン規格です。 ソースコードに#pragma ompで始まる指示を書き込み、所定のオプションをつけてコンパイルするだけで、コンパイラに自動で並列化を行わせることができます。 OpenMPへの指示を書き込んだソースコードをコンパイルするには、-fopenmpオプションをつけます。 ```nohighlight $ gcc -fopenmp test.c ``` コンパイルしたプログラムを実行する時、-Aオプションでtとcに並列数を指定すると、その並列数でプログラムが実行されます。 ```nohighlight $ tssrun --rsc p=1:t=8:c=8 ./a.out # 並列数8を指定して実行 ``` ## 利用可能なライブラリ{#library} ### MPIライブラリ{#mpi_library} IntelMPIライブラリ、OpenMPIライブラリが利用できます。MPIプログラムのコンパイル、リンク、実行方法については、[IntelMPIライブラリ](/compilers/intelmpi)、 [OpenMPIライブラリ](/compilers/openmpi) をご覧ください。 ## マニュアル{#manual} * [GCC online documentation](http://gcc.gnu.org/onlinedocs/) ## リンク{#link} * [GCC, the GNU Compiler Collection](http://gcc.gnu.org/)