-2

我是 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);
}
4

2 回答 2

1

您没有提供示例,但我将只是做出假设并说在 GPU 上进行分支可能是一件坏事..

不过,不同的 GPU 支持不同样式的分支,因此影响取决于代码和目标的支持(SIMD、MIMD、条件代码分支等)。

根据分支的类型(即:您正在检查什么条件以及生成的代码是什么),网格中的其他核心可能最终会等到最后一个完成它的 if 分支和沙沙代码。因此,如果您有一个核心因某个条件得到满足而关闭并不得不做一些复杂的事情,那么所有核心都需要等待该核心。这确实会增加并降低您的性能......但这取决于目标和代码!

于 2013-08-14T11:53:04.037 回答
0

因为 GPU不喜欢动态分支

于 2013-08-14T11:50:13.963 回答