summaryrefslogtreecommitdiffstats
path: root/cacheSize.c
diff options
context:
space:
mode:
Diffstat (limited to 'cacheSize.c')
-rw-r--r--cacheSize.c55
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;
+}
+