#include #include __inline__ unsigned long long int rdtsc() { unsigned long long int x; __asm__ volatile (".byte 0x0f, 0x31" : "=A" (x)); return x; } int main () { struct timezone tz; struct timeval tvstart, tvstop; unsigned long long int cycles[2]; /* gotta be 64 bit */ unsigned int microseconds; /* total time taken */ bzero(&tz, sizeof(tz)); /* Load this function a cached memory. */ gettimeofday(&tvstart, &tz); /* Read TSC for the first time and get timestamp. */ cycles[0] = rdtsc(); gettimeofday(&tvstart, &tz); /* We don't trust that this is any specific length of time. We don't even care how long time we'll sleep. */ sleep(1); /* Read TSC for the second time and get timestamp. */ cycles[1] = rdtsc(); gettimeofday(&tvstop, &tz); /* Compute the frequency. */ microseconds = ((tvstop.tv_sec-tvstart.tv_sec)*1000000) + (tvstop.tv_usec-tvstart.tv_usec); printf("%f MHz processor.\n", (float)(cycles[1]-cycles[0])/microseconds); return 0; }