Time wasted by njk. gcc (GCC) 3.4.0 20040303 (prerelease) let sumlist l = List.fold_left (+.) 0. l;; let avglist l = (sumlist l) /. (float_of_int (List.length l)) ;; let stddev l = let stde2 av e = (e ** 2.) -. (av ** 2.) in let avg = avglist l in sqrt (sumlist (List.map (stde2 avg) l)) /. avg;; -O2 -s -pipe -march=athlon-xp -mfpmath=sse -fprefetch-loop-arrays -ffast-math -fomit-frame-pointer 5.765;5.749;5.774;5.800;5.734;5.788;5.783;5.774;5.761;5.784;5.781;5.808;5.824;5.806;5.779;5.749;5.823;5.805 5.7826111111111107 +/- 0.0180830242609147165 -O2 -s -pipe -march=athlon-xp -mfpmath=sse -fprefetch-loop-arrays -ffast-math -fomit-frame-pointer -fno-crossjumping -ftracer 5.690;5.819;5.803;5.780;5.807;5.815;5.753;5.793;5.788;5.826;5.826;5.792;5.840;5.791;5.765;5.794;5.757;5.785 5.79022222222222283 +/- 0.0245806590747672388 -O2 -s -pipe -march=athlon-xp -mfpmath=sse -fprefetch-loop-arrays -ffast-math -fomit-frame-pointer -frename-registers -finline-functions -fno-crossjumping -ftracer 5.822;5.801;5.836;5.788;5.820;5.773;5.810;5.811;5.838;5.810;5.836;5.825;5.834;5.794 5.8141428571428575 +/- 0.0123209880342409085 -O2 -s -pipe -march=athlon-xp -mfpmath=sse -fprefetch-loop-arrays -ffast-math -fomit-frame-pointer -frename-registers -finline-functions -ftracer 5.817;5.836;5.814;5.844;5.806;5.801;5.822;5.794;5.830;5.825;5.797;5.844;5.796;5.822;5.835;5.834;5.803;5.830 5.81944444444444464 +/- 0.011816194168165893 -O2 -s -pipe -march=athlon-xp -mfpmath=sse -fprefetch-loop-arrays -ffast-math -fomit-frame-pointer -fno-crossjumping -finline-functions 5.854;5.773;5.865;5.839;5.798;5.840;5.853;5.812;5.810;5.792;5.837;5.800;5.814;5.880;5.847;5.818;5.796;5.808 5.82422222222222175 +/- 0.0204088946165274267 -O2 -s -pipe -march=athlon-xp -mfpmath=sse -fprefetch-loop-arrays -ffast-math -fomit-frame-pointer -fno-crossjumping 5.809;5.839;5.829;5.822;5.805;5.835;5.846;5.797;5.826;5.821;5.830;5.806;5.844;5.836;5.846;5.822;5.836;5.816 5.82583333333333275 +/- 0.0104783404928601286 -O3 -s -pipe -march=athlon-xp -mfpmath=sse -fprefetch-loop-arrays -ffast-math -fomit-frame-pointer -fno-crossjumping -ftracer 5.839;5.803;5.821;5.780;5.845;5.868;5.859;5.751;5.768;5.812;5.841;5.779;5.814;5.861;5.845;5.834;5.882;5.882 5.82688888888889078 +/- 0.0275252097957791181 -O3 -s -pipe -march=athlon-xp -mfpmath=sse -fprefetch-loop-arrays -ffast-math -fomit-frame-pointer 5.808;5.873;5.889;5.802;5.787;5.853;5.882;5.902;5.864;5.808;5.916;5.868;5.809;5.735;5.834;5.803;5.847;5.839 5.83994444444444394 +/- 0.0325548025109661243 -O3 -s -pipe -march=athlon-xp -mfpmath=sse -fprefetch-loop-arrays -ffast-math -fomit-frame-pointer -ftracer 5.840;5.763;5.838;5.890;5.799;5.835;5.882;5.868;5.902;5.909;5.845;5.729;5.842;5.812;5.851;5.941;5.804;5.857 5.84483333333333288 +/- 0.0366600741462448 -O3 -s -pipe -march=athlon-xp -mfpmath=sse -fprefetch-loop-arrays -ffast-math -fomit-frame-pointer -fno-crossjumping 5.858;5.854;5.772;5.900;5.845;5.884;5.847;5.823;5.833;5.857;5.816;5.859;5.868;5.804;5.812;5.890;5.912;5.864 5.84988888888888869 +/- 0.0251709627620755709 -O2 -s -pipe -march=athlon-xp -mfpmath=sse -fprefetch-loop-arrays -ffast-math -fomit-frame-pointer -fno-crossjumping -frename-registers 5.913;5.888;5.808;5.841;5.846;5.878;5.782;5.820;5.935;5.885;5.891;5.886;5.885;5.848;5.857;5.885;5.900;5.921 5.8693333333333344 +/- 0.0273581276395926734 -O2 -s -pipe -march=athlon-xp -mfpmath=sse -fprefetch-loop-arrays -ffast-math -fomit-frame-pointer -fno-crossjumping -fweb 5.930;5.847;5.856;5.922;5.885;5.892;5.951;5.900;5.902;5.877;5.922;5.920;5.882;5.839;5.839;5.871;5.895;5.872 5.889 +/ 0.0225749018615745908 -Os -s -pipe -march=athlon-xp -mfpmath=sse -ffast-math -fomit-frame-pointer 6.014;5.898;5.945;5.966;5.974;5.945;5.982;5.963;5.945;5.935;5.972;5.980;5.984;5.954;5.945;5.974;5.956;5.965 5.96094444444444438 +/- 0.0170973510982148774 Conclusion: For reasonably optimized code, -O2 -fomit-frame-pointer wins. -O3 isn't so great. -Os is very bad, probably because it denies prefetching arrays.