mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-12 10:26:21 +00:00
67 lines
956 B
C
67 lines
956 B
C
// Some work exercising the cache simulator
|
|
// with a simple call graph
|
|
|
|
#include "../callgrind.h"
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
#define SIZE 100000
|
|
|
|
double *a, *b, *c;
|
|
|
|
void init()
|
|
{
|
|
int i;
|
|
for(i = 0; i< SIZE; i++) a[i] = b[i] = 1.0;
|
|
}
|
|
|
|
void do_add()
|
|
{
|
|
int i;
|
|
for(i = 0; i< SIZE; i++) {
|
|
a[i] += 1.0;
|
|
c[i] = a[i] + b[i];
|
|
}
|
|
}
|
|
|
|
double do_sum()
|
|
{
|
|
int i;
|
|
double sum=0.0;
|
|
|
|
do_add();
|
|
for(i = 0; i< SIZE; i++) sum += c[i];
|
|
|
|
return sum;
|
|
}
|
|
|
|
double do_some_work(int iter)
|
|
{
|
|
double sum=0.0;
|
|
|
|
if (iter > 0) sum += do_some_work(iter-1);
|
|
do_add();
|
|
sum += do_sum();
|
|
|
|
return sum;
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
double res;
|
|
|
|
a = (double*) malloc(SIZE * sizeof(double));
|
|
b = (double*) malloc(SIZE * sizeof(double));
|
|
c = (double*) malloc(SIZE * sizeof(double));
|
|
|
|
CALLGRIND_ZERO_STATS;
|
|
init();
|
|
res = do_some_work(1);
|
|
CALLGRIND_DUMP_STATS;
|
|
|
|
printf("Sum: %.0f\n", res);
|
|
return RUNNING_ON_VALGRIND;
|
|
}
|
|
|