Intelコンパイラ

バージョン システムA システムB システムC 備考
2021.1.1 + + 2021年03月導入
19.1.3 + + 2021年03月導入
19.1.2 + + + 2020年09月導入
19.1.0 + + + 2020年03月導入
19.0.5 + + + 2019年10月導入
19.0.3 + + + 2019年03月導入
18.0.5 +(default) +(default) +(default) 2019年03月導入
18.0.3 + + + 2018年10月導入
18.0.2 + + + 2018年03月導入
18.0.0 + + + 2017年10月導入
17.0.6 + + + 2018年03月導入
17.0.5 + + + 2017年10月導入
17.0.2 + + + 2017年3月導入
17.0.1 + + + 2016年11月導入
16.0.4 + + 2016年12月導入
16.0.3 + 2016年10月導入
15.0.7 + 2016年4月導入

+ : すべてのユーザが利用可能
― : 利用不可

バージョン moduleファイル名
2021.1.1 intel/2021.1.1
19.1.3 intel/19.1.3.304
19.1.2 intel/19.1.2.254
19.1.0 intel/19.1.0.166
19.0.5 intel/19.0.5.281
19.0.3 intel/19.0.3.199
18.0.5 intel/18.0.5.274
18.0.3 intel/18.0.3.222
18.0.2 intel/18.0.2.256
18.0.0 intel/18.0.0.128
17.0.6 intel/17.0.6.199
17.0.5 intel/17.0.5.239
17.0.2 intel/17.0.2.174
17.0.1 intel/17.0.1.132
16.0.4 intel/16.0.4.258
16.0.3 intel/16.0.3.210
15.0.7 intel/15.0.7.235

システムAにログインした時点では,Crayコンパイラがデフォルトで設定されています.以下のようにmoduleコマンドを実行し,コンパイラを切り替えてください.

$ module switch PrgEnv-cray PrgEnv-intel

システムB,Cでは,ログインした時点で,Intelコンパイラがデフォルトで設定されています.

$ module list
Currently Loaded Modulefiles:
x) intel/13.1.3   x) PrgEnv-intel/1.0

コンパイラのバージョンは,上表に記載のデフォルトのバージョンが設定されています. Intelコンパイラのバージョンを切り替えたい場合は,PrgEnv-intel がロードされている状態で,以下のようにmoduleコマンドを実行してください.

$ module switch intel/13.1.3 intel/12.1.6

ログイン時に自動で環境設定を行いたい場合は,ログインシェルの起動ファイルに必要なmoduleコマンドを記述してください.詳細は 環境設定 をご覧ください. moduleコマンドの詳細は Modules をご覧ください.

  • システムA

    言語 コマンド 実行形式
    Fortran ftn ftn [オプションの並び] ファイル名の並び
    C cc cc [オプションの並び] ファイル名の並び
    C++ CC CC [オプションの並び] ファイル名の並び
  • システムB,C

    言語 コマンド 実行形式
    Fortran ifort ifort [オプションの並び] ファイル名の並び
    C icc icc [オプションの並び] ファイル名の並び
    C++ icpc icpc [オプションの並び] ファイル名の並び

  • 主要オプション(並列化,最適化など)
オプション名 説明
-o FILENAME オブジェクトファイルの名前を指定します.
-mcmodel=medium 2Gbyteを超えてメモリを利用できるようになります.
-shared-intel インテルが提供するライブラリをすべて動的にリンクします.
-fpic 位置に依存しないコードを生成します.
-qopenmp OpenMP指示子を有効にしてコンパイルします.
※openmpオプションはバージョン18.0で廃止されました
-parallel 自動並列化を行います.
-O0/-O1/-O2/-O3 最適化のレベルを指定します(デフォルトは2).
-fast プログラムの速度が最大になるように最適化します.-fast オプションにより,次のオプションが付与されます.(バージョン17.0の場合)
-ipo, -O3, -no-prec-div, -static, -fp-model fast=2 -xHost
※注意:システムAでは,-fast を単体で指定すると,-xHost によりAVX512ではなくAVX2が使われ,命令がKNL向けに最適化されません.-fast -xMIC-AVX512(順序を変えないでください)と指定するよう,お願いします.
-xHost プロセッサで利用可能な最上位の命令セット向けのコードを生成します.なお,システムAではログインノードと計算ノードのCPUが異なるため,-xHostを指定すると最上位のAVX512ではなくAVX2が使われ,命令がKNL向けに最適化されません.利用しないようにお願いします
-xmic-avx512/-xavx2/-xavx/-xsse4.2/-xsse3 Intelプロセッサ向けに,指定した命令セットに対応した最適化コードを生成します.(-xmic-avx512はシステムAのみ対応)
-ip 単一ファイル内で,手続き間の処理を最適化します.
-ipo 複数ファイル間で,手続き間の処理を最適化します.
-qopt-report 実施したすべての最適化についての情報を表示します.
※opt-reportは将来的に廃止予定です
-qopt-report -qopt-report-phase=par 実施した自動並列化についての情報を表示します.
※par-reportはバージョン16.0で廃止されました
-qopt-report -qopt-report-phase=vec 実施したベクトル化についての情報を表示します.
※vec-reportはバージョン16.0で廃止されました
  • Fortran言語固有オプション
