这个时差的原因是什么?

时间:2016-04-29 09:17:38

标签: opencv optimization android-ndk mat gcc4.9

我的代码存在一些问题

遵循以下代码:
GainDetailMatIMat类型,带有9792 * 2448矩阵
ContrastGainBound4096xContrastGainLayerIint 平台: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);

使用比B多13毫克 我在Application.mk

处设置了APP_OPTIM := debug来关闭gcc优化

有没有人知道原因?
我想也许max(0, GainDetailMatI - 4096.0)会以MatExpr类型返回 并t=max(0, GainDetailMatI - 4096.0);MatExpr转换为Mat
也许这就是原因?
非常感谢!

1 个答案:

答案 0 :(得分:1)

在示例B中,首先将对象存储在t中,检索它以在代码的第二部分中使用。在示例A中,您跳过存储和检索,使代码更有效。虽然这表明将所有代码转储到一行通常会使其更有效,但请记住,readablility有很多值。有关Java性能的更多信息可以在wiki上找到。 https://en.wikipedia.org/wiki/Java_performance#Compressed_Oops