如何獲得程序或者一段代碼運(yùn)行的時(shí)間?你可能說有專門的程序測(cè)試工具,確實(shí),不過你也可以在程序中嵌入?yún)R編代碼來實(shí)現(xiàn)。
在Pentium的指令系統(tǒng)中有一條指令可以獲得CPU內(nèi)部64位計(jì)數(shù)器的值,我們可以通過代碼兩次獲取該計(jì)數(shù)器的值而獲得程序或代碼運(yùn)行的時(shí)鐘周期數(shù),進(jìn)而通過你的cpu的頻率算出一個(gè)時(shí)鐘周期的時(shí)間,從而算出程序運(yùn)行的確切時(shí)間。
我們通過指令TDSIC來獲得cpu內(nèi)部計(jì)數(shù)器的值,指令TDSIC返回值放在EDX:EAX中,其中EDX中存放64位寄存器中高32位的值,EAX存放第32位的值. 下面看看實(shí)現(xiàn)的代碼:
| //用匯編實(shí)現(xiàn)獲取一段代碼運(yùn)行的時(shí)間 #include<iostream> using namespace std; void GetClockNumber (long high, long low); void GetRunTime(); int main() { long HighStart,LowStart,HighEnd,LowEnd; long numhigh,numlow; //獲取代碼運(yùn)行開始時(shí)cpu內(nèi)部計(jì)數(shù)器的值 __asm { RDTSC mov HighStart, edx mov LowStart, eax } for(int i= 0; i<100000; i++ ) { for(int i= 0; i<100000; i++ ) { } } |
|