データパラレル言語の再帰呼び出し
結局のところ、作っているのは昔の*Cとか*Lispとかみたいにデータパラレルな言語と言えて、例えば
p = new Turtle[10]; p.x = 0; f(p) { p.x = p.x + 1; if (p.x < 10) then f(p); }
の中の"p.x = p.x + 1"が自動的に並列化される、というものであるわけだ。問題は常にif文みたいな条件分岐にあって、並列性を失わないために、条件の結果をそれぞれのユニットが覚えるようにして、trueだと思っていたやつだけがthen節の中を実際に実行するようにする。
というのは良いのだが、上のように再帰呼び出ししていたりすると、(p.x < 10)がtrueになるユニットがひとつもなくなっても、「とりあえず」then節を実行してしまうので、単純には再帰ができない。困ったもんだ。昔の人がやったことを繰り返している気分。もちろん直列化すれば良いのだけど。