GPU 优化:我应该避免逻辑 OR 吗?



我开始用Cg编写一些着色器代码。我读过 GPU 不能很好地处理分支条件,但我不确定这对我作为程序员意味着什么。更准确地说,我试图了解哪些结构具有性能成本。

例如,我有一些代码看起来像这样:

bool v = step( _Margin, c.y) 
         || step( _Margin, c.x) 
         || !step( 1-_Margin, c.x) 
         || !step( 1-_Margin, c.y);

在我看来,该语句中的逻辑 OR 执行一些条件逻辑,如果满足一组特定条件,则在变量v中放置一个true值。这是分支吗:可以吗,或者如果不能,我应该以另一种方式进行吗?

我不想在过早的优化道路上走得太远,但我也想了解这里发生了什么。

最后我

做了一些调查(即使确定答案也是必要的!

根据Cg语言规范:

&

&和||的两边总是被评估;没有像C那样的短路。

甚至对于条件运算符 (?:)

与 C 不同,无论条件如何,都会执行第二个和第三个操作数中表达式中的副作用。

http://http.developer.nvidia.com/Cg/Cg_language.html

有趣的是,GLSL 在这里有所不同:

并且 (&&( 将仅计算右手操作数 如果左操作数的计算结果为 true。或者 ( | | ( 将仅计算右操作数,如果左操作数 手操作数计算为 false

对于条件运算符

只 计算第二个和第三个表达式之一。

https://www.opengl.org/registry/doc/GLSLangSpec.4.40.pdf

相关内容

  • 没有找到相关文章

最新更新