2012-01-16 2 views
3

Я использую следующую функцию в моем коде:каст Linux: о RDTSC

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

ли эта функция возвращает количество тиков с момента последней загрузки? Где я могу найти документацию об этой функции?

+1

Вы попробовали руководства Intel? http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html –

+1

Также простой поиск в Википедии дает это - http://en.wikipedia.org/wiki/ Time_Stamp_Counter – mattjgalloway

ответ

1

RDTSC получает количество циклов процессора с момента последнего сброса, см. wikipedia.

Процессор Intel Instruction Set Руководство Том 2A & В, в качестве более надежного источника:

Процессор монотонно увеличивает временный штамп счетчика MSR каждый тактовый цикл и сбрасывает его в 0, когда процессор будет сброшен , См. «Счетчик временных меток» в главе 16 Руководства разработчика программного обеспечения по архитектуре Intel® 64 и IA-32, том 3B, для конкретных деталей поведения счетчика времени.

как примечание стороны, вы не должны испускать байт, а использовать фактические мнемоников RTDSC инструкции, делает его гораздо более удобным для чтения.

+0

Меня тоже удивил способ «.byte» сделать это, но он, кажется, снят отсюда - http://www.mcs.anl.gov/~kazutomo/rdtsc.html. Интересно, почему они так делают? – mattjgalloway

+0

@mattjgalloway: Я помню, что старые встроенные ассемблеры иногда требовали встроенного байтового излучения, потому что они не признавали мнемонику, что было ДЛИННО назад, нет никакого другого преимущества, кроме путаницы читателя. – Necrolis

+0

Yeh, который имел бы смысл :-) , – mattjgalloway