Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl glsl和opencl中的钳制函数是如何工作的?它是否使用创建分支?我应该避免使用它吗?_Opengl_Glsl_Opencl_Gpgpu_Clamp - Fatal编程技术网

Opengl glsl和opencl中的钳制函数是如何工作的?它是否使用创建分支?我应该避免使用它吗?

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箝位是如何工作的?如果它使用分支,您会建议尽可能避免它吗?如

GLSL和OpenCL都有一个钳制函数,如果值超过边界,它会将插入的数字钳制到上限或下限。如果我试图在C++中实现这样的代码,它看起来就像下面的代码:

if(i < min){
     i=min;
}else if(i > max){
     i=max;
}
if(imax){
i=最大值;
}
然而,这有多个分支路径,据我所知,这会使GPU慢很多,因为它们中的大多数都必须执行所有分支


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

如果您查看GPU指令集体系结构的相关文档,例如,和,您会发现GPU通常具有对min和max指令的本机支持。例如,即使没有,NVIDIA GPU上的条件也是基于谓词执行的。任何合理的编译器都会将上述示例转换为条件赋值,而不是完全成熟的分支()

你认为他们为什么会引入钳位功能?为了避免写三行代码,不是吗?