File: simwork.c

package info (click to toggle)
valgrind 1%3A3.24.0-3
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 176,332 kB
  • sloc: ansic: 795,029; exp: 26,134; xml: 23,472; asm: 14,393; cpp: 9,397; makefile: 7,464; sh: 6,122; perl: 5,446; python: 1,498; javascript: 981; awk: 166; csh: 1
file content (66 lines) | stat: -rw-r--r-- 956 bytes parent folder | download | duplicates (12)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// 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;
}