다음 C 파일에서 rdtsc()를 사용하여 C에서 rdtsc()를 사용하는 방법을 보여줍니다. 64 비트 버전과 32 비트 버전 모두 조건부 컴파일이 있습니다. 아래와 같이 이상한 값을 나타내는 timestampcounter를 읽는 중
#include <stdio.h>
#ifdef X86_64
static inline unsigned long long tick()
{
unsigned long low, high;
__asm__ __volatile__("rdtsc" : "=a" (low), "=d" (high));
return ((unsigned long long)high << 32) | low);
}
#else
static inline unsigned long long tick()
{
unsigned long long d;
__asm__ __volatile__ ("rdtsc" : "=A" (d));
return d;
}
#endif
int main()
{
long long res;
volatile int a = 1;
volatile int b = 3;
volatile int c = 0;
res=tick();
c = (a + b)*11000;
res=tick()-res;
printf("ticks %lld",res);
return 0;
}
난 껍질에서 루프에서 상기 프로그램을 실행.
for i in {1..10} ; do { ./a.out ; printf "\n"; } ; done
출력은 다음과 같습니다.
ticks 96
ticks 108
ticks 8698
ticks 8613
ticks 108
ticks 84
ticks 96
ticks 108
ticks 96
ticks 96
이후 같은 작업입니다은 아무 말 확실히 내가 값이 차이를 설명 할 urniform.How 값이 더 많은 것으로 예상되는?
멀티 태스킹. 귀하의 프로세스가 시스템상의 유일한 프로세스는 아닙니다. –
잠깐, 32 비트를 컴파일 할 때'X86_64'가 정의 되었습니까? – Medinoc
어떻게 이러한 3 가지 지침을 쉽게 잠 그어 이것이 일어나지 않는지 확인하십시오. – liv2hak