スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« 残す所、問題は2つのみだが | トップページ | プレミアムアイテムにする »

更に3%程度は高速化

今は、Edax4.4のAVX2版のFFO性能が高かったので、MasterReversiについても高速化していて、FFO40-59については同等以上の性能が出る様になっている。しかし、FFO60-79については厳しい状況なので、更なる高速化を行ってみた結果、順当に高速化はされたのだが。

昨日、数日前に書いた、「コンパイラのAVX2生成」、という記事に追記したのだが、コンパイラのAVX2スイッチを入れずに自前のAVX2命令を使った場合に、CPUがHaswell世代である所のMac mini Late2014では、異常に遅くなる原因は、SSE2命令とAVX命令を同時に使おうとした場合に発生するH/W的なペナルティが原因であろう、というメールを、Okuhara氏から貰った。

で、そのメールには、AVX2命令が動作するマシンでは、BMI2命令も使え、その中でも、Ryzenでは遅いというコメント付きで、PEXT命令は有用な筈なので使ってみたら? みたいなアドバイスもあった訳だ。

なので、FFO60-79の性能が出ていない作者的には、早速、PEXT命令を使ってみた訳なのだが、この命令は、マスクで指定する64Bitデータの指定ビットのみを連続したビット列として取り出せる命令なので、この命令を使えば、ビットボードの状況からテーブルでデータを引っ張ってくる様な場所で、そのインデックス値を高速に作成できる様になる。

もっとも、テーブル参照の場合、インデックス計算よりも、テーブルからデータを引っ張ってくるメモリアクセス時間の方がより問題になりそうなので、どうなるかなあ、という感じではあった訳だ。

しかし、とりあえず、MasterReversiのFlipルーチンはテーブル参照方式なので、そのインデックス値作成を。現状のマスク用のAND+オーバーフローを利用した掛け算+シフト処理から、PEXT命令に変更してみた所、表題にした様に、3%程度の高速化は行えた感じだ。

もっとも、この辺の処理を下手に変更すると、滅多に発生しない状況で不具合が発生する危険性も高いため、変更方法としては、極力、現行の処理コードに近い形になる様にしている。

その結果、理想的には、PEXT命令の出力はそのままインデックス値として使えるのだが、出力をシフトしたりする様な若干の変更が必要となっている。

また、PEXT命令の場合、ソースデータのビット位置が小さいモノが出力値でもビット位置が小さくなる事になるのだが、現行の処理コードの一部では、ソースデータのビット位置が小さいモノがインデックス値の高ビット位置に来る様になっているものもある。

なので、このインデックス値を作成する場合には、PEXT命令の出力値のビットを左右反転させているのだが、これを1命令でやってくれるCPU命令は無さそうなので、現状、この処理については、テーブル参照で行っている。

つまり、唯でさえ、メモリアクセス数が気になるFlip処理コード内で、余計なメモリアクセスを増やしてしまっているので、この処理については、元に戻すか、新しいコードを、この状態に最適化させるか、と、思ったりしている状況だ。

なので、PEXTによる高速化は、最終的には、3%ではなく5%程度には、なる可能性もあるかもしれないのだが、いずれにしても、106分x0.95は100.7なので、もし、5%の高速化が行える様になったとしても、FFO60-79の目標性能である所のEdax4.4のAVX2版が出している93分という数字には届かない。

と、いう事で、PEXT命令による高速化は救世主にはならない感じなのだが、それでも、この命令を使う格好にすると、FFO40-59では170秒台の結果も出る様になっているので、こちらについては、193秒のEdax4.4のAVX2版と比べても、十分高速、と、言える状況にはなっているかもしれない。

« 残す所、問題は2つのみだが | トップページ | プレミアムアイテムにする »

トラックバック

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

この記事へのトラックバック一覧です: 更に3%程度は高速化:

« 残す所、問題は2つのみだが | トップページ | プレミアムアイテムにする »

2018年11月
        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