]>
vgcfreebox.myrthtech.pt Git - ue-pp-terminationdetectionalgorithm.git/blob - util.c
f7fdbfaa401399985412734514a69e62d496e811
2 Parallel Programming - 2026/2027
13 // controls the output of debugging messages, set to 1 to have no
18 // returns a random integer in [A,B]
19 int rand_ab(int a
, int b
)
21 return a
+ rand() % (b
- a
+ 1);
24 // sleep between MIN and MAX ms
25 void rand_sleep(int min
, int max
)
27 int ms
= rand_ab(min
, max
);
28 struct timespec ts
= { ms
/ 1000, (ms
% 1000) * 1000 };
33 // output a debugging message to stderr
34 void trace(char *format
, ...)
41 va_start (args
, format
);
42 vfprintf(stderr
, format
, args
);
46 // unconditionally output a message to stderr
47 void warn(char *format
, ...)
51 va_start (args
, format
);
52 vfprintf(stderr
, format
, args
);
57 Evaluates Rule C & D of Dijkstra-Scholten. Caller must already hold state_mutex!
59 static void try_resolve_tree(int my_id
)
61 if (state
== PASSIVE_STATE
&& deficit
== 0)
64 // Root is passive and deficit is 0 -> Global Termination!
70 control_message_t sig
= {0};
71 // Send acknowledgment signal up the tree to our parent
72 MPI_Send(&sig
, sizeof(control_message_t
), MPI_BYTE
, parent
,
73 CONTROL_SIGNAL
, MPI_COMM_WORLD
);
75 trace("%d: [CONTROL] Sent tree-signal to parent %d\n", my_id
, parent
);
76 parent
= -1; // Detach from tree