2016-01-24 85 views
0

我正在開發MATLAB中的組合優化算法,我有一堆條件語句,基本上只檢查標誌,當設置爲true時將打印某些變量的值或顯示系統當前進度或狀態的數字如果出現問題,我可以看到發生了什麼,或者我需要檢查它。調試條件語句有多昂貴?

我只是想知道這些條件語句實際上是多麼昂貴的東西的計劃?

我通常不會擔心它,但是代碼中有不少它們,整個事件對於大型問題實例每次運行執行大約20-50,000次,因此可能至少有一百萬次額外每次運行的「if」語句在評估爲false時都必須有一些開銷。

還是他們只是如此之快,它並不重要?有時運行可能需要40秒到1分鐘的時間。所以我認爲這只是其中的一小部分。

我應該將它們註釋掉而不是使用標誌變量嗎?

+2

爲什麼不[profile你的代碼](http://www.mathworks.com/help/matlab/matlab_prog/profiling-for-improving-performance.html)併發布你的結論?在我的_opinion_中,在大多數情況下,假設你檢查的條件不是計算量大的(在這種情況下,你可以使用'||'和''' &&'運營商的短路行爲,以檢查一些更容易計算的條件,以避免「主要」)。還要考慮MATLAB的條件(黃色)斷點。 –

回答

1

您提到該程序運行此代碼20-50000次,因此可能會有一百萬個額外if語句。要記住的是相對的開銷。如果其他代碼中的開銷有限,那麼if語句可能很重要。下面有一些髒簡單的代碼來檢查:

for aa=1:10000 
    a=1+1; 
    if a~=2 
     pause 
    end 
end 

時,這是異形: 線,其中大部分時間花在

7 end  10000 0.043s 40.0% 
4 if a~=2 10000 0.043s 40.0% 
3 a=1+1; 10000 0.021s 20.0% 

在此真的簡單情況下,即使if語句返回false,它需要簡單加法的兩倍。顯而易見,它不是人類規模時間意義上的整體負載。您可以嘗試分析您的代碼並查看檢查的影響。更好的是,你可以創建一個重複的代碼,但沒有檢查真正看到影響。最後,代碼的整體運行時可能不太重要。如果這是時間敏感,我會提供的matlab可能不是最好的選擇。如果你只是想改善現有的代碼。我經常發現註釋掉調試檢查(對於有知識的用戶),並且只在函數崩潰時纔對它們進行註釋,以查找錯誤。

請張貼一個示例或一些配置文件代碼,以便我們可以看到上述任何情況是否適用於您的情況。

+0

感謝您提供的信息,我不知道matlab的profiler功能!我運行了剖析器,if語句在代碼中甚至沒有註冊爲值得一提的內容,即使我深入瞭解最深層次的兒童函數,所以我認爲我會好起來的。它確實拋出了我曾經錯過的一些冗餘,所以再次感謝! – guskenny83