3 * Compilation de SimGrid
7 * Pour ajouter un nouvel algorithme d'équilibrage
8 * Pour ajouter une nouvelle option au programme
10 ----------------------------------------------------------------------
12 Compilation de SimGrid
13 ======================
16 $ cmake -D CMAKE_INSTALL_PREFIX=/usr/local # par exemple
23 Il faut avoir un lien "simgrid-stable" vers le répertoire
24 d'installation de SimGrid (par ex. /usr/local).
29 Idée générale : on dispose d'une plate-forme (décrite dans le fichier
30 XML qui va bien), et on déploie dessus une application. La notion de
31 voisinage entre les processus est *liée à l'application*. Il faut
32 évidemment que la plate-forme sous-jacente autorise les communications
35 Pour avoir l'aide en ligne sur les différents paramètres :
36 $ ./loba -h (ou -hh, ou -hhh, pour plus de détails)
38 Pour changer le niveau de détail des affichages :
39 --log=category.thres:level
41 category : simu, main, depl, comm, proc, loba
43 level : trace, debug, verbose, info, warning, error, critical
45 Pour plus de détail sur les options de logging :
46 http://simgrid.gforge.inria.fr/doc/group__XBT__log.html#log_use
51 Pour communiquer, chaque processus écoute sur 2 mailboxes (sortes de
53 - une pour les message de contrôle ;
54 - une pour les transferts de charge.
56 Ceci afin d'éviter de bloquer les échanges d'information pendant un
59 À la fin, chaque processus envoie un message "CLOSE" à tous ses
60 voisins (sur chaque mailbox), et attends d'avoir reçu deux messages par
61 voisin (un sur chaque mailbox).
63 Ceci permet de synchroniser les processus à la terminaison (ça, à la
64 rigueur, on s'en fout un peu), et surtout de s'assurer qu'il n'y a
65 plus de communication qui « traîne » dans les canaux.
67 Cela permet aussi de ne pas réarmer les communications non bloquantes
68 qu'on ne sait pas annuler proprement (un manque dans SimGrid).
70 Il ne faut bien sûr plus envoyer de message après avoir envoyé un
73 Attention : lors du déploiement de l'application, il faut s'assurer que
74 la relation de voisinage est symétrique !
75 *Ce n'est pas vérifié par le programme.*
77 Pour ajouter un nouvel algorithme d'équilibrage
78 ===============================================
80 1. Imiter ce qui est fait pour loba_simple :
81 - définir une nouvelle classe dérivant de process
82 - attention, il faut construire le process explicitement
83 - redéfinir la méthode load_balance qui :
84 - reçoit en paramètre la charge à prendre en compte ;
85 - peut utiliser et éventuellement réordonner le tableau process::pneigh ;
86 - peut récupérer l'information de charge d'un voisin avec
87 pneigh[i]->get_load() ;
88 - définit la charge à envoyer avec
89 pneigh[i]->set_to_send(quantité) ;
90 - retourne la somme des quantités définies avec set_to_send,
91 éventuellement à l'aide de la méthode process::sum_of_to_send()
92 qui clacule cette somme.
94 2. Ajouter l'algorithme dans la liste des options. Dans options.cpp :
95 - faire le #include adéquat ;
96 - ajouter une ligne NOL_INSERT(...) dans la liste existante
97 (dans loba_algorithms_type::loba_algorithms_type()).
99 Pour ajouter une nouvelle option au programme
100 =============================================
102 1. Ajouter une variable, déclarée dans options.h et définie dans options.cpp
103 (classement plus ou moins thématique).
105 2. Toujours dans options.cpp, il faut :
106 - compléter la fonction opt::parse_args(), normalement le 3e paramètre à
107 getopt() et le switch..case qui suit (garder l'ordre alphabétique) ;
108 - compléter la fonction opt::print() (avec le même ordre que en 1.) ;
109 - compléter la fonction opt::usage() (avec le même ordre que en 1.).
111 3. Utiliser la nouvelle variable au(x) bon(s) endroit(s) !
116 * fichiers de description de plates-formes
122 * fichiers de description de déploiement (tests)
124 Dep.xml à utiliser avec Plat.xml
125 deployment.xml à utiliser avec platform.xml
130 communicator.cpp la couche de communication
133 cost_func.cpp fonctions de coût pour comm_cost et comp_cost
136 deployment.cpp génération automatique de déploiement
138 hostdata.h gestion des boites de réception, par hôte
141 loba_simple.h équilibrage simple
142 loba_simple.cpp (à imiter pour ajouter d'autres algorithmes)
144 main.cpp le programme principal
146 misc.h divers trucs inclassables
149 named_object_list.h gestion d'une table de constructeurs
150 avec des noms et des descriptions
152 neighbor.h un voisin pour un processus
155 options.h gestion des paramètres et options globaux
158 process.h classe de base pour un processus
161 simgrid_features.h macros pour détecter la version de SimGrid
163 simple_async.cpp un simple programme de test
165 timer.h gestion de timer
167 version.h gestion de la version du programme
172 .gitignore liste des fichiers ignorés par git
173 valgrind_suppressions_3.5 liste de quelques suppressions pour valgrind