diff options
Diffstat (limited to 'cacheSize.c')
-rw-r--r-- | cacheSize.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/cacheSize.c b/cacheSize.c new file mode 100644 index 0000000..2949df9 --- /dev/null +++ b/cacheSize.c @@ -0,0 +1,55 @@ +#include <stdio.h> +#include "inlineasm.h" +#include <stdlib.h> + +#define MEASURE_METHOD doMeasure +#define RUNS 10000 +#define MIN_OFFSET 1 +#define MAX_OFFSET (32*4069) +#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){ + FIELD_TYPE *lowerAddress = field + offset; + *lowerAddress = 0; + int i; + + for(i=MIN_OFFSET;i <= MAX_OFFSET;i += 32){ + uint64_t time = MEASURE_METHOD(lowerAddress+i); + if(time > 500) + 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; + + //for(i=0;i < RUNS;i++){ + //fprintf(stdout,"RUN: %d \r\n",i); + //} + + + measure(0,field); + + return 0; +} + |