オプション名 説明
-nofree プログラムが固定形式で記述されていることを指示します.
-free プログラムが自由形式で記述されていることを指示します.
-std Fortran標準外機能の利用を警告します.
-warn declarations 暗黙の型宣言を警告します.
-warn all すべての警告メッセージを表示します.
-CB 配列の領域外参照を検出します.
-CU 初期化されていない変数を検出します.
-C すべての実行時診断機能を有効にします.
-convert big_endian ビッグエンディアン形式のファイルをサポートします.
  • システムA専用オプション
オプション名 説明
-dynamic プログラム実行時に,コンパイル時にリンクされた静的ライブラリよりも,共有ライブラリを優先してリンクします.

システムAでIntelコンパイラを利用する場合,デフォルトで -xmic-avx512 オプションが付与されます.その他の -x オプションを使用した場合には,オーバーライド警告が発生しますが,コンパイルに影響はありません.

2GB以上のメモリを使うプログラムをコンパイルする場合は,以下のオプションを指定してください.

システム オプション
A -mcmodel=medium -shared-intel -fpic -dynamic
B,C -mcmodel=medium -shared-intel

$ ftn test.f90  # Fortranの例
$ cc test.c      # C言語の例
$ CC test.cpp   # C++の例
$ tssrun ./a.out  # 実行

$ ifort test.f90  # Fortranの例
$ icc test.c      # C言語の例
$ icpc test.cpp   # C++の例
$ tssrun ./a.out  # 実行

以下、システムBの例になります. ほかのシステムを利用する場合はコンパイラのコマンド名を適宜読み替えてください.

$ ifort -parallel test.f90
$ tssrun -A p=1:t=4:c=4 ./a.out # 並列数4を指定して実行

OpenMPは,プログラムの並列化のためのオープン規格です. ソースコードに#pragma ompで始まる指示を書き込み,所定のオプションをつけてコンパイルするだけで,コンパイラに自動で並列化を行わせることができます.

OpenMPへの指示を書き込んだソースコードをコンパイルするには,-qopenmpオプションをつけます.

$ icc -qopenmp test.c

コンパイルしたプログラムを実行する時,-Aオプションでtとcに並列数を指定すると,その並列数でプログラムが実行されます.

$ tssrun -A p=1:t=8:c=8 ./a.out # 並列数8を指定して実行

Intel Fortran コンパイラは,プログラムの誤りや通知すべき情報があるときに,以下に示す形式でメッセージを出力します.

ファイル名(行番号): XXX #YYY: メッセージ本文
ソースコードの該当行の内容
--------------^
  • XXX : メッセージ種別(error/warning)
  • YYY : メッセージの通し番号
  • ポインタ(—-^) : ソースコードの該当行でエラーが発見された正確な場所

出力例

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)

Intel C/C++ コンパイラは,プログラムの誤りや通知すべき情報があるときに,以下に示す形式でメッセージを出力します.

ファイル名(行番号): XXX #YYY: メッセージ本文
ソースコードの該当行の内容
^
  • XXX : メッセージ種別(error/warning)
  • YYY : メッセージの通し番号
  • ポインタ(^) : ソースコードの該当行でエラーが発見された正確な場所

出力例

sample.c(27): warning #175: subscript out of range
    printf(" %d , %d\n",c[1][0],c[1][10]);
                                    ^

  • (Q-1) コンパイル時に,次のようなエラーが発生します.
sample.f90:(.text+0x43f): relocation truncated to fit: R_X86_64_32S against `.bss'
sample.f90:(.text+0x448): additional relocation overflows omitted from the output
  • (A-1) プログラム中で使用するメモリ量が2GBを越えていると考えられます.コンパイル時に,
    -mcmodel=medium -shared-intel -fpic -dynamic 
    オプション(システムA),または
    -mcmodel=medium -shared-intel 
    オプション(システムB,C)を指定してください.

システムAではCray MPIライブラリが,システムB,CではIntel MPIライブラリが利用できます.MPIプログラムのコンパイル,リンク,実行方法については, Cray MPIライブラリ および Intel MPIライブラリ をご覧ください.

システム ライブラリ
A Cray MPIライブラリ
B,C Intel MPIライブラリ

Intelコンパイラを利用する場合,以下の数値計算ライブラリを利用できます.各ライブラリの利用方法については,個別のページをご覧ください.

ライブラリ システムA システムB,C
Cray LibSciライブラリ + +
MKLライブラリ + +
NAGライブラリ AU
IMSLライブラリ AU

+ : すべてのユーザが利用可能
AU : 学術研究機関限定で利用可能
― : 利用不可

本項の情報はIntel環境限定です.

Intelコンパイラでスレッド並列を利用する場合,CPUコアにスレッドをバインドするレイアウトポリシーは,ジョブ実行時に自動で定義される環境変数 KMP_AFFINITYで設定されています.システムBで ハイパースレッディング を利用した場合は,仮想コアがスレッドにバインドされます. 環境変数の詳細については,マニュアル をご覧ください.

(通常時)
 KMP_AFFINITY="compact,1"

(プロセスあたりのメモリ量を調整してノードを占有した場合)
 KMP_AFFINITY="scatter,1"

(ハイパースレッディングを利用した場合)
 KMP_AFFINITY="compact,0"


Copyright © Academic Center for Computing and Media Studies, Kyoto University, All Rights Reserved.