VisualStudio .NET 2003 の VisualC++ 7.1 はついに Pentium 4 最適化機能が実装されました。今回は新コンパイラの性能を CrystalMark08 を使って検証しています。(ベンチマークソフトを使ってベンチマーク!?)
VC7.1 で新たにサポートされた G7 オプションは Pentium 4 および Athlon に最適化されるそうで、ベンチマーク部分を一手に引き受ける CrystalMark08.dll に適用したところ一部で非常に大きな効果がありました。また、ファイルサイズも今回は小さくなっております。( 69632 -> 54272 )
CrystalForce 400K |
||||||
VC6 (G5) |
VC7.1 (G7) |
VC6(G5) |
VC7.1 (G7) |
VC6(G5) |
VC7.1 (G7) |
|
ALU |
8033 |
8978 |
5071 |
5296 |
2030 |
2090 |
FPU |
8031 |
11511 |
5930 |
18027 |
1998 |
5772 |
Fibonacci |
1114 |
1138 |
1107 |
1057 |
526 |
513 |
Napierian |
3074 |
3151 |
1309 |
1309 |
502 |
498 |
Eratosthenes |
2482 |
2605 |
1296 |
1303 |
499 |
497 |
QuickSort |
1363 |
2084 |
1359 |
1627 |
503 |
582 |
MikoFPU |
3637 |
3628 |
1459 |
1463 |
500 |
499 |
RandMeanSS |
1697 |
2524 |
1952 |
13246 |
493 |
3939 |
FFT |
1830 |
1890 |
1410 |
1420 |
503 |
489 |
Mandelbrot |
867 |
3469 |
1109 |
1898 |
502 |
845 |
QuickSort / RandMeanSS / Mandelbrot において劇的に性能が向上していることがわかります。以前、NetBurst は予測困難な条件分岐に弱い(パイプラインの段数が多いため) ということが頻繁に取り上げられており、私も Mandelbrot のように条件分岐のオンパレードな処理は苦手と考えていたのですが、どうやらコンパイラの改良で改善できる問題のようですね。
RandMeanSS で神がかり的なスコアアップを果たしています。思わず何度も試してみましたが、結果は変わらず。
CrystalForce 500K 同様 RandomMeanSS で脅威の性能アップを実現!!
ここまでコンパイラで違うものなのか!! というのが正直な感想です。逆に言うとソースレベルの最適化が足りない!? また、Pentium 4 および Athlon に最適化ということになっている G7 オプションですが、Pentium III でも大きな効果があるようですね。
VisualC++ 7.1 マイナーバージョンアップかと思いきやこいつはとんでもない魔物のようです。数値計算を Windows でやっている方は必須のバージョンアップではないでしょうか!!
CrystalMark Core System は 95/NT4 で動作させたいので、VC6のままですが、ベンチマーク部分は MFC を使わないため VC7.1 に移行できそうです。