今日は休めたのでプログラムの性能計測と小さな改造をやってみた。Toledo/4800+シングルスレッドで動かした場合、詰探索で毎秒200万局面前後、指将棋探索(但し序盤)で毎秒150万局面前後は読めているようである。Barton/3000+と比べると約35%程高速化したようだ。周波数比で言えば2.4/2.17≒1.1と1割ほどしか速くならない計算だが、L2キャッシュのサイズ増量とレイテンシ改善、更にメインメモリ(DRAM)アクセス関係(パイプライニングとバス幅拡大)が効いて実IPC値が戻った(上がった)ようである。


相変わらず詰探索コードの改良に力を入れてみる。全体のコードを再度眺め直してみて、色々微妙に無駄な部分を見つけたので削り込んでみたら5%位改善した。Cのソース行数で僅か100行程度の(アルゴリズムではなくコードの)変更だけで5%の改善というのは大き過ぎるなと思い原因を調べてみると、既に詰探索関係のコードがL1コードキャッシュに入り切らない程膨れ上がってキャッシュ汚染が起きているようだ。要するにコードをコンパクトにしたことでL1コードキャッシュのヒット率が上がりハッキリ改善した[*1]ようである。


いつの間にか詰探索コードだけで64KBを超える程大きくなっているとは気が付かなかった。以前Barton/3000+を使っていた頃に毎秒190万局面程読めていたのが、指手の優先付の強化で毎秒150万局面位に落ちてしまった(それでも探索効率は上がって速くなったので気にしなかった)のだが、それもコレが原因のようだ。これから集中的にコード削減を図ってL1に収まるように改造を掛けてみるつもりである。以前の状態に戻るとすれば毎秒250万局面くらいは行けるのではないかと。皮算用だが(笑)


[*1] 5%の改善というのは大したことはないといえばそうなのだが、測定誤差内ではない、という意味でハッキリ改善した、と言えると思う。