Intel C++ Compilerの使い方

目 次

Intel compiler C++の使い方で,オプションを忘れてしまいがちです.実験室は装置の都合上,Windows版ですので,余計混乱します(テプラで作ったメモを貼っていますが).忘備録として,以下のバージョンをまとめます.オプションの詳細はインテルのページを参考にして下さい.
使用 Version 17.0.2
2018.05.21

バージョンの確認

まずはコンパイラのバージョンを確認しましょう.このまとめは,17.0.2向けです.

実行例
Linux
icpc -v
Windows
icl -v

コンパイルと実行

コードのあるディレクトリに移動してください.LinuxならGUIで移動して,右クリックで端末を選ぶと早いです.例として,sample.cppという名前のコードをコンパイルします.Linuxならa.outというファイルが生成され,Windowsならsample.exeが生成されます.

コンパイル実行例
Linux
icpc sample.cpp
Windows
icl sample.cpp

プログラムの実行は以下の通りです

プログラム実行例
Linux
./a.out
Windows
sample.exe

Linuxで生成されるa.outでは,同一フォルダ内にある複数のプログラムをコンパイルすると上書きされてしまうので不便です. そこで,任意の名前の実行ファイルを作るには以下の方法です.今回は実行ファイル名をsampleとします.

コンパイル実行例
Linux
icpc sample.cpp -o sample

sampleという実行ファイルが生成されたことを確認して,プログラムの実行は以下の通りです.

プログラム実行例
Linux
./sample
ページの先頭へ

最適化

詳細はインテルのページで調べて下さい.O3のOはアルファベット大文字です.とにかく付けておけば良いと思います.O3はハイレベルな最適化を するとのこと.xhostは最適なベクトル化オプションを自動的に選択するそうです.

最適化実施例
Linux
icpc -O3 -xhost sample.cpp -o sample
Windows
icl /3 /QxHOST sample.cpp

長くて覚えられないし,打つのが面倒な場合は以下のオプションで最適化できます.fastは-O3 -ipo -no-prec-div -static -xHostと同じ意味です. CPUによってはコンパイルエラーが出たときは,オプションを減らしながらコンパイルしましょう.ipoは複数のコードの場合なので,コードが1つなら いらないし,コンパイルに時間がかかったりします.

最適化実施例
Linux
icpc -fast sample.cpp -o sample
Windows
icl /fast sample.cpp
ページの先頭へ

自動並列化

parallelは安全に並列化できるループに対して自動並列化するオプションです.自分でループをチューニングする知識がなければ, このオプションで充分と思います.少しでも早くしたい場合はOpenMPを書きましょう.書いたコードは,コンパイルオプションでopenmpが利用出来ます. 詳細は調べて下さい.また,コードによっては並列化するより上記の最適化が早い場合もあるので,比較してからコンパイルしましょう.

自動並列化実施例
Linux
icpc -O3 -xhost -parallel sample.cpp -o sample
Windows
icl /O3 /QxHOST /parallel sample.cpp

CPUコア全てが100%近くで実行されるので,他の作業が出来なくなります.帰宅,週末,出張,長期休暇時に実行するのが良いと思います. あとは,充分な電源と冷却があるPCで実行しましょう.場合によってWindowsは強制アップデートがあるので,LANケーブルを抜いておくと良いです.Linuxでも数ヶ月計算するなら抜いている方が安全です.

ページの先頭へ

2GB以上の大きなメモリを確保

ものすごい大きな配列をいくつか作った際に,メモリーが足らないというコンパイルエラーが出たときは,mcmodel=mediumを使いましょう. mediumがあるということは,smallやlargeがあります.small(コードとデータを2GB以下に制限)は指定しなくてもデフォルトなので,エラーが出たらmedium(コードを2GB以下に制限)かlarge(制限無し)を使いましょう.

2GB以上の大きなメモリ確保実施例
Linux
icpc -O3 -xhost -parallel -mcmodel=medium sample.cpp -o sample
Windows
icl /O3 /QxHOST /parallel /mcmodel=medium sample.cpp

largeでもメモリ不足エラーが出る場合は,メモリ追加の手配を教員に依頼するか,コード内の大きな配列を動的配列(new, delete)で書き直すかしましょう.

ページの先頭へ



© Measurement System Laboratory, Kyoto Institute of Technology.