blob: 7983b824d912a7171230740be945a1d797139a43 (
plain)
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
|
// a fully instrumented demo: built with -finstrument-functions so EVERY function
// here is traced automatically, no hand-picking. kept in plain C with only
// printf and nanosleep so the trace is exactly these functions
#include <stdio.h>
#include <time.h>
static void nap(long ms)
{
struct timespec ts = { ms / 1000, (ms % 1000) * 1000000L };
nanosleep(&ts, NULL);
}
static long leaf(int n)
{
long total = 0;
for (int i = 0; i < n * 40000; ++i)
total += i % 7;
return total;
}
static long inner(int round)
{
long total = 0;
for (int i = 1; i <= 3; ++i)
total += leaf(round % 4 + i);
return total;
}
static long outer(int round)
{
const long a = inner(round);
nap(20);
const long b = inner(round + 1);
return a + b;
}
int main(void)
{
for (int round = 0; round < 15; ++round)
{
const long result = outer(round);
printf("round %d -> %ld\n", round, result);
fflush(stdout);
nap(120);
}
puts("done");
return 0;
}
|