2016-04-29 87 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編譯的對象代碼? –

相關問題