--- title: 'Intelコンパイラ クラシック' --- [toc] ## 利用環境{#enviroment} ### 利用できるバージョン・システム{#version} バージョン | モジュールファイル名 | システムB/C | システムG | クラウドシステム | 備考 --- | --- | --- | --- | --- | --- 2022.3 | intel/2022.3 | + | - | + | 2022年11月導入 \+ : すべてのユーザが利用可能 \- : 利用不可 システムB、C、クラウドでは、システムにログインした時点でIntelコンパイラがデフォルトで設定されています。システムGではIntelコンパイラは使えません。 ```nohighlight $ module list Currently Loaded Modulefiles: x) slurm x) SysB/2022 x) intel/2022.3 x) PrgEnvIntel/2022 ``` <!-- コンパイラのバージョンは、上表に記載のデフォルトのバージョンが設定されています。 Intelコンパイラのバージョンを切り替えたい場合は、PrgEnvIntel がロードされている状態で、以下のようにmoduleコマンドを実行してください。 ```nohighlight $ module switch intel/2022 intel/2019 ``` ログイン時に自動で環境設定を行いたい場合は、ログインシェルの起動ファイルに必要なmoduleコマンドを記述してください。詳細は [環境設定](/config) をご覧ください。 moduleコマンドの詳細は [Modules](/config/modules) をご覧ください。 --> ## コンパイル方法{#usage} ### コマンド{#command} | 言語 | コマンド | 実行形式 | | - | - | - | | C | icc | icc [オプション] ファイル名 | | C++ | icpc | icpc [オプション] ファイル名 | | Fortran | ifort | ifort [オプション] ファイル名 | ### オプション{#option} |オプション名 |説明| |-|-| |-o FILENAME |オブジェクトファイルの名前を指定します。| |-mcmodel=medium |2Gbyteを超えてメモリを利用できるようになります。| |-shared-intel |インテルが提供するライブラリをすべて動的にリンクします。 | |-fpic |位置に依存しないコードを生成します。| |-qopenmp |OpenMP指示子を有効にしてコンパイルします。| |-parallel | 自動並列化を行います。 | |-O0/-O1/-O2/-O3 |最適化のレベルを指定します(デフォルトは-O2)。| |-fast |プログラムの実行速度が最大になるように最適化します。-fast オプションにより、次のオプションが付与されます。<br>`-ipo, -O3, -no-prec-div, -static, -fp-model fast=2 -xHost `| |-ip |単一ファイル内で、手続き間の処理を最適化します。 | |-ipo |複数ファイル間で、手続き間の処理を最適化します。| |-qopt-report |実施した最適化についての情報を表示します。| #### 2GB以上のメモリを使う場合のオプション 2GB以上のメモリを使うプログラムをコンパイルする場合は、以下のオプションを指定してください。 <br> `-mcmodel=medium -shared-intel` ## コンパイル例{#sample} ### 逐次プログラム{#serial} ```nohighlight $ icc test.c # C言語の例 $ icpc test.cpp # C++の例 $ ifort test.f90 # Fortranの例 $ tssrun ./a.out # 実行 ``` ### 自動並列化の利用{#auto_parallel} ```nohighlight $ ifort -parallel test.f90 $ tssrun --rsc p=1:t=4:c=4 ./a.out # 並列数4を指定して実行 ``` ### OpenMPの利用{#openmp} OpenMPは、プログラムの並列化のためのオープン規格です。 ソースコードに#pragma ompで始まる指示を書き込み、所定のオプションをつけてコンパイルするだけで、コンパイラに自動で並列化を行わせることができます。 OpenMPへの指示を書き込んだソースコードをコンパイルするには、-qopenmpオプションをつけます。 ```nohighlight $ icc -qopenmp test.c ``` コンパイルしたプログラムを実行する際、--rscオプションでtとcに並列数を指定すると、その並列数でプログラムが実行されます。 ```nohighlight $ tssrun --rsc p=1:t=8:c=8 ./a.out # 並列数8を指定して実行 ``` ## コンパイル時メッセージ{#compile_message} Intel コンパイラは、プログラムの誤りや通知すべき情報があるときに、以下に示す形式でメッセージを出力します。 ### C/C++{#message_c} ```nohighlight ファイル名(行番号): XXX #YYY: メッセージ本文 ソースコードの該当行の内容 ^ ``` - XXX : メッセージ種別(error/warning) - YYY : メッセージの通し番号 - ポインタ(^) : ソースコードの該当行でエラーが発見された正確な場所 **出力例** ```nohighlight sample.c(27): warning #175: subscript out of range printf(" %d , %d\n",c[1][0],c[1][10]); ^ ``` ### Fortran{#message_fortran} ```nohighlight ファイル名(行番号): XXX #YYY: メッセージ本文 ソースコードの該当行の内容 --------------^ ``` - XXX : メッセージ種別(error/warning) - YYY : メッセージの通し番号 - ポインタ(^) : ソースコードの該当行でエラーが発見された正確な場所 **出力例** ```nohighlight sample.f90(26): error #5560: Subscript #2 of the array C has value 20 which is greater than the upper bound of 2 print *, c(1,1),",", c(1,20) -----------------------^ compilation aborted for sample.f90 (code 1) ``` ## 利用可能なライブラリ{#library} ### MPIライブラリ{#mpi_library} Intel MPIライブラリが利用できます。MPIプログラムのコンパイル、リンク、実行方法については、[Intel MPIライブラリ](/compilers/intelmpi) をご覧ください。 ### 数値計算ライブラリ{#numerical_library} Intelコンパイラを利用する場合、以下の数値計算ライブラリを利用できます。各ライブラリの利用方法については、個別のページをご覧ください。 ライブラリ | システムA | システムB | システムC | システムG | クラウド - | - [MKLライブラリ](/software/mkl) | + | + | + | - | + <!-- [NAGライブラリ](/compilers/nag) | AU [IMSLライブラリ](/compilers/imsl) | AU --> \+ : すべてのユーザが利用可能 AU : 学術研究機関限定で利用可能 \- : 利用不可 ## マニュアル{#manual} - [Intel C++ Compiler Classic Developer Guide and Reference](https://www.intel.com/content/www/us/en/develop/documentation/cpp-compiler-developer-guide-and-reference/top.html) - [Intel Fortran Compiler Classic and Intel Fortran Compiler Developer Guide and Reference](https://www.intel.com/content/www/us/en/develop/documentation/fortran-compiler-oneapi-dev-guide-and-reference/top.html)