利用程序計算cpu的頻率

 #include


static unsigned cyc_hi=0;
static unsigned cyc_lo=0;

void access_counter(unsigned *hi,unsigned *lo)
{
asm("rdtsc;movl %%edx,%0;movl %%eax,%1"
     : "=r" (*hi), "=r" (*lo)
     : /* No Input*/     
     : "%edx","%eax");

}

void start_counter(){
access_counter(&cyc_hi,&cyc_lo);

}

double get_counter()
{
unsigned ncyc_hi,ncyc_lo;
unsigned hi,lo,borrow;
double result;
access_counter(&ncyc_hi,&ncyc_lo);
lo=ncyc_lo-cyc_lo;
borrow=lo>ncyc_lo;
hi=ncyc_hi-cyc_hi-borrow;
result=(double)hi*(1<<30)*4+lo;
return result;
}

main(){

double rate;
int sleeptime=1;
start_counter();
sleep(sleeptime);
rate=get_counter()/(1e6*sleeptime);
printf("cpu frequency is %fMHZ/n",rate);


}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章