X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/loba-papers.git/blobdiff_plain/11a214bdac1c00f5f5f8ed9ff672afdb27a23b7d..ed88631cce8e6737ba146dd0a98914baa97ee29c:/supercomp11/supercomp11.tex

diff --git a/supercomp11/supercomp11.tex b/supercomp11/supercomp11.tex
index 0479906..a566b8a 100644
--- a/supercomp11/supercomp11.tex
+++ b/supercomp11/supercomp11.tex
@@ -178,7 +178,40 @@ condition or with a weaker condition.
 \section{Best effort strategy}
 \label{Best-effort}
 
+\textbf{Ã traduire} Ordonne les voisins du moins chargÃ© au plus chargÃ©.
+Trouve ensuite, en les prenant dans ce ordre, le nombre maximal de
+voisins tels que tous ont une charge infÃ©rieure Ã  la moyenne des
+charges des voisins sÃ©lectionnÃ©s, et de soi-mÃªme.
 
+Les transferts de charge sont ensuite fait en visant cette moyenne pour
+tous les voisins sÃ©lectionnÃ©s.  On envoie une quantitÃ© de charge Ã©gale
+Ã  (moyenne - charge\_du\_voisin).
+
+~\\\textbf{Question} faut-il dÃ©crire les stratÃ©gies makhoul et simple ?
+
+\paragraph{simple} Tentative de respecter simplement les conditions de Bertsekas.
+Parmi les voisins moins chargÃ©s que soi, on sÃ©lectionne :
+\begin{itemize}
+\item un des moins chargÃ©s (vmin) ;
+\item un des plus chargÃ©s (vmax),
+\end{itemize}
+puis on Ã©quilibre avec vmin en s'assurant que notre charge reste
+toujours supÃ©rieure Ã  celle de vmin et Ã  celle de vmax.
+
+On envoie donc (avec "self" pour soi-mÃªme) :
+\[
+    \min\left(\frac{load(self) - load(vmin)}{2}, load(self) - load(vmax)\right)
+\]
+
+\paragraph{makhoul} Ordonne les voisins du moins chargÃ© au plus chargÃ©
+puis calcule les diffÃ©rences de charge entre soi-mÃªme et chacun des
+voisins.
+
+Ensuite, pour chaque voisin, dans l'ordre, et tant qu'on reste plus
+chargÃ© que le voisin en question, on lui envoie 1/(N+1) de la
+diffÃ©rence calculÃ©e au dÃ©part, avec N le nombre de voisins.
+
+C'est l'algorithme~2 dans~\cite{bahi+giersch+makhoul.2008.scalable}.
 
 \section{Virtual load}
 \label{Virtual load}
@@ -195,6 +228,63 @@ results of the simulations are presented in section~\ref{Results}.
 \subsection{Simulation model}
 \label{Sim model}
 
+\begin{verbatim}
+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
+    | sleep a bit if we are looping too fast
+    +-
+    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
+  ---------------------
+
+    Loop
+    | call load-balancing algorithm
+    | send ctrl messages
+    | sleep (min_lb_iter_duration)
+    | receive ctrl messages
+    +-
+    send CLOSE on ctrl for all neighbors
+    wait for CLOSE on ctrl from all neighbors
+
+  The loop terminates when process::still_running() returns false.
+  (read the source for full details...)
+\end{verbatim}
+
 \subsection{Validation of our approaches}
 \label{Results}
 
