From 95f51da71f1f8630c117025f901608b3f7158b97 Mon Sep 17 00:00:00 2001 From: Stefan Lankes Date: Tue, 3 May 2016 16:56:49 +0200 Subject: [PATCH] add cache warm-up for the first page access --- hermit/usr/benchmarks/basic.c | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/hermit/usr/benchmarks/basic.c b/hermit/usr/benchmarks/basic.c index d4f2d9b4e..f0f611031 100644 --- a/hermit/usr/benchmarks/basic.c +++ b/hermit/usr/benchmarks/basic.c @@ -57,17 +57,29 @@ void reschedule(void); #endif #define N 10000 -#define M (1024) +#define M (1024+1) #define BUFFSZ (1ULL*1024ULL*1024ULL) static char* buff[M]; +#if 0 inline static unsigned long long rdtsc(void) { unsigned long lo, hi; asm volatile ("rdtsc" : "=a"(lo), "=d"(hi) :: "memory"); return ((unsigned long long) hi << 32ULL | (unsigned long long) lo); } +#else +inline static unsigned long long rdtsc(void) +{ + unsigned int lo, hi; + unsigned int id; + + asm volatile ("rdtscp" : "=a"(lo), "=c"(id), "=d"(hi) :: "memory"); + + return ((unsigned long long)hi << 32ULL | (unsigned long long)lo); +} +#endif int main(int argc, char** argv) { @@ -78,8 +90,10 @@ int main(int argc, char** argv) printf("Determine systems performance\n\n"); + // cache warm-up ret = mygetpid(); ret = mygetpid(); + start = rdtsc(); for(i=0; i