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

Private GIT Repository
Distinguish lb_iter and comp_iter.
[loba.git] / README
1 Contenu
2 =======
3 * Compilation de SimGrid
4 * Compilation...
5 * Utilisation
6 * Communications
7 * Pour ajouter un nouvel algorithme d'équilibrage
8 * Pour ajouter une nouvelle option au programme
9 * Liste des fichiers
10 ----------------------------------------------------------------------
11
12 Compilation de SimGrid
13 ======================
14
15 Dans les sources :
16         $ cmake -D CMAKE_INSTALL_PREFIX=/usr/local      # par exemple
17         $ make
18         $ make install
19
20 Compilation...
21 ==============
22
23 Il faut avoir un lien "simgrid-stable" vers le répertoire
24 d'installation de SimGrid (par ex. /usr/local).
25
26 Utilisation
27 ===========
28
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
33 entre voisins...
34
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)
37
38 Pour changer le niveau de détail des affichages :
39         --log=category.thres:level
40     avec
41         category : simu, main, depl, comm, proc, loba
42     et
43            level : trace, debug, verbose, info, warning, error, critical
44
45 Pour plus de détail sur les options de logging :
46     http://simgrid.gforge.inria.fr/doc/group__XBT__log.html#log_use
47
48 Communications
49 ==============
50
51 Pour communiquer, chaque processus écoute sur 2 mailboxes (sortes de
52 ports) :
53   - une pour les message de contrôle ;
54   - une pour les transferts de charge.
55
56 Ceci afin d'éviter de bloquer les échanges d'information pendant un
57 transfert de charge.
58
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).
62
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.
66
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).
69
70 Il ne faut bien sûr plus envoyer de message après avoir envoyé un
71 "CLOSE".
72
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.*
76
77 Pour ajouter un nouvel algorithme d'équilibrage
78 ===============================================
79
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.
93
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()).
98
99 Pour ajouter une nouvelle option au programme
100 =============================================
101
102 1. Ajouter une variable, déclarée dans options.h et définie dans options.cpp
103    (classement plus ou moins thématique).
104
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.).
110
111 3. Utiliser la nouvelle variable au(x) bon(s) endroit(s) !
112
113 Liste de fichiers
114 =================
115
116 * fichiers de description de plates-formes
117
118     Plat.xml
119     cluster1000.xml
120     platform.xml
121
122 * fichiers de description de déploiement (tests)
123
124     Dep.xml                     à utiliser avec Plat.xml
125     deployment.xml              à utiliser avec platform.xml
126
127 * fichiers sources
128
129     communicator.h
130     communicator.cpp            la couche de communication
131
132     cost_func.h
133     cost_func.cpp               fonctions de coût pour comm_cost et comp_cost
134
135     deployment.h
136     deployment.cpp              génération automatique de déploiement
137
138     hostdata.h                  gestion des boites de réception, par hôte
139     hostdata.cpp
140
141     loba_simple.h               équilibrage simple
142     loba_simple.cpp             (à imiter pour ajouter d'autres algorithmes)
143
144     main.cpp                    le programme principal
145
146     misc.h                      divers trucs inclassables
147     misc.cpp
148
149     named_object_list.h         gestion d'une table de constructeurs
150                                 avec des noms et des descriptions
151
152     neighbor.h                  un voisin pour un processus
153     neighbor.cpp
154
155     options.h                   gestion des paramètres et options globaux
156     options.cpp
157
158     process.h                   classe de base pour un processus
159     process.cpp
160
161     simgrid_features.h          macros pour détecter la version de SimGrid
162
163     simple_async.cpp            un simple programme de test
164
165     timer.h                     gestion de timer
166
167     version.h                   gestion de la version du programme
168     version.cpp
169
170 * autres fichiers
171
172     .gitignore                  liste des fichiers ignorés par git
173     valgrind_suppressions_3.5   liste de quelques suppressions pour valgrind
174                                 avec SimGrid 3.5