2012-12-06 66 views
1

我想盡可能準確地測量C++代碼。我確實看到了提升具有高分辨率時鐘,但升壓文件說,這是在性能 - 還挺擊敗目的而言昂貴的時鐘:最準確,但「最便宜」的方式來衡量C++代碼?

http://www.boost.org/doc/libs/1_47_0/doc/html/chrono/users_guide.html

什麼其他的方法有哪些?有什麼方法可以測量CPU週期?

+1

[Boost.Stopwatches](https://svn.boost.org/trac/boost/wiki/ReviewScheduleLibraries#Boost.Stopwatches)正等待審覈以包含在Boost中。這可能會成爲最佳選擇。 –

+1

你想要測量什麼?代碼執行時間?出於什麼目的? – johannes

+0

分析器是否適合您的需求? –

回答

1

我無法從您的問題中得知您是否需要外部或內部分析。

對於外部分析,您在Windows上使用Quantify(或其後繼者),並且在任何使用g ++和朋友的unix上使用gprof。如果您使用Solaris,您甚至可以使用dtrace,您可以將它附加到正在運行的應用程序以進行統計分析。

如果您正在尋找內部分析,Solaris/Linux上的gettimeofday應該足夠高性能,除了在嚴密的循環中以外。

1

在Windows上使用QueryPerformanceCounter()。

在Solaris上使用gethrtime()。

在其他UNIX上使用gettimeofday()。

當然,你應該將它們包裝在一個類中,以便你的代碼只使用類 而不是直接使用方法。

我們使用一類像

class dbbHighResTimer { 
public: 
    dbbHighResTimer(); // Does call set() 
    dbbHighResTimer(int); // Does not call set() 
    void set(); 
    friend double operator - (const dbbHighResTimer &, const dbbHighResTimer &); 
    friend int compare(const dbbHighResTimer &, const dbbHighResTimer &); 
}; 
1

如果您使用的是GCC,請嘗試GNU分析器(gprof)http://sourceware.org/binutils/docs/gprof/。 Gprof可能會給你最準確的結果。

考慮到函數中開始/結束時間的差異對於正確的上下文切換(黑/白過程或線程)不太準確。