[英]How do you profile your code?
我希望不是每個人都在使用Rational Purify。
那么當你想測量時你會怎么做:
目前,我們手動執行[使用帶有時間戳的日志語句和另一個腳本來解析日志並輸出到excel。 呼...)
你會推薦什么? 指向工具或任何技術將不勝感激!
編輯:對不起,我沒有首先指定環境, 它在專有移動平台上的普通C
我做了很多。 如果你有一個IDE或一個ICE, 有一種技術需要一些手動工作,但工作沒有失敗。
警告:現代程序員討厭這個,我會被投票。 他們喜歡他們的工具。 但它確實有效,而且你並不總是擁有漂亮的工具。
我假設在你的情況下代碼就像DSP或視頻一樣在定時器上運行並且必須快速。 假設你在每個計時器刻度上運行的是子程序A.寫一些測試代碼以在一個簡單的循環中運行子程序A,比如說1000次,或者足夠長,讓你至少等待幾秒鍾。
在它運行時,用一個暫停鍵隨機停止它並對調用堆棧(不僅僅是程序計數器)進行采樣並記錄它。 (這是手動部分。)這樣做了很多次,比如10次。一次是不夠的。
現在尋找堆棧樣本之間的共性。 查找至少2個樣本上出現的任何指令或調用指令。 將會有很多這些,但其中一些將在您可以優化的代碼中。
這樣做,你將得到一個很好的加速,保證。 1000次迭代將花費更少的時間。
你不需要大量樣品的原因是你不是在尋找小東西。 就像你在10個樣本中的5個看到一個特定的調用指令一樣,它占總執行時間的大約50%。 如果您真的想知道,更多樣本會更准確地告訴您百分比是多少。 如果你像我一樣,你只想知道它在哪里,所以你可以解決它,然后繼續下一個。
這樣做,直到你找不到更多優化,你將達到或接近你的最高速度。
您可能需要不同的工具來進行性能分析和代碼覆蓋。
對於性能分析,我更喜歡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%的時間)
Google Perftools在這方面非常有用。
我使用devpartner與MSVC 6和XP
如果您的平台是專有操作系統,那么任何工具如何運作? 我認為你現在正在盡力而為
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.