我是OpenGL的新手,我有一个问题,必须回答我的领导:“为什么在if和if-else条件语句中应该避免像上面例子中使用的bool表达式”。我必须明天回答,但我没有任何线索,任何人都可以帮助我, 谢谢! P / s:此代码在这里:
void main ()
{
vec4 color = texture2D ( tex , v_uv);
if (color.r < 0.25)
gl_FragColor = texture2D (tex1 , v _uv);
else
gl_ FragColor = texture2D ( tex2, v _uv);
}
答案 0 :(得分:1)
你没有提供这个例子,但我只是做出假设,并说GPU上的分支可能是一件坏事......
不同的GPU支持不同的分支样式,因此影响取决于代码和目标的支持(SIMD,MIMD,条件代码分支等)。
根据分支的类型(即:您正在检查的条件以及生成的代码是什么),网格中的其他核心可能最终等到最后一个核心,如果分支和沙沙代码。因此,如果你有一个核心因为条件得到满足而不得不做一些复杂的事情,那么所有核心都需要等待所述核心。这可能真的会增加并降低你的性能......但这取决于目标和代码!
答案 1 :(得分:0)
因为GPU是don't like dynamic branching。