什麼是C/C++代碼精確基準測試的推薦方法/庫?有些東西可以克服簡單測量執行時間的不準確性,即CPU頻率和系統負載可能在執行時間內發生變化。不確定計數執行的指令是否是正確的方法,因爲我的代碼中的瓶頸將(可能)成爲內存訪問。簡單但準確的C/C++代碼基準
回答
GNU概要文件gprof是對signle線程代碼進行性能測量的傳統方法。您不必手動測試代碼,只需在構建期間向gcc添加選項即可。
當你使用-p(gprof enable)編譯的庫時,gprof無法使用,因此庫函數在基準測試中可能無法準確計數 –
@ e.jahandar是的,只有頂級函數調用圖書館將進行基準測試。但是如果你沒有lib的源代碼,你通常也不關心低級函數。實際上,系統調用和多線程會帶來更多麻煩。 –
你所問的幾乎是不可能的。
因爲在現代處理器上,由於緩存和虛擬內存的影響,執行時間非常不確定。另外,一些操作的週期數取決於參數的特定值。
這意味着靜態基準測試(僅查看源代碼)無法準確,您無法避免運行該程序。然後,運行時間將從一次執行到下一次波動。
即使平均分幾次運行也是不準確的,因爲第二次和下一次執行會受到第一次執行的影響,並且不會再處於實際的狀態。
實際上,「運行時間」不再存在。
在clock()上使用tick和tock,並且通過將函數包裝在for循環中運行至少十分之一秒。這消除了大部分緩存效果。然而,你可以做的一點是,你不一定想要消除緩存,因爲當用於真實時,函數將在部分緩存的上下文中運行。很難回答那個問題。
如果您使用的是X86,您可以嘗試使用英特爾V-Tune Amplifier,它爲您提供了C或C++應用程序的深微體系結構分析。它使用CPU內置的性能計數器來測量執行時間,還可以編號緩存未命中和大量的微架構級別信息。
其他程序可以使用相同的硬件性能計數器。例如在Linux上,'perf stat。/ myprogram'將會測量整個程序的一組默認計數器。 –
- 1. 準確的基準代碼
- 2. 基準VBA代碼
- 3. Interbench基準代碼
- 4. Vogar簡單基準測試
- 5. 簡單的跨平臺代碼基準測試
- 6. AS3中的基準代碼
- 7. 代碼基準統計 -
- 8. 一個簡單的Node.JS基準
- 9. 簡單YARN基準TestDFSIO失敗
- 10. 代碼點火器中的基準
- 11. JQuery .html()打印準確的html代碼
- 12. 代碼的效率和準確性
- 13. 用於基準JavaScript代碼的學術正確方法?
- 14. 最準確,但「最便宜」的方式來衡量C++代碼?
- 15. 尋找基準代碼片段(C++)
- 16. 基準代碼 - 我做對了嗎?
- 17. 基準C代碼 - 刷新緩存
- 18. 簡單的標準查詢
- 19. 緯度不準確,但龍是準確的 - Android設備
- 20. 時間不準確或低效代碼?
- 21. VS2010代碼覆蓋率不準確
- 22. 標準值在CE中正確,但在代碼中爲空
- 23. 發現錯誤的基準異步代碼與同步代碼
- 24. OpenCV校準代碼
- 25. 簡單對準使用GWT
- 26. mongodb的架構設計基準簡圖
- 27. 菜單標籤「標準項目」代碼
- 28. 準備好我的代碼
- 29. 使用keras構建一個簡單的ANN,但得到0的準確性
- 30. 更準確地替代findline?
什麼是C/C++代碼? –
@LightnessRacesinOrbit google it – fhucho
好吧,現在我知道了,謝謝 –