我的代码有一些问题
在以下代码中:GainDetailMatI
为Mat
型,矩阵为9792*2448ContrastGainBound4096x
、ContrastGainLayerI
为int
平台:Android 4.4,NDK gcc 4.9
A:
Mat plus = ContrastGainLayerI * min(ContrastGainBound4096x, max(0, GainDetailMatI - 4096.0));
B:
Mat t=max(0, GainDetailMatI - 4096.0);
Mat plus = ContrastGainLayerI * min(ContrastGainBound4096x, t);
A比B多用13毫秒。
我通过在Application.mk 上设置APP_OPTIM := debug
来关闭gcc优化
有人知道原因吗
我认为max(0, GainDetailMatI - 4096.0)
可能返回类型为MatExpr
t=max(0, GainDetailMatI - 4096.0);
将MatExpr
转换为Mat
也许这就是原因
非常感谢!
在示例B中,首先将对象存储在t中,检索它以在代码的第二部分中使用。在示例A中,您可以跳过存储和检索,从而提高代码的效率。虽然这表明将所有代码转储到一行通常会提高效率,但请记住,可读性具有ALOT的价值。有关Java性能的更多信息可以在wiki上找到。https://en.wikipedia.org/wiki/Java_performance#Compressed_Oops