diff options
Diffstat (limited to 'cacheRows.c')
-rw-r--r-- | cacheRows.c | 37 |
1 files changed, 30 insertions, 7 deletions
diff --git a/cacheRows.c b/cacheRows.c index 0111018..6791257 100644 --- a/cacheRows.c +++ b/cacheRows.c @@ -2,15 +2,28 @@ #include "inlineasm.h" #include <stdlib.h> -#define MEASURE_METHOD memmeasure +#define MEASURE_METHOD doMeasure +#define RUNS 10000 #define MIN_OFFSET 1 -#define MAX_OFFSET 4096 +#define MAX_OFFSET 128 #define OFFSETS (MAX_OFFSET - MIN_OFFSET) #define FIELD_TYPE uint8_t +uint64_t doMeasure(FIELD_TYPE *addr){ + uint64_t volatile time = 0; + + FIELD_TYPE value = (FIELD_TYPE) &addr; + + time = rdtsc(); + *addr = value; + time = rdtsc() - time; + + return time; +} + void measure(int offset,FIELD_TYPE *field){ - uint64_t *res = malloc(sizeof(uint64_t)*MAX_OFFSET); - void *lowerAddress = field + offset; + FIELD_TYPE *lowerAddress = field + offset; + *lowerAddress = 0; int i; int a = field[0]; @@ -18,20 +31,30 @@ void measure(int offset,FIELD_TYPE *field){ res[i] = MEASURE_METHOD(lowerAddress,res[i]*sizeof(FIELD_TYPE)); } - for(i=MIN_OFFSET;i <= MAX_OFFSET;i++){ - fprintf(stdout,"%d %lld \r\n",i,res[i]); + for(i=MIN_OFFSET;i <= MAX_OFFSET;i += 8){ + uint64_t time = MEASURE_METHOD(lowerAddress+i); + if(time > 70) + fprintf(stdout,"%d %ld \r\n",i,time); } } + + int main(int argc, char* argv[]) { //uint64_t *results = malloc(sizeof(uint64_t)*RUNS*OFFSETS); FIELD_TYPE *field = malloc(sizeof(FIELD_TYPE)*(MAX_OFFSET+1)); + + int i=0; - measure(0,field); + //for(i=0;i < RUNS;i++){ + //fprintf(stdout,"RUN: %d \r\n",i); + //} + measure(0,field); + return 0; } |