1 %% LyX 2.1.4 created this file. For more info, see http://www.lyx.org/.
2 %% Do not edit unless you really know what you are doing.
3 \documentclass[french]{report}
5 % Font type and font size
9 %Espacement des paragraphes
10 \setlength{\parskip}{0.3cm}
11 %interligne paragraphe : voir spacing ci-dessous
22 % use vmargin=2cm to make vertical margins equal to 2cm.
23 % us hmargin=3cm to make horizontal margins equal to 3cm.
24 % use margin=3cm to make all margins equal to 3cm.
28 \usepackage[T1]{fontenc}
29 \usepackage[latin9]{inputenc}
31 \usepackage{amsmath, amsthm, amssymb}
34 \DeclareUrlCommand\email{\urlstyle{same}}
36 \usepackage[autolanguage,np]{numprint}
38 \renewcommand*\npunitcommand[1]{\text{#1}}
39 \npthousandthpartsep{}}
42 \usepackage[textsize=footnotesize]{todonotes}
44 %Affichage des figures
45 %%%\usepackage{caption}
47 \usepackage{subcaption}
50 \newcommand{\MI}{\mathit{MaxIter}}
53 \setcounter{secnumdepth}{3}
54 \setcounter{tocdepth}{3}
69 Table des abréviations
76 Bibliographie et références
84 \part*{PARTIE I : Contexte scientifique et revue de l\textquoteright état de l'art}
86 \chapter*{Chapitre 1 : Cadre de travail et contexte scientifique}
88 \section*{1.1 Classe des algorithmes itératifs parallèles à large échelle dans une grille de calcul}
90 Dans le cadre de ces travaux, nous nous sommes intéressés particulièrement
91 sur la performance d'une classe d'algorithmes
92 parallèles dits itératifs. De plus en plus, cette méthode itérative
93 est utilisée pour résoudre des problèmes dans différents domaines
94 scientifiques tels que la mécanique, la prévision du temps, le traitement
95 d'images ou encore l'économie financière.
96 Elle consiste à appliquer, contrairement à la méthode de résolution
97 « directe », à partir d'une valeur initiale $X_0$ une
98 transformation à un vecteur inconnu de rang n par des itérations successives
99 afin de s'approcher par approximation à la solution
100 recherchée X{*} avec une valeur résiduelle la plus réduite possible.
103 X^{k+1} = \text{f ( } X^k \text{ ), k = 0,1, \dots{} }
106 où chaque $x_k$ est un vecteur à n dimension et f une fonction de $R^n$ vers
109 La solution du problème sera donc le vecteur X{*} tel que X{*} = f
110 (X{*}), c'est-à-dire X{*} est un point fixe de f.
112 L'exécution en parallèle d'un tel algorithme
113 consiste au découpage (partitionnement) du problème en plus petits
114 morceaux (ou blocs) et d'assigner chaque bloc à une
115 unité de calcul. Chaque processeur tourne le même algorithme de façon
116 concourante jusqu'à la détection de la convergence
117 locale qui peut être obtenue soit par l'atteinte d'un
118 nombre maximum fixé d'itérations soit que la différence
119 entre les valeurs du vecteur inconnu entre deux itérations successives est devenue
120 inférieure à la valeur résiduelle convenue. Cette condition de convergence
121 locale peut être écrite comme suit :
123 (k\leq \MI) \text{ or } (\|X_l^k - X_l^{k+1}\|_{\infty}\leq\epsilon)
125 La convergence globale sera déclarée lorsque tous les processeurs
126 ont atteint leur convergence locale. De façon générale, plusieurs
127 travaux ont démontré la convergence de ces méthodes itératives pour
128 la résolution de systèmes linéaires ou non linéaires avec un taux
129 de convergence élevé {[}7, 8{]}. Lors de l'exécution
130 dans chaque bloc de calcul, l'algorithme peut demander l'échange
131 de données comme des résultats intermédiaires par exemple entre des
132 processeurs voisins avant d'entamer une nouvelle itération.
133 Les sections suivantes vont détailler les notions liées à la résolution
136 \subsection{Partitionnement du problème}
138 Comme expliqué plus haut et appliquant le principe du "diviser pour regner", le problème de résolution d'un
139 algorithme itératif parallèle commence par un découpage de la matrice $n \times n$
140 en entrée en plus petits blocs dont le nombre dépend du nombre
141 de processeurs disponibles. On parle de « décomposition de domaine
142 » en considérant les données en priorité en opposition à la « décomposition
143 fonctionnelle » où le partitionnement se base sur le calcul : diviser
144 le calcul en des tâches indépendantes assignées aux processeurs. La
145 figure Figure~\ref{fig:1.a} présente un exemple de découpage en domaines de la
146 matrice initiale entre deux clusters constitués chacun de 18 processeurs, soit un total de 36 processeurs.
149 % \includegraphics[width=60mm,keepaspectratio]{"3D data partitionning btw 2 clusters"}
150 %\caption{Découpage d'une matrice tridimensionnelle entre deux clusters formés de 18 processeurs %chacun.}
155 \begin{subfigure}{0.5\textwidth}
156 \includegraphics[width=0.9\linewidth, height=6cm]{"3D data partitionning btw 2 clusters"}
157 \caption{Découpage d'une matrice tridimensionnelle entre deux clusters formés de 18 processeurs chacun}
160 \begin{subfigure}{0.5\textwidth}
161 \includegraphics[width=1\linewidth, height=5cm]{"1D-2D-3D Domain decomposition"}
162 \caption{Décomposition en domaines 1D, 2D et 3D}
165 \caption{Partitionnement du problème}
170 %\begin{minipage}{\linewidth}% to keep image and caption on one page
171 %\makebox[\linewidth]{% to center the image
172 % \includegraphics[keepaspectratio=true,scale=0.6]{"3D data partitionning btw 2 clusters"}}
173 %\captionof{figure}{Découpage d'une matrice tridimensionnelle entre deux clusters formés de 18 %processeurs chacun.}\label{fig:1.1}
176 %\begin{wrapfigure}{l}{0.3\textwidth}
177 %\includegraphics[width=0.8\linewidth]{"3D data partitionning btw 2 clusters"}
178 %\caption{Découpage d'une matrice tridimensionnelle entre deux clusters.}
182 Chaque cluster va prendre en charge un bloc de 18 "sous-domaines". Chaque
183 processeur $P_i$ tournera l'algorithme sur le cube qui
184 lui est assigné. Les sous domaines s'échangent des
185 données par leurs points périphériques {[}9{]} au niveau du cluster mais
186 aussi entre les clusters en suivant une organisation logique d'un
187 anneau virtuel dont les n½uds sont les processeurs $P_i$.
189 Une fois partitionnée en m blocs, la relation reccurente de l'équation \eqref{eq:1} peut
192 x_{k+1} = (x_1^k, x_2^k, \dots , x_n^k), k=1,\dots n
194 ou en termes de blocs :
196 X_{k+1} = (X_1^k, X_2^k, \dots , X_n^k), k=1,\dots m
198 Donc, on peut écrire :
203 (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))
207 X_i^{k+1} = F_i (X^k) = Fi ( X_1^k , X_2^k , \dots{} , X_m^k)\>pour \>i=1,\dots,k
209 L'exemple donné montre un partitionnement « naturel
210 » du problème initial par un découpage uniforme avec des blocs de même taille. Il met en exergue deux facteurs importants
211 à tenir en compte lors de cette opération :
213 \item [$\bullet$] essayer de répartir
214 uniformément la charge assignée à chaque processeur : effectivement,
215 un déséquilibre de charge entre les unités de calcul peut impacter
216 négativement la performance globale du système;
217 \item[$\bullet$] réduire au maximum
218 les communications entre les processeurs : ces temps d'échange
219 coûtent aussi chers au niveau de la performance globale.
222 type de l'algorithme, on peut faire un classement en
223 trois catégories {[}21{]} selon le partitionnement ou la décomposition
224 de domaine choisie (Figure~\ref{fig:1.b} ) :
226 \item[$\bullet$] 1D où la matrice est découpée
227 suivant des briques dont deux dimensions de longueur n et la dernière plus courte que n.
228 \item [$\bullet$] 2D avec des briques dont une dimension est de longueur n et les
229 deux autres plus courtes que n;
230 \item [$\bullet$] et enfin, 3D avec des briques dont les
231 3 dimensions sont plus courtes que n.
234 \subsection{Modes d'exécution synchrone et asynchrone}
236 Lors de l'exécution des algorithmes itératifs parallèles
237 sur un environnement de type grille de calcul, le temps de communication
238 résultant des échanges de données entre les unités de calcul est aussi
239 important que le temps de calcul lui-même. En effet, un ratio montrant
240 un équilibre entre ces deux temps constitue un des objectifs dès le
241 partitionnement du problème. Le temps de communication est impacté
242 sur la façon dont les échanges sont effectués.
245 \begin{subfigure}{0.5\textwidth}
246 \includegraphics[width=5cm, height=5cm, scale=3]{"Synchronous iterations model"}
247 \caption{Modèle de communication synchrone}
250 \begin{subfigure}{0.5\textwidth}
251 \includegraphics[width=5cm, height=5cm, scale=3]{"Asynchronous iterations model"}
252 \caption{Modèle de communication asynchrone}
255 \caption{Modèles de communication}
259 D'une part, ces paquets de données peuvent être transférés
260 de façon « synchrone » : dans ce cas, une coordination de l'échange
261 est assurée par les deux parties. A la fin de chaque itération, l'émetteur,
262 une fois la poignée de main établie, envoie les données et attend
263 jusqu'à la réception d'un accusé de
264 réception par le récepteur. L'algorithme même est en
265 mode synchrone parce qu'une étape de synchronisation
266 de tous les processeurs est nécessaire avant d'entamer
267 une nouvelle itération. La figure Figure~\ref{fig:2.a} montre les actions dans
268 le temps lors d'un échange en mode synchrone entre
269 deux processeurs. Les flèches montrent la date d'envoi
270 par $P_1$ et la date de réception du paquet par $P_2$. On parle ici de mode
271 de communication « bloquante » : la nouvelle itération ne peut commencer
272 tant que tous les processus n'ont pas fini leurs communications.
274 D'autre part, l'échange de données peut
275 s'effectuer en mode « asynchrone ». Dans ce cas, l'émetteur
276 peut envoyer de l'information au destinataire à tout
277 moment et aucune synchronisation n'est nécessaire.
278 Chaque processeur travaille avec les données qu'il
279 reçoit au fil du temps. La communication est ici non bloquante. La
280 conséquence immédiate de ce mode de communication est l'absence
281 des périodes où le traitement est arrêté (CPU stalled ou idle) parce
282 qu'il doit attendre l'accusé de réception
283 du récepteur (Figure~\ref{fig:2.b} ). En mode asynchrone, le temps entre chaque
284 itération peut varier notablement dû à la différence éventuelle de
285 la puissance de chaque processeur ou encore de la performance des
286 différents réseaux de communication utilisés. {[}7{]} montre à travers
287 des algorithmes itératifs classiques les intérêts de la mise en ½uvre
288 de communication asynchrone lors de la résolution mais aussi les éventuels
289 inconvénients. Parmi les avantages de ce mode de communication, la
290 réduction du temps de synchronisation entre processeurs peut impacter
291 positivement le temps global d'exécution surtout en
292 environnement hétérogène. De même, le chevauchement du calcul avec
293 la communication des données peut aussi améliorer la performance de
294 l'application. Enfin, un partitionnement lors de de
295 la décomposition du domaine tenant compte de l'absence
296 de synchronisation en mode asynchrone peut aussi contribuer à la performance
297 en répartissant efficacement le calcul. Les inconvénients de l'asynchronisme
298 peuvent venir de la détection de la convergence globale étant donné
299 qu'il n'y a pas de synchronisation des
300 opérations. L'arrêt doit être décidé après une forme
301 de communication globale à un certain point de l'algorithme
302 ; il peut se faire lors de la communication inévitable entre processus
303 pour annoncer la convergence locale. Un autre problème est aussi la
304 tolérance aux pannes quoique cette défaillance peut aussi concerner
305 le mode synchrone : si un des processus contribuant dans la résolution
306 du problème se plante, tout le processus itératif peut s'écrouler
307 si un mécanisme de reprise sur panne est mis en place.
309 \section*{1.2 Méthodes de résolution parallèles du problème de Poisson et de
310 l'algorithme two-stage multisplitting de Krylov}
312 \subsection{Algorithme de Jacobi}
314 \subsection{Méthode de résolution GMRES}
318 Version « two-stage »
320 \subsection{Solveur multisplitting}
326 \section*{1.3 SIMGRID/SMPI : Simulateur d'exécution d'algorithmes
327 parallèles MPI dans une grille de calcul}
329 \subsection{MPI - Message Passing Interface}
331 \subsection{Simulateur SIMGRID}
333 \section*{1.4 Motivations}
335 \section*{1.5 Conclusion partielle}
338 \chapter*{Chapitre 2 : Etat de l'art et travaux de recherche associés}
340 \section*{2.1 Concepts et définitions}
342 Dans cette section, des concepts et des définitions relatifs à nos
343 travaux sont passés en revue.
345 \subsection{Performance de l'application parallèle et scalabilité}
347 La performance d'une application dans un environnement
348 distribué peut être définie comme « la capacité de réduire le temps
349 pour résoudre le problème quand les ressources de calcul augmentent
350 » {[}20{]}. L'objectif est de minimiser le
351 temps d'exécution globale de l'application
352 en ajoutant des ressources supplémentaires (processeurs, mémoire,
353 \dots ). D'où la notion de « scalabilité » ou "montée
354 en charge" ou encore "passage à l'echelle" dont l'objectif principal est d'accroitre
355 la performance quand la complexité ou la taille du problème augmentent.
356 Comme nous allons voir tout au long de ce chapitre, deux catégories
357 de facteurs concourent à la difficulté de la prédiction des applications
358 parallèles en considérant leur performance après la montée en charge
359 des ressources : d'une part, on peut énumérer les facteurs
360 liés à l'écosystème d'exécution tels
361 que le nombre de processeurs, la taille de la mémoire et de sous-système
362 de stockage, la latence et la bande passante des réseaux de communication
363 ; d'autre part, les facteurs liés au code lui-même
364 impactent aussi la performance de l'application affectant
365 ainsi la prédiction : il s'agit par exemple de la fréquence
366 de la communication et de la synchronisation, la faible parallélisation
367 mais aussi le mauvais ordonnancement des tâches (équilibrage de charge)
370 Afin de quantifier la performance d'un code, plusieurs
371 métriques ont été définies mais le temps d'exécution
372 global nécessaire pour atteindre la fin du programme reste le plus
373 simple. On peut écrire :
377 T_{exec} = T_{calc} + T_{comm} + T_{surcharge}
380 \indent\indent$T_{exec}$ : Temps d'exécution global \\
381 \indent\indent$T_{calc}$ : Temps de calcul \\
382 \indent\indent$T_{comm}$ : Temps de communication \\
383 \indent\indent$T_{surcharge}$ : Temps de surcharge.
386 Le temps de calcul représente le temps pris par le code pour effectuer
387 des calculs tandis que le temps de communication enregistre le temps
388 des échanges de données ou d'instructions entre les
389 processeurs. Le temps de surcharge comprend le temps pris lors des
390 initialisations telles que la création des threads au début du programme
391 mais aussi le temps de fermeture de l'application à
392 la fin. En général, le temps de surcharge est négligeable par rapport
393 aux temps de calcul et de communication.
395 Des métriques liées directement à la performance du processeur sont
396 bien connues telles que le MIPS (Millions d'instructions
397 par seconde), FLOPS (Floating Point Operations per second), SPECint
398 ou encore SPECfp qui sont des benchmarks pour évaluer la performance
399 du processeur sur des opérations arithmétiques respectivement sur
400 des entiers ou des nombres réels. Par ailleurs, plusieurs métriques
401 rapportées à la performance de l'application parallèle
402 ont été définies mais nous allons retenir les trois les plus utilisées,
403 à savoir le « speedup », « l'efficacité » du code et
406 Le speedup est le rapport entre le temps utilisé pour l'exécution
407 séquentielle du code et le temps pour son exécution en parallèle.
408 Ce rapport peut être obtenu aussi comme le ratio entre le temps d'exécution
409 du code sur un processeur et le temps d'exécution avec
410 n processeurs. Ainsi, il mesure le gain escompté en résolvant le problème
411 en parallèle au lieu d'un lancement en séquentiel.
414 S(n) = T_{Exec\_Seq} / T_{Exec\_Par}(n)
417 \indent\indent S(n) : speedup pour n processeurs \\
418 \indent\indent n : nombre de processeurs \\
419 \indent\indent $T_{Exec\_Seq}$ le temps d'exécution en mode séquentiel \\
420 \indent\indent $T_{Exec\_Par}$ le temps d'exécution en en parallèle.
422 L'efficacité E(n) représente la performance de chaque unité
423 de calcul. Elle s'obtient en divisant le speedup par
424 le nombre de processeurs n. On peut aussi l'écrire
425 comme le rapport entre le temps d'exécution séquentielle
426 et le temps d'exécution parallèle multiplié par le
427 nombre de processeurs n.
431 = T_{Exec\_Seq} / ( n \times T_{Exec\_Par}(n) )
434 La loi de Amdahl donne une limite du speedup maximum qu'on
435 peut obtenir avec un nombre de processeurs n donné. Elle stipule que
436 si f compris entre 0 et 1 est la fraction du temps de la partie séquentielle
441 S(n) \leqslant \dfrac{1}{f+ \dfrac{1-f}{n}}
444 Pour un système parallèle « idéal », le speedup est égal à n et l'efficacité
445 à 1. Dans la pratique, le speedup est toujours inférieur à n avec
446 une limite haute dûe à la loi de Amdahl et l'efficacité
447 a une valeur entre 0 et 1. On peut démontrer que l'efficacité
448 est une fnction décroissante du nombre de processeurs n tandis qu'elle
449 est une fonction croissante de la taille du problème.
451 Dans le cadre de nos travaux, nous avions introduit une métrique utilisée
452 lors de la comparaison de différentes variantes d'algorithmes
453 résolvant le même problème exécutés en différents mode de communication
454 (synchrone ou asynchrone). Ainsi, le « gain relatif » entre l'exécution
455 de deux variantes de code résolvant un problème donné est le ratio
456 entre le temps d'exécution global du premier algorithme
457 et le temps d'exécution global du deuxième algorithme
458 selon le mode retenu pour chaque code.
462 G_{relatif} = T_{Exec\_Algo\_1} / T_{Exec\_Algo\_2} \times {100}
465 \subsection{Taux d'erreur lors de la prédiction}
467 Lors de l'exercice de prédiction sur la performance
468 d'une application parallèle, un modèle est construit
469 à partir des observations passées des
470 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
471 lors de cette modélisation est de minimiser l'écart
472 entre les valeurs calculées théoriques et les valeurs réelles observées.
474 Dans le cadre de la classe des algorithmes numériques itératifs consacrée
475 à ces travaux, un autre taux d'erreur $\epsilon$ est déterminé
476 d'avance et qui sert à détecter la convergence locale
477 de l'algorithme {[}9{]}. A chaque itération, la différence
478 entre la valeur approchée calculée, solution du problème, et celle obtenue
479 à l'itération précédente est calculeé : si elle est
480 inférieure au taux d'erreur accepté, l'algorithme
481 s'arrête en ayant atteint la convergence sinon, on
482 repart pour une nouvelle itération.
484 A l'itération k, la convergence est atteinte quand
487 (\|X_l^k - X_l^{k+1}\|_{\infty}\leq\epsilon)
490 \subsection{Weak contre strong scaling}
492 Un des objectifs de nos travaux consistent à exécuter les algorithmes
493 choisis en simulant leur exécution sur des plateformes de plus en
494 plus larges avec un nombre de processeurs et de cores de plus en plus
495 grand. Deux modes existent pour cette montée en charge donnant des résultats différents
496 : le « weak » et le « strong » scaling.
498 La différence entre ces deux modes repose sur la variation de la taille
499 du problème lors de la montée en charge (scaling). Pour le « weak
500 » scaling, on essaie d'observer le comportement du
501 programme en gardant le même nombre d'éléments à traiter
502 par processeur ou core. Dans ce cas, les ressources
503 de calcul additionnelles
504 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
505 essaie de résoudre un problème donné plus vite. Ainsi, dans ce cas,
506 la taille du problème en entrée reste constante même si on adjoint
507 une capacité plus grande aux unités de calcul.
510 \includegraphics[width=100mm,keepaspectratio]{"Weak vs Strong scaling"}
511 \caption{Weak vs Strong scaling: Temps d'exécution et Speedup}
515 La figure Figure~\ref{fig:3} 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.
517 \section*{2.2 Problématique sur la prédiction à large échelle de la performance des applications}
519 La prédiction de la performance des applications parallèles à large
520 échelle constitue ces dernières années une des préoccupations majeures
521 des scientifiques et des utilisateurs des systèmes de calcul à haute
522 performance. En effet, en considérant le coût de lancement nécessaire
523 mais aussi le temps d'exécution imparti pour une telle
524 application, il est toujours d'intérêt de disposer
525 d'un outil ou d'un moyen afin de connaître
526 le comportement de l'application en montant en charge. Pour cela, il s'agit
527 d'estimer le temps total d'exécution $T_{exec}$ dans ces conditions. De plus,
528 dans le cadre d'un calcul sur la grille,l'objectif est de
529 déterminer la configuration idéale, en termes de blocs et
530 de nombre de noeuds (processeurs, coeurs) par bloc, pour obtenir le
531 meilleur coût mais aussi le temps optimal d'exécution
534 Dans ce chapitre, dans un premier temps, les problématiques et difficultés
535 inhérentes à cet exercice de prédiction de la performance des applications
536 parallèles sont abordées. Ensuite, nous allons passer en revue les
537 solutions possibles apportées à ces problèmes.
539 De prime abord, on peut diviser en deux grands groupes, selon leurs
540 objectifs, les travaux relatifs à la prédiction de la performance
541 en environnement parallèle et de calcul à haute performance.
543 D'une part, la prédiction peut viser l'objectif
544 de la conception, le développement et la mise au point de systèmes
545 qui n'existent pas encore physiquement. Cette catégorie
546 regroupe entre autres la conception de nouvelles architectures de
547 matériels (CPU, Mémoire, Stockage) {[}\dots {]} mais aussi par exemple,
548 la mise en oeuvre d'une nouvelle infrastructure de réseaux
549 de communication {[}\dots {]}. Plusieurs utilisations peuvent être
550 exploitées pour ce type de prédiction. En effet, outre le calibrage
551 de systèmes pour une exécution optimale, il permet le débogage et
552 la mise au point des applications avec un ensemble de contraintes,
553 que ce soit matérielles ou logicielles {[}..{]}. Notons tout de suite
554 que cette dernière application sur le réseau a fait l'objet
555 de nombreux travaux ces dernières années, permettant de déterminer
556 ou d'estimer d'avance la performance
557 et l'efficacité de la solution future projetée et éventuellement
558 de corriger et d'améliorer les imperfections.
560 D'autre part, la prédiction de la performance d'une
561 application parallèle se porte sur la détermination du temps d'exécution
562 de la dite application en montant en charge sur une large échelle.
563 Encore une fois, dans ce cas aussi, on ne dispose pas de l'environnement
564 d'exécution cible mais on essaie de déterminer quel
565 serait le temps total, donc le coût imputé au lancement de l'application
566 sous diverses conditions. Ces dernières sont déterminées par plusieurs
567 facteurs dont les principaux sont les paramètres d'entrée
568 de l'application tels que la taille du problème à résoudre
569 mais aussi les caractéristiques et la puissance globale intrinsèque
570 de la grille de calcul de lancement : nombre de blocs, de processeurs
571 / coeurs, les paramètres de la capacité du réseau de communication
572 inter et intra-noeuds de la grille, \dots{} Ainsi, une telle prédiction
573 permet de conduire une analyse « what-if » du comportement de l'application
574 si par exemple, on va multiplier par 10 ou 100 la taille du problème
575 en entrée, mais aussi si on double la capacité de l'environnement
576 cible en ajoutant d'autres blocs à la grille ou en
577 apportant plus de processeurs dans chaque bloc. Les travaux rapportés
578 dans cette thèse se focalisent plutôt sur cette seconde catégorie
579 de prédiction de la performance d'applications spécifiquement
580 écrites en MPI dans un environnement de grille de calcul.
582 \subsection*{Facteurs liés à l'écosystème}
584 La prédiction de la performance des applications parallèles approchant
585 le plus possible de la réalité avec un taux d'erreur
586 minimal dépend de plusieurs facteurs pouvant avoir des impacts
587 décisifs sur les résultats. En effet, à titre d'exemple,
588 la modification de la topologie ou des paramètres de l'infrastructure
589 du réseau de communication tels que la latence ou la taille de la
590 bande passante aura inévitablement des conséquences sur la performance
591 globale de l'application parallèle. En donnant un autre
592 exemple, il est clair que la montée en charge en augmentant la taille
593 du problème avec une plus grande capacité de calcul proposant un plus
594 grand nombre de processeurs ou de coeurs modifiera la performance
595 de l'application. Ainsi, de façon générale, plusieurs
596 problématiques se posent quant au lancement d'une application
597 parallèle dans une grille de calcul mais aussi, plusieurs facteurs
598 influencent directement le comportement et la performance du système.
599 Nombreux travaux ont déjà proposé des modèles de prédiction à large
600 échelle sur la performance du code parallèle avec un taux d'efficacité
601 plus ou moins acceptable. Certains de ces modèles seront détaillés
602 dans le paragraphe 2.4.
604 Les scientifiques et les utilisateurs désirant lancer l'exécution
605 d'un programme en environnement parallèle ont tous
606 été confrontés à la même problématique de mise à disponibilité de
607 l'environnement d'exécution. En effet,
608 la réservation des ressources nécessaires pour lancer le système n'est
609 pas toujours immédiate mais en plus, le coût peut ne pas être négligeable
610 dans un contexte de rareté des machines super puissantes pourtant
611 très sollicitées par différents acteurs {[}\dots {]}. Cette problématique
612 peut être parfois accentuée par la non disponibilité de l'infrastructure
613 cible parce que justement, les résultats obtenus par le lancement
614 de l'application qui pourra déterminer les caractéristiques
615 techniques de l'environnement cible. Ainsi, cette contrainte
616 majeure doit être levée durant tout le cycle de vie de développement
617 de l'application. En effet, les coûteux développements
618 et écritures du code de l'application, les opérations
619 répétitives lors de sa mise au point ainsi que les tests itératifs
620 de lancement requièrent un environnement réel disposant de la capacité
621 nécessaire à ces opérations, ce qui n'est pas évident.
622 Un autre facteur lié à cette problématique a toujours été aussi l'estimation
623 à l'avance de cette capacité de calcul nécessaire afin
624 d'avoir un environnement le plus adéquat afin d'éviter
625 le gaspillage en cas de surestimation ou l'échec d'exécution
626 en cas de sous-estimation. Cette estimation concerne les ressources
627 primaires requises telles que le processeur, la taille mémoire DRAM
628 et cache ainsi que le sous-système de stockage pour la capacité de
629 calcul d'une part mais aussi les paramètres du réseau
630 de communication (local ou distant) pour le temps de communication
631 et d'échange de messages d'autre part.
632 L'architecture inhérente à la grille de calcul composée
633 d'entités reliées par des réseaux distants ajoute une
634 autre considération pour la communication entre les processus parallèles
635 sur le caractère hétérogène de l'infrastructure que
636 ce soit la puissance de calcul des serveurs (différents types de processeurs)
637 que le type des liaisons existants entre les blocs de la grille (réseaux
638 hétérogènes). En effet, les environnements complexes de type grille
639 de calcul actuels sont composés généralement de machines physiques
640 dotées de processeurs multi-coeurs de différentes architectures (niveau
641 de cache, latence entre processeurs, \dots ). De plus, en analysant
642 la structure du réseau de communication dans la grille, on peut distinguer
643 $(1)$ d'abord, les échanges internes au niveau d'un
644 élément d'un bloc (entre les coeurs d'un
645 processeur et entre les processeurs d'un même serveur
646 physique), (2) ensuite, les échanges « intra-blocs » caractérisant
647 le trafic entre les différents éléments d'un bloc et
648 (3) enfin, les échanges « inter-blocs » définissant la communication
649 entre les blocs de la grille. Tant au niveau de leur topologie qu'en
650 termes d'efficacité, ces trois niveaux de communication
651 peuvent présenter des caractéristiques complètement différentes et
652 hétérogènes. Ainsi, les deux premiers réseaux sont implémentés généralement
653 dans un contexte de réseau local avec un temps de latence très court
654 et une bande passante large. Tandis que le réseau de liaison entre
655 les blocs de la grille peuvent être de type distant (lignes spécialisées
656 distantes, canaux satellites de communication, réseau de type Internet,
657 \dots ) donc d'une efficacité moindre en termes de
658 latence et de bande passante mais aussi sujet à des perturbations
659 diverses (Figure~\ref{fig:4}). Ces aspects liés à l'architecture
660 de grille de calcul rendent la prédiction de la performance des applications
661 parallèles plus difficiles. En effet, une surcharge élevée due à des
662 perturbations sur le réseau inter-blocs de la grille peut fausser
663 complètement les résultats de la prédiction du temps de communication
664 global de l'application.
666 \subsubsection{Facteur architecture des processeurs}
668 Un autre facteur ayant un impact sur le temps d'exécution
669 global est d'une part, le modèle d'architecture
670 des processeurs de calcul et d'autre part, la puissance
671 intrinsèque de ces derniers.
673 La course à la puissance nécessaire aux applications de calcul de
674 haute performance ne cesse de s'accélérer de plus en
675 plus vite exigeant une capacité de calcul de plus en plus grande.
676 C. Willard {[}12{]} résume ce phénomène en disant que lorsqu'un
677 problème - la conception d'un pont par exemple -
678 est résolu, la solution trouvée n'est plus utile parce
679 qu'on ne va pas refaire la conception. On passe généralement
680 à un problème plus complexe - la conception d'un
681 autre ouvrage plus complexe par exemple. La conséquence de cette course
682 (actuellement du pentascale vers l'exascale) a suscité
683 le développement des architectures de processeurs multi-coeurs dont
684 l'accroissement de la puissance a dépassé la traditionnelle
685 loi de Moore (renvoi). De plus, des co-processeurs spécialisés et
686 autres accélérateurs (GPU : Graphic Processing Units {[}{]}) ont été
687 adjoints aux processeurs multi-coeurs pour améliorer le temps de calcul.
688 Une autre architecture variante du multi-coeurs est le MIC (Many Integrated
689 Core) {[}Intel Xeon Phi{]}. Ce type d'unité de calcul
690 joue au départ le rôle de co-processeur pour les applications à haute
691 intensité de calcul. Ainsi, plusieurs c½urs ont été pressés au niveau
692 du processeur (« socket ») emmenant un parallélisme au niveau de la
693 puce. La Figure~\ref{fig:4} donne un aperçu de l'architecture
694 d'un processeur multi-coeurs.
697 \includegraphics[width=100mm,keepaspectratio]{"Architecture des CPU multi-coeurs"}
698 \caption{Architecture des CPU multicoeurs}
702 telle entité de calcul repose sur la vitesse d'accès
703 des c½urs aux données en mémoire. En effet, elle est dotée d'un
704 bus rapide et une hiérarchie de cache mémoire beaucoup plus rapide
705 d'accès que la RAM. En termes d'architecture,
706 la classification de Flynn (1972) {[}{]} a créé quatre catégories
707 de machines parallèles selon les flots de données et les flots d'instructions: SISD (Single instruction, single data), SIMD (Single instruction,
708 multiple data), MISD et MIMD (Multiple instruction, multiple data).
709 Cette dernière classe regroupant les machines parallèles généralistes
710 actuelles se décline en trois sous-catégories :
713 \begin{subfigure}{0.5\textwidth}
714 \includegraphics[width=5cm, height=5cm, scale=3]{"MIMD Distributed Memory"}
715 \caption{Modèle MIMD Distribué}
718 \begin{subfigure}{0.5\textwidth}
719 \includegraphics[width=5cm, height=5cm, scale=3]{"MIMD Shared memory - SMP"}
720 \caption{Modèle MIMD partagé}
723 \begin{subfigure}{0.5\textwidth}
724 \includegraphics[width=5cm, height=5cm, scale=3]{"MIMD Hybride"}
725 \caption{Modèle MIMD hybride}
728 \caption{Modèles de mémoire MIMD}
735 \item [$\bullet$] - Machine MIMD à mémoire partagée (Figure~\ref{fig:5.b}) : Les unités de calcul
736 accède à la mémoire partagée via un réseau d'interconnection
737 (généralement, de type GigabitEthernet (renvoi) ou Infiniband (renvoi)).
738 Il existe trois types d'implémentation : le crossbar,
739 le Omega-Network et le Central Databus.
741 \item [$\bullet$] Machine MIMD à mémoire distribuée (Figure~\ref{fig:5.a}) : Chaque unité de
742 calcul est doté de son espace mémoire propre. Un réseau d'interconnexion
743 intègre l'ensemble assurant la communication entre
744 ces unités. Il existe trois types de machines MIMD à mémoire distribuée: les hypercubes, les fat trees et les autres.
746 \item [$\bullet$] Machine MIMD hybride (Figure~\ref{fig:5.c}) : Dans ce cas, le système est la
747 combinaison des deux modèles précédents : un ensemble de processeurs
748 partage un espace mémoire et ces groupes sont interconnectés par un
753 A titre d'exemple de machines parallèles, le site Top500.org
754 {[}14{]} classe suivant différents critères les plus performantes.
755 Ainsi, la fig. .. montre l'évolution de la puissance
756 de calcul mondiale dont le top actuel développe un pic de performance
757 théorique proche de 50 PetaFlops (33 Linpack PetaFlops (renvoi)) avec
758 3.120.000 cores ( 16 noeuds avec des processeurs de 2x12 cores par
759 n½ud) et plus de 1.240.000 Gb de mémoire (64 Gb par noeud) avec des
760 accélérateurs 3 $\times$ Intel Xeon Phi par noeud. Il s'agit
761 de la machine Tianhe-2 (MilkyWay-2) de la National Super Computer
762 Center à Guangzhou en Chine {[}15{]}. A la tendance actuelle, l'atteinte
763 de l'exaflops n'est pas loin.
767 \includegraphics[width=100mm,keepaspectratio]{"Evolution de la puissance de calcul mondiale"}
768 \caption{Evolution de la puissance de calcul mondiale}
772 Pour arriver à de telles puissances, diverses architectures de processeurs
773 ont vu le jour ces dernières années. Outre l'Intel
774 Xeon Phi cité plus haut, les processeurs basés sur les circuits intégrés
775 FPGA (Field Programmable Gate Array) montrent une flexibilité efficace
776 pour s'adapter par configuration au type d'applications
777 à traiter {[}14{]}. En effet, cette architecture permet la programmation
778 de la « matrice de blocs logiques » interconnectée par des liaisons
779 toutes aussi programmables. Cette possibilité de programmation des
780 circuits et des interconnexions entraine aussi la réduction de la
781 consommation d'énergie. Par ailleurs, les unités GPU
782 (Graphics Processing Unit) sont initialement des co-processeurs produits
783 par AMD et NVIDIA pour des applications à fort rendu graphique, libérant
784 ainsi la charge au processeur. Par la suite, elles ont été complètement
785 programmables et se sont montrées très efficaces pour les algorithmes
788 \subsubsection{Facteur : Mémoire et stockage}
790 Les différentes architectures de processeurs parallèles vues plus
791 haut se trouvent toutes confrontées au problème de chargement de données
792 à traiter en mémoire. Ainsi, elles se sont dotées de contrôleurs de
793 mémoire incorporés mais aussi divers niveaux de caches pour faire
794 face à cette différence de vitesse de traitement entre les processeurs
795 et les mémoires dynamiques. Par exemple, les machines SIMD utilisent
796 des registres de communication internes pour communiquer avec les
797 autres CPUs. Pour les machines de type MIMD où différentes tâches
798 sont exécutées par chaque processeur à un instant donné entraînant
799 ainsi une synchronisation obligatoire pour des échanges de données
800 entre processeurs, ces derniers peuvent exploiter la mémoire partagée
801 pour effectuer ces transferts ou prévoir des bus dédiés à cette fin
804 Par ailleurs, les mémoires, non intégrées au processeur, et les sous-systèmes
805 de stockage constituent aussi un facteur important ayant un impact
806 sur le temps d'exécution de l'application
807 parallèle. En effet, les mémoires externes sont utilisées soit pour
808 échanger des données entre les CPU, soit pour accéder à la zone mémoire
809 pour lire, écrire ou mettre à jour des données. Dans ce domaine, en
810 considérant les architectures parallèles MIMD, on peut classer en
811 deux grandes catégories selon les modèles de mémoire {[}17{]}: (1)
812 les multiprocesseurs et (2) les multicomputers (Fig \dots ). La première
813 catégorie regroupe les machines à mémoire partagée (« shared memory
814 ») qui se subdivisent en trois classes selon le mode d'accès
815 des CPU aux mémoires : (1) UMA ou « Uniform Memory Access » où tous
816 les CPU accèdent une page mémoire physique de façon « uniforme »,
817 avec le même temps d'accès tolérant ainsi la mise à
818 l'échelle. Dans ce cas, les CPU sont tous connectés
819 aux mémoires via un bus ((Figure~\ref{fig:6.b})). Un système d'adressage
820 global est appliqué à l'ensemble des mémoires physiques.
821 (2) NUMA ou « Non Uniform Memory Access » où les groupes de CPU accèdent
822 à des mémoires locales à travers des buses et les groupes sont interconnectés
823 par un réseau de communication ((Figure~\ref{fig:6.a})). Dans ce cas, le temps
824 d'accès des CPU aux pages mémoires varie selon que
825 ces dernières sont locales ou distantes. L'espace d'adressage
826 des mémoires se fait au niveau de chaque groupe de CPU. (3) L'architecture
827 COMA (« Cache Only Memory Access ») est un hybride avec un modèle
828 de programmation de mémoire partagée mais une implémentation physique
829 de mémoire distribué ((Figure~\ref{fig:6.c})). Dans ce cas, chaque noeud détient
830 une partie du système de l'espace d'adressage.
831 Le partitionnement des données étant dynamique, la structure COMA
832 n'associe pas la même adresse à une page physique de
833 la mémoire. Les mémoires locales dans ce cas de figure jouent finalement
834 un rôle de cache au processeur.
837 \begin{subfigure}{0.5\textwidth}
838 \includegraphics[width=5cm, height=5cm, scale=3]{"UMA architecture"}
839 \caption{Architecture UMA}
842 \begin{subfigure}{0.5\textwidth}
843 \includegraphics[width=5cm, height=5cm, scale=3]{"NUMA architecture"}
844 \caption{Architecture NUMA}
847 \begin{subfigure}{0.5\textwidth}
848 \includegraphics[width=5cm, height=5cm, scale=3]{"COMA architecture"}
849 \caption{Architecture COMA}
852 \caption{Modèles de mémoire MIMD}
856 Malgré que dans le cadre de nos travaux, nous n'avions
857 pas eu une contrainte particulière en termes de système de stockage,
858 une brève revue des problématiques liées à ce sous-système en environnement
859 de calcul parallèle est présentée parce qu'il peut
860 influencer à large echelle sur la prédiction de la performance de
861 l'application. Les systèmes traditionnels ont opté
862 pour des architectures NFS (Network File System) ou de type NAS (Network
863 Attached Storage) ou encore de type SAN (Storage Access Network).
864 Malgré que les systèmes de stockage NFS et NAS sont relativement faciles
865 à mettre en oeuvre, l'inconvénient majeur est qu'ils
866 présentent un point de défaillance unique (SPOF) et ont des difficultés
867 de monter en échelle. Pour le système SAN, les données sont stockées
868 dans des baies de stockage accessibles par les unités de calcul à
869 travers un réseau basé sur des canaux de fibres et des adapteurs de
870 haut débit (HBA) ; ce qui rend le coût de l'implémentation rapidement
871 excessif dès que le nombre de noeuds augmente. Dans un environnement
872 d'applications parallèles, le réseau de communication
873 doit avoir une très haute performance pour répondre aux besoins d'échange
874 mais aussi d'accès aux données. En plus, il doit
875 avoir la flexibilité et la capacité de monter en échelle suivant la
876 demande du système. Ces caractéristiques requis sont accentués par
877 la variabilité des besoins en entrées/sorties des applications HPC: dans le même lot d'applications exécutées, certaines
878 accèdent à des données de manière séquentielle tandis que d'autres
879 demandent des entrées/sorties aléatoires fortement sensibles. Les
880 solutions apportées dénommées « système de fichiers parallèle » reposent
881 sur la conception d'une architecture répondant à ces
882 prérequis. Dans ce type de système de fichiers, les blocs de données
883 sont répartis par morceaux dans différents serveurs et dans différentes
884 locations du système de stockage. On peut ainsi accroitre le débit
885 de stockage et d'extraction au fur et à mesure que
886 le nombre de serveurs ou de baies de stockage augmentent.L'architecture sera réalisée par:
889 \item [$\bullet$] l'introduction d'une couche de « noeuds
890 de services de fichiers » entre les noeuds de calcul et les baies de
891 stockage des données. Ces noeuds sont reliés en clusters via un réseau
892 rapide de type Infiniband.
894 \item [$\bullet$] L'ajout des «serveurs de metadata » (MDS : MetaData
895 Server) qui gèrent les métadonnées accessibles à partir des « baies
896 de stockage des métadonnées » (MDA) avant d'extraire
897 les données proprement dites sur les baies de stockage en arrière-plan.
900 Les métriques utilisées pour caractériser une telle architecture sont
901 le nombre nominal d'entrées/sorties par seconde (IOPS)
902 d'une part et le débit de la bande passante du réseau
903 reliant les différents composants (Gb/s) d'autre part.
904 Plusieurs solutions globalement efficaces ont été avancées respectant
905 cette architecture. On peut citer les « systèmes de fichiers ouverts
906 » tels que pNFS (Parallel NFS), GFS, XFS, PVFS (Clemson University),
907 MogileFS {[}\dots {]} mais Lustre {[}\dots {]} présenté dans la figure
908 \dots{} est largement utilisé en environnement de calcul parallèle
909 : au moins, la moitié des clusters « top 10 » utilise ce modèle et
910 plusieurs laboratoires l'ont aussi adopté (Pacific
911 Northwest National Lab (PNNL), Lawrence Livermore National Lab (LLNL)
912 mais aussi Los Alamos National Lab (LANL). Lustre utilise les OST
913 («Object Storage Targets ») dans les serveurs de fichiers (en opposition
914 au « Block Storage Device ») pour assurer la cohérence et la résilience
915 du système de fichiers. A titre indicatif, le cluster de PNNL {[}19{]}
916 avec 1800 processeurs Itanium délivrant jusqu'à 11
917 TFlops utilise Lustre avec une capacité de stockage de 53 Toctets
918 avec une bande passante de 3.2 Gbits/s. Chaque n½ud du cluster peut
919 accéder au serveur parallèle Lustre avec un débit de 650 Mb/s.
921 La mise en ½uvre des systèmes de fichiers parallèles pour les calculs
922 à haute performance s'approche des technologies utilisées
923 en entreprise pour exploiter les applications à données intensives
924 traitant de très grandes masses de données. En effet, les « sciences
925 de données », « big data », « analytics » (business intelligence,
926 Datamart, Data Mining) demandent des accès très rapides à des grands
927 volumes de données variées, structurées ou non structurées, pour en
928 extraire une information utile. Pour cela, le principe « d'apporter
929 le calcul auprès des données » (« Bring the compute to the data »)
930 est appliqué en lieu et place du traditionnel « extraire et charger
931 en mémoire les données du système de stockage pour traitement par
932 l'unité de calcul ». Hadoop {[}\dots {]}, une plateforme
933 de traitement de « big data » la plus utilisée, combine dans la même
934 machine physique les « n½uds de calcul » et les « n½uds de données
935 ». Cet ensemble d'outils ayant une architecture fortement
936 distribuée utilise le mécanisme de transfert des données du système
937 de stockage « globalement partagé et persistent » ayant une large
938 capacité vers le système de fichier local avant traitement.
940 \subsubsection{Facteur : Réseaux de communication}
942 Dans un contexte d'exécution parallèle et distribuée
943 des applications, la communication entre les processus de calcul pour
944 échange de données ou d'instructions est critique et
945 peut constituer un goulot d'étranglement pour le temps
946 d'exécution et la montée en charge de l'applicaiton.
947 En effet, la performance globale quantifiée par le temps d'exécution
948 de l'application dépend fortement de la nature et de
949 la typologie des réseaux de communication. Il a été mis en exergue
950 dans les paragraphes précédents l'importance du trafic
951 de données entre chaque unité de calcul et les différentes couches
952 de mémoire vive utilisées par le système. Dans un environnement de
953 grilles de calcul, de clusters ou de P2P, d'autres
954 types de réseaux de communication influencent cette performance.
956 %Ethernet, Infiniband (56 à 100 Gb/s), Omni-path {[}15{]}
958 %Facteurs influençant le temps de communication : Type de comm (point
959 %to point, collective comme broadcast, scatter, gather, reduce)
961 \subsection{Facteurs liés au code de l'application}
963 Outre ces problématiques liées directement à l'environnement
964 de lancement, plusieurs autres facteurs liés au code de l'application
965 lors de son exécution peuvent influencer le comportement du système
966 rendant aussi la prédiction de la performance complexe et difficile.
967 Ces facteurs liés au comportement du code lors de son exécution en
968 parallèle vont influencer la performance globale en impactant le temps
969 de calcul et le temps de communication des données entre les unités
972 \subsubsection{Facteur : Taille du problème}
974 Parmi les facteurs impactant le temps de calcul, la taille du problème
975 peut avoir une grande influence sur le temps de calcul surtout en
976 strong scaling. En effet, dans ce mode de scalabilité, la
977 taille du problème étant fixe alors qu'on augmente
978 la puissance de calcul par l'ajout de processeurs et
979 coeurs supplémentaires, le temps de calcul va varier en fonction de
980 ces changements. En mode weak scaling où la taille du problème
981 augmente dans la même proportion que l'accroissement
982 du nombre de processeurs / coeurs, le temps de calcul global attendu
983 reste théoriquement plus ou moins constant. La taille du problème
984 qui ne cesse d'augmenter pour le besoin des applications
985 parallèles constitue un élément impactant le temps total d'exécution
988 \subsubsection{Performance de la parallélisation}
990 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 {]}
991 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 :
995 \eta Parallel =LB \times Ser \times Trf
1000 \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
1001 étant le rapport entre le temps de calcul moyen par processeur et
1002 le temps de calcul maximum enregistré sur l'ensemble
1003 des processeurs participants:
1007 LB = {[} \sum \limits_{k=1}^p eff_k) / p {]} / max(eff_k)
1009 où : p est le nombre de processeurs et $eff_k$ ("Efficiency") le temps de calcul utilisé par le processeur k.
1011 \item [$\bullet$] L'efficacité de la « sérialisation » : Elle représente
1012 l'inefficacité causée par les « dépendances dans le
1013 code » qui se traduit par la nécessité d'échanger des
1014 données entre les processeurs. Ces dernières peuvent impacter de façon
1015 importante la performance du code parallèle. Ce facteur est mesuré comme étant
1016 le temps maximum enregistré pour tous les processeurs présents lors de l'exécution
1017 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
1018 passante infinie et une latence égale à 0. Dans ce cas, ideal ($eff_i$) est l'efficacité du processeurs i sans le temps de communication.
1022 Ser = max ( ideal( eff_i ) )
1025 \item [$\bullet$] L'efficacité du « transfert » de données : La montée
1026 en charge de la taille du problème impactera la taille des données
1027 à échanger entre les processus. Ce facteur est défini comme étant
1028 la perte de performance globale due aux transferts des données. En
1029 prenant en compte le temps de communication, il est mesuré comme le
1030 ratio entre le maximum entre les temps relatifs d'exécution
1031 des processus concurrents (rapport entre le temps d'exécution $T_i$
1032 d'un processus et le temps total réel d'exécution T
1033 du code) et l'efficacité de la sérialisation Ser :
1037 Trf = max( T_i/T ) / Ser
1042 Les auteurs ont montré que cette mesure de la performance de la parallélisation
1043 est indépendante du temps absolu total d'exécution.
1044 Pour les algorithmes itératifs, cette métrique ne dépend pas du nombre
1045 d'itérations avant l'arrêt de l'algorithme
1046 : le temps d'exécution d'une itération
1049 Cette quantification de la performance de la parallèlisation du code
1050 repose sur les trois paramètres suivants appelés aussi « inhibiteurs
1051 de la performance » qui décrivent selon {[}12{]} la "sensibilité"{}
1052 du code : (1) la sensibilité à la fréquence CPU, (2) la sensibilité
1053 à la bande passante mémoire et enfin (3) le temps consacré aux communications
1054 et les entrées / sorties. Selon l'algorithme considéré
1055 ou l'aspect scientifique du code, l'application
1056 peut être influencée par ces paramètres. L'analyse
1057 du code par le profiling et l'optimisation pourront
1058 aider à cette sensibilité du code et à améliorer la performance de
1061 Dans le cadre de ces travaux, à plus large échelle, c'est-à-dire
1062 en augmentant la taille du problème en entrée comme la capacité de
1063 calcul disponible, les facteurs suivants vont influencer de plus en
1064 plus le temps d'exécution de l'application
1065 impactant ainsi la performance de la parallélisation du code. Selon
1066 {[}18{]}, même si la surcharge engendrée par la parallélisation du
1067 code (« surcharge due à la parallélisation ») ainsi que celle naturellement
1068 subie par le système comme dans une exécution séquentielle (« surcharge
1069 système ») peuvent ne pas être négligeables, on constate
1070 comme précédemment que les facteurs liés à « l'oisivité
1071 » des processeurs ainsi que la communication entre les différentes
1072 couches mémoires (DRAM, cache, « mémoire d'attraction
1073 » (renvoi) ) peuvent peser lourdement à grande échelle sur la performance
1074 globale de l'application. La surcharge due à la parallélisation
1075 provient de l'initialisation par processeur pour une
1076 exécution parallèle (qui n'existe pas lors d'une
1077 exécution séquentielle). Le partitionnement des tâches mais aussi les tâches
1078 de vérrouillage et de déverrouillage lors d'une entrée
1079 et de sortie d'une section critique du code contribue
1080 à l'importance de ce facteur. La surcharge système
1081 comme les défauts de pages, l'interruption horloge,
1082 le mécanisme de fork/join, \dots{} peut être accentuée par rapport
1083 à une exécution séquentielle surtout pour les programmes à haut degré
1084 de parallélisme parce que ces actions sont inhérentes à un processeur
1085 et l'augmentation du nombre de processeurs lors d'une
1086 exécution parallèle peut engendrer une surcharge système non négligeable.
1087 Toutefois, comme avancé plus haut, ces surcharges peuvent ne pas être
1088 significatives comparées au temps perdu suite à l'oisivité
1089 (idle) des blocs de calcul. Cette dernière est surtout due à une parallélisation
1090 insuffisante ou encore par une répartition des charges non optimale.
1091 Enfin, le facteur communication nécessaire pour le thread courant
1092 de chercher des données qui ne sont pas localisées dans ses mémoires
1093 caches locales peut affecter dramatiquement la performance de la parallélisation
1094 du programme. En effet, pendant cette recherche, l'unité
1095 de calcul reste bloqué (stalled).
1098 %\section*{Solutions apportées}
1101 \section*{2.3 Techniques de profiling et instrumentation des applications parallèles}
1104 \section*{2.4 Méthodes de prédiction de la performance de l'application parallèle}
1107 \section*{2.5 Conclusion partielle}
1109 \part*{PARTIE II - Travaux de contributions, résultats et perspectives}
1111 \chapter*{Chapitre 3 : Comparaison par simulation à large échelle de la performance de deux algorithmes itératifs parallèles en mode asynchrone}
1113 \section*{3.1 Protocoles et expérimentations}
1115 \section*{3.2 Résultats}
1117 \section*{3.3 Conclusion partielle}
1119 \chapter*{Chapitre 4 : Simulation avec SIMGRID de l\textquoteright exécution des solveurs linéaires en mode synchrone et asynchrone sur un environnement multi-coeurs simulés}
1121 \section*{4.1 Protocoles et expérimentations}
1123 \section*{4.2 Résultats}
1125 \section*{4.3 Conclusion partielle}
1127 \chapter*{Chapitre 5 : Modèle de prédiction de la performance à large échelle d'un algorithme itératif parallèle}
1129 \section*{5.1 Approche et méthodologie}
1131 \section*{5.2 Expérimentations et résultats}
1133 \section*{5.3 Conclusion partielle}
1135 \chapter*{Chapitre 6 : Conclusion générale et perspectives}
1137 \section*{6.1 Conclusion générale}
1139 \section*{6.2 Travaux futurs et perspectives}
1144 \part*{BIBLIOGRAPHIE ET REFERENCES}
1146 {[}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}.
1148 {[}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.
1150 {[}8{]} D. BERTSEKAS and J. TSITSIKLIS. Parallel and Distributed Computation, Numerical
1151 Methods. \textit{Prentice Hall Englewood Cliffs N. J., 1989}.
1153 {[}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}
1155 {[}10{]} M. J. VOSS and R. EIGEMANN. Reducing Parallel Overheads Through Dynamic
1156 Serialization. \textit{Purdue University School of Electrical and Computer Engineering}.
1158 {[}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}.
1160 {[}12{]} M. DUBOIS and X. VIGOUROUX. Unleash your HPC performance with Bull.
1161 \textit{Maximizing computing performance while reducing power consumption}. http://www.hpctoday.fr/published/regional/operations/docs/W-HPCperformance-en1.pdf
1163 {[}14{]} Site du top500. http://www.top500.org
1165 {[}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
1167 {[}16{]} A. J. van der STEEN, J. J. DONGARRA. Overview of Recent Supercomputers.
1168 \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
1170 {[}17{]} V. RAJPUT , S. KUMAR, V.K.PATLE. Performance Analysis of UMA and NUMA Models".
1171 \textit{School of Studies in Computer Science Pt.Ravishankar Shukla University, Raipur,C.G.} http://www.ijcset.net/docs/Volumes/volume2issue10/ijcset2012021006.pdf
1173 {[}18{]} D. NGUYEN, Raj VASWANI and J. ZAHORIAN. Parallel Application Characterization for
1174 Multiprocessor Scheduling Policy Design. \textit{Department of Computer Science and Engineering - University of Washington, Seattle, USA}.
1176 {[}19{]} M. EWAN. Exploring Clustered Parallel File Systems and Object Storage.
1177 \textit{2012}. https://software.intel.com/en-us/articles/exploring-clustered-parallel-file-systems-and-object-storage
1179 {[}20{]} F. SILVA, R. ROCHA: Parallel and Distributed Programming - Performance Metrics. \textit{DCC-FCUP}.
1181 {[}21{]} G. BALLARD et Al. Communication Optimal Parallel Multiplication
1182 of Sparse Random Matrices". \textit{UC Berkeley, INRIA Paris Rocquencourt, Tel-Aviv University}. http://www.eecs.berkeley.edu/\textasciitilde{}odedsc/papers/spaa13-sparse.pdf