ビットシフト演算が遅い・・・?
Cで2の累乗の乗算をする時、ビットシフトを使うとどのくらい速くなるのか実験するため、timeコマンドで以下の二つのプログラムのreal 時間を計測してみました。
// ord.c #include <stdlib.h> main() { unsigned int temp; int loop; for (loop = 0; loop <= 10000000; loop++) { temp = rand () / (RAND_MAX / 16777216 + 1); temp *= 8; } }
// bit.c #include <stdlib.h> main() { unsigned int temp; int loop; for (loop = 0; loop <= 10000000; loop++) { temp = rand () / (RAND_MAX / 16777216 + 1); temp <<= 3; } }
ビルド:
それぞれ5回実行した結果。
乗算: 平均 331.0ミリ秒
ビットシフト: 平均 374.6ミリ秒
・・・ビットシフトの方が40ミリ秒ほど遅くなってます。なぜ?
ちなみに、実験環境は、
OS: Linux 2.4.27
CPU: Intel(R) Pentium(R) 4 CPU 2.40GHz stepping 07
コンパイラ: gcc 3.3.2 20031218
glibc 2.3.3
です。