はじめてのSSE その7

あと、SSEを使う場合と使わない場合とで、普通のプログラムですと、仮想関数にしたりして呼び分けると思うのですが、極限まで速度が要求されるコンピューター将棋の場合、どうするのが良いでしょうか?


無理やり1つの実行ファイルにしようと思えばコーディング上は、次のように別のnamespaceに読み込ませて、それらを仮想関数か何かで呼び分けるようにしておく程度だとは思います。

namespace SSE4Bonanza
{
#define SSE4
#include "move_gen.h"
#undef SSE4
}
namespace SSE2Bonanza
{
#define SSE2
#include "move_gen.h"
#undef SSE2
}
namespace NoSSEBonanza
{
#include "move_gen.h"
}


私は素直に、複数のバイナリを用意して、二段ロケット(起動したときにSSE2/4の命令が使えるかをチェックして、それに応じたバイナリをCreateProcessで起動する。)にするのが一番楽だとは思います。


つづく