gpt4 book ai didi

opengl - 分析图形着色器

转载 作者:行者123 更新时间:2023-12-04 03:21:27 26 4
gpt4 key购买 nike

很长一段时间以来,我一直在避免在我的着色器代码中使用分支,而不是

float invert_value(in float value)
{
if(value == 0.0)
return 0.0;
else
return 1.0 / value;
}

像这样写“聪明”的代码
float invert_value_ifless(in float value)
{
float sign_value = sign(value);
float sign_value_squared = sign_value*sign_value;
return sign_value_squared / ( value + sign_value_squared - 1.0);
}

这完全返回第一个函数所做的并且没有分支,因此它更快。

或者是吗?我在这里和鬼魂打架吗?

如何配置图形着色器以提高速度?我对最近的移动平台(Android)最感兴趣,但欢迎任何有关图形分析的建议!

最佳答案

它通常仍然是出于您最初可能认为的原因——GPU 通常被实现为一个非常宽的 SIMD 处理器,因此对每个像素执行相同的操作允许同时处理许多操作,而每个像素选择不同的操作使该微积分更成问题。这就是为什么像 step 这样的操作在 GLSL 中生存。一个好的 GLSL 编译器通常可以消除编译时的条件性,并且可以通过其他方式使您的分支代码非分支,但 GLSL 编译器通常不如普通的离线语言编译器好,因为它们有自己的性能预算需要担心.

我是一名专业的 iOS 人员,所以我可以详细谈论 Xcode 框架分析器的奇迹,并且会这样做以获得完整的答案,但我很抱歉我不能提供太多关于 Android 的信息。

在 Xcode 中有一个帧捕获按钮。点击它,完整的 OpenGL 命令流将被捕获为单个帧。从那里您将能够检查每个 OpenGL 命令之前和之后的所有状态和缓冲区。将报告每个调用花费的时间。更好的是,您的 GLSL 代码本身将被分析到行级别——将报告每行代码的 µs。而且,真正把它放在边缘,您可以在那里实时重写您的 GLSL 代码并重新运行捕获的帧以了解您的成本会发生什么变化。或者只是作为一个快速反馈的 GLSL 作者环境,尽管它并不是该工具的真正用途。

关于opengl - 分析图形着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38078000/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com