並列探索は簡単じゃなかった

並列探索もやりはじめると、そんなに簡単ではなく
実効性能が出てるんですが、原因不明のクラッシュで落ちます orz
なんだかんだで昨日の祝日はほぼ並列探索のデバッグに費やしてしましました(もったいない!)


解りにくいところは、
search_smpでβカットが起きた場合は、兄弟のスレッドにabortしてもらわないと行けないのですが、
子供にも伝えて貰わないといかんのです。
兄弟に死んで貰うだけじゃなくて、兄弟に子供がいたらまとめて死んで貰わないといけない
兄弟だけ殺すと、親を失った子供がゾンビになって探索終了時に、不正ポインタで落ちます。


ま、CraftyやBona4のソースを忠実に移植すればいいんでしょうけど、
データ構造が違うので合わすのが面倒で手抜きしてはまりました。
あと、子供がsplitする場合は、空いているCPUに自分を複製して探索を依頼するんですが、自分自身のCPUが余りますので
自分も探索しないと行けない。コピーは不要。
この場合、子供と自分は兄弟だけど、親は自分ということになります
仕組みはちゃんと理解したと思うんですが、
なぜか落ちるので、原因が分からない(´・ω・`)
(search_smpのundoの手が壊れてたり。moveなら飛ばせばいいけどundo壊れたら逃げられない)