GLSL 和 OpenCL 都具有钳位功能,如果值超过边界,则会将数字钳位到插入的上限或下限。如果我尝试在 C++ 中实现类似的东西,它看起来像下面的代码:
if(i < min){
i=min;
}else if(i > max){
i=max;
}
但是,这有多个分支路径,据我所知,这会大大降低 GPU 的速度,因为它们中的大多数都必须执行所有分支。
那么 GLSL/OpenCL 钳位是如何工作的,如果它使用分支,你会建议尽可能避免它吗?
最佳答案
如果查看GPU指令集架构的相关文档,例如here和 here ,您会发现 GPU 通常具有对 min 和 max 指令的 native 支持。即使他们没有,例如,NVIDIA GPU 上的条件也是基于谓词执行的。任何合理的编译器都会将上面的示例转换为条件赋值而不是成熟的分支( example here )。 Even on the CPU…
关于opengl - glsl 和 opencl 中的钳位函数如何工作?它使用创建分支吗?我应该避免使用它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52725964/