- 1 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 20:32:00 ]
- 前スレ
【高速化】ビット演算 0x02 pc11.2ch.net/test/read.cgi/tech/1158367586/ 過去スレ 0x01. pc8.2ch.net/test/read.cgi/tech/1123918075/ 関連スレ アセンブラ… (゜□゜) ↑アッー!↓ pc8.2ch.net/test/read.cgi/tech/1148402614/ 関連情報 Hacker's Delight ttp://www.hackersdelight.org/ ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか ttp://www.amazon.co.jp/exec/obidos/ASIN/4434046683 ビットを数える・探すアルゴリズム ttp://www.nminoru.jp/~nminoru/programming/bitcount.html Bitboard ttp://en.wikipedia.org/wiki/Bitboard
- 159 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 17:59:06 ]
- 今更だけど
x86でeaxにn>>2が入っているとして (n>>2)*0x01111111 をちょっと手動で最適化してみてるんだけど、誰か8クロック未満になった人居る?
- 160 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 01:22:15 ]
- >>159
クロック計測はもうムリゲじゃ・・・?
- 161 名前:154 mailto:sage [2009/07/12(日) 01:47:25 ]
- >>159
>>150-151の部分を最適化してるんだよな? n>>=2; x=(n+(n<<4)); n=(n<<24)+(x<<16)+(x<<8)+x; x=(n>>12 & 0xf); 自分はこれが精一杯で、命令数調べるのが面倒だったからコンパイルしたら吹いたwww 最適化切るとregister指定に関係なくスタック使うわ、最適化すると乗算命令に戻るわww 乗算の展開は乗除命令を持たないCPUでないとあんまり意味が無いって示唆なのかね? >>154で加算とビットシフトで置き換えって書きましたが、逆効果かもしれませんゴメンナサイ。
- 162 名前:154 mailto:sage [2009/07/12(日) 02:36:34 ]
- 自分で書いたほう、ここが限界か・・・?
const unsigned int m18=(1<<18)-1; const unsigned int m10=(1<<10)-1; const unsigned int m6=(1<<6)-1; n=((n>>18)<<2)+(n&m18); n=((n>>10)<<2)+(n&m10); n=((n>>6)<<2)+(n&m6); n=((n>>6)<<2)+(n&m6); return ((((n^0x3C)+0xFF)^(n+0xFF))&0x100)?1:0;
- 163 名前:デフォルトの名無しさん [2009/07/12(日) 15:41:36 ]
- ビット演算は面白いし頭の体操になるし高速化することも多いけど
可読性は馬鹿みたいに低下するよね。 ビット演算を使うことで可読性があがって保守性が高まるいい例ってあるかな。
- 164 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 15:59:57 ]
- 適切なコメントをつける。
|

|