簡體   English   中英

你如何描述你的代碼?

[英]How do you profile your code?

我希望不是每個人都在使用Rational Purify。

那么當你想測量時你會怎么做:

  • 功能所花費的時間
  • 峰值內存使用量
  • 代碼覆蓋率

目前,我們手動執行[使用帶有時間戳的日志語句和另一個腳本來解析日志並輸出到excel。 呼...)

你會推薦什么? 指向工具或任何技術將不勝感激!

編輯:對不起,我沒有首先指定環境, 它在專有移動平台上的普通C

我做了很多。 如果你有一個IDE或一個ICE, 有一種技術需要一些手動工作,但工作沒有失敗。

警告:現代程序員討厭這個,我會被投票。 他們喜歡他們的工具。 但它確實有效,而且你並不總是擁有漂亮的工具。

我假設在你的情況下代碼就像DSP或視頻一樣在定時器上運行並且必須快速。 假設你在每個計時器刻度上運行的是子程序A.寫一些測試代碼以在一個簡單的循環中運行子程序A,比如說1000次,或者足夠長,讓你至少等待幾秒鍾。

在它運行時,用一個暫停鍵隨機停止它並對調用堆棧(不僅僅是程序計數器)進行采樣並記錄它。 (這是手動部分。)這樣做了很多次,比如10次。一次是不夠的。

現在尋找堆棧樣本之間的共性。 查找至少2個樣本上出現的任何指令或調用指令。 將會有很多這些,但其中一些將在您可以優化的代碼中。

這樣做,你將得到一個很好的加速,保證。 1000次迭代將花費更少的時間。

你不需要大量樣品的原因是你不是在尋找小東西。 就像你在10個樣本中的5個看到一個特定的調用指令一樣,它占總執行時間的大約50%。 如果您真的想知道,更多樣本會更准確地告訴您百分比是多少。 如果你像我一樣,你只想知道它在哪里,所以你可以解決它,然后繼續下一個。

這樣做,直到你找不到更多優化,你將達到或接近你的最高速度。

對於復雜的應用程序,我是英特爾Vtune忠實粉絲 與傳統的探測器相比,它的思維方式略有不同。 它的工作原理是對處理器進行采樣,以查看指令指針每秒1000次的位置。 它具有不需要對二進制文件進行任何更改的巨大優勢,這通常不會改變您嘗試測量的時間。

不幸的是,它對.net或java沒有好處,因為Vtune沒有辦法將指令指針映射到符號,就像傳統代碼一樣。

它還允許您測量各種其他以處理器/硬件為中心的指標,例如每個指令的時鍾,緩存命中/未命中,TLB命中/未命中等,這些可以讓您確定為什么某些代碼段可能比運行時間更長期待只是通過檢查代碼。

您可能需要不同的工具來進行性能分析和代碼覆蓋。

對於性能分析,我更喜歡MacOSX上的Shark。 它是免費的Apple,非常好。 如果您的應用程序是vanilla C,您應該可以使用它,如果您可以使用Mac。

對於Windows上的分析,您可以使用LTProf。 便宜,但不是很好: http//successfulsoftware.net/2007/12/18/optimising-your-application/

(我認為微軟實際上是通過不提供更便宜的Visual Studio版本來為自己拍攝的。)

對於覆蓋,我更喜歡Windows上的Coverage Validator: http//successfulsoftware.net/2008/03/10/coverage-validator/它實時更新覆蓋范圍。

如果你正在進行'on the metal'嵌入式'C'系統(我不太確定你的帖子中隱含的'移動'),那么你通常會有一些定時器ISR,其中它很容易采樣中斷發生的代碼地址(通過在堆棧中挖回或查看鏈接寄存器或其他)。 然后,在粒度/感興趣范圍的某種組合下構建地址直方圖是微不足道的。

通常,編制一些代碼/腳本/ Excel工作表的組合通常不會太難,這些組合將您的直方圖計數與鏈接器符號/列表文件中的地址合並,以便為您提供配置文件信息。

如果你的內存非常有限,收集足夠的數據可能會有點麻煩,既簡單又有用,但你需要告訴我們更多關於你的平台的信息。

nProf - 免費,適用於.NET。

完成工作,至少足以看到80/20。 (代碼的20%,占80%的時間)

Windows(.NET和Native Exes): AQTime是一個很好的工具。 獨立或作為Visual Studio插件。

Java:我是JProfiler的粉絲。 同樣,可以獨立運行或作為Eclipse(或各種其他IDE)插件運行。

我相信兩者都有試用版。

Google Perftools在這方面非常有用。

我使用devpartner與MSVC 6和XP

如果您的平台是專有操作系統,那么任何工具如何運作? 我認為你現在正在盡力而為

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM