この日記はGNSで生成しています。 |
_ コンパイラ最適化について、ちょっとだけ書いておくか。
_ 「演算強度の軽減」は、「かけ算を足し算の集合に置き換える」こと。昔はかけ算は足し算に比べて異様に重く、足し算に置き換えることには大きな意味があったのだ。今でこそ大した差ではないが、それでもやはりかけ算よりは足し算のほうがコストは少ない。
_ 「ループ内不変値掃き出し」は、ループ内で不変となる値の計算をループ外に置くこと。毎回同じ値になる計算をすることがばかばかしいのは言うまでもないこと。
for ( i=1; i<10; i++ ) { for ( j=1; j<i; j++ ) { for ( k=1; k<j; k++ ) { printf( "%d", i*j*k ); } } }
_ こんなコードで、効果がわかるはず。「演算強度の軽減」がかかればかけ算コードが消えるし、「ループ内不変値掃き出し」がかかればi*jの計算はkループの外側に出る。両方かかると・・・trickyでcoolなコードが出るので見てみるよーに。
_ 初めてgcc for X68でこの最適化を見たときは感動したっけなぁ・・・いろいろなプラットフォームでのコンパイル結果を見てきたけど、gcc for X68よりcoolなコードにはまだお目にかかってない気がする・・・。
メールはこちらへ...[後藤浩昭 / Hiroaki GOTO / GORRY / gorry@hauN.org]