スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« FFO40-59は同等以上に | トップページ | コンパイラのAVX2生成 »

AVX2命令ではシフトが便利

今は、営業活動強化期間にしていて、まずは、MasterReversiのHPコンテンツの増強作業の一環として、EdaxBoardの公開準備中だったのだが、Edax4.4のAVX2版のFFO性能が高かったので、MasterReversiについても、AVX2命令の使用等により、高速化作業中だ。

昨日書いた様に、MasterReversiについても、AVX2命令を使った改良版はEdax4.4のAVX2版と同様に高速に動作しているのだが、AVX2命令を使って高速化できた処理は3つある。

その一つは、着手候補の判定処理だ。

この処理の基本的なアルゴリズムはWZebraのホームページに記載されているのだが、簡単に書くと、ビットボードに対してShiftとAnd演算を繰り返す事で、着手候補となるビットボード上の位置のみにビットが残る様になっている。

より具体的に書くと、敵石に面した自石は、自石をShiftして敵石にAndして残ったビットになり、それを更に同じ方向にShiftして敵石にAndして行けば、最終的に敵石が途切れた箇所まで、そのビットが拡張される。

で、そのビットと空マスとをAndして、そのビットが残れば、そのビットは着手候補、という事になるのだが、問題は、シフトの方向は8つある、という事だ。

なので、WZebraなんかでは、上記の様な処理を全方向分、つまり、8回繰り返していたのだが、MasterReversiやEdaxなんかでも、その辺の扱いは同様だった訳だ。

何故なら、SSE2命令は128Bit演算が行えるので、64Bitデータである所の二つのビットボートを同時に扱えるものの、それぞれで異なるシフト演算は行えなかったからだ。

これに対して、AVX2命令では、256Bit演算が行え、4つの64Bitデータで異なるシフト量を設定してシフト演算が行えるので、同時に4つの方向の演算を行えるので、高速化出来た訳だ。

で、MasterReversi的には、この着手候補の検出処理は多用しているので、この処理ルーチンをAVX2化した事で、元々、222秒程度かかっていたFFO40-59の処理性能は、212秒程度にまでは高速化された。

そして、MasterReversiでは、確定石チェックについてもビットボードで行っているのだが、この処理でも、8方向について同じ様な処理を行う必要があるので、その処理をAVX2化する事で、同様に、処理命令数を減らす事が出来た分、高速化できている。

もっとも、確定石チェックはいつも行っている訳でもなく、また、処理自体も、さほど重くも無かったので、これのAVX2化による高速化効果は上記程では無い感じだ。

で、MasterReversiでは、パターン評価を行っているのだが、ビットボードから、パターンのインデックスを求める処理では、元々、SSE2命令を使っていた。

具体的には、ビットボード上の8ビットデータに対応するインデックス値を予め計算してあって、各パターンのインデックスは、それらの合計値として求められる様にしてある訳だ。

そして、デフォルトのパターンは全46パターンなので、それらの加算をSSE2命令を使って同時に行わせる格好にしていたのだが、AVX2命令では、単純に同時処理可能なデータ数が2倍に増えたので、この加算命令の数も、約半分に減らす事が出来た訳だ。

もっとも、命令数は減っても、メモリアクセス量は減らないので、この処理についても、AVX2化によるメリットは微妙かもしれないのだが、まあ、やらないよりはマシ、程度の性能向上はあった感じだ。

と、いう事で、MasterReversiでも、従来の処理コードをAVX2化した事により、それなりに高速化はされたのだが、上記の様に、高速化に大きく寄与しているのは着手候補の検出処理のAVX2化のみかもしれない。

つまり、現行版では222秒かかっているFFO40-59を212秒程度にまで高速化するのは簡単だったのだが、それではEdax4.4のAVX2版がたたき出した193秒という記録には程遠かったので、作者的には、AVX2化とは別に、更なる改良が必要になった訳なのだが、長くなったので、そのお話については、また明日、という事にする。

« FFO40-59は同等以上に | トップページ | コンパイラのAVX2生成 »

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/534482/66594526

この記事へのトラックバック一覧です: AVX2命令ではシフトが便利:

« FFO40-59は同等以上に | トップページ | コンパイラのAVX2生成 »

2018年9月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    収集された情報がGoogleによってどの様に使用されるか、収集される情報をユーザーが管理する方法については、以下のリンクを参照下さい。

    ポリシーと規約 - Google