在移动设备上进行精确转换可能会导致性能下降。我想最小化我们的着色器(glsles,hlsl和spir-v)中的转换。我对内置函数的精度感到困惑。
考虑以下代码:
predict
def fit(self,X,y):
self.est1.fit(X,y)
self.est1_perf = cross_val_score(self.est1,X,y,cv=4,scoring='f1_macro')
self.est2.fit(X,y)
self.est2_perf = cross_val_score(self.est2,X,y,cv=4,scoring='f1_macro')
return self
mediump float a, b;
mediump float c = max(a, b);
mediump float a, b;
float c = max(a, b);
会发生什么转换?如果内置函数的返回类型取决于参数,则代码#1,#3,#4应该没有任何转换。是吗?
答案 0 :(得分:0)
我认为您无法始终预测转换,因为着色器编译器将优化以尽可能使用最低精度和最少转换。但是我怀疑您的思维方式错误,并且对一些无关紧要的内容进行了微优化。对于典型的实现,精度转换应该非常便宜。 您应该担心的是,不必要对输入,输出和其他变量使用高精度,这应该会产生更大的影响。
最简单,最优化的方法是将precision mediump float;
放在着色器的顶部,因此精度默认为mediump
,然后在支持降低精度的设备(例如移动GPU)上进行测试,看看是否一切都坏了。然后,您可以在必要时选择性地添加highp
。