-Process parameters:
+Process parameters
+==================
- initial_load [neighbors...]
+The process parameters are: initial_load [neighbors...]
-Communications:
- - two channels per host: control and data
+Communications
+==============
+
+There are two receiving channels per host: control for information
+messages, and data for load transfers.
Process model
+=============
+
+Each process is made of 3 threads: a receiver thread, a computing
+thread, and a load-balancer thread.
+
+* Receiver thread
+ ---------------
+
+ Loop
+ | wait for a message to come, either on data channel, or on ctrl channel
+ | push received message in a buffer of received messages
+ | -> ctrl messages on the one side
+ | -> data messages on the other side
+ +-
+
+ The loop terminates when a "finalize" message is received on each
+ channel.
+
+* Computing thread
+ ----------------
+
+ Loop
+ | if we received some real load, get it (data messages)
+ | if there is some real load to send, send it
+ | if we own some load, simulate some computing on it
+ +-
+ send CLOSE on data for all neighbors
+ wait for CLOSE on data from all neighbors
+
+ The loop terminates when process::still_running() returns false.
+ (read the source for full details...)
+
+* Load-balancing thread
+ ---------------------
- while (there is something to do) {
- compute some task;
- get received tasks;
- compute load balancing;
- send tasks to neighbors;
- }
+ Loop
+ | call load-balancing algorithm
+ | send ctrl messages
+ | receive ctrl messages
+ +-
+ send CLOSE on ctrl for all neighbors
+ wait for CLOSE on ctrl from all neighbors
- * Open Questions :
- - definition of load on heterogeneous hosts?
- - how to detect convergence?
- : No need to detect convergence. Computation stops when there
- nothing more to do.
+ The loop terminates when process::still_running() returns false.
+ (read the source for full details...)
- - how to manage link failures?
+Open questions
+==============
+ * definition of load on heterogeneous hosts?
+ * how to detect convergence?
+ : No need to detect convergence. Computation stops when there
+ nothing more to do.
+ * how to manage link failures?
-* faire un autre thread pour les envois d'infos
- -> c'est stupide d'attendre la fin des calcules s'il y en a beaucoup
- surtout en bookkeeping...
-
* review receive with timeout.
* verify bookkeeping version.
* add options -j/-J : minimum number of iterations?
+* add options -f/-F : termination based on flops achieved?
+
* add a variant to (not) change neighbor load information at send?
* implement loba_* algorithms (start with some trivial one)