2011-09-12 21 views
1

どのように並列選択を効率的に行うのですか?Cgで効率的な並列SIMDの比較と選択をどのように実装しますか?

たとえば、このスカラーコードでは、Cgコンパイラがコードを並列/ SIMDで実行できるように記述する方法があります(ブランチフリー選択も可能です)。

  Out.x = (A.x <= threshold) ? B.x : C.x ; 
      Out.y = (A.y <= threshold) ? B.y : C.y ; 
      Out.z = (A.z <= threshold) ? B.z : C.z ; 
      Out.w = (A.w <= threshold) ? B.w : C.w ; 

答えて

0

はどうやら、私は、CG手動でこれらの行を逃した:

The ?:, ||, &&, &, and comparison operators can 
be used with bool vectors to perform multiple 
conditional operations simultaneously. 

だから私はこのアウトを試してみました、動作しているようです:

Out.xyzw = (A.xyzw <= threshold) ? B.xyzw : C.xyzw ; 

私は期待していなかったと思いますちょうど働く最も簡単な解決策!

グラフィックスプログラマーの私の同僚は、一部のプラットフォームでは、Cgコンパイラが私の元のソースコードを最適化するのに十分なインテリジェントであるかもしれませんが、保証されていないことを示唆しています。可能。

関連する問題