数値計算屋さん

今まで、自分のことをあんまり数値計算屋さんだとは思っていなかったけれど、今日激しく実感した。

gccコンパイルしたらちゃんと走るのに、iccだとコケるという謎的現象に端を発した今回の騒動。問題解決に際して判明した(今まで知らなかっただけ)ことを備忘録として載せておく。

Intelコンパイラは、非商用で個人使用するだけだったらLinux向けのやつを無料でダウンロードして使える。

icc Version 9.0(かなり古い)には最適化にバグがある。
ちなみに、
$ icc -v
でバージョンが確認できる。

iccはデフォルトで-O2。
gccはデフォルトで-O0。
iccデバッグするときには-O0をつけておく必要あり。

iccだと-lmを付けない方が良い。Makefileからコメントアウトしてしまう。

iccでは
#pragma optimize("", off)
#pragma optimize("", on)
で挟んだ部分だけ最適化しないでコンパイルすることができる。

今日デバッグしてた時の感じだと、iccの方がgccより1.5倍ぐらい早かったかな。

stderrのファイルを指定するには
$ ./a.out > stdout 2> stderr