初期配置の手生成の速度
地味に3.4M回/sec→3.5M回/secで、10万回/sec向上
LS3600さんは現在は既に4M回/secのようです。
bonaノーマルは3M回弱/secらしい(core2duo 2.8GHz)
#1 3513703.4回/sec 500万回time=1.423秒 #2 3531073.4回/sec 500万回time=1.416秒 #3 3506311.4回/sec 500万回time=1.426秒 #4 3518648.8回/sec 500万回time=1.421秒 #5 3498950.3回/sec 500万回time=1.429秒 AVG 3513737.6回/sec
単体のソースだけをアセンブラで見てみると、
れさぴょん型の手構造でも、ポインターで参照して
シフトを併用するとメモリーをアクセスせずにレジスタで代入が行われるようだったんですが、
実際のコードでやると速くならなかった(微妙に遅くなる)
実際のコードでは色々とやってるのでレジスタ割り当てができてないのかもしれない。
register int* pmove=(int*)&t[tp]; *pmove = piece + (to2<<8) + (from2<<16); pmove+=4; tp++;
8bitきざみだったらシフトを使わずに8bitレジスタをうまく使えば済む様な気もします。
全部アセンブラで書けばできるけど、C++から上手くそういうアセンブラに誘導するにはどうするのか?
inlineを使うと引数でメモリ参照渡しになるので遅いし
x64でビルドすれば引数はレジスタ渡しになるのだけど