112c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo// Some work exercising the cache simulator 212c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo// with a simple call graph 312c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo 412c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo#include "../callgrind.h" 512c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo 612c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo#include <stdio.h> 712c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo#include <stdlib.h> 812c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo 912c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo#define SIZE 100000 1012c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo 1112c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendodouble *a, *b, *c; 1212c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo 1312c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendovoid init() 1412c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo{ 1512c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo int i; 1612c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo for(i = 0; i< SIZE; i++) a[i] = b[i] = 1.0; 1712c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo} 1812c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo 1912c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendovoid do_add() 2012c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo{ 2112c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo int i; 2212c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo for(i = 0; i< SIZE; i++) { 2312c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo a[i] += 1.0; 2412c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo c[i] = a[i] + b[i]; 2512c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo } 2612c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo} 2712c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo 2812c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendodouble do_sum() 2912c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo{ 3012c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo int i; 3112c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo double sum=0.0; 3212c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo 3312c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo do_add(); 3412c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo for(i = 0; i< SIZE; i++) sum += c[i]; 3512c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo 3612c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo return sum; 3712c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo} 3812c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo 3912c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendodouble do_some_work(int iter) 4012c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo{ 4112c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo double sum=0.0; 4212c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo 4312c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo if (iter > 0) sum += do_some_work(iter-1); 4412c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo do_add(); 4512c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo sum += do_sum(); 4612c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo 4712c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo return sum; 4812c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo} 4912c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo 5012c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendoint main(void) 5112c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo{ 5212c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo double res; 5312c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo 5412c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo a = (double*) malloc(SIZE * sizeof(double)); 5512c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo b = (double*) malloc(SIZE * sizeof(double)); 5612c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo c = (double*) malloc(SIZE * sizeof(double)); 5712c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo 5812c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo CALLGRIND_ZERO_STATS; 5912c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo init(); 6012c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo res = do_some_work(1); 6112c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo CALLGRIND_DUMP_STATS; 6212c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo 6312c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo printf("Sum: %.0f\n", res); 6412c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo return RUNNING_ON_VALGRIND; 6512c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo} 6612c73f1d177d9edcdb3edfdc3ec29010f3bcd617weidendo 67