2011-01-05 73 views
12

我很好奇是否有人對性能測試庫和前端有任何建議,這些建議會爲C++生成很好的圖形圖表(例如gcov如何生成覆蓋率數據,並且有用於查看代碼覆蓋率數據的前端) 。能夠產生圖表,例如:C++的性能測試實用程序

http://download.eclipse.org/eclipse/downloads/drops/S-3.7M4-201012081300/performance/performance.php?fp_type=0

將是非常漂亮的。我們現在使用cppunit進行單元測試,所以也許有一些與之相結合的東西。

更多信息:我們正在使用Intel x86-64機器在Linux上進行編譯(我們使用Ubuntu Lucid/Maverick)。

+0

http://stackoverflow.com/questions/4394606/beyond-stack-sampling-c-profilers,有一個有趣的持續清單這樣的事情... – Nim 2011-01-05 16:23:31

+0

這將主要取決於你正在運行的操作系統和CPU至於什麼是可用的...你是否正在尋找更多的自動化測試或性能分析? – AJG85 2011-01-05 18:58:29

+0

我正在考慮更像是一個自動迴歸測試設置,它將特別針對性能指標。使用cppunit會很酷,但這不是必需的,我會對任何類型的性能測試線束感興趣。在我們的迴歸測試記錄一些大的運行時間命中或類似的東西之後,分析將是我們要採取的步驟。 – 2011-01-05 23:18:16

回答

2

在linux上,你可以試試valgrind工具包。 Valgrind包含可以剖析代碼的callgrind工具。 KCacheGrind非常好地顯示了cachegrind的輸出。

+1

這個想法並不是剖析代碼本身,而是創建一個夜間構建系統,通過在一些perf上採用一些簡單的指標(甚至可能只是運行時)來通知我們性能迴歸。我們將會有單元測試。所以我們並不特別想要測試我們的代碼,我們只是想看看它的原始性能。 – 2011-01-05 18:19:57

+0

@Kenny:你可以解析'cg_diff'的輸出來產生你想要的那種圖形。 – 2011-01-05 19:00:19

2

一些希望從我的經驗中回答這種事的相關筆記herehere

沒有理由將現有的CppUnit設置與scoped_timer(參見上面的第二部分)結合在一起,對某些圖表進行一些後處理可能不會滿足您的需求。雖然我相信CppUnit包含一個插件(「Clocker」?),它將註銷單元測試時間,但我不認爲這對實際上的這種性能測試實際上是有用的,因爲您總是希望僅考慮每個測試的一部分而不是所有的設置代碼。

1

有兩個性能測試框架可以幫助你。

他們兩人是由谷歌測試框架的啓發,並提供接口來支持性能測試,所以很容易運輸的原始googletest到HayaiSkyPat

SkyPat結合了單元測試和perf_evnet。它擴展了Google Test的概念並提供了訪問PMU的界面。 perf_event給出了精確的週期數,這對於時序變化敏感的工具很有用,如編譯器。 SkyPat也可以通過PMU事件(eq:週期,指令,緩存參考,緩存未命中等)來分析一段代碼。

Hayai支持不同的操作系統的一些性能測量方法(Windows:QueryPerformanceCounter(),Linux的:gethrtime(),蘋果公司(OSX,iOS版):mach_absolute_time())到它的性能測試框架。