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

时间:2018-10-09 16:58:56

标签: opengl glsl opencl gpgpu clamp

GLSL和OpenCL都具有钳位功能,如果值超出界限,该功能会将号码钳位到插入的上限或下限。如果我尝试在C ++中实现这样的内容,它将类似于以下代码:

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

但是,它具有多个分支路径,据我所知,这会减慢GPU的速度,因为其中大多数将必须执行所有分支。

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

1 个答案:

答案 0 :(得分:7)

如果您查看GPU指令集体系结构的相关文档,例如herehere,则会发现GPU通常对最小和最大指令具有本机支持。即使没有,例如NVIDIA GPU上的条件都是基于谓词执行的。任何合理的编译器都将把您的示例变成有条件的分配,而不是完整的分支(example here)。 Even on the CPU…