ちょっと改造 (2)

テーマ:

昨日の続きで、ほぼ70KBになってるコードを64KBに押し込む計画を行動に移す。が、約1時間の検討の後、いきなし挫折した(汗) 自分なりに最適化してコンパクトに作っているコードを突如1割削減するというのは、1日や2日の作業では無理である。次の選手権までに間に合わせようと思えば出来ないこともないかもしれないが、こればかりやってるというのもなんだかなあ、というわけで方針を変えた。


まずはキャッシュ汚染の軽減を目的とした試験的な改造を行ってみることにした。改造というほど大げさなものではないのだが、コードのメモリ配置を手動で変えてみたわけである。実行頻度の高い部分と低い部分にわけてみる。具体的には、ソースの関数の記述順序を変えただけなのだが、これがそれなりに効果があった。結論を書けば、昨日の向上分も含めて8%ほど高速化した。


左図は、平均的な実戦図。今現在の謎電(Toledo/4800+)で解くと、3.446秒、7,650,596局面の探索で解く。毎秒約222万局面、1局面あたり1,081[clocks]程度で探索していることになる。2日前までは、この図の場合で毎秒205万局面程度だったので汚染軽減の効果は大きいと思う。時間があればL1内にコードを全部詰め込む改造をやってみたいところである。


余談だが、私が調べる限り謎電が最も高い探索速度を叩き出す図を次に紹介する。


左図は、豆腐図式(田島暁雄作 近代将棋 S51.3)。こういう詰物を解図させると強烈な探索速度が出る。たぶん謎電に限ったことではなく、ほとんどのプログラムがそうだと思う。持駒がなく盤上の駒を動かして王手を掛けるだけ、しかも駒種の変化がないので、手の生成が非常に高速になるからだろうし、局面更新(特に駒の利きの更新)コストも非常に少なくて済むからだ。


謎電の実測では、1.314秒、4,124,832局面の探索で解いてしまうので、毎秒約314万局面、局面あたり764[clocks]のコストになり、殆ど(Singleの)Junior級の性能が出る。これは特殊な例だが、やはり、


世界を視野に入れた終盤力を目指す


のなら、4800+シングルで毎秒250万局面くらいは読めるようにしたいところだ。でも謎電の場合は、その前に序盤をなんとかしないと、まったく意味がない(笑)

AD

ちょっと改造 (1)

テーマ:

今日は休めたのでプログラムの性能計測と小さな改造をやってみた。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%の改善というのは大したことはないといえばそうなのだが、測定誤差内ではない、という意味でハッキリ改善した、と言えると思う。

AD

第16回選手権の参加者の募集が1月31日をもって終了した。今回は前回と同じく52組の出場予定である。毎年20%前後の辞退が出てくるので、最終的には40組を超える程度ではないかと思われるが、今回は意外とキャンセルが少ないかもしれない。


さて今回の一次予選は、過去16年に及ぶ選手権の歴史の中で超が付く目玉プログラムが複数がある。言うまでもなく大二郎(おおじろう) だ、てのは冗談で、シード権を放棄して完全個人?で出場される棚瀬さんの名前が未だ定まっていないプログラムとBonanzaである。この2つのプログラムが一次から参加されるというのは、(一次から参加する)一般の参加者にとってはなんだか良い迷惑のような気がする。これは、喩えるなら24で10級登録して指しているR2500の達人のようなものだ。が、そういう強いプログラムと戦えるチャンスが一次予選にもあると考えればラッキーかも知れない[*1]


ところで、今回個人的に「大二郎」が3年振りに参加することになって嬉しく思っている。大二郎の作者[*2]は、ここ数回に渡って選手権を休んでいるのだが、これは即ち、


大二郎は、謎電に対して敵プログラム政策をとっている


のではないかと私は思っていた。棋は対話である。選手権に参加しない、ということは対話を放棄すると受け取ることが出来る。もし今回も休むようなことがあれば、

宣戦布告とみなす


つもりでいたし、逆に参加するということであれば、


対話の用意がある

と解釈することも出来る。一応参加申し込みだけは終わらせていたようだが、キャンセルしたり一次突破できなければ文字通り話にならない。今回一次予選を突破するのは熾烈を極めると予測できるが、さあ、どうするよ大二郎の作者様。もし、一次を突破するようであれば好敵手シリーズに大二郎を追加するつもりである、とか書いてプレッシャ~[*3]をかけてみる。貴殿の挑戦を俺は待ってるぜ[*4]


[*1] いや、やっぱり冷静に考えてみるとアンラッキーのような気がする。

[*2] まったく余談だが、大二郎の作者より謎電の作者の方が若くみえるよな、な、な、と周囲にシツコク同意を強く求めてみるのが選手権での恒例になっている。恒例であって高齢ではない。

[*3] これが小泉の言う「対話と圧力」の典型的模範例である、たぶん。

[*4] 今日(正確には昨日)、大二郎の作者様より挑戦状が届いた。この記事を、その返答とさせていただくことにする(笑)

AD