データパラレル言語の再帰呼び出し

結局のところ、作っているのは昔の*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節を実行してしまうので、単純には再帰ができない。困ったもんだ。昔の人がやったことを繰り返している気分。もちろん直列化すれば良いのだけど。