cpu時間

CPU時間即反映CPU全速工作時完成該進程所花費的時間 ●cpu時間計算CPU TIME = # of CPU Clock Cycles x Clock Period = (# of CPU Clock Cycles)/(Clock Frequency)

簡介

CPU時間即反映CPU全速工作時完成該進程所花費的時間

計算方法

一、計算算法的CPU運行時間

(一)一般有這么幾個函式可以使用:

<time.h> 中的std的clock() 可以精確到1ms

<windows.h> 中的win下常用的GetTickCount可以精確到18-20ms

當然這些都不是C或是C++標準支持的。

(二)我們先來看看clock()的用法:

#include <time.h>

#include <stdio.h>

int main()

{

time_t t; //一定要這個類型

long i;

t = clock();

for (i = 0; i < 1024 * 32768; ++i) ; //做些耗時的事情,可能就是你的算法

printf("time consumed: %d ms", clock() - t); //這樣輸出的就是耗時的毫秒數了

return 0;

}

GetTickCount()用法類似。

(三)現在我們來介紹一個精度更加高的方法,直接讀取CPU開機以來執行的機器周期數。

我們要用到一條彙編指令:RDTSC (就是ReaD TimeStamp Count) 其精度可以達到ns級別。(準確地說精度是1/你的CPU的時鐘頻率,這也是極限)

long hStart, lStart, hEnd, lEnd;

//分別代表開始的高位和低位以及結束的高位和低位,由於NS精度實在太高,所以數值會很大,1個32位的變數無法存儲,需要兩個32位變數

long hCnt, lCnt;//差值的高位和低位

__asm //內嵌彙編的語法可能不同編譯器有些不同

{

RDTSC

mov hStart, edx

mov lStart, eax

}

//此處放上耗時的代碼

__asm

{

RDTSC

mov hEnd, edx

mov lEnd, eax

//獲取兩次計數器值得差

sub eax, lStart

cmp eax, 0

jg L1

neg eax

jmp L2

L1: mov lCnt, eax

L2: sub edx, hStart

mov hCnt, edx

}

unsigned long timer = (hCnt < <32) + lCnt; //得出最終結果,timer就是所得的差值(單位ns)

相關詞條

相關搜尋

熱門詞條

聯絡我們