インテルコンパイラはgccの5倍速い!(場合もある)

/opt/intel/Compiler/11.1/064/Samples/ja_JP/C++/optimize/int_sin.c

にある | sin(x) | を数値積分するコード.

このコードで比較する.

gccとiccを比較するために

//#include <mathimf.h>
#include <math.h>

としておく.

コンパイル

% icc -O2 int_sin.c -o i.out
% gcc -O2 -lm int_sin.c -o g.out

実行

% time ./g.out > /dev/null
./g.out > /dev/null  6.23s user 0.00s system 98% cpu 6.354 total
% time ./i.out > /dev/null
./i.out > /dev/null  1.28s user 0.00s system 99% cpu 1.287 total

インテルコンパイラー速すぎる!約5倍だ!

非常にシンプルなコードなのに,この差とは.

なにかの間違いか?

icc -O2 -lm int_sin.c -o i.out とすると,

icc: warning #10314: オブジェクト・ファイルの前に -lm を指定すると、インテルの算術ライブラリーが使用されず、パフォーマンス に影響することがあります。

なんて,警告がでるが,結果は同じだった.

ただコードによっては,gccとiccで差がでない場合もある.

何が原因なのだろうか?