2016-04-29 84 views
0

有一些问题,我的代码这个时间差异的原因是什么?

在如下代码:
GainDetailMatIMat型与9792 * 2448矩阵
ContrastGainBound4096xContrastGainLayerIint
平台:Android 4.4系统,NDK GCC 4.9

一:

Mat plus = ContrastGainLayerI * min(ContrastGainBound4096x, max(0, GainDetailMatI - 4096.0)); 

B:

Mat t=max(0, GainDetailMatI - 4096.0); 
Mat plus = ContrastGainLayerI * min(ContrastGainBound4096x, t); 

一个使用13毫秒比B
更多我在Application.mk

关闭GCC优化由一套APP_OPTIM := debug有没有人知道原因?
我想也许max(0, GainDetailMatI - 4096.0)返回类型MatExpr
t=max(0, GainDetailMatI - 4096.0);转换MatExprMat
也许这是什么原因?
非常感谢!

回答

1

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

+0

但在我的情况下,案例B比答案更快。 它没有任何意义。 –

+0

啊,道歉我误解你的问题的一部分。那么这意味着你可能是正确的,转换为Mat需要一段时间,当你把它放在内联。 – namlik

+0

是的,这两种情况下,A和B都转换为垫子,这是不合理的,也许我需要检查GCC编译的对象代码? –

相关问题