開発メモ : x64用にコンパイルしなおすメリット

一般的に言って、なにかのプログラムをx64用にコンパイルしなおすと、x86のバイナリより遅い実行結果になることが多いです。理由はいろいろあるのですが、今回はまずはx64のメリットを書いておきます。


x64用にコンパイルしなおすメリット
1) アドレス空間が64bit幅になるので、x86のときに存在した2GB制限を超えたメモリが確保出来る。
2) 64bit幅の演算を駆使しているプログラムだとその部分は高速になる。
3) レジスタが少し多く使える。


コンピュータ将棋で言うと、1)は、置換表サイズが大きくとれるようになりますが、1GB程度の置換表であっても1手10秒程度の思考時間ではなかなか溢れるものではないので、あまり効果がないかも知れません。評価関数用のテーブルは大きなものが使えるようになりますが、頻繁にアクセスする箇所がL2/L3に収まらないようなテーブルは、cache miss時のlatencyが無視できないので、あまり現実的ではありません。


2)は、コンピュータ将棋をそういう風に書き直すのはとても大きな苦労を伴います。また、64bit変数に関する演算はx86環境だと生成されるコードがひどいので市販のコンピュータ将棋ソフトをそういう風に書き直してしまうと、x86環境用にコンパイルして動作させた場合、相当の速度ダウンにつながります。ですので市販のコンピュータ将棋ソフトの場合、64bitOSに特化した形で書き直すのはかなりの覚悟が必要です。


3)は、追加されたレジスタに対するアドレッシングがあまり自由ではないのでそれほど効果はありません。


なんかメリットを書くはずが、否定的なものばかりになってしまいましたが、実際、x64のメリットを引き出すのは非常に難しいのです。かなりx64を意識して、かつx64に特化した書き方をしない限りは速くなるどころか遅くなります。