Как этот код вычисляет количество прошедших циклов ЦП?

Взято из этого потока SO , этот фрагмент кода вычисляет количество циклов процессора, прошедших выполнение кода между строками // 1 и // 2 .

$ cat cyc.c 
#include

static __inline__ unsigned long long rdtsc(void)
{
  unsigned long long int x;
     __asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
     return x;
}

int main() {
    unsigned long long cycles = rdtsc(); //1
    cycles = rdtsc() - cycles;           //2
    printf("Time is %d\n", (unsigned)cycles);
    return 0;
}

$ gcc cyc.c -o cyc
$ ./cyc
Time is 73
$ ./cyc
Time is 74
$ ./cyc
Time is 63
$ ./cyc
Time is 73
$

Как работает функция rdtsc () ?

10
задан Community 23 May 2017 в 12:33
поделиться