如何在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 ;

显然,我错过了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编译器可能足够智能,可以为我优化原始源代码,但不能保证,如果可能的话,明确指定并行SIMD操作总是更好。

相关内容

  • 没有找到相关文章

最新更新