0
clflush() 지침을 사용하는 방법을 알려주시겠습니까? 필자는 다음과 같은 간단한 코드를 작성하여 캐시에서 변수를 읽는 시간과 캐시에서 변수를 읽은 시간 간의 차이를 측정했습니다. 그러나 나는 결정적인 결과를 찾지 못했습니다. clflush()를 사용하여 캐시를 제거하는 올바른 방법은 무엇입니까?CLFLUSH() 문제?
#include <stdio.h>
#include <stdint.h>
#include"cpucycles.c"
#define REPEAT 1900000
inline void clflush(volatile void *p)
{
asm volatile ("clflush (%0)" :: "r"(p));
}
inline uint64_t rdtsc()
{
unsigned long a, d;
asm volatile ("cpuid; rdtsc" : "=a" (a), "=d" (d) : : "ebx", "ecx");
return a | ((uint64_t)d << 32);
}
volatile int i;
inline void test()
{
uint64_t start, end,clock;
volatile int j;
long int rep;
int k;
clock=0;
for(rep=0;rep<REPEAT;rep++){
start = rdtsc();
j = i+1;
end = rdtsc();
clock=clock+(end-start);
k=j;
}
printf("took %lu ticks\n", clock);
}
inline void testflush()
{
uint64_t start, end,clock;
volatile int j;
int k;
long int rep;
clock=0;
for(rep=0;rep<REPEAT;rep++){
start = rdtsc();
j = i+1;
end = rdtsc();
clflush(&i);
clock=clock+(end-start);
k=j;
}
printf("took %lu ticks\n", clock);
}
int main(int ac, char **av)
{
i=5;
printf("------------------------------------------\n");
test();
printf("------------------------------------------\n");
testflush();
printf("------------------------------------------\n");
test();
return 0;
}
[clflush 사용 방법]의 가능한 복제본 (http://stackoverflow.com/questions/39448276/how-to-use-clflush) – Olaf