仕事で使うコンパイラについて、最適化がどれだけ効くか調べてみた。
ところがこれが、ちっとも速くならない。
VC++ で /Ox /GL /LTGC にオマケで /arch:SSE2 つけただけのものに全然勝てない。
IPO なんて VC++ とは比較にならん程長時間ぐりぐりやっていて、 IPO しない時よりはちょっとはマシになっているようだが、それでもまだ VC++ に負けてる。 /Ox は (default の) /O2 と同じだ、などと言っておいて、じゃあ /O3 つけてみると /Ox とほとんど変わらない罠。 PGO まで試して、やっと VC++ を上回る局面もあったものの、この PC でだけ速くてもなぁ……。
並列化できる CPU だと自動並列化/OpenMP あたりは嬉しいんだろうか…。
intel compiler は高級で、高いけど速いコードを吐く、って評判はどこから来たんだろう? Linux 版は速いのか?でも Unix だとふつー PGI だろう…。
だいたい、プロパティいじれなくなるのがおかしい。
プロジェクトを intel compiler を使うようにコンバートしてしまうと、プロジェクトのプロパティを開いた瞬間、 desktop サイズより広いダイアログウィンドウ出して、 Win32Exception な例外出して Microsoft Development Environment で拾って、 OK 押すとまた例外出して…、な無限ループに落ちる罠。
これがかなり理解不能で、別ユーザで実行した Visual Studio でこのプロジェクト読むとちゃんと正常な大きさのダイアログ出せるんだよなぁ…。
プロジェクトの中が腐ってるのかというと、新規のプロジェクトでも同じ結果になるし、レジストリ消してやっても同じ結果になるし…。
おかげで、最適化オプション変えてコンパイルするのに非常に苦労した。
[referer: [an error occurred while processing this directive]]