--- title: 'Intel oneAPI コンパイラ' taxonomy: category: - docs external_links: process: true no_follow: true target: _blank mode: active published: false --- [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) SysB/2022 x) PrgEnvIntel/2022 x) intel/2022 ``` <!-- コンパイラのバージョンは、上表に記載のデフォルトのバージョンが設定されています。 Intelコンパイラのバージョンを切り替えたい場合は、PrgEnvIntel がロードされている状態で、以下のようにmoduleコマンドを実行してください。 ```nohighlight $ module switch intel/2022 intel/2019 ``` ログイン時に自動で環境設定を行いたい場合は、ログインシェルの起動ファイルに必要なmoduleコマンドを記述してください。詳細は [環境設定](/config) をご覧ください。 moduleコマンドの詳細は [Modules](/config/modules) をご覧ください。 --> ## コンパイル方法{#usage} ### コマンド{#command} | 言語 | コマンド | 実行形式 | | - | - | - | | C | icx | icx [オプション] ファイル名 | | C++ | icpx | icpx [オプション] ファイル名 | | Fortran | ifx | ifx [オプション] ファイル名 | <!-- | DPC++ | dpcpp | dpcpp [オプション] ファイル名 | --> ### オプション{#option} |オプション名 |説明| |-|-| |-o FILENAME |オブジェクトファイルの名前を指定します。| |-mcmodel=medium |2Gbyteを超えてメモリを利用できるようになります。<br>※SYCLでは使用できません。| |-shared-intel |インテルが提供するライブラリをすべて動的にリンクします。<br>指定した GPU へのオフロードを有効にするには、-fopenmp-targets を併せて使用します。 | |-fpic |位置に依存しないコードを生成します。| |-qopenmp |OpenMP指示子を有効にしてコンパイルします。| |-O0/-O1/-O2/-O3 |最適化のレベルを指定します(デフォルトは-O2)。| |-fast |プログラムの実行速度が最大になるように最適化します。-fast オプションにより、次のオプションが付与されます。<br>`-ipo, -O3, -no-prec-div, -static, -fp-model fast=2 -xHost (ifx)` <br>`-ipo, -O3, -static, -fp-model fast=2 (dpcpp, icx, icpx)`| |-ipo |複数ファイル間で、手続き間の処理を最適化します。| |-qopt-report |実施した最適化についての情報をYAMLで表示します。| <!-- (\*1) dpc++, icx, icpx, ifx で使用可 --> (\*1) icx, icpx, ifx で使用可 ## コンパイル例{#sample} ### 逐次プログラム{#serial} ```nohighlight $ icx test.c # C言語の例 $ icpx test.cpp # C++の例 $ ifx test.f90 # Fortranの例 $ tssrun ./a.out # 実行 ``` <!-- $ dpcpp test.cpp # dpc++の例 --> ### OpenMPの利用{#openmp} OpenMPは、プログラムの並列化のためのオープン規格です。 ソースコードに#pragma ompで始まる指示を書き込み、所定のオプションをつけてコンパイルするだけで、コンパイラに自動で並列化を行わせることができます。 OpenMPへの指示を書き込んだソースコードをコンパイルするには、-qopenmpオプションをつけます。 ```nohighlight $ icx -qopenmp test.c ``` コンパイルしたプログラムを実行する際、--rscオプションでtとcに並列数を指定すると、その並列数でプログラムが実行されます。 ```nohighlight $ tssrun --rsc p=1:t=8:c=8 ./a.out # 並列数8を指定して実行 ``` ## コンパイル時メッセージ{#compile_message} Intel コンパイラは、プログラムの誤りや通知すべき情報があるときに、以下に示す形式でメッセージを出力します。 * Intel oneAPI DPC++/C++コンパイラ クラシック ```nohighlight ファイル名(行番号): XXX #YYY: メッセージ本文 ソースコードの該当行の内容 ^ ``` * Fortranコンパイラ ```nohighlight ファイル名(行番号): XXX #YYY: メッセージ本文 ソースコードの該当行の内容 --------------^ ``` - XXX : メッセージ種別(error/warning) - YYY : メッセージの通し番号 - ポインタ(^) : ソースコードの該当行でエラーが発見された正確な場所 **出力例** * Intel oneAPI DPC++/C++コンパイラ クラシック ```nohighlight sample.c(27): warning #175: subscript out of range printf(" %d , %d\n",c[1][0],c[1][10]); ^ ``` * Fortranコンパイラ ```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コンパイラを利用する場合、以下の数値計算ライブラリを利用できます。各ライブラリの利用方法については、個別のページをご覧ください。 ライブラリ | システム - | - [MKLライブラリ](/compilers/mkl) | + <!-- [NAGライブラリ](/compilers/nag) | AU [IMSLライブラリ](/compilers/imsl) | AU --> \+ : すべてのユーザが利用可能 AU : 学術研究機関限定で利用可能 \- : 利用不可 ## マニュアル{#manual} * [Intel oneAPI DPC++/C++ Compiler Developer Guide and Reference](https://www.intel.com/content/www/us/en/develop/documentation/oneapi-dpcpp-cpp-compiler-dev-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)