C++程序运行时间
作者:@houkai
本文為作者原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處:https://www.cnblogs.com/houkai/archive/2013/06/06/3120768.html
在C++程序的性能分析中,其中重要的一項(xiàng)就是程序的運(yùn)行時(shí)間。雖然程序的運(yùn)行速度與計(jì)算機(jī)的配置、計(jì)算機(jī)的當(dāng)前狀態(tài)等有很大關(guān)系,但在相對(duì)一致的外部環(huán)境下,程序運(yùn)行時(shí)間的長(zhǎng)短在很大程度上是可以反映程序效率的。
1.一般計(jì)時(shí)方法
在ctime頭文件中,C++提供了計(jì)時(shí)函數(shù) clock() ,其返回?cái)?shù)據(jù)類型為 clock_t。
typedef long clock_t;clock()函數(shù)返回從“開啟程序進(jìn)程”到“程序中調(diào)用clock()函數(shù)”這段時(shí)間里,CPU時(shí)鐘計(jì)時(shí)單元(clock tick)的數(shù)目,在MSDN中稱之為掛鐘時(shí)間(wal-clock)。?
在ctime文件中,還定義了一個(gè)常量CLOCKS_PER_SEC,它用來表示一秒內(nèi)有多少個(gè)CPU時(shí)鐘計(jì)時(shí)單元。?
通過clock()/CLOCKS_PER_SEC便可以得到進(jìn)程的運(yùn)行時(shí)間,一般CLOCKS_PER_SEC的值為1000,可見計(jì)時(shí)精度可達(dá)小數(shù)點(diǎn)后3位(毫秒級(jí))。
計(jì)時(shí)的簡(jiǎn)單示例如下
/**作者:侯凱*說明:clock()計(jì)時(shí)函數(shù)*日期:2013-6-6 */ #include <ctime> //計(jì)時(shí)用的頭文件 #include <iostream> using namespace std;int main() {long i = 10000000L;clock_t start, end; start = clock(); while( i-- );//需要計(jì)時(shí)的程序段end = clock(); printf("The time was: %f\n", (double)(end - start) / CLK_TCK); system("pause");return 0; }2.精確計(jì)時(shí)方法
這里精確的含義是計(jì)時(shí)的精度更高,為了達(dá)到更高的計(jì)時(shí)精度,需要使用精確時(shí)間函數(shù)QueryPerformanceCounter()和QueryPerformanceFrequency(),它們需要計(jì)算機(jī)從硬件上支持精確定時(shí)器。當(dāng)然,現(xiàn)在計(jì)算機(jī)一般都是支持的。?
QueryPerformanceCounter()函數(shù)返回高精確度計(jì)數(shù)器的脈沖數(shù)目(計(jì)時(shí)數(shù)),QueryPerformanceFrequency()函數(shù)提供了高精度計(jì)時(shí)器的頻率值,即每秒脈沖數(shù)。
其中,數(shù)據(jù)類型LARGE_INTEGER既可以是一個(gè)8字節(jié)長(zhǎng)的整型數(shù),也可以是兩個(gè)4字節(jié)長(zhǎng)的整型數(shù)的聯(lián)合結(jié)構(gòu), 其具體用法根據(jù)編譯器是否支持64位而定。該類型的定義如下:
typedef union _LARGE_INTEGER {struct{DWORD LowPart ;// 4字節(jié)整型數(shù)LONG HighPart;// 4字節(jié)整型數(shù)};LONGLONG QuadPart ;// 8字節(jié)整型數(shù)}LARGE_INTEGER ;在進(jìn)行定時(shí)之前,先調(diào)用QueryPerformanceFrequency()函數(shù)獲得機(jī)器內(nèi)部定時(shí)器的時(shí)鐘頻率,然后在需要嚴(yán)格定時(shí)的事件發(fā)生之前和發(fā)生之后分別調(diào)用QueryPerformanceCounter()函數(shù),利用兩次獲得的計(jì)數(shù)之差及時(shí)鐘頻率,計(jì)算出事件經(jīng)歷的精確時(shí)間。其過程與clock()方法類似,但這里的時(shí)鐘頻率很高,測(cè)試電腦上頻率的QuadPart值為3118031,其精度原高于clocK()。?
為了更好地使用這種計(jì)時(shí)方式,已將其封裝成HpTime類,下載。使用該類,計(jì)時(shí)程序如下
總結(jié)
- 上一篇: 深度网络pre-train对于深度网络的
- 下一篇: include/caffe/common