【问题标题】:If a GPU branch needs to traverse both if condition branches, is it always inefficient?如果一个 GPU 分支需要遍历两个 if 条件分支,是否总是效率低下?
【发布时间】: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


    【解决方案1】:

    简单地说,

    您的视频卡将安排您的着色器在一堆内核上运行。所有这些着色器都必须同步运行。因此,如果其中一个条件为假,它将停止所有内核。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-11
      • 2020-05-26
      • 2017-08-06
      • 2012-09-03
      相关资源
      最近更新 更多