graphics - 如果一个 GPU 分支需要遍历两个 if 条件分支,是否总是效率低下?
问题描述
我的问题可能会更冗长,但我会尝试通过示例来提问。
在片段着色器中,我的理解是:
...
if(condition)
{
/* loads of expensive work */
}
else
{
/* loads of expensive work */
}
...
如果条件对所有片段进行统一评估,它将按照人们可能天真的预期的速度运行。但是,它不会在所有其他场景中表现良好,因为条件的两种情况需要按顺序运行(因为 SIMD 单元内的共享程序计数器?)。
但是,这是否意味着类似:
...
if(condition)
{
return;
}
else
{
/* loads of expensive work */
}
...
在最坏的情况下可能只会花费某种上下文切换的代价并且几乎不会影响性能?
我想我问是因为我听说人们倾向于尝试避免使用非均匀条件进行分支以节省性能,但是从性能的角度来看,在第二种情况下它是否完全可以接受(也许还有其他一些“一个分支中的“轻”负载)?
解决方案
简单的说,
您的视频卡将安排您的着色器在一堆内核上运行。所有这些着色器都必须同步运行。因此,如果其中一个条件为假,它将停止所有核心。
推荐阅读
- sql - 我已经在 SAS 中编写了这个查询,但它选择的记录比预期的要多
- extjs - 在工作区中创建构建
- vba - Excel VBA:将数据从工作表移动到工作簿/每张工作表创建一个新工作簿
- sql - 从存储过程中删除列名
- filter - imagmagick:根据 r/g/b 条件选择性地填充像素?
- php - 如何在php中用引号分隔数据
- oracle - 将 Varchar2 的返回值从默认(4000)更改为(10char)?
- java - 仅映射 JoinTable 关系中的一列
- javascript - 如何从 HTML 加载带有 cookie 的资源
- sql-server - SQL Server - 有人可以解释这个查询吗?