我想盡可能準確地測量C++代碼。我確實看到了提升具有高分辨率時鐘,但升壓文件說,這是在性能 - 還挺擊敗目的而言昂貴的時鐘:最準確,但「最便宜」的方式來衡量C++代碼?
http://www.boost.org/doc/libs/1_47_0/doc/html/chrono/users_guide.html
什麼其他的方法有哪些?有什麼方法可以測量CPU週期?
我想盡可能準確地測量C++代碼。我確實看到了提升具有高分辨率時鐘,但升壓文件說,這是在性能 - 還挺擊敗目的而言昂貴的時鐘:最準確,但「最便宜」的方式來衡量C++代碼?
http://www.boost.org/doc/libs/1_47_0/doc/html/chrono/users_guide.html
什麼其他的方法有哪些?有什麼方法可以測量CPU週期?
我無法從您的問題中得知您是否需要外部或內部分析。
對於外部分析,您在Windows上使用Quantify(或其後繼者),並且在任何使用g ++和朋友的unix上使用gprof。如果您使用Solaris,您甚至可以使用dtrace,您可以將它附加到正在運行的應用程序以進行統計分析。
如果您正在尋找內部分析,Solaris/Linux上的gettimeofday
應該足夠高性能,除了在嚴密的循環中以外。
在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 &);
};
如果這是在Windows上分析,使用RDTSC指令,只要它是準確的CPU(見How to detect if RDTSC returns a constant rate counter value?的討論)上。它比QueryPerformanceCounter快得多。
如果您使用的是GCC,請嘗試GNU分析器(gprof)http://sourceware.org/binutils/docs/gprof/。 Gprof可能會給你最準確的結果。
考慮到函數中開始/結束時間的差異對於正確的上下文切換(黑/白過程或線程)不太準確。
[Boost.Stopwatches](https://svn.boost.org/trac/boost/wiki/ReviewScheduleLibraries#Boost.Stopwatches)正等待審覈以包含在Boost中。這可能會成爲最佳選擇。 –
你想要測量什麼?代碼執行時間?出於什麼目的? – johannes
分析器是否適合您的需求? –