【オセロ,将棋】ボードゲーム【囲碁,War】 at GAMEDEV【オセロ,将棋】ボードゲーム【囲碁,War】 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト397:310 16/01/30 20:51:37.62 yCKBToEa.net 囲碁がすごい事になってますね。オセロで一通り勉強したら小さい盤の囲碁をやって みようと思っていたので、モチベーション低下中。とはいえ、ああいうのをオセロに応用 しようとしたら、あそこまでマシンパワーいらないんじゃないかとか・・・。 ここのところ、もっぱらSTLやPPLの機能を綺麗に使う方向での改良ばかりしてました。 pararell_reduceの使い方もわかりました。negaScoutの繰り返しループが綺麗に並列化 できたんじゃないかと。ただ、MAPする件数がしれているので、parallel_reduceではなく 逐次版のaccumlateの方が速いという結果に。あと、時間計測が結構飛び飛びの値に なるので時間計測関数を精度1msのものに変更。 色々やった結果、若干高速化したうえで、時間のバラつきが消えてくれました。 100回試行で計測すると610ms±15ms(1σ)となり、逐次処理のほぼ2倍の速度に。 ノード数は同程度で、NPSは40M超えて来ました。このNPSのままノードを半減できれば 良いのに。 398:310 16/02/07 21:48:19.14 xNqeS9Ve.net ここら辺で、EDAXとかとの速度差の原因を考えたところ、次の2点が考えられました。 1.評価関数の精度が悪い可能性 2.個々の関数で速度アップの余地がある可能性 という事で、1は熟考が必要なので後回しで、速度アップの対象として、flipとmobilityの 高速化を検討。とはいえ、良い知恵があるわけでもないので、ネット徘徊。 現在、ポインタ関数で分岐して処理しているflip関数を1発で処理するopenCLのソースを 発見。Master Othelloの作者のものでEDAX4.3のflip関数を参考にしているらしい。 中身を解読するとベクターを使っている。とりあえず処理を真似て逐次処理で組んでみたら 結構速度アップしました。 解読の過程で、ようやくベクタ化の意味がわかったので、mm256系の命令を使って、 ベクタ化してみましたが、若干速度低下。原因は恐らくlzcntで一回ベクタを抜けてしまう 所だと思うので、ハッカーのたしなみを読んでベクタ演算で組み直してみる予定。 合わせてmobility関数もベクタ化。若干速度アップしたかなという程度。 組み込み関数は使い方が面倒臭いので、演算子のオーバーロードしまくってみました。 flip関数は非ベクタの分岐無しバージョン、mobilityはベクタという状態で、500msを切る 数字が出るところまで来ました。flipのベクタ化ができて、パラメータ調整するともうちょい 良い数字が出るかなと期待。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch