opencv - 这种时差的原因是什么?

标签 opencv optimization android-ndk mat gcc4.9

我的代码有问题

在以下代码中:GainDetailMatI是具有9792 * 2448矩阵的Mat类型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);

A比B多使用13毫秒。
我通过在Application.mk设置APP_OPTIM := debug关闭gcc优化

有谁知道原因吗?
我认为max(0, GainDetailMatI - 4096.0)可能会返回MatExpr类型
并将t=max(0, GainDetailMatI - 4096.0);转换为MatExpr也许这是原因?
非常感谢!

最佳答案

在示例B中,您首先将对象存储在t中,并检索该对象以在代码的第二部分中使用。在示例A中,您将跳过存储和检索以使代码更高效。尽管这表明将所有代码都转储到一行通常会提高效率,但请记住,可读性具有很多值(value)。有关Java性能的更多信息,请参见Wiki。 https://en.wikipedia.org/wiki/Java_performance#Compressed_Oops

关于opencv - 这种时差的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36934376/

相关文章:

python - 使用 OpenCV Python 查找字母并将其着色为红色

python - 鱼眼校准 OpenCV Python

python-3.x - Opencv 无法打开相机

opencv - 如何使用 OpenCV 检测图像中的色 block ?

c++ - header 实现和用于优化的内联关键字

mysql - 优化表设计或优化查询

java - 从文件中读取字符串最快的方法是什么?

java - 如何将int与枚举匹配

android - 如何使用cygwin和android ndk r5在windows上编译ffmpeg-0.10.3

visual-studio - 对 slCreateEngine 的 undefined reference