opengl - glsl 和 opencl 中的钳位函数如何工作?它使用创建分支吗?我应该避免使用它吗?

标签 opengl glsl opencl gpgpu clamp

GLSL 和 OpenCL 都具有钳位功能,如果值超过边界,则会将数字钳位到插入的上限或下限。如果我尝试在 C++ 中实现类似的东西,它看起来像下面的代码:

if(i < min){
     i=min;
}else if(i > max){
     i=max;
}

但是,这有多个分支路径,据我所知,这会大大降低 GPU 的速度,因为它们中的大多数都必须执行所有分支。

那么 GLSL/OpenCL 钳位是如何工作的,如果它使用分支,你会建议尽可能避免它吗?

最佳答案

如果查看GPU指令集架构的相关文档,例如herehere ,您会发现 GPU 通常具有对 min 和 max 指令的 native 支持。即使他们没有,例如,NVIDIA GPU 上的条件也是基于谓词执行的。任何合理的编译器都会将上面的示例转换为条件赋值而不是成熟的分支( example here )。 Even on the CPU…

关于opengl - glsl 和 opencl 中的钳位函数如何工作?它使用创建分支吗?我应该避免使用它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52725964/

相关文章:

c++ - 如何将 OpenGL 库链接到 NetBeans 7.1 中的项目

opengl - glDrawPixels 不与 glfw 一起使用

vector - glsl 成员明智? : operator

c++ - OpenCL 结构体值在 CPU 上正确,但在 GPU 上不正确

c++ - 无法使用 OpenGL 绘制 Sierpinski

java使用 float 和 double 进行计算

c++ - GLSL 着色器无法编译,有人可以帮我找出原因吗?

opengl - GLSL聚光灯投影体积

cuda - GPU 中的同步

pointers - OpenCL:传递指向本地内存的指针