codeplay vectorC

Webを徘徊していたら、こんなものを発見:Codeplay - The Heterogeneous System Experts
ゲーム用コンパイラとして有名な会社らしい。
"sieve {}"という特殊なブロックを導入。このブロック中の「副作用」はブロックを抜けるまで後回しにされるらしい。そうすると、sieveブロック中の各命令の間には依存関係が無いと扱ってよくなって、並列化できると主張している。
ん〜、ユーザ見えにはブロック中の副作用の順番がどうなるか分からないという意味になるのかなぁ?
でも、White Paperでは、for(...){a[i] = b[i] - f;}のようなループについて、aとbのアドレスが重なるかもしれないから通常は並列化できないけれども、sieveブロックにすれば、sieveブロック中ではテンポラリのa'[i]にストアして、抜けたところでa[i]に書き戻す(副作用はブロックを抜けたところで行われる)ので並列化できる、とか言っている。
この例はちょっとなんじゃそりゃ、という感じではあるんだけど。(この程度の話なら、いくらでも他の解決策はあるでしょ。)
でも、発想はちょっと面白い。