「プログラミング」カテゴリーアーカイブ

Hyper-Threading(HT)のK-Shogiでの効果

Core i7は4つのコアに加えてHyper-Threading(以下、HT)で8スレッド動かせますが、Pentium4の時はコンピュータ将棋にはHTはあまり有効でないとの噂もありましたので、調べてみました。

同じPCで4スレッドと8スレッドで自己対局させたところ、125勝99敗(勝率:55.0%)で8スレッドの方が勝ちました。少なくともK-ShogiではCore i7のHTは有効なようです。

ただし、今回は1台のPCで自己対局しましたが、他PCとの対局では、4コアだとTurbo Boostが効くということもあるかもしれません。

また、4スレッドの場合はSetThreadAffinityMaskで1つおきにコアを使用していますが、私の環境(XP 32bit)では問題なさそうですが、一般的にこのやり方で正しいのか、今ひとつ自信がありません。

K-Shogi 64bit化 その2

GA将!!!さんのブログに、Core2の32bitから64bitの速度向上率が25%というレポートを見て、これは試さねばと思い、試してみました。

ついでにインラインアセンブラを使っていたところは、かずさんに教えていただいた__rdtscの利用と、ロックのところはアセンブラに外出しして、64bit対応作業が完了しました。

前回と同じ局面の探索にかかった時間です。(ただし、K-Shogiのバージョンが少し違うので前回の時間とは比較できません)

環境 プログラムの
bit数
時間
Core2 Extreme QX6700(2.66GHz) 2GB
WindowsXP 32bit
32bit 27.9秒
Core2 Extreme QX6700(2.66GHz) 2GB
Windows7RC 64bit
32bit 29.4秒
Core2 Extreme QX6700(2.66GHz) 2GB
Windows7RC 64bit
64bit 28.0秒

Windows7RC での32bit→64bitの速度向上率は約5%という前評判どおりの結果でした。。。残念。

しかもXP 32bitの方が速いので、しばらくはXP 32bit環境で十分という結論になってしまいました。

K-Shogi 64bit化

Windows7 RCがダウンロードできるようになったので、ためしに64bit版をインストールしてみました。マシンのスペックは以下のとおり。2004年・2005年の選手権の時のマシンです。久しぶりに起動させました。懐かしい。

  • CPU : Athlon64 3400+ (2.2GHz)
  • MEM : 1GB

問題なくインストールできましたが、解像度が1024×768以下しか選べない。グラフィックカードが認識されていないようです。グラフィックカードはGeForceFX5200が載っています。NVIDIAのサイトからWindows7用のベータドライバをダウンロードしてインストールしてみると「対象の機器がありません」のようなメッセージで終了してしまいます。NVIDIAのサイトをよく読んでみると、GeForceFX5200は対象外の模様。しからばと、使用していない別のマシンからATI(現AMD)の9200SEというカードを抜いてきました。念のため、AMDのサイトでドライバの対応状況を確認すると、またもや9200SEは対象外。仕方がないので、GeForceFX5200のまま1024×768で使用していました。ふと思いついて、WindowsUpdateをしてみると、GeForceFX5200のドライバがありました!

VisualStudio2008をインストールして、64ビットの開発環境を整えました。

K-Shogiのプロジェクトをビルドしてみると、やはり、インラインアセンブラのところでエラーが出ました。その他にもエラーやワーニングが多数出ています。

インラインアセンブラはマルチスレッドのためのロックに使用しているのと、RTSC命令でクロック数を測るのに使用しています。今回はとりあえず動かしたかったので、RTSC関係は削除、ロックは今回のCPUが1コアなので、ばっさりコメントアウトしました。

その他のエラーとしてはVC6から持ってきたプロジェクトだからかOnTimerイベントの引数があっていないようでエラーになっていましたので、正しい形に修正。他にsize_tをintやUINTに変換しているというワーニングが大量に出ていますが、とりあえず問題なさそうなので無視し、ビルドができました。ふぅ。

早速、動かして見ると実行時エラー。デバッグモードで動かすと、定跡の格納領域が足りていないことが判明。構造体にポインタを格納しているので、32bitから64bitになって必要な領域が増えているのが原因でした。(しかし落ちるのはまずいですね。)

これで一応動くようになりました。気になる速度ですが、ある局面の探索で、

  • 32bit 34.6秒 NPS:101,647 (64bit環境で実行)
  • 64bit 30.7秒 NPS:114,548

となり、うわさどおり1割程度速くなっています。

ただし、今回の環境はAthlon64ですが、Core2では64bitの速度向上が悪いとのうわさですので、Athlonほどには速くならないと思われます。

Core i7は64bitはどうなのでしょうね?