Various small tools
compute_MHZ.c source
Project updated · 3 August 2008
#include <stdio.h>
#include <sys/time.h>
__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;
}