2016-06-28 58 views
1

我目前正在使用cProfile(以及其他)在Python中執行一些分析任務。在documentation它說:爲什麼確定性分析器稱爲「確定性」?

CPROFILE和配置文件提供Python程序的確定性分析

在分析,我不斷收到稍有不同的結果與CPROFILE整個程序以及各個功能。這很好,我想我至少明白一些原因 - 例如,某些操作系統任務可能會在後臺運行,並減慢我的程序。畢竟,cProfile實時運行,而不是CPU時間。

但是,它仍然引發了一個問題:如果每次都不會產生相同的結果,爲什麼稱爲確定性分析?

+0

[向下滾動文檔。](https://docs.python.org/2/library/profile.html#what-is-deterministic-profiling) – Pointy

+0

這是一個10美元的單詞10美分概念。它的基礎是空洞的假設,即測量可以幫助你找到可能的加速,而不是。從那裏忘記你的目標只是一個愚蠢的步驟,而是專注於測量的準確性*。在這個網站上有很多頭腦硬的程序員知道它們的區別。 [*以下是一些瘋狂的想法,以及實際工作原理。*](http://stackoverflow.com/a/1779343/23771) –

+0

10美元vs 10美分:) 我會讀你的這篇文章乍一看似乎很有趣。 –

回答

0

問題是回答在documentation

27.4.5。什麼是確定性分析?

確定性分析旨在反映所有函數調用,函數返回和異常事件都受到監視,並且對這些事件之間的間隔(在此期間用戶的代碼正在執行)進行精確定時。相比之下,統計分析(這不是由該模塊完成的)隨機採樣有效指令指針,並推斷出在哪裏花費時間。後一種技術傳統上涉及較少的開銷(因爲代碼不需要檢測),但僅提供時間花費在何處的相對指示。

在Python中,由於在執行過程中有一個解釋器處於活動狀態,因此不需要檢測代碼來進行確定性分析。 Python會爲每個事件自動提供一個鉤子(可選回調)。此外,Python的解釋性質往往會增加執行的開銷,確定性分析往往只會在典型應用程序中增加小的處理開銷。其結果是確定性分析並不昂貴,但它提供了有關Python程序執行的大量運行時統計信息。

通話計數統計可用於識別代碼中的錯誤(令人驚訝的計數),並識別可能的內聯擴展點(高通話計數)。內部時間統計可以用來識別應該仔細優化的「熱循環」。應使用累積時間統計來識別算法選擇中的高級錯誤。請注意,在此分析器中對累計時間的異常處理允許將算法的遞歸實現的統計信息直接與迭代實現進行比較。

這意味着它不取決於某些採樣,並在相同的條件下應該重現數據。

+0

啊,所以術語'確定性'只是用來區分它與統計分析器?我想這只是一個語義問題,但「確定性」分析器可以爲相同的輸入返回不同的結果的事實只是以錯誤的方式揉搓我。如果cProfile實際測量的是CPU時間而不是實時,那將會更有意義。哦,好吧.....但謝謝你回答! –

相關問題