【发布时间】:2021-08-19 05:04:47
【问题描述】:
我的问题可能会更冗长,但我会尝试通过示例来提问。
在片段着色器中,我的理解是:
...
if(condition)
{
/* loads of expensive work */
}
else
{
/* loads of expensive work */
}
...
如果条件对所有片段进行统一评估,它将以天真的预期的速度运行。但是,它不会在所有其他情况下都表现良好,因为条件的两种情况需要按顺序运行(因为 SIMD 单元内的共享程序计数器?)。
但是,这是否意味着类似:
...
if(condition)
{
return;
}
else
{
/* loads of expensive work */
}
...
可能只会在最坏的情况下付出某种上下文切换的代价并且几乎不会影响性能?
我想我问是因为我听说人们倾向于尝试避免使用非均匀条件进行分支以节省性能,但从性能的角度来看,在第二种情况下它是否完全可以接受(也许与一个分支中的其他一些“轻”负载)?
【问题讨论】:
标签: graphics fragment gpu glsl shader