Opteron 2200 series: nothing: 9 cycles locked add: 9 cycles cpuid: 68 cycles Phenom: nothing: 115 cycles locked add: 143 cycles cpuid: 221 cycles Opteron 275: nothing: 8 cycles locked add: 6 cycles cpuid: 61 cycles Intel Xeon Woodcrest: nothing: 60 cycles locked add: 72 cycles cpuid: 264 cycles Intel Core2Duo: nothing: 63 cycles locked add: 72 cycles cpuid: 288 cycles - code - #include #include #include #define rdtsc(low) \ __asm__ __volatile__("rdtsc" : "=a" (low) : : "edx") #define TIME(x,y) \ min = 100000; \ for (i = 0; i < 1000; i++) { \ unsigned long start,end; \ rdtsc(start); \ x; \ rdtsc(end); \ end -= start; \ if (end < min) \ min = end; \ } \ printf(y ": %d cycles\n", min); #define LOCK asm volatile("lock ; addl $0,0(%esp)") #define CPUID asm volatile("cpuid": : :"ax", "dx", "cx", "bx") int main() { struct timeval tvstart, tvstop; unsigned long min; int i; TIME(/* */, "nothing:"); TIME(LOCK, "locked add:"); TIME(CPUID, "cpuid:"); }