自動並列化

http://524.teacup.com/yss/bbs
>ハードウェアが並列してくれないんですか 投稿者:初心者 投稿日: 3月12日(日)09時05分59秒
> ハード的な並列は駄目なんですか?ないんですか?
>プログラムする側からしたら単一と同じで
>ジョブが発生したらハードウェアが次々に空いてるCPUに分配していくような感じで。


 やはりYSSの掲示板の書き込みですが、
コンパイラによる自動並列性取り出しみたいなことかも。
人間には並列処理のコード書くの大変ですよね。シリアルに書いておいて、コンパイラが並列性を抽出してくれると、楽ですし。
ループ内をコードを入れ替えて、ベクトル命令に置き換えるなんてことは、スーパーコンピュータのコンパイラではやってますし。


山下さんのCraftyメモにあったような手法は、自分の探索が終わったら、別の人の探索木をコピーして半分やる、を互いに繰り返す手法だったかな。
そんで、ロックがかかると止まるから、いかにロックで停止している時間を減らすかみたいな。
上にある、分散ハッシュだと部分的なハッシュの更新が、全体に影響しないから、ロックをとっても全体は止まらない、局所の同期で済むから、効率がいいって話だろうか?と直感では思いますが


あと、下の方に、TACOSの並列処理の書き込みで、ハッシュを共有とか非共有みたいな話が書いてありましたけど。
まだ、並列での探索はやっとことないので、わかりませんが、想像するに、
ハッシュを共有しないと、互いにかぶって探索しちゃうので、同じノードをみんなが重複して探索しちゃって、ぜんぜん効率が上がらないと。


SETI@HOMEは、互いにまったく関連しないタスクを分散並列してるから、効率は全然考えないでいいから、簡単だけど。
たとえば、天気予報にしても、聞いた話では、地図をグリッドで分割して、要素ごとに計算するだけらしいんですよ。グリッド間で干渉は考えない(考えたとしても隣との間くらい?)
それだったら、並列化すればいくらでも速くなるから、そりゃ楽ですよね。
その点、探索空間(将棋空間)をハッシュで表して、それを共有しないと、お互い干渉しまくるタスクを並列処理しようと思ったら、
並列処理は同期を取るのに忙しくてそりゃ大変だろうなと。


んなら、問題は、いかに楽して同期を取るか。同期で止めないか。って問題になるのかな?
デュアルコアとかのCPUで並列探索するなら、ハッシュを共有メモリに置いた場合、ロックをとるのは、アプリケーションかOSか、CPUか‥‥
でも、原点に返って、そもそも人間はどのように、脳のニューロンで、分散並列処理してるんでしょうねえ?
ロックなんてしてないですよね。きっと。
配線数がべらぼうに多いから、できるんだろうか。うーむ。