GLSL和OpenCL都具有钳位功能,如果值超出界限,该功能会将号码钳位到插入的上限或下限。如果我尝试在C ++中实现这样的内容,它将类似于以下代码:
if(i < min){
i=min;
}else if(i > max){
i=max;
}
但是,它具有多个分支路径,据我所知,这会减慢GPU的速度,因为其中大多数将必须执行所有分支。
那么GLSL / OpenCL钳位是如何工作的,如果它使用分支,您是否建议尽可能避免使用它?
答案 0 :(得分:7)
如果您查看GPU指令集体系结构的相关文档,例如here和here,则会发现GPU通常对最小和最大指令具有本机支持。即使没有,例如NVIDIA GPU上的条件都是基于谓词执行的。任何合理的编译器都将把您的示例变成有条件的分配,而不是完整的分支(example here)。 Even on the CPU…