]> AND Private Git Repository - loba.git/blobdiff - README
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
Do not import full std::tr1 namespace.
[loba.git] / README
diff --git a/README b/README
index db47b28872728d02432899de5b1f9b645dc7454f..d34cb4bf903697082eabe3d3d8a25e7fe9b7408c 100644 (file)
--- a/README
+++ b/README
@@ -1,3 +1,14 @@
+Contenu
+=======
+* Compilation de SimGrid
+* Compilation...
+* Utilisation
+* Communications
+* Pour ajouter un nouvel algorithme d'équilibrage
+* Pour ajouter une nouvelle option au programme
+* Liste des fichiers
+----------------------------------------------------------------------
+
 Compilation de SimGrid
 ======================
 
 Compilation de SimGrid
 ======================
 
@@ -15,18 +26,92 @@ d'installation de SimGrid (par ex. /usr/local).
 Utilisation
 ===========
 
 Utilisation
 ===========
 
-Pour avoir l'aide en ligne :
-$ ./loba -hhh
+Idée générale : on dispose d'une plate-forme (décrite dans le fichier
+XML qui va bien), et on déploie dessus une application.  La notion de
+voisinage entre les processus est *liée à l'application*.  Il faut
+évidemment que la plate-forme sous-jacente autorise les communications
+entre voisins...
+
+Pour avoir l'aide en ligne sur les différents paramètres :
+    $ ./loba -h                 (ou -hh, ou -hhh, pour plus de détails)
 
 Pour changer le niveau de détail des affichages :
         --log=category.thres:level
     avec
         category : simu, main, depl, comm, proc, loba
     et
 
 Pour changer le niveau de détail des affichages :
         --log=category.thres:level
     avec
         category : simu, main, depl, comm, proc, loba
     et
-        level : trace, debug, verbose, info, warning, error, critical
+           level : trace, debug, verbose, info, warning, error, critical
+
+Pour plus de détail sur les options de logging :
+    http://simgrid.gforge.inria.fr/doc/group__XBT__log.html#log_use
+
+Communications
+==============
+
+Pour communiquer, chaque processus écoute sur 2 mailboxes (sortes de
+ports) :
+  - une pour les message de contrôle ;
+  - une pour les transferts de charge.
+
+Ceci afin d'éviter de bloquer les échanges d'information pendant un
+transfert de charge.
+
+À la fin, chaque processus envoie un message "CLOSE" à tous ses
+voisins (sur chaque mailbox), et attends d'avoir reçu deux messages par
+voisin (un sur chaque mailbox).
+
+Ceci permet de synchroniser les processus à la terminaison (ça, à la
+rigueur, on s'en fout un peu), et surtout de s'assurer qu'il n'y a
+plus de communication qui « traîne » dans les canaux.
+
+Cela permet aussi de ne pas réarmer les communications non bloquantes
+qu'on ne sait pas annuler proprement (un manque dans SimGrid).
+
+Il ne faut bien sûr plus envoyer de message après avoir envoyé un
+"CLOSE".
+
+Attention : lors du déploiement de l'application, il faut s'assurer que
+la relation de voisinage est symétrique !
+*Ce n'est pas vérifié par le programme.*
+
+Pour ajouter un nouvel algorithme d'équilibrage
+===============================================
+
+1. Imiter ce qui est fait pour loba_simple :
+   - définir une nouvelle classe dérivant de process
+   - attention, il faut construire le process explicitement
+   - redéfinir la méthode load_balance qui :
+     - reçoit en paramètre la charge à prendre en compte ;
+     - peut utiliser et éventuellement réordonner le tableau process::pneigh ;
+     - peut récupérer l'information de charge d'un voisin avec
+           pneigh[i]->get_load() ;
+     - définit la charge à envoyer avec
+           pneigh[i]->set_to_send(quantité) ;
+     - retourne la somme des quantités définies avec set_to_send, 
+       éventuellement à l'aide de la méthode process::sum_of_to_send()
+       qui clacule cette somme.
+
+2. Ajouter l'algorithme dans la liste des options.  Dans options.cpp :
+   - faire le #include adéquat ;
+   - ajouter une ligne NOL_INSERT(...) dans la liste existante
+     (dans loba_algorithms_type::loba_algorithms_type()).
+
+Pour ajouter une nouvelle option au programme
+=============================================
+
+1. Ajouter une variable, déclarée dans options.h et définie dans options.cpp
+   (classement plus ou moins thématique).
+
+2. Toujours dans options.cpp, il faut :
+   - compléter la fonction opt::parse_args(), normalement le 3e paramètre à
+     getopt() et le switch..case qui suit (garder l'ordre alphabétique) ;
+   - compléter la fonction opt::print() (avec le même ordre que en 1.) ;
+   - compléter la fonction opt::usage() (avec le même ordre que en 1.).
+
+3. Utiliser la nouvelle variable au(x) bon(s) endroit(s) !
 
 
-Fichiers
-========
+Liste de fichiers
+=================
 
 * fichiers de description de plates-formes
 
 
 * fichiers de description de plates-formes
 
@@ -53,8 +138,8 @@ Fichiers
     hostdata.h                  gestion des boites de réception, par hôte
     hostdata.cpp
 
     hostdata.h                  gestion des boites de réception, par hôte
     hostdata.cpp
 
-    loba_simple.h               load-balancing simple (à copier pour ajouter
-    loba_simple.cpp             d'autres algorithmes)
+    loba_simple.h               équilibrage simple
+    loba_simple.cpp             (à imiter pour ajouter d'autres algorithmes)
 
     main.cpp                    le programme principal
 
 
     main.cpp                    le programme principal
 
@@ -62,7 +147,7 @@ Fichiers
     misc.cpp
 
     named_object_list.h         gestion d'une table de constructeurs
     misc.cpp
 
     named_object_list.h         gestion d'une table de constructeurs
-                                avec des noms et des descritpions
+                                avec des noms et des descriptions
 
     neighbor.h                  un voisin pour un processus
     neighbor.cpp
 
     neighbor.h                  un voisin pour un processus
     neighbor.cpp