source: doc/theses/mike_brooks_MMath/benchmarks/list/observation.c@ 956299b

Last change on this file since 956299b was 2b01f8e, checked in by Mike Brooks <mlbrooks@…>, 2 years ago

Adjust LL perf to use a random layout of nodes in memory

  • Property mode set to 100644
File size: 3.2 KB
Line 
1#include <assert.h>
2
3#ifdef __needExternC
4#error Only compile observation.c (once) in plain C
5#endif
6
7#include <stdio.h>
8#include <sys/param.h>
9
10#include "observation.h"
11
12static int NumNodes;
13
14void bobs_init(int NumNodes_) {
15 // printf("at bobs_init; bobs_ops_completed = %zd\n", bobs_ops_completed);
16
17 // todo: register a signal handler that prints progress info
18 // note function bobs_XXX in driver.c are untested until that's working
19 // to be driven as:
20 // ./a.out & # then, very quickly
21 // kill -s USR2 $!
22
23 NumNodes = NumNodes_;
24}
25
26#ifdef BOBS_SHOW_ADDRESSES
27#define SNAP \
28 void * userAddr = bobs_getCurrentLoc(); \
29 int userValue = bobs_getCurrentVal();
30#define SHOW(pfx, sfx) \
31 printf(" " pfx "%d@%p" sfx, userValue, userAddr);
32#else
33#define SNAP \
34 int userValue = bobs_getCurrentVal();
35#define SHOW(pfx, sfx) \
36 printf(" " pfx "%d" sfx, userValue);
37#endif
38
39static void printPreds(unsigned int leash) {
40 if (leash==0)
41 return;
42 if (!bobs_hasCurrent()) {
43 printf(" |");
44 return;
45 }
46 SNAP
47 bobs_movePrev();
48 printPreds(leash - 1);
49 SHOW("", "")
50}
51static void printSuccs(unsigned int leash) {
52 if (leash==0)
53 return;
54 if (!bobs_hasCurrent()) {
55 printf(" |");
56 return;
57 }
58 SNAP
59 SHOW("", "")
60 bobs_moveNext();
61 printSuccs(leash - 1);
62}
63static void explore(int here) {
64 bobs_seek(here);
65 if (!bobs_hasCurrent()) {
66 printf(" <X>");
67 return;
68 }
69 bobs_movePrev();
70 printPreds(2);
71
72 bobs_seek(here);
73 SNAP
74 SHOW("<", ">")
75
76 bobs_moveNext();
77 printSuccs(2);
78}
79static void exploreRange(int validFrom, int validTo) {
80 int gapsize = validTo - validFrom;
81 int midpoint = (validTo + validFrom) / 2;
82
83 int listFirstmost, listLastmost;
84 switch(bobs_op_polarity) {
85 case insfirst:
86 listFirstmost = validTo;
87 listLastmost = validFrom;
88 break;
89 case inslast:
90 listFirstmost = validFrom;
91 listLastmost = validTo;
92 break;
93 default:
94 assert(0 && "unsupported bobs_op_movement value");
95 }
96
97 explore(listFirstmost);
98 printf(" ...");
99 if (gapsize > 5) {
100 explore(midpoint);
101 printf(" ...");
102 }
103 explore(listLastmost);
104}
105
106void bobs_report(void) {
107 if (bobs_prog_rollover_flag) {
108 printf("%8zd + ? (rolling over)\n", bobs_ops_completed);
109 } else {
110 printf("%8zd + %6d/2 + %6d/2", bobs_ops_completed, bobs_prog_inserting, bobs_prog_removing);
111
112 int validFrom, validTo;
113 switch(bobs_op_movement) {
114 case stack:
115 validFrom = 0;
116 validTo = MIN((signed)bobs_prog_inserting-1, (signed)NumNodes - (signed)bobs_prog_removing - 1);
117 break;
118 case queue:
119 validFrom = (signed)bobs_prog_removing;
120 validTo = (signed)bobs_prog_inserting-1;
121 break;
122 default:
123 assert(0 && "unsupported bobs_op_movement value");
124 }
125
126 printf(" ");
127
128 if (validTo < validFrom) {
129 printf(" (list is empty)");
130 } else {
131 exploreRange(validFrom, validTo);
132 }
133
134 printf("\n");
135 }
136}
Note: See TracBrowser for help on using the repository browser.