#include <stdio.h>
#include <sys/time.h>
#include <time.h>
#include <unistd.h>
double calc_cps();
inline unsigned long long int RDTSC(void);
int main(void)
{
int count=0;
double cpers=0;
clock_t t1,t2;
cpers = calc_cps();
count = 0;
t1 = clock();
while(1){ count++; if(count == 100000000) break; }
t2 = clock();
printf("TIMES: time of loop = %d clock, %lg[sec]\n",
t2-t1,(double)(t2-t1)/CLOCKS_PER_SEC);
printf("RDTSC: time of loop = %d clock, %lg[sec]\n",
t2-t1,(double)((t2-t1)/cpers));
return 0;
}
double calc_cps()
{
struct timeval tv1,tv2;
unsigned long long tsc1,tsc2;
gettimeofday(&tv2,NULL); tsc2=RDTSC();
usleep(250);
gettimeofday(&tv1,NULL); tsc1=RDTSC();
return (double)(tsc1-tsc2) /
((tv1.tv_sec-tv2.tv_sec)*1000000+(tv1.tv_usec-tv2.tv_usec));
}
inline unsigned long long int RDTSC(void)
{
unsigned int h,l;
__asm__(".byte 0x0f,0x31":"=a" (l),"=d" (h));
return ((unsigned long long int)h<<32)|l;
}
|