【将棋】指手を生成するコードを生成するコード

久々に将棋ネタです。みなさんもそろそろ動き始めているようなので
クマ将棋もちょっと再開(できたらいいな(汗))

やっぱりNPSが重要ということで、高速化と並列探索をしようと思っています。
でも、局面の構造体はシンプルにしたいので、ビットボードは使いたくない。
クマ将棋の指手は大量のテーブル使って作成していたけど、これだと、やはり遅い模様。
かといって、テンプレートの使い方は良く分からない、ということで
指手を生成するコードを、テーブルの中身を全部、定数値に展開して生成するコードを作ってみた。
まだ動作は怪しいけど、上手くいきそうな感じ。

一応コード置きます。
http://navi.cs.kumamoto-u.ac.jp/~koutaki/shogi/gentest.zip

こんな感じに大量に指手生成コードを展開する。まだ、持ち駒を指す部分は作ってないけど、
現段階でコードサイズが500Kbyteくらいになった。

	case KOMA_RY:
		if(kifu[69]<=0){
			te[num++]=0x27c5;
		}
		if(kifu[71]<=0){
			te[num++]=0x27c7;
		}
		if(kifu[70]<=0){
		te[num++]=0x27c6;
		if(kifu[70]<0)break;
			if(kifu[61]<=0){
			te[num++]=0x27bd;
			if(kifu[61]<0)break;
				if(kifu[52]<=0){
				te[num++]=0x27b4;
				if(kifu[52]<0)break;
					if(kifu[43]<=0){
					te[num++]=0x27ab;
					if(kifu[43]<0)break;
						if(kifu[34]<=0){
						te[num++]=0x27a2;


上のコードを使うと、こんな感じで局面情報を渡すと指手が生成できる。
テーブル等の特別な構造体等は一切使わずに、関数コピペで使えるので
いろいろと便利だと思う。多分、以前よりも速度も速い。

	char kifu[] = 
	{
		-2 ,-3 ,-4 ,-5 ,-8 ,-5 ,-4 ,-3 ,-2 ,
		+0 ,-7 ,+0 ,+0 , 0 ,+0 ,+0 ,-6 ,+0 ,
		-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,
		+0 ,+0 ,+0 ,+0 ,+0 ,+0 ,+0 , 0 ,+0 ,
		+0 ,+0 ,+0 ,+0 ,+0 ,+0 ,+0 ,+0 ,+0 ,
		+0 ,+0 ,+0 ,+0 ,+0 ,+0 ,+0 ,+0 ,+0 ,
		+1 ,+1 ,+1 ,+1 ,+1 ,+1 ,+1 ,+1 ,+1 ,
		+0 ,+6 ,+0 ,+0 ,+0 ,+0 ,+0 ,+7 ,+0 ,
		+2 ,+3 ,+4 ,+5 ,+8 ,+5 ,+4 ,+3 ,+2 ,
		0, 0, 0, 0, 0, 0, 0, 
		0, 0, 0, 0, 0, 0, 0 
	};
	int te[600];
	int num = gmoves(kifu,te);

並列探索は選手権で保木さんに1秒指しと2秒指しでは全然勝率違うでしょ?
と言われて、なるほど、と思ったのでなんとか実装したい所。
それと3駒評価の部分でGPUを使ってみたい。できるかどうか分からないけど・・・