]> AND Private Git Repository - these_charles_emile.git/blob - These_RCE.tex
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
RCE : Nouvelle version de la these
[these_charles_emile.git] / These_RCE.tex
1 %% Use the standard UP-methodology class
2 %% with French language.
3 %%
4 %% You may specify the option 'twoside' or 'oneside' for
5 %% the document.
6 %%
7 %% See the documentation tex-upmethodology on
8 %% http://www.arakhne.org/tex-upmethodology/
9 %% for details about the macros that are provided by the class and
10 %% to obtain the list of the packages that are already included. 
11  
12 \documentclass[french]{spimufcphdthesis}
13  
14 %%--------------------
15 %% The TeX code is entering with UTF8
16 %% character encoding (Linux and MacOS standards)
17 \usepackage[utf8]{inputenc}
18  
19 %%-------------------
20 %% You want to use the NatBib extension
21 %\usepackage[authoryear]{natbib}
22  
23 %%--------------------
24 %% Include the 'multibib' package to enable to
25 %% have different types of bibliographies in the
26 %% document (see at the end of this template for
27 %% an example with a personnal bibliography and
28 %% a general bibliography)
29 %%
30 %% Each bibliography defined with 'multibib'
31 %% adds a chapter with the corresponding
32 %% publications (in addition to the chapter for
33 %% the standard/general bibliography).
34 %% CAUTION:
35 %% There is no standard way to do include this type of
36 %% personnal bibliography.
37 %% We propose to use 'multibib' package to help you,
38 %% for example.
39 %\usepackage{multibib}
40  
41 %% Define a "type" of bibliography, here the PERSONAL one,
42 %% that is supported by 'multibib'.
43 %\newcites{PERSO}{Liste de mes publications}
44  
45 %% To cite one of your PERSONAL papers with the style
46 %% of the PERSONAL bibliography: \citePERSO{key}
47 %% To force to show one of your PERSONAL papers into
48 %% the PERSONAL bibliography, even if not cited in the
49 %% text: \nocitePERSO{key}
50  
51 %% REMARK: When you are using 'multibib', you
52 %% must compile the PERSONAL bibliography by hand.
53 %% For example, the sequence of commands to run
54 %% when you had defined the bibliography PERSO is:
55 %%   $ pdflatex my_document.tex
56 %%   $ bibtex my_document.aux
57 %%   $ bibtex PERSO.aux
58 %%   $ pdflatex my_document.tex
59 %%   $ pdflatex my_document.tex
60 %%   $ pdflatex my_document.tex
61  
62 %%--------------------
63 %% Add here any other packages that are needed for your document.
64 %\usepackage{eurosim}
65 %\usepackage{amsmath}
66 \newcommand{\MI}{\mathit{MaxIter}}
67 %\usepackage{subcaption}
68 \usepackage{graphicx}
69
70 \usepackage{multirow}
71  
72 %%--------------------
73 %% Set the title, subtitle, defense date, and
74 %% the registration number of the PhD thesis.
75 %% The optional parameter is the subtitle of the PhD thesis.
76 %% The first mandatory parameter is the title of the PhD thesis.
77 %% The second mandatory parameter is the date of the PhD defense.
78 %% The third mandatory parameter is the reference number given by
79 %% the University Library after the PhD defense.
80 \declarethesis[Sous-titre]{Titre}{17 septembre 2012}{XXX}
81  
82 %%--------------------
83 %% Set the author of the PhD thesis
84 \addauthor[email]{Prénom}{Nom}
85  
86 %%--------------------
87 %% Add a member of the jury
88 %% \addjury{Firstname}{Lastname}{Role in the jury}{Position}
89 \addjury{Incroyable}{Hulk}{Rapporteur}{Professeur à l'Université de Gotham City \\ Commentaire secondaire}
90 \addjury{Super}{Man}{Examinateur}{Professeur à l'Université de Gotham City}
91 \addjury{Bat}{Man}{Directeur de thèse}{Professeur à l'Université de Gotham City}
92  
93 %%--------------------
94 %% Change style of the table of the jury
95 %% \Set{jurystyle}{put macros for the style}
96 %\Set{jurystyle}{\small}
97
98 %%--------------------
99 %% Add the laboratory where the thesis was made
100 %\addlaboratory{Laboratoire Waynes Industry}
101
102 %%--------------------
103 %% Clear the list of the laboratories
104 %\resetlaboratories
105  
106 %%--------------------
107 %% Set the English abstract
108 \thesisabstract[english]{This is the abstract in English}
109  
110 %%--------------------
111 %% Set the English keywords. They only appear if
112 %% there is an English abstract
113 \thesiskeywords[english]{Keyword 1, Keyword 2}
114  
115 %%--------------------
116 %% Set the French abstract
117 \thesisabstract[french]{Ceci est le résumé en français}
118  
119 %%--------------------
120 %% Set the French keywords. They only appear if
121 %% there is an French abstract
122 \thesiskeywords[french]{Algorithmes itératifs, Performance, Simulation, Simgrid, Grid Computing}
123  
124 %%--------------------
125 %% Change the layout and the style of the text of the "primary" abstract.
126 %% If your document is written in French, the primary abstract is in French,
127 %% otherwise it is in English.
128 %\Set{primaryabstractstyle}{\tiny}
129  
130 %%--------------------
131 %% Change the layout and the style of the text of the "secondary" abstract.
132 %% If your document is written in French, the secondary abstract is in English,
133 %% otherwise it is in French.
134 %\Set{secondaryabstractstyle}{\tiny}
135  
136 %%--------------------
137 %% Change the layout and the style of the text of the "primary" keywords.
138 %% If your document is written in French, the primary keywords are in French,
139 %% otherwise they are in English.
140 %\Set{primarykeywordstyle}{\tiny}
141  
142 %%--------------------
143 %% Change the layout and the style of the text of the "secondary" keywords.
144 %% If your document is written in French, the secondary keywords are in English,
145 %% otherwise they are in French.
146 %\Set{secondarykeywordstyle}{\tiny}
147  
148 %%--------------------
149 %% Change the speciality of the PhD thesis
150 %\Set{speciality}{Informatique}
151  
152 %%--------------------
153 %% Change the institution
154 %\Set{universityname}{Universit\'e de Franche-Comt\'e}
155  
156 %%--------------------
157 %% Add the logos of the partners or the sponsors on the front page
158 %\addpartner[image options]{image name}
159
160 %%--------------------
161 %% Clear the list of the partner/sponsor logos
162 %\resetpartners
163
164 %%--------------------
165 %% Change the header and the foot of the pages.
166 %% You must include the package "fancyhdr" to
167 %% have access to these macros.
168 %% Left header
169 %\lhead{}
170 %% Center header
171 %\chead{}
172 %% Right header
173 %\rhead{}
174 %% Left footer
175 %\lfoot{}
176 %% Center footer
177 %\cfoot{}
178 %% Right footer
179 %\rfoot{}
180  
181 %%--------------------
182 % Declare several theorems
183 \declareupmtheorem{mytheorem}{My Theorem}{List of my Theorems}
184
185 %%--------------------
186 %% Change the message on the backcover.
187 %\Set{backcovermessage}{%
188 %       Some text
189 %}
190
191 \begin{document}
192  
193 %%--------------------
194 %% The following line does nothing until
195 %% the class option 'nofrontmatter' is given.
196 %\frontmatter
197
198 %%--------------------
199 %% The following line permits to add a chapter for "acknowledgements"
200 %% at the beginning of the document. This chapter has not a chapter
201 %% number (using the "star-ed" version of \chapter) to prevent it to
202 %% be in the table of contents
203 \chapter*{Remerciements}
204  
205 %%--------------------
206 %% Include a general table of contents
207 \tableofcontents
208
209 %%--------------------
210 %% The content of the PhD thesis
211 \mainmatter
212
213 \part*{INTRODUCTION}
214 \newpage
215
216 \part{PARTIE I: Contexte scientifique et revue de l'état de l'art}
217
218 \chapter{Cadre de travail et contexte scientifique}
219
220 \section{Classe des algorithmes itératifs parallèles à large échelle dans une grille de calcul}
221
222 Dans le cadre de ces travaux, nous nous sommes intéressés particulièrement
223 sur la performance d'une classe d'algorithmes
224 parallèles dits itératifs. De plus en plus, cette méthode itérative
225 est utilisée pour résoudre des problèmes dans différents domaines
226 scientifiques tels que la mécanique, la prévision du temps, le traitement
227 d'images ou encore l'économie financière.
228 Elle consiste à appliquer, contrairement à la méthode de résolution
229 « directe », à partir d'une valeur initiale $X_0$ une
230 transformation à un vecteur inconnu de rang n par des itérations successives
231 afin de s'approcher par approximation à la solution
232 recherchée X{*} avec une valeur résiduelle la plus réduite possible. 
233 \begin{equation}
234 \label{eq:1}
235   X^{k+1} = \text{f ( } X^k \text{ ), k = 0,1, \dots{} }        
236 \end{equation}
237
238 où chaque $x_k$ est un vecteur à n dimension et f une fonction de $R^n$ vers
239 $R^n$.
240
241 La solution du problème sera donc le vecteur X{*} tel que X{*} = f
242 (X{*}), c'est-à-dire X{*} est un point fixe de f.
243
244 L'exécution en parallèle d'un tel algorithme
245 consiste au découpage (partitionnement) du problème en plus petits
246 morceaux (ou blocs) et d'assigner chaque bloc à une
247 unité de calcul. Chaque processeur tourne le même algorithme de façon
248 concourante jusqu'à la détection de la convergence
249 locale qui peut être obtenue soit par l'atteinte d'un
250 nombre maximum fixé d'itérations soit que la différence
251 entre les valeurs du vecteur inconnu entre deux itérations successives est devenue
252 inférieure à la valeur résiduelle convenue. Cette condition de convergence
253 locale peut être écrite comme suit : 
254 \begin{equation}
255   (k\leq \MI) \text{ or } (\|X_l^k - X_l^{k+1}\|_{\infty}\leq\epsilon)  
256 \end{equation}
257 La convergence globale sera déclarée lorsque tous les processeurs
258 ont atteint leur convergence locale. De façon générale, plusieurs
259 travaux ont démontré la convergence de ces méthodes itératives pour
260 la résolution de systèmes linéaires ou non linéaires avec un taux
261 de convergence élevé {[}7, 8{]}. Lors de l'exécution
262 dans chaque bloc de calcul, l'algorithme peut demander l'échange
263 de données comme des résultats intermédiaires par exemple entre des
264 processeurs voisins avant d'entamer une nouvelle itération.
265 Les sections suivantes vont détailler les notions liées à la résolution
266 de cet algorithme.
267
268 \subsection{Partitionnement du problème} 
269
270 Comme expliqué plus haut et appliquant le principe du "diviser pour regner", le problème de résolution d'un
271 algorithme itératif parallèle commence par un découpage de la matrice $n \times n$
272 en entrée en plus petits blocs dont le nombre dépend du nombre
273 de processeurs disponibles. On parle de « décomposition de domaine
274 » en considérant les données en priorité en opposition à la « décomposition
275 fonctionnelle » où le partitionnement se base sur le calcul : diviser
276 le calcul en des tâches indépendantes assignées aux processeurs. La
277 figure \figref{decoupage} présente un exemple de découpage en domaines de la
278 matrice initiale entre deux clusters constitués chacun de 18 processeurs, soit un total de 36 processeurs.
279
280 \begin{figure}[!ht]
281 %\centering
282 \begin{minipage}[t]{5.5cm}
283 \centering
284 \includegraphics [ width =5.5cm]{"3D data partitionning btw 2 clusters"}
285 \caption {Découpage d'une matrice tridimensionnelle entre deux clusters formés de 18 processeurs chacun}
286 \end{minipage}
287 \begin{minipage}[t]{5.5cm}
288 \centering
289 \includegraphics [ width =5.5cm]{"1D-2D-3D Domain decomposition"}
290 \caption {Décomposition en domaines 1D, 2D et 3D}
291 \end{minipage}
292 %\caption{Partitionnement du problème}
293 \end{figure}
294
295 %\mfigure[!]{width=8cm, height=8cm}{"3D data partitionning btw 2 clusters"} {Partitionnement : Découpage %d'une matrice tridimensionnelle entre deux clusters formés de 18 processeurs chacun} {decoupage}
296
297 %\mfigure[h]{width=8cm, height=8cm}{"1D-2D-3D Domain decomposition"} {Partitionnement : Décomposition en %domaines 1D, 2D et 3D} {Decompo}
298
299 %\begin{figure}[h]
300 %\begin{subfigure}{0.5\textwidth}
301 %\includegraphics[width=6cm, height=6cm]{"3D data partitionning btw 2 clusters"} 
302 %\caption{Découpage d'une matrice tridimensionnelle entre deux clusters formés de 18 processeurs chacun}
303 %\label{fig:1.a}
304 %\end{subfigure}
305 %\begin{subfigure}{0.5\textwidth}
306 %\includegraphics[width=1\linewidth, height=5cm]{"1D-2D-3D Domain decomposition"}
307 %\caption{Décomposition en domaines 1D, 2D et 3D}
308 %\label{fig:1.b}
309 %\end{subfigure}
310 %\caption{Partitionnement du problème}
311 %\end{figure}
312
313 Chaque cluster va prendre en charge un bloc de 18 "sous-domaines". Chaque
314 processeur $P_i$ tournera l'algorithme sur le cube qui
315 lui est assigné. Les sous domaines s'échangent des
316 données par leurs points périphériques {[}9{]} au niveau du cluster mais
317 aussi entre les clusters en suivant une organisation logique d'un
318 anneau virtuel dont les noeuds sont les processeurs $P_i$.
319
320 Une fois partitionnée en m blocs, la relation reccurente de l'équation \eqref{eq:1} peut
321 s'écrire :
322 \begin{equation}
323 x_{k+1} = (x_1^k, x_2^k, \dots , x_n^k), k=1,\dots n  
324 \end{equation}
325 ou en termes de blocs : 
326 \begin{equation}
327 X_{k+1} = (X_1^k, X_2^k, \dots , X_n^k), k=1,\dots m 
328 \end{equation}
329 Donc, on peut écrire :
330 \begin{equation} 
331 X_{k+1} = F (X_k)
332 \end{equation}
333
334 \begin{equation} 
335 \iff (  \exists F_k   ) (X_1^{k+1} ,X_2^{k+1} , \dots{}, X_m^{k+1}) = (F_1(X_k), F_2(X_k), \dots , F_m(X_k))
336 \end{equation} 
337 Où : 
338 \begin{equation} 
339 X_i^{k+1} = F_i (X^k) = Fi ( X_1^k , X_2^k , \dots{} , X_m^k)\>pour \>i=1,\dots,k
340 \end{equation}
341 L'exemple donné montre un partitionnement « naturel
342 » du problème initial par un découpage uniforme avec des blocs de même taille. Il met en exergue deux facteurs importants
343 à tenir en compte lors de cette opération :
344 \begin{itemize}
345 \item [$\bullet$] essayer de répartir
346 uniformément la charge assignée à chaque processeur : effectivement,
347 un déséquilibre de charge entre les unités de calcul peut impacter
348 négativement la performance globale du système;
349 \item[$\bullet$] réduire au maximum
350 les communications entre les processeurs : ces temps d'échange
351 coûtent aussi chers au niveau de la performance globale. 
352 \end{itemize}
353 Selon le
354 type de l'algorithme, on peut faire un classement en
355 trois catégories {[}21{]} selon le partitionnement ou la décomposition
356 de domaine choisie (Figure \figref{Decompo}) : 
357 \begin{itemize}
358 \item[$\bullet$] 1D où la matrice est découpée
359 suivant des briques dont deux dimensions de longueur n et la dernière plus courte que n.
360 \item [$\bullet$] 2D avec des briques dont une dimension est de longueur n et les
361 deux autres plus courtes que n; 
362 \item [$\bullet$] et enfin, 3D avec des briques dont les
363 3 dimensions sont plus courtes que n. 
364 \end{itemize}
365  
366  \subsection{Modes d'exécution synchrone et asynchrone}
367
368 Lors de l'exécution des algorithmes itératifs parallèles
369 sur un environnement de type grille de calcul, le temps de communication
370 résultant des échanges de données entre les unités de calcul est aussi
371 important que le temps de calcul lui-même. En effet, un ratio montrant
372 un équilibre entre ces deux temps constitue un des objectifs dès le
373 partitionnement du problème. Le temps de communication est impacté
374 sur la façon dont les échanges sont effectués. 
375
376 \mfigure[h]{width=8cm, height=8cm}{"Synchronous iterations model"} {Modèle de communication synchrone} {sync}
377
378 \mfigure[h]{width=8cm, height=8cm}{"Asynchronous iterations model"} {Modèle de communication asynchrone} {async}
379
380 %\begin{figure}[h]
381 %\begin{subfigure}{0.5\textwidth}
382 %\includegraphics[width=5cm, height=5cm, scale=3]{"Synchronous iterations model"} 
383 %\caption{Modèle de communication synchrone}
384 %\label{fig:2.a}
385 %\end{subfigure}
386 %\begin{subfigure}{0.5\textwidth}
387 %\includegraphics[width=5cm, height=5cm, scale=3]{"Asynchronous iterations model"}
388 %\caption{Modèle de communication asynchrone}
389 %\label{fig:2.b}
390 %\end{subfigure}
391 %\caption{Modèles de communication}
392 %%\label{fig:1}
393 %\end{figure}
394
395 D'une part, ces paquets de données peuvent être transférés
396 de façon « synchrone » : dans ce cas, une coordination de l'échange
397 est assurée par les deux parties. A la fin de chaque itération, l'émetteur,
398 une fois la poignée de main établie, envoie les données et attend
399 jusqu'à la réception d'un accusé de
400 réception par le récepteur. L'algorithme même est en
401 mode synchrone parce qu'une étape de synchronisation
402 de tous les processeurs est nécessaire avant d'entamer
403 une nouvelle itération. La figure \figref{sync} montre les actions dans
404 le temps lors d'un échange en mode synchrone entre
405 deux processeurs. Les flèches montrent la date d'envoi
406 par $P_1$ et la date de réception du paquet par $P_2$. On parle ici de mode
407 de communication « bloquante » : la nouvelle itération ne peut commencer
408 tant que tous les processus n'ont pas fini leurs communications.
409
410 D'autre part, l'échange de données peut
411 s'effectuer en mode « asynchrone ». Dans ce cas, l'émetteur
412 peut envoyer de l'information au destinataire à tout
413 moment et aucune synchronisation n'est nécessaire.
414 Chaque processeur travaille avec les données qu'il
415 reçoit au fil du temps. La communication est ici non bloquante. La
416 conséquence immédiate de ce mode de communication est l'absence
417 des périodes où le traitement est arrêté (CPU stalled ou idle) parce
418 qu'il doit attendre l'accusé de réception
419 du récepteur (Figure \figref{async}). En mode asynchrone, le temps entre chaque
420 itération peut varier notablement dû à la différence éventuelle de
421 la puissance de chaque processeur ou encore de la performance des
422 différents réseaux de communication utilisés. {[}7{]} montre à travers
423 des algorithmes itératifs classiques les intérêts de la mise en oeuvre
424 de communication asynchrone lors de la résolution mais aussi les éventuels
425 inconvénients. Parmi les avantages de ce mode de communication, la
426 réduction du temps de synchronisation entre processeurs peut impacter
427 positivement le temps global d'exécution surtout en
428 environnement hétérogène. De même, le chevauchement du calcul avec
429 la communication des données peut aussi améliorer la performance de
430 l'application. Enfin, un partitionnement lors de de
431 la décomposition du domaine tenant compte de l'absence
432 de synchronisation en mode asynchrone peut aussi contribuer à la performance
433 en répartissant efficacement le calcul. Les inconvénients de l'asynchronisme
434 peuvent venir de la détection de la convergence globale étant donné
435 qu'il n'y a pas de synchronisation des
436 opérations. L'arrêt doit être décidé après une forme
437 de communication globale à un certain point de l'algorithme
438 ; il peut se faire lors de la communication inévitable entre processus
439 pour annoncer la convergence locale. Un autre problème est aussi la
440 tolérance aux pannes quoique cette défaillance peut aussi concerner
441 le mode synchrone : si un des processus contribuant dans la résolution
442 du problème se plante, tout le processus itératif peut s'écrouler
443 si un mécanisme de reprise sur panne est mis en place. 
444
445 \section{Méthodes de résolution parallèles du problème de Poisson et de
446 l'algorithme two-stage multisplitting de Krylov}
447
448 \subsection{Algorithme de Jacobi}
449
450 \subsection{Méthode de résolution GMRES}
451
452 Native
453
454 Version « two-stage »
455
456 \subsection{Solveur multisplitting} 
457
458 Version simple
459
460 Version améliorée
461
462 \section{Simulateurs d'exécution d'algorithmes parallèles MPI dans une grille de calcul}
463
464 \subsection{Calcul sur grille}
465 Une grille de calcul est caractérisée par "un type de système parallèle et distribué qui permet le partage, la sélection et l'aggrégation de ressources distribuées géographiquement selon leurs capacités" [25] afin de résoudre un problème complexe donné. Ainsi, une grille est composée d'un ensemble de grappes de machines interconnectées entre elles à travers un réseau de communication qui peut s'étendre sur des zones géographiques éloignées (Figure \figref{gridA}). Les capacités de calcul, les mémoires, les applications et les systèmes de stockage sont partagées par les applications parallèles et distribuées. Le calcul sur une grille est caractérisé par un environnement "hétérogène, dynamique et scalable". \\
466
467 \mfigure[h]{width=8cm, height=8cm}{"Grid architecture"} {Architecture d'une grille de calcul} {gridA}
468
469 L'hétérogénéité montre la variété des éléments composant la grille de calcul. On peut être en présence de différentes architectures de processeurs dans les machines d'une grappe ou entre les grappes. Les fréquences d'horloge de ces processeurs peuvent être aussi différentes. De même, l'architecture ou la méthode d'accès des mémoires (DRAM, stockage) utilisées dans la grille de calcul peut être aussi être aussi de types différents. Enfin, la topologie ainsi que la performance des réseaux de communications interconnectant les éléments de la grille peuvent être aussi avoir des débits complètement hétérogènes. \\
470 Le caractéristique dynamique de la grille résulte de la relative facilité de changer de configuration. On peut ainsi tailler dynamiquement l'allocation des ressources de la grille aux utilisateurs selon les besoins de leur demande respective. Cet aspect a été élargi à "l'élasticité" de l'environnement dans le cadre du "cloud computing". \\
471 Enfin, la scalabilité de la grille de calcul découle de sa conception modulaire permettant d'ajouter d'autres composants selon les besoins.  Pour augmenter par exemple la capacité de calcul de la grille, il suffit d'ajouter de nouveaux clusters pour une plus grande puissance globale de la grille. \\
472
473 Le milieu de la recherche dispose d'une grille de calcul dédié : le Grid'5000 [26, 27] est une grille répartie géographiquement dans différentes villes de France (Figure \figref{grid5000RG} )  mettant à disposition un "banc d'essai polyvalent à grande échelle" pour les expérimentations de la recherche en informatique particulièrement le calcul parallèle sur grille, sur le cloud, le calcul à haute performance mais aussi sur le Big Data. Grid'5000 permet aux utilisateurs l'accès à des ressources importantes de calcul dans un environnement complètement configurable et controllable. Il peut aussi fournir une trace détaillée ainsi que d'autres informations de mesure sur le comportement de l'application lors de l'exécution pour une étude ultérieure.
474
475 \mfigure[h]{width=8cm, height=8cm}{"Grid5000 sites"} {Grid'5000 : Répartition géographique} {grid5000RG}
476    
477
478 Grid'5000 est construit autour de plus de 1000 noeuds physiques de différents constructeurs composés de plus de 2000 processeurs (Intel Xeon et AMD Opteron) avec un total de plus de 10.000 coeurs. Plus de 650 différentes cartes  d'interface réseau Ethernet, Infiniband et Myrinet sont interconnectés  avec plus de 40 accélérateurs de type NVIDIA GPU et Intel Xeon Phi.
479 Dès sa conception, Grid'5000 a pris en compte la diversité des intêrets et des besoins des différents utilisateurs. En effet, dépendant de leur centre d'intêret peuvent se focaliser sur les protocoles réseau ou les systèmes d'exploitation particuliers ou d'autres problématiques sur la tolérance aux pannes,ces derniers peuvent configurer leur propre environnement de lancement de leurs applications. La reproductbilité des résultats a été soigneusement étudiée pour permettre une analyse utlérieure de la performance. De plus, Grid'5000 assure la scalabilité, la qualité de service (QoS) mais aussi et surtout la sécurité de l'environnement par le verouillage de la connexion vers Internet par exemple.   
480
481 \subsection{Généralités sur la simulation}
482
483 La simulation est largement utilisée dans divers domaines de la recherche scientifique. Elle consiste au processus de la mise en oeuvre et "de la conduite d'expérimentations sur un modèle (une représentation simplifiée du réel) dans le but de comprendre le comportement du système modélisé sous des conditions sélectionnées ou de l'évaluation de diverses stratégies pour le fonctionnement du système sous la limite imposée par les critères de développement et d'exploitation" [29]. Particulièrement, la simulation de l'exécution d'une application parallèle distribuée étudie son comportement (résutats en sortie, temps de performance, scalabilité, ...) sur un environnement virtuel imitant au mieux le fonctionnement d'une plateforme physique réel ou d'un système en cours d'élaboration (banc d'essai) ou encore d'une hypothétique machine non encore réalisée. Ainsi, la simulation informatique se focalise sur le comportement dynamique du modèle à travers le temps. Plusieurs raisons motivent une telle simulation: à titre d'exemple, de réduire les coûts de la conception d'un système et d'éviter les erreurs, de produire dans un temps raisonnable des résultats en sortie d'un modèle ayant un temps d'exécution élevé, de répondre à des scénarions d'exécution avec des questions "what-if" (tests et évaluations), ou encore de créer des outils de simulation pour des formations ou des jeux. \\      
484 Dans le cadre d'une grille de calcul, les simulateurs ou les outils de simulation permettent à l'inverse des plateformes réelles l'évaluation de la performance des expérimentations "répétables et controllables" [25] sur des configurations flexibles et scalables. En effet, les environnements réels montrent leurs limites sur leur rigidité de passage à l'echelle mais aussi sur la flexibilité de disposer un environnement de calcul particulier répondant aux besoins précis de l'application à un moment donné. Selon la classification dans [30], la simulation d'applications sur une grille de calcul rejoint la classe de simulation "virtuelle" par l'utilisation d'équipements de simulation par des personnes réelles. De façon générale, le simulateur utilise une échelle de temps "discret", c'est-à-dire le temps est découpé en intervalles qui peuvent être réguliers ou non. Dans le cas d'un système à temps discret régulier, le simulateur maintient et met à jour éventuellement un ensemble de "variables d'état" qui reflètent l'état du système physique à un instant t donné. Un "évenement" est associé à chaque instant donné à une "transition d'état". Pour des comparaisons futures, on distingue le "temps physique" comme étant le temps considéré au niveau du système physique, du "temps de simulation" et "le temps de l'horloge murale" désigne le temps de simulation du modèle. Toutefois, le "temps de simulation" est une notion abstraite utilisée par le simulateur pour évaluer le temps de simulation. Il est défini [30] comme étant "un ensemble de valeurs totalement ordonné E où chaque valeur représente un temps du système physique à modéliser et qui vérifie les conditions suivantes:" \\
485
486 Soient E l'ensemble des temps discrets de simulation et P l'ensemble des temps du système physique.
487
488 \begin{equation}
489 \label{eqsim}
490 \begin{split}
491 \texttt{Si } ( T_1 \in E, T_2 \in E ) \texttt{ et }( P_1 \in P, P_2 \in P ) \texttt{ et } (T_1 \textless T_2) \\
492 \Rightarrow ( (P1 \textless P2)  \texttt{ et }  \exists K \in \mathbb{N},  T_2 - T_1 = K \times ( P_2 - P_1 )
493 \end{split}
494 \end{equation}
495
496 La définition précédente montre le lien linéaire étroit entre les intervalles de temps de simulation et celles des temps physiques. Ce qui permet d'estimer entre autres le temps d'exécution probable d'une application à partir du temps de simulation observé. Outre ce temps global de l'outil de simulation et les variables d'état, une liste des évenements à exécuter complète la composition du simulateur au temps discret. \\
497 Le changement des variables d'état peut s'effectuer soit à une fréquence régulière du temps de simulation (exécution rythmée par le temps) soit au début et à la fin d'un évenement donné (exécution rythmée par les évenements). 
498 Dans le cas d'une simulation d'une application parallèle et distribuée où plusieurs processeurs ou coeurs interconnectés concourent à résoudre ensemble le problème posé, plusieurs autres aspects liés à l'environnement doivent être considérés : \\
499 \begin{itemize}
500 \item [$\bullet$] L'initialisation du système; 
501 \item [$\bullet$] Les échanges de données entre les processus;
502 \item [$\bullet$] La synchronisation des processus;
503 \item [$\bullet$] La détection de deadlock et la reprise;
504 \item [$\bullet$] L'arrêt et la fermeture du système.
505 \end{itemize}
506 Le tableau \ref{table1} donne quelques exemples de simulateurs pour des applications parallèles et distribuées sur une grille de calcul [28, 25].
507
508 \begin{table}[htbp]
509 \centering
510 %\tiny
511 \fontsize{8}{9}\selectfont
512 \begin{tabular}{|c|c|c|c|p{1cm}p{1cm}p{1cm}p{1cm}|}
513 \hline \\
514 %{     } & {           } & {           } & {                  } & \\
515 \textbf{OUTIL} & \textbf{DESCRIPTION} & \textbf{DEVELOPPEUR} & \textbf{APPLICATIONS CIBLE} \\ \hline
516 \multirow{ 3}{*}{SimJava} & SimJava fournit un processus de simulation & Université de  & Simulation d'évenements \\
517 { } & avec une animation à travers d'entités communiquant entre elles & Edinburgh (UK) & discrets \\ 
518 { } & http://www.dcs.ed.ac.uk/home/hase/simjava/ & { } & { } \\ \hline
519
520 \multirow{ 4}{*}{Bricks} & Bricks est un outil d'évaluation de performance & Tokyo Institute of  & Simulation \\
521 { } & analysant divers schémas d'ordonnancement & Technology (Japan) & de grille \\ 
522 { } & dans un environnement de grille de calcul & { } & { }  \\ 
523 { } & http://matsu-www.is.titech.ac.jp/~takefusa/bricks/  & { } & { }  \\ \hline
524
525 \multirow{ 4}{*}{Microgrid} & Microcrid permet la simulation d'une montée & University of   & Simulation \\
526 { } & en charge des applications sur grille de calcul  & California at & de grille \\ 
527 { } & en utilisant des ressources clusterisées & San Diego (USA) & { }  \\ 
528 { } & http://www-csag.ucsd.edu/projects/grid/microgrid.html  & { } & { }  \\ \hline
529
530 \multirow{ 3}{*}{Simgrid} & Simgrid simule les applications & University of   & Simulation \\
531 { } & distribuées dans un environnement distribué hétérogène & California at & de grille \\ 
532 { } & http://grail.sdsc.edu/projects/simgrid/ & San Diego (USA) & { }  \\  \hline
533
534 \multirow{ 4}{*}{Gridsim} & Gridsim permet la modélisation et la simulation & Monash   & Simulation \\
535 { } & d'entités impliquées dans le calcul parallèle et distribué  & University & de grille \\ 
536 { } & par la création et le pilotage de différentes ressources & Australie & { }  \\ 
537 { } & http://www.buyya.com/gridsim/  & { } & { }  \\ \hline
538
539 \end{tabular}
540 \caption{Quelques outils de simulation pour une grille de calcul}
541 \label{table1}
542 \end{table}
543
544 Simgrid est l'outil choisi dans le cadre de ces travaux pour étudier le comportement et évaluer la performance d'applications parallèles distribuées à grande échelle. Une section de ce chapitre sera dédiée à la description plus détaillée de cette plateforme.
545  
546 \subsection{MPI - Message Passing Interface}
547 MPI ou "Message Passing Interface" est les spécifications d'une librairie d'interface pour le transfert de message entre les processus d'une application parallèle. A sa version MPI-3 (2015), elle est largement utilisée dans la recherche dans le domaine du calcul à haute performance avec des compilateurs C/C++ et Fortran généralement. La facilité de l'utilisation et la portabilité à travers différents systèmes hétérogènes ont guidé le développement de ces spécifications MPI standards. Ces derniers peuvent être matérialisés sur différentes plateformes cibles telles qu'une grille de calcul, des machines multiprocesseurs et multicores à mémoires partagées ou distribuées, un réseau de stations de travail interconnectés ou encore des environnements hybrides obtenus par la combinaison de ces architectures. Principalement, les standards MPI sont implémentés sur différents systèmes d'exploitation soit avec MPICH [32] ou OpenMPI [33] tous les deux des logiciels libres à haute performance et portable développés par des consortiums de chercheurs et des partenaires et collaborateurs industriels.
548 Plusieurs domaines sont couverts par les spécifications de MPI dont les plus importants sont cités ci-dessous [31,32,33].
549 \begin{itemize}
550
551 \item[$\bullet$] Groupes, contexte et communicateur: Définit l'initialisation de l'environnement d'exécution du programme parallèle MPI. Un groupe de processeurs est formé et un unique contexte de communication est créé et les deux sont intégrés ensemble dans un communicateur.
552
553 \item[$\bullet$] La gestion de l'environnement MPI: Permet à l'utilisateur d'interagir avec l'environnement MPI créé lors du lancement du programme parallèle. Elle assure par abstraction la portabilité de l'application entre des plateformes matérielles et logicielles différentes.
554
555 \item[$\bullet$] La gestion des processus: Définit la création des processus participant à l'exécution de l'application mais aussi détermine la topologie et la gestiobn des groupes de processus en accord par exemple avec des architectures complexes comme les grilles de calcul. 
556
557 \item[$\bullet$] Les types de données : Permettent de créer des structures de données complexes en mémoire à partir des types de données de base comme l'entier, le float, etc...
558
559 \item[$\bullet$] Les communications: Rassemblent les spécifications des protocoles d'échanges de messages entre les processus. On distingue les communications point à point, les communications collectives mais aussi les entrées / sorties parallèles. 
560
561 \end{itemize}
562  
563 Le programme MPI s'exécute sur chaque processeur une fois que l'environnement logique est créé par la routine MPI\_Init. Ce dernier est constitué d'un groupe de processus, d'un contexte et d'un communicateur (par défaut MPI\_COMM\_WORLD), voir la figure \figref{MPI}-a. Chaque processus est identifié par son rang dans le groupe associé au communicateur (MPI\_Comm\_rank). Le nombre total de processus en jeu est donné par MPI\_Comm\_size. A la fin du code, MPI\_Finalize termine l'exécution en environnement MPI. De façon générale, une erreur arrête tous les processus en jeu. Toutefois, le programmeur peut gérer et personnaliser les erreurs au niveau de chaque processus ou globalement. Une routine MPI qui se termine avec succès retourne le code MPI\_SUCCESS. \\
564
565 \mfigure[h]{width=8cm, height=8cm}{"MPI"} {Groupes et communicateur (a) - MPI - Opérations collectives (b)} {MPI}
566
567 Au niveau de la communication, le transfert de message peut se faire d'un processus vers un autre (point à point). Pour cela, les routines MPI\_SEND et MPI\_RECV et leus variantes permettent respectivement d'envoyer et de recevoir un message. L'adresse du tampon contenant le message à traiter sont passées à ces fonctions avec le type de données ainsi que le nombre d'objets. La destination dans le cas d'un envoi est spécifiée par le rang du processus d'arrivée du message dans le communicateur considéré. Une variable de statut de l'opération permet de connaitre si l'opération a réussi ou a échoué. Cet échange peut se faire de manière synchrone ou asynchrone(resp. bloquant ou non bloquant). \\
568 Contrairement à une communication point à point, une communication dite collective transfère un message à partir d'un processeur vers un ensemble de processeurs. L'exemple le plus courant est le "broadcast" ou diffusion où un processeur envoie le même message à destination d'un ensemble de processeurs. La figure \figref{MPI}-b montre les échanges entre les processus après l'appel à cette opération mais aussi d'autres types de communications collectives. Un processus avec MPI\_Scatter distribue une structure de données à d'autres processus participants tandis que MPI\_Gather rassemble des données de plusieurs processus participant en une seule structure. Enfin, les opérations de réduction appliquent une opération (somme, produit, maximum, minimum, etc ...)à un ensemble de processus et retourne le résultat vers le processus appellant.
569 La synchronisation des processus peut être obtenue avec la routine MPI\_Barrier qui, une fois lancée par un processus, bloque ce dernier jusqu'à ce que tous les processus de son groupe atteigne cette barrière comme un point de rendez-vous.
570
571 \subsection{Simulateur SIMGRID - SMPI}      
572 SimGrid est utilisé pour la simulation et l'étude du comportement d'applications parallèles dans un contexte d'un environnement complexe, hétérogène, distribué et dynamique. Il est conçu sur une simulation basée sur les évenements ("event driven") à un niveau d'abstraction et de fonctionnalités répondant aux applications et aux infrastructures [26].
573
574 \section{Motivations}
575
576 \section{Conclusion partielle}
577
578
579 \chapter{Etat de l'art et travaux de recherche associés}
580
581 \section{Concepts et définitions}
582 Dans cette section, des concepts et des définitions relatifs à nos
583 travaux sont passés en revue.
584
585 \subsection{Performance de l'application parallèle et scalabilité} 
586
587 La performance d'une application dans un environnement
588 distribué peut être définie comme « la capacité de réduire le temps
589 pour résoudre le problème quand les ressources de calcul augmentent
590 » {[}20{]}. L'objectif est de minimiser le
591 temps d'exécution globale de l'application
592 en ajoutant des ressources supplémentaires (processeurs, mémoire,
593 \dots ). D'où la notion de « scalabilité » ou "montée
594 en charge" ou encore "passage à l'echelle" dont l'objectif principal est d'accroitre
595 la performance quand la complexité ou la taille du problème augmentent.
596 Comme nous allons voir tout au long de ce chapitre, deux catégories
597 de facteurs concourent à la difficulté de la prédiction des applications
598 parallèles en considérant leur performance après la montée en charge
599 des ressources : d'une part, on peut énumérer les facteurs
600 liés à l'écosystème d'exécution tels
601 que le nombre de processeurs, la taille de la mémoire et de sous-système
602 de stockage, la latence et la bande passante des réseaux de communication
603 ; d'autre part, les facteurs liés au code lui-même
604 impactent aussi la performance de l'application affectant
605 ainsi la prédiction : il s'agit par exemple de la fréquence
606 de la communication et de la synchronisation, la faible parallélisation
607 mais aussi le mauvais ordonnancement des tâches (équilibrage de charge)
608 {[}20{]}. 
609
610 Afin de quantifier la performance d'un code, plusieurs
611 métriques ont été définies mais le temps d'exécution
612 global nécessaire pour atteindre la fin du programme reste le plus
613 simple. On peut écrire : 
614
615 \begin{equation}
616 \label{eq:5}
617 T_{exec} = T_{calc} + T_{comm} + T_{surcharge} 
618 \end{equation}
619 où : 
620 \indent\indent$T_{exec}$        : Temps d'exécution global \\
621 \indent\indent$T_{calc}$        : Temps de calcul \\
622 \indent\indent$T_{comm}$        : Temps de communication \\
623 \indent\indent$T_{surcharge}$ : Temps de surcharge.
624
625
626 Le temps de calcul représente le temps pris par le code pour effectuer
627 des calculs tandis que le temps de communication enregistre le temps
628 des échanges de données ou d'instructions entre les
629 processeurs. Le temps de surcharge comprend le temps pris lors des
630 initialisations telles que la création des threads au début du programme
631 mais aussi le temps de fermeture de l'application à
632 la fin. En général, le temps de surcharge est négligeable par rapport
633 aux temps de calcul et de communication.
634
635 Des métriques liées directement à la performance du processeur sont
636 bien connues telles que le MIPS (Millions d'instructions
637 par seconde), FLOPS (Floating Point Operations per second), SPECint
638 ou encore SPECfp qui sont des benchmarks pour évaluer la performance
639 du processeur sur des opérations arithmétiques respectivement sur
640 des entiers ou des nombres réels. Par ailleurs, plusieurs métriques
641 rapportées à la performance de l'application parallèle
642 ont été définies mais nous allons retenir les trois les plus utilisées,
643 à savoir le « speedup », « l'efficacité » du code et
644 la loi d'Amdahl.
645
646 Le speedup est le rapport entre le temps utilisé pour l'exécution
647 séquentielle du code et le temps pour son exécution en parallèle.
648 Ce rapport peut être obtenu aussi comme le ratio entre le temps d'exécution
649 du code sur un processeur et le temps d'exécution avec
650 n processeurs. Ainsi, il mesure le gain escompté en résolvant le problème
651 en parallèle au lieu d'un lancement en séquentiel.
652 \begin{equation}
653 \label{eq:6}
654 S(n) = T_{Exec\_Seq} / T_{Exec\_Par}(n) 
655 \end{equation}
656 où : 
657 \indent\indent S(n) : speedup pour n processeurs \\
658 \indent\indent n : nombre de processeurs \\
659 \indent\indent $T_{Exec\_Seq}$ le temps d'exécution en mode séquentiel \\
660 \indent\indent $T_{Exec\_Par}$ le temps d'exécution en en parallèle.
661
662 L'efficacité E(n) représente la performance de chaque unité
663 de calcul. Elle s'obtient en divisant le speedup par
664 le nombre de processeurs n. On peut aussi l'écrire
665 comme le rapport entre le temps d'exécution séquentielle
666 et le temps d'exécution parallèle multiplié par le
667 nombre de processeurs n.
668 \begin{equation}
669 \label{eq:7}
670 E(n) = S(n) / n \\
671 = T_{Exec\_Seq} / ( n \times T_{Exec\_Par}(n) )
672 \end{equation}
673
674 La loi de Amdahl donne une limite du speedup maximum qu'on
675 peut obtenir avec un nombre de processeurs n donné. Elle stipule que
676 si f compris entre 0 et 1 est la fraction du temps de la partie séquentielle
677 du code, on a : 
678
679 \begin{equation}
680 \label{eq:8}
681 S(n) \leqslant \dfrac{1}{f+ \dfrac{1-f}{n}}     
682 \end{equation}
683
684 Pour un système parallèle « idéal », le speedup est égal à n et l'efficacité
685 à 1. Dans la pratique, le speedup est toujours inférieur à n avec
686 une limite haute dûe à la loi de Amdahl et l'efficacité
687 a une valeur entre 0 et 1. On peut démontrer que l'efficacité
688 est une fnction décroissante du nombre de processeurs n tandis qu'elle
689 est une fonction croissante de la taille du problème.
690
691 Dans le cadre de nos travaux, nous avions introduit une métrique utilisée
692 lors de la comparaison de différentes variantes d'algorithmes
693 résolvant le même problème exécutés en différents mode de communication
694 (synchrone ou asynchrone). Ainsi, le « gain relatif » entre l'exécution
695 de deux variantes de code résolvant un problème donné est le ratio
696 entre le temps d'exécution global du premier algorithme
697 et le temps d'exécution global du deuxième algorithme
698 selon le mode retenu pour chaque code.
699
700 \begin{equation}
701 \label{eq:9}
702 G_{relatif} = T_{Exec\_Algo\_1}  /  T_{Exec\_Algo\_2} \times {100}
703 \end{equation}
704
705
706 \subsection{Taux d'erreur lors de la prédiction}
707
708 Lors de l'exercice de prédiction sur la performance
709 d'une application parallèle, un modèle est construit
710 à partir des observations passées  des
711 variables considérées (données empiriques observées)afin de pouvoir prédire les résultats (données calculées) pour des nouvelles valeurs de ces variables. L'objectif
712 lors de cette modélisation est de minimiser l'écart
713 entre les valeurs calculées théoriques et les valeurs réelles observées. 
714
715 Dans le cadre de la classe des algorithmes numériques itératifs consacrée
716 à ces travaux, un autre taux d'erreur $\epsilon$ est déterminé
717 d'avance et qui sert à détecter la convergence locale
718 de l'algorithme {[}9{]}. A chaque itération, la différence
719 entre la valeur approchée calculée, solution du problème, et celle obtenue
720 à l'itération précédente est calculeé : si elle est
721 inférieure au taux d'erreur accepté, l'algorithme
722 s'arrête en ayant atteint la convergence sinon, on
723 repart pour une nouvelle itération.
724
725 A l'itération k, la convergence est atteinte quand
726
727 \begin{equation*}
728 (\|X_l^k - X_l^{k+1}\|_{\infty}\leq\epsilon)    
729 \end{equation*}
730
731 \subsection{Weak contre strong scaling}
732
733 Un des objectifs de nos travaux consistent à exécuter les algorithmes
734 choisis en simulant leur exécution sur des plateformes de plus en
735 plus larges avec un nombre de processeurs et de cores de plus en plus
736 grand. Deux modes existent pour cette montée en charge donnant des résultats différents
737  : le « weak » et le « strong » scaling.
738
739 La différence entre ces deux modes repose sur la variation de la taille
740 du problème lors de la montée en charge (scaling). Pour le « weak
741 » scaling, on essaie d'observer le comportement du
742 programme en gardant le même nombre d'éléments à traiter
743 par processeur ou coeur. Dans ce cas, les ressources
744 de calcul additionnelles 
745 va augmenter proportionnellement à la taille du problème en entrée. Ainsi, la problématique ici est de résoudre un problème de plus grande taille. Par ailleurs, le « strong » scaling
746 essaie de résoudre un problème donné plus vite. Ainsi, dans ce cas,
747 la taille du problème en entrée reste constante même si on adjoint
748 une capacité plus grande aux unités de calcul.
749
750 \mfigure[h]{width=8cm, height=8cm}{"Weak vs Strong scaling"} {Weak vs Strong scaling: Temps d'exécution et Speedup} {scaling}
751
752
753 La figure \figref{scaling} montre que le temps d'exécution décroit (resp. reste constant) quand le nombre de processeurs augmente en strong mode (resp. en weak mode). De même, le speedup croit avec le nombre de processeur en strong mode tandis qu'il reste constant en weak mode.
754
755 \section{Problématique sur la prédiction à large échelle de la performance des applications}
756
757 La prédiction de la performance des applications parallèles à large
758 échelle constitue ces dernières années une des préoccupations majeures
759 des scientifiques et des utilisateurs des systèmes de calcul à haute
760 performance. En effet, en considérant le coût de lancement nécessaire
761 mais aussi le temps d'exécution imparti pour une telle
762 application, il est toujours d'intérêt de disposer
763 d'un outil ou d'un moyen afin de connaître
764 le comportement de l'application en montant en charge. Pour cela, il s'agit
765 d'estimer le temps total d'exécution $T_{exec}$ dans ces conditions. De plus,
766 dans le cadre d'un calcul sur la grille,l'objectif est de 
767 déterminer la configuration idéale, en termes de blocs et
768 de nombre de noeuds (processeurs, coeurs) par bloc, pour obtenir le
769 meilleur coût mais aussi le temps optimal d'exécution
770 de l'application. 
771
772 Dans ce chapitre, dans un premier temps, les problématiques et difficultés
773 inhérentes à cet exercice de prédiction de la performance des applications
774 parallèles sont abordées. Ensuite, nous allons passer en revue les
775 solutions possibles apportées à ces problèmes.
776
777 De prime abord, on peut diviser en deux grands groupes, selon leurs
778 objectifs, les travaux relatifs à la prédiction de la performance
779 en environnement parallèle et de calcul à haute performance. 
780
781 D'une part, la prédiction peut viser l'objectif
782 de la conception, le développement et la mise au point de systèmes
783 qui n'existent pas encore physiquement. Cette catégorie
784 regroupe entre autres la conception de nouvelles architectures de
785 matériels (CPU, Mémoire, Stockage) {[}\dots {]} mais aussi par exemple,
786 la mise en oeuvre d'une nouvelle infrastructure de réseaux
787 de communication {[}\dots {]}. Plusieurs utilisations peuvent être
788 exploitées pour ce type de prédiction. En effet, outre le calibrage
789 de systèmes pour une exécution optimale, il permet le débogage et
790 la mise au point des applications avec un ensemble de contraintes,
791 que ce soit matérielles ou logicielles {[}..{]}. Notons tout de suite
792 que cette dernière application sur le réseau a fait l'objet
793 de nombreux travaux ces dernières années, permettant de déterminer
794 ou d'estimer d'avance la performance
795 et l'efficacité de la solution future projetée et éventuellement
796 de corriger et d'améliorer les imperfections. 
797
798 D'autre part, la prédiction de la performance d'une
799 application parallèle se porte sur la détermination du temps d'exécution
800 de la dite application en montant en charge sur une large échelle.
801 Encore une fois, dans ce cas aussi, on ne dispose pas de l'environnement
802 d'exécution cible mais on essaie de déterminer quel
803 serait le temps total, donc le coût imputé au lancement de l'application
804 sous diverses conditions. Ces dernières sont déterminées par plusieurs
805 facteurs dont les principaux sont les paramètres d'entrée
806 de l'application tels que la taille du problème à résoudre
807 mais aussi les caractéristiques et la puissance globale intrinsèque
808 de la grille de calcul de lancement : nombre de blocs, de processeurs
809 / coeurs, les paramètres de la capacité du réseau de communication
810 inter et intra-noeuds de la grille, \dots{} Ainsi, une telle prédiction
811 permet de conduire une analyse « what-if » du comportement de l'application
812 si par exemple, on va multiplier par 10 ou 100 la taille du problème
813 en entrée, mais aussi si on double la capacité de l'environnement
814 cible en ajoutant d'autres blocs à la grille ou en
815 apportant plus de processeurs dans chaque bloc. Les travaux rapportés
816 dans cette thèse se focalisent plutôt sur cette seconde catégorie
817 de prédiction de la performance d'applications spécifiquement
818 écrites en MPI dans un environnement de grille de calcul.
819
820 \subsection{Facteurs liés à l'écosystème}
821
822 La prédiction de la performance des applications parallèles approchant
823 le plus possible de la réalité avec un taux d'erreur
824 minimal dépend de plusieurs facteurs pouvant avoir des impacts
825 décisifs sur les résultats. En effet, à titre d'exemple,
826 la modification de la topologie ou des paramètres de l'infrastructure
827 du réseau de communication tels que la latence ou la taille de la
828 bande passante aura inévitablement des conséquences sur la performance
829 globale de l'application parallèle. En donnant un autre
830 exemple, il est clair que la montée en charge en augmentant la taille
831 du problème avec une plus grande capacité de calcul proposant un plus
832 grand nombre de processeurs ou de coeurs modifiera la performance
833 de l'application. Ainsi, de façon générale, plusieurs
834 problématiques se posent quant au lancement d'une application
835 parallèle dans une grille de calcul mais aussi, plusieurs facteurs
836 influencent directement le comportement et la performance du système.
837 Nombreux travaux ont déjà proposé des modèles de prédiction à large
838 échelle sur la performance du code parallèle avec un taux d'efficacité
839 plus ou moins acceptable. Certains de ces modèles seront détaillés
840 dans le paragraphe 2.4.
841
842 Les scientifiques et les utilisateurs désirant lancer l'exécution
843 d'un programme en environnement parallèle ont tous
844 été confrontés à la même problématique de mise à disponibilité de
845 l'environnement d'exécution. En effet,
846 la réservation des ressources nécessaires pour lancer le système n'est
847 pas toujours immédiate mais en plus, le coût peut ne pas être négligeable
848 dans un contexte de rareté des machines super puissantes pourtant
849 très sollicitées par différents acteurs {[}\dots {]}. Cette problématique
850 peut être parfois accentuée par la non disponibilité de l'infrastructure
851 cible parce que justement, les résultats obtenus par le lancement
852 de l'application qui pourra déterminer les caractéristiques
853 techniques de l'environnement cible. Ainsi, cette contrainte
854 majeure doit être levée durant tout le cycle de vie de développement
855 de l'application. En effet, les coûteux développements
856 et écritures du code de l'application, les opérations
857 répétitives lors de sa mise au point ainsi que les tests itératifs
858 de lancement requièrent un environnement réel disposant de la capacité
859 nécessaire à ces opérations, ce qui n'est pas évident.
860 Un autre facteur lié à cette problématique a toujours été aussi l'estimation
861 à l'avance de cette capacité de calcul nécessaire afin
862 d'avoir un environnement le plus adéquat afin d'éviter
863 le gaspillage en cas de surestimation ou l'échec d'exécution
864 en cas de sous-estimation. Cette estimation concerne les ressources
865 primaires requises telles que le processeur, la taille mémoire DRAM
866 et cache ainsi que le sous-système de stockage pour la capacité de
867 calcul d'une part mais aussi les paramètres du réseau
868 de communication (local ou distant) pour le temps de communication
869 et d'échange de messages d'autre part.
870 L'architecture inhérente à la grille de calcul composée
871 d'entités reliées par des réseaux distants ajoute une
872 autre considération pour la communication entre les processus parallèles
873 sur le caractère hétérogène de l'infrastructure que
874 ce soit la puissance de calcul des serveurs (différents types de processeurs)
875 que le type des liaisons existants entre les blocs de la grille (réseaux
876 hétérogènes). En effet, les environnements complexes de type grille
877 de calcul actuels sont composés généralement de machines physiques
878 dotées de processeurs multi-coeurs de différentes architectures (niveau
879 de cache, latence entre processeurs, \dots ). De plus, en analysant
880 la structure du réseau de communication dans la grille, on peut distinguer
881 $(1)$ d'abord, les échanges internes au niveau d'un
882 élément d'un bloc (entre les coeurs d'un
883 processeur et entre les processeurs d'un même serveur
884 physique), (2) ensuite, les échanges « intra-blocs » caractérisant
885 le trafic entre les différents éléments d'un bloc et
886 (3) enfin, les échanges « inter-blocs » définissant la communication
887 entre les blocs de la grille. Tant au niveau de leur topologie qu'en
888 termes d'efficacité, ces trois niveaux de communication
889 peuvent présenter des caractéristiques complètement différentes et
890 hétérogènes. Ainsi, les deux premiers réseaux sont implémentés généralement
891 dans un contexte de réseau local avec un temps de latence très court
892 et une bande passante large. Tandis que le réseau de liaison entre
893 les blocs de la grille peuvent être de type distant (lignes spécialisées
894 distantes, canaux satellites de communication, réseau de type Internet,
895 \dots ) donc d'une efficacité moindre en termes de
896 latence et de bande passante mais aussi sujet à des perturbations
897 diverses (Figure \figref{cpumulti}). Ces aspects liés à l'architecture
898 de grille de calcul rendent la prédiction de la performance des applications
899 parallèles plus difficiles. En effet, une surcharge élevée due à des
900 perturbations sur le réseau inter-blocs de la grille peut fausser
901 complètement les résultats de la prédiction du temps de communication
902 global de l'application.
903
904
905 \subsubsection{Facteur architecture des processeurs}
906
907 Un autre facteur ayant un impact sur le temps d'exécution
908 global est d'une part, le modèle d'architecture
909 des processeurs de calcul et d'autre part, la puissance
910 intrinsèque de ces derniers.
911
912 La course à la puissance nécessaire aux applications de calcul de
913 haute performance ne cesse de s'accélérer de plus en
914 plus vite exigeant une capacité de calcul de plus en plus grande.
915 C. Willard {[}12{]} résume ce phénomène en disant que lorsqu'un
916 problème - la conception d'un pont par exemple -
917 est résolu, la solution trouvée n'est plus utile parce
918 qu'on ne va pas refaire la conception. On passe généralement
919 à un problème plus complexe - la conception d'un
920 autre ouvrage plus complexe par exemple. La conséquence de cette course
921 (actuellement du pentascale vers l'exascale) a suscité
922 le développement des architectures de processeurs multi-coeurs dont
923 l'accroissement de la puissance a dépassé la traditionnelle
924 loi de Moore (renvoi). De plus, des co-processeurs spécialisés et
925 autres accélérateurs (GPU : Graphic Processing Units {[}{]}) ont été
926 adjoints aux processeurs multi-coeurs pour améliorer le temps de calcul.
927 Une autre architecture variante du multi-coeurs est le MIC (Many Integrated
928 Core) {[}Intel Xeon Phi{]}. Ce type d'unité de calcul
929 joue au départ le rôle de co-processeur pour les applications à haute
930 intensité de calcul. Ainsi, plusieurs coeurs ont été pressés au niveau
931 du processeur (« socket ») emmenant un parallélisme au niveau de la
932 puce. La Figure~\ref{fig:4} donne un aperçu de l'architecture
933 d'un processeur multi-coeurs.
934
935 \mfigure[h]{width=8cm, height=8cm}{"Architecture des CPU multi-coeurs"} {Architecture des CPU multicoeurs} {cpumulti}
936
937 La performance d'une
938 telle entité de calcul repose sur la vitesse d'accès
939 des coeurs aux données en mémoire. En effet, elle est dotée d'un
940 bus rapide et une hiérarchie de cache mémoire beaucoup plus rapide
941 d'accès que la RAM. En termes d'architecture,
942 la classification de Flynn (1972) {[}{]} a créé quatre catégories
943 de machines parallèles selon les flots de données et les flots d'instructions: SISD (Single instruction, single data), SIMD (Single instruction,
944 multiple data), MISD et MIMD (Multiple instruction, multiple data).
945 Cette dernière classe regroupant les machines parallèles généralistes
946 actuelles se décline en trois sous-catégories : 
947
948 \mfigure[h]{width=8cm, height=8cm}{"MIMD Distributed Memory"} {Modèle MIMD Distribué} {MIMDDM}
949
950 \mfigure[h]{width=8cm, height=8cm}{"MIMD Shared memory - SMP"} {Modèle MIMD partagé} {MIMDSM}
951
952 \mfigure[h]{width=8cm, height=8cm}{"MIMD Hybride"} {Modèle MIMD hybride} {MIMDHY}
953
954 \begin{itemize}
955
956 \item [$\bullet$] - Machine MIMD à mémoire partagée (Figure \figref{MIMDSM}) : Les unités de calcul
957 accède à la mémoire partagée via un réseau d'interconnection
958 (généralement, de type GigabitEthernet (renvoi) ou Infiniband (renvoi)).
959 Il existe trois types d'implémentation : le crossbar,
960 le Omega-Network et le Central Databus.
961
962 \item [$\bullet$] Machine MIMD à mémoire distribuée (Figure \figref{MIMDDM}) : Chaque unité de
963 calcul est doté de son espace mémoire propre. Un réseau d'interconnexion
964 intègre l'ensemble assurant la communication entre
965 ces unités. Il existe trois types de machines MIMD à mémoire distribuée: les hypercubes, les fat trees et les autres.
966
967 \item [$\bullet$] Machine MIMD hybride (Figure \figref{MIMDHY}) : Dans ce cas, le système est la
968 combinaison des deux modèles précédents : un ensemble de processeurs
969 partage un espace mémoire et ces groupes sont interconnectés par un
970 réseau.
971
972 \end{itemize}
973
974 A titre d'exemple de machines parallèles, le site Top500.org
975 {[}14{]} classe suivant différents critères les plus performantes.
976 Ainsi, la figure \figref {power} montre l'évolution de la puissance
977 de calcul mondiale dont le top actuel développe un pic de performance
978 théorique proche de 50 PetaFlops (33 Linpack PetaFlops (renvoi)) avec
979 3.120.000 coeurs ( 16 noeuds avec des processeurs de 2x12 coeurs par
980 noeud) et plus de 1.240.000 Gb de mémoire (64 Gb par noeud) avec des
981 accélérateurs 3 $\times$ Intel Xeon Phi par noeud. Il s'agit
982 de la machine Tianhe-2 (MilkyWay-2) de la National Super Computer
983 Center à Guangzhou en Chine {[}15{]}. A la tendance actuelle, l'atteinte
984 de l'exaflops n'est pas loin.
985
986 \mfigure[h]{width=8cm, height=8cm}{"Evolution de la puissance de calcul mondiale"} {Evolution de la puissance de calcul mondiale} {power}
987
988 Pour arriver à de telles puissances, diverses architectures de processeurs
989 ont vu le jour ces dernières années. Outre l'Intel
990 Xeon Phi cité plus haut, les processeurs basés sur les circuits intégrés
991 FPGA (Field Programmable Gate Array) montrent une flexibilité efficace
992 pour s'adapter par configuration au type d'applications
993 à traiter {[}14{]}. En effet, cette architecture permet la programmation
994 de la « matrice de blocs logiques » interconnectée par des liaisons
995 toutes aussi programmables. Cette possibilité de programmation des
996 circuits et des interconnexions entraine aussi la réduction de la
997 consommation d'énergie. Par ailleurs, les unités GPU
998 (Graphics Processing Unit) sont initialement des co-processeurs produits
999 par AMD et NVIDIA pour des applications à fort rendu graphique, libérant
1000 ainsi la charge au processeur. Par la suite, elles ont été complètement
1001 programmables et se sont montrées très efficaces pour les algorithmes
1002 vectoriels. 
1003
1004
1005 \subsubsection{Facteur : Mémoire et stockage}
1006
1007 Les différentes architectures de processeurs parallèles vues plus
1008 haut se trouvent toutes confrontées au problème de chargement de données
1009 à traiter en mémoire. Ainsi, elles se sont dotées de contrôleurs de
1010 mémoire incorporés mais aussi divers niveaux de caches pour faire
1011 face à cette différence de vitesse de traitement entre les processeurs
1012 et les mémoires dynamiques. Par exemple, les machines SIMD utilisent
1013 des registres de communication internes pour communiquer avec les
1014 autres CPUs. Pour les machines de type MIMD où différentes tâches
1015 sont exécutées par chaque processeur à un instant donné entraînant
1016 ainsi une synchronisation obligatoire pour des échanges de données
1017 entre processeurs, ces derniers peuvent exploiter la mémoire partagée
1018 pour effectuer ces transferts ou prévoir des bus dédiés à cette fin
1019 {[}16{]}. 
1020
1021 Par ailleurs, les mémoires, non intégrées au processeur, et les sous-systèmes
1022 de stockage constituent aussi un facteur important ayant un impact
1023 sur le temps d'exécution de l'application
1024 parallèle. En effet, les mémoires externes sont utilisées soit pour
1025 échanger des données entre les CPU, soit pour accéder à la zone mémoire
1026 pour lire, écrire ou mettre à jour des données. Dans ce domaine, en
1027 considérant les architectures parallèles MIMD, on peut classer en
1028 deux grandes catégories selon les modèles de mémoire {[}17{]}: (1)
1029 les multiprocesseurs et (2) les multicomputers (Fig \dots ). La première
1030 catégorie regroupe les machines à mémoire partagée (« shared memory
1031 ») qui se subdivisent en trois classes selon le mode d'accès
1032 des CPU aux mémoires : (1) UMA ou « Uniform Memory Access » où tous
1033 les CPU accèdent une page mémoire physique de façon « uniforme »,
1034 avec le même temps d'accès tolérant ainsi la mise à
1035 l'échelle. Dans ce cas, les CPU sont tous connectés
1036 aux mémoires via un bus ((Figure \figref{UMA}). Un système d'adressage
1037 global est appliqué à l'ensemble des mémoires physiques.
1038 (2) NUMA ou « Non Uniform Memory Access » où les groupes de CPU accèdent
1039 à des mémoires locales à travers des buses et les groupes sont interconnectés
1040 par un réseau de communication ((Figure \figref{NUMA}). Dans ce cas, le temps
1041 d'accès des CPU aux pages mémoires varie selon que
1042 ces dernières sont locales ou distantes. L'espace d'adressage
1043 des mémoires se fait au niveau de chaque groupe de CPU. (3) L'architecture
1044 COMA (« Cache Only Memory Access ») est un hybride avec un modèle
1045 de programmation de mémoire partagée mais une implémentation physique
1046 de mémoire distribué ((Figure \figref{COMA}). Dans ce cas, chaque noeud détient
1047 une partie du système de l'espace d'adressage.
1048 Le partitionnement des données étant dynamique, la structure COMA
1049 n'associe pas la même adresse à une page physique de
1050 la mémoire. Les mémoires locales dans ce cas de figure jouent finalement
1051 un rôle de cache au processeur.
1052
1053 \mfigure[h]{width=8cm, height=8cm}{"UMA architecture"} {Mémoire MIMD: Architecture UMA} {UMA}
1054
1055 \mfigure[h]{width=8cm, height=8cm}{"NUMA architecture"} {Mémoire MIMD: Architecture NUMA} {NUMA}
1056
1057 \mfigure[h]{width=8cm, height=8cm}{"COMA architecture"} {Mémoire MIMD: Architecture COMA} {COMA}
1058
1059 Malgré que dans le cadre de nos travaux, nous n'avions
1060 pas eu une contrainte particulière en termes de système de stockage,
1061 une brève revue des problématiques liées à ce sous-système en environnement
1062 de calcul parallèle est présentée parce qu'il peut
1063 influencer à large echelle sur la prédiction de la performance de
1064 l'application. Les systèmes traditionnels ont opté
1065 pour des architectures NFS (Network File System) ou de type NAS (Network
1066 Attached Storage) ou encore de type SAN (Storage Access Network).
1067 Malgré que les systèmes de stockage NFS et NAS sont relativement faciles
1068 à mettre en oeuvre, l'inconvénient majeur est qu'ils
1069 présentent un point de défaillance unique (SPOF) et ont des difficultés
1070 de monter en échelle. Pour le système SAN, les données sont stockées
1071 dans des baies de stockage accessibles par les unités de calcul à
1072 travers un réseau basé sur des canaux de fibres et des adapteurs de
1073 haut débit (HBA) ; ce qui rend le coût de l'implémentation rapidement
1074 excessif dès que le nombre de noeuds augmente. Dans un environnement
1075 d'applications parallèles, le réseau de communication
1076 doit avoir une très haute performance pour répondre aux besoins d'échange
1077 mais aussi d'accès aux données. En plus, il doit
1078 avoir la flexibilité et la capacité de monter en échelle suivant la
1079 demande du système. Ces caractéristiques requis sont accentués par
1080 la variabilité des besoins en entrées/sorties des applications HPC: dans le même lot d'applications exécutées, certaines
1081 accèdent à des données de manière séquentielle tandis que d'autres
1082 demandent des entrées/sorties aléatoires fortement sensibles. Les
1083 solutions apportées dénommées « système de fichiers parallèle » reposent
1084 sur la conception d'une architecture répondant à ces
1085 prérequis. Dans ce type de système de fichiers, les blocs de données
1086 sont répartis par morceaux dans différents serveurs et dans différentes
1087 locations du système de stockage. On peut ainsi accroitre le débit
1088 de stockage et d'extraction au fur et à mesure que
1089 le nombre de serveurs ou de baies de stockage augmentent.L'architecture sera réalisée par:
1090
1091 \begin{itemize}
1092 \item [$\bullet$] l'introduction d'une couche de « noeuds
1093 de services de fichiers » entre les noeuds de calcul et les baies de
1094 stockage des données. Ces noeuds sont reliés en clusters via un réseau
1095 rapide de type Infiniband.
1096
1097 \item [$\bullet$] L'ajout des «serveurs de metadata » (MDS : MetaData
1098 Server) qui gèrent les métadonnées accessibles à partir des « baies
1099 de stockage des métadonnées » (MDA) avant d'extraire
1100 les données proprement dites sur les baies de stockage en arrière-plan.
1101 \end{itemize}
1102
1103 Les métriques utilisées pour caractériser une telle architecture sont
1104 le nombre nominal d'entrées/sorties par seconde (IOPS)
1105 d'une part et le débit de la bande passante du réseau
1106 reliant les différents composants (Gb/s) d'autre part.
1107 Plusieurs solutions globalement efficaces ont été avancées respectant
1108 cette architecture. On peut citer les « systèmes de fichiers ouverts
1109 » tels que pNFS (Parallel NFS), GFS, XFS, PVFS (Clemson University),
1110 MogileFS {[}\dots {]} mais Lustre {[}\dots {]} présenté dans la figure
1111 \dots{} est largement utilisé en environnement de calcul parallèle
1112 : au moins, la moitié des clusters « top 10 » utilise ce modèle et
1113 plusieurs laboratoires l'ont aussi adopté (Pacific
1114 Northwest National Lab (PNNL), Lawrence Livermore National Lab (LLNL)
1115 mais aussi Los Alamos National Lab (LANL). Lustre utilise les OST
1116 («Object Storage Targets ») dans les serveurs de fichiers (en opposition
1117 au « Block Storage Device ») pour assurer la cohérence et la résilience
1118 du système de fichiers. A titre indicatif, le cluster de PNNL {[}19{]}
1119 avec 1800 processeurs Itanium délivrant jusqu'à 11
1120 TFlops utilise Lustre avec une capacité de stockage de 53 Toctets
1121 avec une bande passante de 3.2 Gbits/s. Chaque noeud du cluster peut
1122 accéder au serveur parallèle Lustre avec un débit de 650 Mb/s.
1123
1124 La mise en oeuvre des systèmes de fichiers parallèles pour les calculs
1125 à haute performance s'approche des technologies utilisées
1126 en entreprise pour exploiter les applications à données intensives
1127 traitant de très grandes masses de données. En effet, les « sciences
1128 de données », « big data », « analytics » (business intelligence,
1129 Datamart, Data Mining) demandent des accès très rapides à des grands
1130 volumes de données variées, structurées ou non structurées, pour en
1131 extraire une information utile. Pour cela, le principe « d'apporter
1132 le calcul auprès des données » (« Bring the compute to the data »)
1133 est appliqué en lieu et place du traditionnel « extraire et charger
1134 en mémoire les données du système de stockage pour traitement par
1135 l'unité de calcul ». Hadoop {[}\dots {]}, une plateforme
1136 de traitement de « big data » la plus utilisée, combine dans la même
1137 machine physique les « noeuds de calcul » et les « noeuds de données
1138 ». Cet ensemble d'outils ayant une architecture fortement
1139 distribuée utilise le mécanisme de transfert des données du système
1140 de stockage « globalement partagé et persistent » ayant une large
1141 capacité vers le système de fichier local avant traitement.
1142
1143
1144 \subsubsection{Facteur : Réseaux de communication}
1145
1146 Dans un contexte d'exécution parallèle et distribuée
1147 des applications, la communication entre les processus de calcul pour
1148 échange de données ou d'instructions est critique et
1149 peut constituer un goulot d'étranglement pour le temps
1150 d'exécution et la montée en charge de l'applicaiton.
1151 En effet, la performance globale quantifiée par le temps d'exécution
1152 de l'application dépend fortement de la nature et de
1153 la typologie des réseaux de communication. Il a été mis en exergue
1154 dans les paragraphes précédents l'importance du trafic
1155 de données entre chaque unité de calcul et les différentes couches
1156 de mémoire vive utilisées par le système. Dans un environnement de
1157 grilles de calcul, de clusters ou de P2P, d'autres
1158 types de réseaux de communication influencent cette performance. 
1159
1160 %Ethernet, Infiniband (56 à 100 Gb/s), Omni-path {[}15{]}
1161
1162 %Facteurs influençant le temps de communication : Type de comm (point
1163 %to point, collective comme broadcast, scatter, gather, reduce)
1164
1165 \subsection{Facteurs liés au code de l'application} 
1166
1167 Outre ces problématiques liées directement à l'environnement
1168 de lancement, plusieurs autres facteurs liés au code de l'application
1169 lors de son exécution peuvent influencer le comportement du système
1170 rendant aussi la prédiction de la performance complexe et difficile.
1171 Ces facteurs liés au comportement du code lors de son exécution en
1172 parallèle vont influencer la performance globale en impactant le temps
1173 de calcul et le temps de communication des données entre les unités
1174 de calcul.
1175
1176 \subsubsection{Facteur : Taille du problème}
1177
1178 Parmi les facteurs impactant le temps de calcul, la taille du problème
1179 peut avoir une grande influence sur le temps de calcul surtout en
1180 strong scaling. En effet, dans ce mode de scalabilité, la
1181 taille du problème étant fixe alors qu'on augmente
1182 la puissance de calcul par l'ajout de processeurs et
1183 coeurs supplémentaires, le temps de calcul va varier en fonction de
1184 ces changements. En mode weak scaling où la taille du problème
1185 augmente dans la même proportion que l'accroissement
1186 du nombre de processeurs / coeurs, le temps de calcul global attendu
1187 reste théoriquement plus ou moins constant. La taille du problème
1188 qui ne cesse d'augmenter pour le besoin des applications
1189 parallèles constitue un élément impactant le temps total d'exécution
1190 du code.
1191
1192 \subsubsection{Performance de la parallélisation} 
1193
1194 Dans cette section, la notion de "performance de la parallélisation" est intrduite pour caractériser la performance d'un code une fois executé en mode parallèle. C. Rosas et Al. {[}\dots {]}
1195 définit cette mesure ($\eta$Parallel) comme étant le produit des trois facteurs fondamentaux "normalisés" suivants dont chaque facteur est quantifié par une valeur entre 0 et 1 : 
1196
1197 \begin{equation}
1198 \label{eq:10}
1199   \eta Parallel =LB \times Ser \times Trf       
1200 \end{equation}
1201 Où :
1202
1203 \begin{itemize}
1204 \item [$\bullet$] L'efficacité de la « répartition des charges » LB ("Load Balancing") est définie comme étant « la perte d'efficacité potentielle» sur le temps de calcul de chaque processus. Elle est mesurée comme
1205 étant le rapport entre le temps de calcul moyen par processeur et
1206 le temps de calcul maximum enregistré sur l'ensemble
1207 des processeurs participants: 
1208
1209 \begin{equation}
1210 \label{eq:11}
1211 LB = {[}  \sum \limits_{k=1}^p  eff_k)  /  p  {]} / max(eff_k) 
1212 \end{equation}
1213 où : p est le nombre de processeurs et $eff_k$ ("Efficiency") le temps de calcul utilisé par le processeur k.
1214
1215 \item [$\bullet$] L'efficacité de la « sérialisation » : Elle représente
1216 l'inefficacité causée par les « dépendances dans le
1217 code » qui se traduit par la nécessité d'échanger des
1218 données entre les processeurs. Ces dernières peuvent impacter de façon
1219 importante la performance du code parallèle. Ce facteur est mesuré comme étant 
1220 le temps maximum enregistré pour tous les processeurs présents lors de l'exécution
1221 du code en faisant abstraction du temps des échanges: on considère comme si on est en présence d'une architecture à « communication instantanée » c'est-à-dire un réseau avec une bande
1222 passante infinie et une latence égale à 0. Dans ce cas, ideal ($eff_i$) est l'efficacité du processeurs i sans le temps de communication.
1223
1224 \begin{equation}
1225 \label{eq:12}
1226 Ser = max ( ideal( eff_i ) )
1227 \end{equation}
1228
1229 \item [$\bullet$] L'efficacité du « transfert » de données : La montée
1230 en charge de la taille du problème impactera la taille des données
1231 à échanger entre les processus. Ce facteur est défini comme étant
1232 la perte de performance globale due aux transferts des données. En
1233 prenant en compte le temps de communication, il est mesuré comme le
1234 ratio entre le maximum entre les temps relatifs d'exécution
1235 des processus concurrents (rapport entre le temps d'exécution $T_i$ 
1236 d'un processus et le temps total réel d'exécution T
1237 du code) et l'efficacité de la sérialisation Ser : 
1238
1239 \begin{equation}
1240 \label{eq:12}
1241 Trf = max( T_i/T ) / Ser
1242 \end{equation}
1243
1244 \end{itemize}
1245
1246 Les auteurs ont montré que cette mesure de la performance de la parallélisation
1247 est indépendante du temps absolu total d'exécution.
1248 Pour les algorithmes itératifs, cette métrique ne dépend pas du nombre
1249 d'itérations avant l'arrêt de l'algorithme
1250 : le temps d'exécution d'une itération
1251 reste constant.
1252
1253 Cette quantification de la performance de la parallèlisation du code
1254 repose sur les trois paramètres suivants appelés aussi « inhibiteurs
1255 de la performance » qui décrivent selon {[}12{]} la "sensibilité"{}
1256 du code : (1) la sensibilité à la fréquence CPU, (2) la sensibilité
1257 à la bande passante mémoire et enfin (3) le temps consacré aux communications
1258 et les entrées / sorties. Selon l'algorithme considéré
1259 ou l'aspect scientifique du code, l'application
1260 peut être influencée par ces paramètres. L'analyse
1261 du code par le profiling et l'optimisation pourront
1262 aider à cette sensibilité du code et à améliorer la performance de
1263 sa parallèlisation. 
1264
1265 Dans le cadre de ces travaux, à plus large échelle, c'est-à-dire
1266 en augmentant la taille du problème en entrée comme la capacité de
1267 calcul disponible, les facteurs suivants vont influencer de plus en
1268 plus le temps d'exécution de l'application
1269 impactant ainsi la performance de la parallélisation du code. Selon
1270 {[}18{]}, même si la surcharge engendrée par la parallélisation du
1271 code (« surcharge due à la parallélisation ») ainsi que celle naturellement
1272 subie par le système comme dans une exécution séquentielle (« surcharge
1273 système ») peuvent ne pas être négligeables, on constate
1274 comme précédemment que les facteurs liés à « l'oisivité
1275 » des processeurs ainsi que la communication entre les différentes
1276 couches mémoires (DRAM, cache, « mémoire d'attraction
1277 » (renvoi) ) peuvent peser lourdement à grande échelle sur la performance
1278 globale de l'application. La surcharge due à la parallélisation
1279 provient de l'initialisation par processeur pour une
1280 exécution parallèle (qui n'existe pas lors d'une
1281 exécution séquentielle). Le partitionnement des tâches mais aussi les tâches
1282 de vérrouillage et de déverrouillage lors d'une entrée
1283 et de sortie d'une section critique du code contribue
1284 à l'importance de ce facteur. La surcharge système
1285 comme les défauts de pages, l'interruption horloge,
1286 le mécanisme de fork/join, \dots{} peut être accentuée par rapport
1287 à une exécution séquentielle surtout pour les programmes à haut degré
1288 de parallélisme parce que ces actions sont inhérentes à un processeur
1289 et l'augmentation du nombre de processeurs lors d'une
1290 exécution parallèle peut engendrer une surcharge système non négligeable.
1291 Toutefois, comme avancé plus haut, ces surcharges peuvent ne pas être
1292 significatives comparées au temps perdu suite à l'oisivité
1293 (idle) des blocs de calcul. Cette dernière est surtout due à une parallélisation
1294 insuffisante ou encore par une répartition des charges non optimale.
1295 Enfin, le facteur communication nécessaire pour le thread courant
1296 de chercher des données qui ne sont pas localisées dans ses mémoires
1297 caches locales peut affecter dramatiquement la performance de la parallélisation
1298 du programme. En effet, pendant cette recherche, l'unité
1299 de calcul reste bloqué (stalled).
1300
1301
1302 %\section*{Solutions apportées}
1303  
1304
1305 \section{Techniques d'analyse de performance des applications parallèles}
1306 \subsection{Généralités et objectifs}
1307 L'analyse de la performance des applications parallèles est largement utilisée et même recommandée lors de l'écriture et la mise au point du programme. En effet, pour déterminer et estimer le coût de l'execution du code, il est d'usage de procéder à l'analyse de la performance dans le but d'optimiser le programme parallèle afin de trouver la meilleure performance en termes de coûts (réduction du temps d'exécution, efficacité de l'utilisation des ressources, ...). \\
1308 Cette opération consiste surtout à détecter les "régions" et "hotspots" qui correspondent aux parties du code les plus consommatrices de ressources (CPU, mémoire) en particulier celles qui consomment le plus de temps de calcul ou de communication. Elle permet aussi de localiser les éventuels goulots d'étranglement lors de l'exécution du code. Les résultats de cette analyse permet de guider le développeur sur ses actions pour améliorer le code par la réécrire de certaines parties du code par exemple ou de procéder à un meilleur découpage du problème pour une meilleure répartition des charges et l'utilisation des mémoires ou encore par la modification de l'algorithme pour permettre une parallélisation plus poussée.
1309 Plusieurs outils existent avec différentes approches pour effectuer cette analyse.  
1310 La section suivante montre que le modèle de performance établi lors de cette analyse permet aussi d'anticiper sur la prédiction de la performance de l'application parallèle avec la montée en charge [21].   En effet, l'analyse de la performance d'un code peut être utilisée pour prédire le comportement du programme soit d'une part sur un environnement de machines déterminé (benchmarking) soit d'autre part, avec une taille de problème plus importante.
1311
1312 \subsection{Approches et méthodologie}
1313 Dans le domaine du calcul parallèle, l'analyse du code d'une application suit les trois étapes suivantes [21,22]:
1314 \begin{itemize}
1315 \item [$\bullet$] L'acquisition et la collecte des données
1316 \item [$\bullet$] L'enregistrement des données collectées
1317 \item [$\bullet$] La représentation des résultats de l'analyse 
1318 \end{itemize}
1319 Les deux derniers points sont regroupés sous le nom générique de "profiling" ou de "tracing" selon le modèle adopté de l'acquistion des données. La figure \figref{anaperf} montre ces trois couches de l'analyse de performance et décrit les différentes techniques utilisées pour cette analyse. Les flèches tracées sur la figure montrent les combinaisons possibles entre les techniques présentées. D'ailleurs, dans la pratique, d'autres combinaisons peuvent être expérimentées pour atteindre les objectifs fixés.
1320
1321 \mfigure[h]{width=8cm, height=8cm}{"Performance Analysis techniques"} {Classification des techniques d'analyse de la performance} {anaperf}
1322
1323 Cette approche à trois étapes commence par la collecte des données sur la performance du code qui consiste à deux techniques les plus utilisées à savoir le "sampling" (ou "l'échantillonage") et "l'instrumentation basée sur les évenements".
1324 \begin{itemize}
1325 \item [$\bullet$] Le "sampling" ou "l'echantillonage" capture les données décrivant l'état du code lors de l'exécution du programme à chaque instant défini par la fréquence de l'echantillonage. IL est réalisé généralement avec la mise en place d'un timer qui déclenche la collecte des données selon une période définie. Ces dernières se rapportent sur les statistiques relatives aux appels de fonctions ("call-path" des fonctions) mais aussi sur les compteurs matériels [22]. Ainsi, il est d'usage de collecter le temps d'exécution d'un fonction ou combien de fois la fonction a été appellée ou encore de façon plus détaillée, combien de fois une ligne de code est exécutée. Evidemment, l'efficacité de la méthode dépend du taux d'échantillonnage: les informations entre deux points de collecte ne sont pas disponibles pour l'analyse ultérieure. Par contre, la surcharge engrendrée par la technique peut être contrôlée par l'utilisateur par un choix adéquet de la fréquence de l'echantillonage. \\
1326 L'alternative pour collecter les données de la performance d'une application parallèle se porte sur l'instrumentation basée sur les évenements. D'abord, de façon générale, l'instrumentation du code consiste à ajouter manuellement ou automatiquement des instructions supplémentaires à des endroits choisis afin de rapporter à chaque passage des informations spécifiques. A titre d'exemple, on peut positionner un timer au début d'une portion du code et d'arrêter ce timer à la sortie de cette région. On peut ainsi collecter le temps total d'execution consommé par l'application pour exécuter cette partie du programme. Cette technique est largement utilisée par exemple pour détermijner le temps de communication nécessaire lors d'un appel d'une instruction MPI de transfert ou collective (MPI\_send, MPI\_receive ou autre MPI\_Barrier). Cette modification directe qui nécessite une récompilation du code est aussi appellée "instrumentation au niveau de la source". D'autres techniques utilisant des outils existent telles que les "libraries wrapping" ou la "réécriture du code binaire" [22]. Ces dernières n'ont pas besoin d'une recompilation du code.
1327
1328 \item [$\bullet$] La deuxième étape du processus de la collecte des données en vue d'une future analyse consiste à enregister soit en mémoire soit sur un support de stockage externe les données obtenues lors de l'étape précédente. Deux techniques peuvent être exploitées à cette fin. D'abord, le "logging" ou le "tracing" permet d'ajouter le facteur temps sur les données collectées. Ainsi, avant le stockage, chaque entrée de données est estampillée d'une date de l'évenement (au format date - heure). Cette opération peut ajouter un temps de surcharge non négligeable lors de l'exécution.\\
1329 Afin de réduire cette dernière mais aussi pour optimiser la taille du fichier de trace obtenu, la technique de "summarization" consiste à agréger les données après la collecte et de ne stocker que le minimum d'informations utiles. Ce dernier est généralement appellé le "profile" de l'application [21,22]. Certains détails peuvent être perdus avec cette méthode mais il s'agit ici de faire une balance entre la taille la granularité de l'information et la taille des données stockées.   
1330   
1331 \item [$\bullet$] La troisième et dernière étape de l'analyse de la performance concerne la visualisation des données collectées en vue de l'analyse proporement dite et des décisions à prendre pour améliorer et optimiser l'exécution de l'application. Dans la même ligne de l'étape précédente, soient les données sont visualisées "au fil du temps" en suivant l'exécution du code sur les différentes machines de l'environnement parallèle, soient elles sont représentées par un groupement selon un facteur compréhensible par l'analyste (par fonction par exemple), on est en présence d'une technique générant un "timelines" ou un "profile" de l'application respectivement. 
1332
1333 \end{itemize}
1334
1335 Noter que l'approche présentée dans cette section présente les techniques en vue d'optimiser le code de l'application pour un meilleur temps d'exécution en l'occurrence. Ainsi, elle ne prend pas en compte la performance lors de la scalabilité de l'application pour une prédiction du comportement du code lors du passage à l'echelle. Cette partie sera traitée au paragraphe ...
1336 Plusieurs outils d'analyse de la performance parallèle utilisant une ou des combinaisons de ces différentes techniques tels que Gprof, PerfExpert, IPM, TAU, PAPI, HPCToolkit, SCala [...] sont largement utilisés. La prochaine section donne plus de détails sur certains de ces produits.
1337
1338
1339 \subsection{Quelques outils d'analyse de performance}
1340
1341         - IPM
1342
1343 TAU a été conçu à l'Université d'Oregon comme un outil open source d'évaluation de performance [24]. Il intègre le profiling et le tracing constituant une platerme complète couvrant les trois étapes de l'analyse d'une applicatio parallèle. L'instrumentation du code peut être effectuée d'une façon complètement automatique avec un package fourni ("PDT - Program Database Toolkit - for routines")collectant toutes les informations sur les régions et hotspots du code, l'utilisation mémoire, les boucles, les entrées/sorties,...Selon le paramètrage de lancement, TAU peut collecter des informations les plus fines telles que le temps passé à chaque instruction dans une boucle ou le temps passé dans les communications à une étape du programme particulièrement dans les instructions collectives MPI par exemple. Toutes ces données peuvent par la suite être visualisées sous forme graphique (Paraprof 3D browser) pour une analyse fine afin d'optimiser la performance.
1344
1345         - SCALASCA
1346
1347
1348 \section{Méthodes de prédiction de la performance des applications parallèles}
1349
1350 %Voir [23]
1351
1352 \section{Conclusion partielle}
1353
1354 \part{PARTIE II - Travaux de contributions, résultats et perspectives}
1355
1356 \chapter{Comparaison par simulation à large échelle de la performance de deux algorithmes itératifs parallèles en mode asynchrone}
1357
1358 \section{Protocoles et expérimentations}
1359
1360 \section{Résultats}
1361
1362 \section{Conclusion partielle}
1363
1364 \chapter{Simulation avec SIMGRID de l\textquoteright exécution des solveurs linéaires en mode synchrone et asynchrone sur un environnement multi-coeurs simulés}
1365
1366 \section{Protocoles et expérimentations}
1367
1368 \section{Résultats}
1369
1370 \section{Conclusion partielle}
1371
1372 \chapter{Modèle de prédiction de la performance à large échelle d'un algorithme itératif parallèle}
1373
1374 \section{Approche et méthodologie}
1375
1376 \section{Expérimentations et résultats}
1377
1378 \section{Conclusion partielle}
1379
1380 \chapter{Conclusion générale et perspectives}
1381
1382 \section{Conclusion générale}
1383
1384 \section{Travaux futurs et perspectives}
1385
1386
1387 \newpage
1388 %%--------------------
1389 %% Start the end of the thesis
1390 \backmatter
1391
1392 %%--------------------
1393 %% Bibliography
1394  
1395 %% PERSONAL BIBLIOGRAPHY (use 'multibib')
1396  
1397 %% Change the style of the PERSONAL bibliography
1398 %\bibliographystylePERSO{phdthesisapa}
1399  
1400 %% Add the chapter with the PERSONAL bibliogaphy.
1401 %% The name of the BibTeX file may be the same as
1402 %% the one for the general bibliography.
1403 %\bibliographyPERSO{biblio.bib}
1404  
1405 %% Below, include a chapter for the GENERAL bibliography.
1406 %% It is assumed that the standard BibTeX tool/approach
1407 %% is used.
1408  
1409 %% GENERAL BIBLIOGRAPHY
1410  
1411 %% To cite one of your PERSONAL papers with the style
1412 %% of the PERSONAL bibliography: \cite{key}
1413  
1414 %% To force to show one of your PERSONAL papers into
1415 %% the PERSONAL bibliography, even if not cited in the
1416 %% text: \nocite{key}
1417  
1418 %% The following line set the style of
1419 %% the GENERAL bibliogaphy.
1420 %% The "phdthesisapa" is a "apalike" style with the following
1421 %% differences:
1422 %% a) The titles are output with the color of the institution.
1423 %% b) The name of the PhD thesis' author is underlined.
1424 \bibliographystyle{phdthesisapa}
1425 %% The following line may be used in place of the previous
1426 %% line if you prefer "numeric" citations.
1427 %\bibliographystyle{phdthesisnum}
1428  
1429 %% Link the GENERAL bibliogaphy to a BibTeX file.
1430 \bibliography{biblio.bib}
1431
1432 \part*{BIBLIOGRAPHIE ET REFERENCES}
1433
1434 {[}6{]} J.M. Bahi, S. Contassot-Vivier, R. Couturier. Interest of the asynchronism in parallel iterative algorithms on meta-clusters. \textit{LIFC - Université de Belford-Montbéliard}.
1435
1436 {[}7{]} T.P. Collignon and M.B. van Gijzen. Fast iterative solution of large sparse linear systems on geographically separated clusters. \textit{The International Journal of High Performance Computing Applications} 25(4) 440\textendash 450.
1437
1438 {[}8{]} D. Bertsekas and J. Tsitsiklis. Parallel and Distributed Computation, Numerical
1439 Methods. \textit{Prentice Hall Englewood Cliffs N. J., 1989}.
1440
1441 {[}9{]} C. E. Ramamonjisoa, L. Z. Khodjav, D. Laiymani, A. Giersch and R. Couturier. Simulation of Asynchronous Iterative Algorithms Using SimGrid. \textit{2014 Femto-ST Institute - DISC Department - Université de Franche-Comté, IUT de Belfort-Montbéliard}
1442
1443 {[}10{]}  M. J. Voss and R. Eigemann. Reducing Parallel Overheads Through Dynamic
1444 Serialization. \textit{Purdue University School of Electrical and Computer Engineering}.
1445
1446 {[}11{]} K. J. Barker, K. Davis, A. Hoisie, D. J. Kerbyson, M. Lang, S. Pakin and J. C. Sancho. Using performance modeling to design large-scale systems. \textit{Los Alamos National Laboratory(LANL), New Mexico}.
1447
1448 {[}12{]} M. Dubois and X. Vigouroux. Unleash your HPC performance with Bull.
1449 \textit{Maximizing computing performance while reducing power consumption}. http://www.hpctoday.fr/published/regional/operations/docs/W-HPCperformance-en1.pdf
1450
1451 {[}14{]} Site du top500. http://www.top500.org
1452
1453 {[}15{]} C. Harris et al. HPC Technology Update. \textit{Pawset Supercomputing Center - Sept 2015}. http://www.pawsey.org.au/wp-content/uploads/2015/09/Pawsey\_HPC\_Technology\_Update\_20150923.pdf
1454
1455 {[}16{]} A. J. van der Steen, J. J. Dongarra. Overview of Recent Supercomputers.
1456 \textit{Academic Computing Centre Utrecht, the Netherlands, Department of Computer Science, University of Tennessee, Knoxville, Mathematical Sciences Section, Oak Ridge, National Laboratory, Oak Ridge}. http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.49.3743\&rep=rep1\&type=pdf
1457
1458 {[}17{]} V. Rajput , S. Kumar, V.K.Patle. Performance Analysis of UMA and NUMA Models".
1459 \textit{School of Studies in Computer Science Pt.Ravishankar Shukla University, Raipur,C.G.} http://www.ijcset.net/docs/Volumes/volume2issue10/ijcset2012021006.pdf
1460
1461 {[}18{]} D. Nguyen, Raj Vaswani and J. Zahorian. Parallel Application Characterization for
1462 Multiprocessor Scheduling Policy Design. \textit{Department of Computer Science and Engineering - University of Washington, Seattle, USA}.
1463
1464 {[}19{]} M. Ewan. Exploring Clustered Parallel File Systems and Object Storage.
1465 \textit{2012}. https://software.intel.com/en-us/articles/exploring-clustered-parallel-file-systems-and-object-storage
1466
1467 {[}20{]} F. Silva, R. Rocha: Parallel and Distributed Programming - Performance Metrics. \textit{DCC-FCUP}. 
1468
1469 {[}21{]} G. Ballard et Al. Communication Optimal Parallel Multiplication
1470 of Sparse Random Matrices". \textit{UC Berkeley, INRIA Paris Rocquencourt, Tel-Aviv University}. http://www.eecs.berkeley.edu/\textasciitilde{}odedsc/papers/spaa13-sparse.pdf
1471
1472 {[}22{]} T. Ilsche, J. Schuchart, R. Schöne, and Daniel Hackenberg. Combining Instrumentation and Sampling for Trace-based Application Performance Analysis. \textit{Technische Universität Dresden, Center for Information Services and High Performance Computing (ZIH), 01062 Dresden, Germany}
1473
1474 {[}23{]} J.A. Smitha, S.D. Hammond, G.R. Mudalige - J.A. Davis, A.B. Mills, S.DJarvis. A New Profiling Tool for Large Scale Parallel Scientific Codes. \textit{Department of Computer Science, University of Warwick,Coventry, UK} 
1475  
1476 {[}24{]} S. Shende - New Features in the TAU Performance System - \textit{ParaTools, Inc and University of Oregon. 2014}.
1477
1478 {[}25{]} M. Mollamotalebi1, R. Maghami1, A. S. Ismail - "Grid and Cloud Computing Simulation Tools" - \textit{International Journal of Networks and Communications 2013, 3(2): 45-52 - DOI: 10.5923/j.ijnc.20130302.02}
1479
1480 {[}26{]} F. Cappello et al. - Grid’5000: a large scale and highly reconfigurable Grid experimental testbed - \textit{INRIA, LRI, LIP, IRISA, LORIA, LIFL, LABRI, IMAG}
1481
1482 {[}27{]} Grid'5000 - http://www.grid5000.org 
1483  
1484 {[}28{]} A. Sulistio, C. Shin Yeo et R. Buyya - Simulation of Parallel and Distributed Systems: A Taxonomy and Survey of Tools  Grid Computing and Distributed Systems (GRIDS)- \textit{Laboratory Dept of Computer Science and Software Engineering The University of Melbourne, Australia}.
1485
1486 {[}29{]} http://www.dau.mil/ - Defense Acquisition University (DAU) - Ft Belvoir (VA) - USA.
1487
1488 {[}30{]} R. M. Fujimoto - Parallel and Distributed Simulation Systems - \textit{Georgia Institute of Technology - John Wiley \& Sons, Inc. - ISBN 0-471-18383-0} - 2000
1489
1490 {[}31{]} MPI: A Message-Passing Interface Standard Version 3.- \textit{University of Tennessee, Knoxville, Tennessee.} - 2015
1491
1492 {[}32{]} MPICH : www.mpich.org
1493
1494 {[}33{]} OpenMPI : www.openmpi.org
1495 %%--------------------
1496 %% List of figures and tables
1497  
1498 %% Include a chapter with a list of all the figures.
1499 %% In French typograhic standard, this list must be at
1500 %% the end of the document.
1501 \listoffigures
1502  
1503 %% Include a chapter with a list of all the tables.
1504 %% In French typograhic standard, this list must be at
1505 %% the end of the document.
1506 \listoftables
1507  
1508 %%--------------------
1509 %% Include a list of definitions
1510 \listofdefinitions
1511
1512 %%--------------------
1513 %% Appendixes
1514 \appendix
1515 \part{Annexes}
1516  
1517 \chapter{Premier chapitre des annexes}
1518
1519 \chapter{Second chapitre des annexes}
1520  
1521 \end{document}