gccをppcクロスでコンパイルしたppcgccのバージョン間のコンパイラ
性能測定(というほど正確なものではありませんが)結果です。
ppcsim上で実行した結果なので、実プロセッサでの実行時間
を完全に予測できるものではありませんが、使用命令数の変化を
見ることで、どのような点に着目してコンパイラチューニングを
行っているか判る「かも」知れません。
実行条件は以下です。
date sum reset exec megapov.010729 -i povray31/scenes/incdemo/colors.pov +W320 +H240 +A -o colors_megapov.png sum sum reset exec megapov.010802 -i povray31/scenes/incdemo/colors.pov +W320 +H240 +A -o colors_megapov.png sum sum reset exec megapov.010916 -i povray31/scenes/incdemo/colors.pov +W320 +H240 +A -o colors_megapov.png sum sum reset exec megapov.011104 -i povray31/scenes/incdemo/colors.pov +W320 +H240 +A -o colors_megapov.png sum sum reset exec megapov.011230 -i povray31/scenes/incdemo/colors.pov +W320 +H240 +A -o colors_megapov.png sum sum reset exec megapov.020329 -i povray31/scenes/incdemo/colors.pov +W320 +H240 +A -o colors_megapov.png sum sum reset exec megapov.020423 -i povray31/scenes/incdemo/colors.pov +W320 +H240 +A -o colors_megapov.png sum sum reset exec megapov.020622 -i povray31/scenes/incdemo/colors.pov +W320 +H240 +A -o colors_megapov.png sum date
megapov.010729 : GCC: (GNU) 3.1 20010714 (experimental) megapov.010802 : GCC: (GNU) 3.1 20010714 (experimental) megapov.010916 : GCC: (GNU) 3.1 20010915 (experimental) megapov.011104 : GCC: (GNU) 3.0.2 megapov.011230 : GCC: (GNU) 3.0.3 20011217 (prerelease) megapov.020329 : GCC: (GNU) 3.2 20020323 (experimental) megapov.020423 : GCC: (GNU) 3.2 20020417 (experimental) megapov.011104 : GCC: (GNU) 3.1※megapov.010729とmegapov.010802の差は失念。他、各モジュールともコンパイラオプション 指定がまちまちです(測定条件として致命的では.......)。ほぼ全て「-O2 -ffast-math」の ハズ。
実行結果のサマリは以下です。
megapov.010729 Total_count = 2136752931 megapov.010802 Total_count = 2136775870 megapov.010916 Total_count = 2137790565 megapov.011104 Total_count = 2126913140 megapov.011230 Total_count = 2126905644 megapov.020329 Total_count = 2135549896 megapov.020423 Total_count = 2133073046 megapov.020622 Total_count = 2201057666
コンパイル条件がいまいち統一されていないとか、つっこみ所満載の比較なので
この結果だけで一概にコンパイラ性能を語る事はできませんが、使用された命令
の変化を見ていると模様があるようです。
次のような簡単なawkスクリプトを使用して様子を見てみました。
child_test> cat count.awk #!/usr/bin/gawk -f { if( /^Total/ ){ printf(".......%d\n",sum) ; sum=0 ; }else{ sum+=$3 ; } print $0 ; }
egrep '^l|Total_' result_020426.txt | gawk -f count.awk | less
egrep '^l|Total_' result_020622.txt | gawk -f count.awk | grep '^\.' .......416742010 .......416746208 .......416744848 .......419022022 .......419022022 .......406729070 .......408168961 .......403799227
egrep '^st|Total_' result_020622.txt | gawk -f count.awk | grep '^\.' .......281391135 .......281394127 .......284158988 .......282682955 .......282682955 .......286550914 .......287847080 .......312553871
egrep '^b|Total_' result_020622.txt | gawk -f count.awk | grep '^\.' .......299444238 .......299449560 .......297512835 .......297010738 .......297008671 .......293533360 .......293297823 .......273694393
今までの所、コンパイラバグと思われるものには突き当たっていないため、
(コンパイラ性能は別にして)品質の高さには毎度驚くばかりです。
今後の課題としては、コンパイラオプションによる違いやバージョンのメモを
きちんと残しておくべきですね(^^;
だんだんパイプライン効率のレベルでチューニングされている予感がしなくも
ありませんので、関数毎の増減と各関数のプログラム的な特徴を踏まえた上で
コンパイル結果を見てみないと、良くなっているのかどうかが判らなくなって
きた気がしなくもありません。
AltiVec対応も始まっているようですので、今後はそちらのチューニングにも
注目したい所です(が、ppcsimでAltiVec命令をサポートされる日は来るのか?(-_-;)。
2002/04/27 : 初版 2002/06/22 : gcc-3.1のデータを追加した。全体の傾向の線上に乗っているので、コメント文章はそのまま。