Opengl glsl和opencl中的钳制函数是如何工作的?它是否使用创建分支?我应该避免使用它吗?
GLSL和OpenCL都有一个钳制函数,如果值超过边界,它会将插入的数字钳制到上限或下限。如果我试图在C++中实现这样的代码,它看起来就像下面的代码:Opengl glsl和opencl中的钳制函数是如何工作的?它是否使用创建分支?我应该避免使用它吗?,opengl,glsl,opencl,gpgpu,clamp,Opengl,Glsl,Opencl,Gpgpu,Clamp,GLSL和OpenCL都有一个钳制函数,如果值超过边界,它会将插入的数字钳制到上限或下限。如果我试图在C++中实现这样的代码,它看起来就像下面的代码: if(i < min){ i=min; }else if(i > max){ i=max; } if(imax){ i=最大值; } 然而,这有多个分支路径,据我所知,这会使GPU慢很多,因为它们中的大多数都必须执行所有分支 那么GLSL/OpenCL箝位是如何工作的?如果它使用分支,您会建议尽可能避免它吗?如
if(i < min){
i=min;
}else if(i > max){
i=max;
}
if(imax){
i=最大值;
}
然而,这有多个分支路径,据我所知,这会使GPU慢很多,因为它们中的大多数都必须执行所有分支
那么GLSL/OpenCL箝位是如何工作的?如果它使用分支,您会建议尽可能避免它吗?如果您查看GPU指令集体系结构的相关文档,例如,和,您会发现GPU通常具有对min和max指令的本机支持。例如,即使没有,NVIDIA GPU上的条件也是基于谓词执行的。任何合理的编译器都会将上述示例转换为条件赋值,而不是完全成熟的分支() 你认为他们为什么会引入钳位功能?为了避免写三行代码,不是吗?