Changes between Version 12 and Version 13 of MjpegCourse/Multipipe
- Timestamp:
- Jan 6, 2011, 5:34:35 PM (14 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
MjpegCourse/Multipipe
v12 v13 1 1 {{{ 2 2 #!html 3 <h1>TP4 : Exécution sur architecture multi-cluster</h1>3 <h1>TP4 : Éxécution sur architecture multi-cluster</h1> 4 4 }}} 5 5 [[PageOutline]] … … 10 10 11 11 On cherche dans ce quatrième TP à augmenter encore le débit de la chaîne de décompression, 12 pour permettre - par exemple - de tra îter des images de plus grandes dimensions,12 pour permettre - par exemple - de traiter des images de plus grandes dimensions, 13 13 tout en respectant la fréquence video. 14 14 Cette augmentation de débit peut être obtenue en augmentant la fréquence d'horloge, mais … … 18 18 Pour augmenter le parallélisme, il ne suffit pas d'augmenter le nombre de processeurs dans 19 19 l'architecture matérielle, il faut également augmenter le nombre de tâches de l'application 20 logicielle , ce quiimpose de modifier la structure du TCG.20 logicielle (afin d'utiliser ces nouveaux processeurs) : cela impose de modifier la structure du TCG. 21 21 22 22 * La première partie du TP vise la définition d'un graphe de tâches ''multi-pipeline''. 23 23 * La seconde partie du TP porte sur la définition d'une architecture matérielle ''multi-clusters''. 24 24 * La troisième partie du TP analyse l'impact du placement des canaux de communication 25 sur les bancs mémoire dans les architectures `NUMA` (Non Uniform Memory Access).25 sur les bancs mémoire dans les architectures de type `NUMA` (Non Uniform Memory Access). 26 26 27 27 Commencez par créer un répertoire de travail `tp4`, et recopiez dans ce répertoire les différents … … 31 31 32 32 Le TCG défini dans le TP1 et re-utilisé dans les TP2 et TP3 comportait 7 tâches. Il exploitait 33 un parallélisme de type ''macro-pipeline''. 34 Différentes tâches traitent différents blocs de la même image: Toutes les tâches s'exécutent 35 en parallèle, mais sur des blocs différents de l'image. 33 un parallélisme de type ''macro-pipeline'' : différentes tâches traitent différents blocs de la même image. Toutes ces tâches s'exécutent 34 en parallèle, mais travaillent sur des blocs différents de l'image. 36 35 Il est difficile d'augmenter le nombre d'étages de ce macro-pipeline, car les tâches les plus coûteuses 37 36 en temps de calcul (VLD et IDCT) ne se découpent pas facilement en sous-tâches. … … 40 39 41 40 On va donc exploiter un autre type de parallélisme en utilisant deux pipelines 42 de décompression . Chaque pipeline traite une image complête.43 On introduit une tâche chargée de distribuer aternativement aux deux pipe-line le flux MJPEG.44 Cette nouvelle tâche `split`se situera entre les tâches `tg` et `demux`.41 de décompression (tel qu'illustré sur la figure ci-contre). Chaque pipeline traite une image complète. 42 Pour ce faire, on introduit une tâche chargée de distribuer aternativement aux deux pipe-line le flux MJPEG. 43 Cette nouvelle tâche, nommée `split`, se situera entre les tâches `tg` et `demux`. 45 44 La tâche `libu` doit être modifiée pour récupérer alternativement les images décompressées 46 45 provenant des deux pipelines, avant de les envoyer vers la tâche `ramdac`. 47 46 48 47 Modifiez la structure du TCG dans la description DSX de l'application. 49 Vous devez introduire un nouveau modèle de tâche pour la tâche `split`, et modifiier48 Vous devez introduire un nouveau modèle de tâche pour la tâche `split`, puis modifier 50 49 le modèle de la tâche `libu`. Il faut ensuite modifier 51 50 la topologie du TCG en définissant explicitement toutes les intances de tâches et tous 52 51 les canaux de communication nécessaires. 53 52 54 Le code de la tâche `split` doit analyser octet par octet le flux MJPEG, p our détecter53 Le code de la tâche `split` doit analyser octet par octet le flux MJPEG, précisement en détectant 55 54 le marqueur de début d'image (SOI = 0xffd8), de façon à l'aiguiller vers le bon canal de sortie. 56 55 57 Le pseudo core correspondant à l'algorithme de split est:56 Le pseudo-code correspondant à l'algorithme de `split` est : 58 57 {{{ 59 58 canal de sortie = le premier 60 59 61 toujours :60 toujours : 62 61 b = lire un octet 63 62 si b == 0xff … … 67 66 envoyer le bloc 68 67 changer de canal de sortie 69 ecrire b dans la sortie70 ecrire m dans la sortie71 retourner au d ebut de la boucle72 ecrire b dans la sortie68 écrire b dans la sortie 69 écrire m dans la sortie 70 retourner au début de la boucle 71 écrire b dans la sortie 73 72 }}} 74 73 75 74 Pour valider fonctionnellement cette nouvelle description de l'application logicielle, 76 déployez-la sur station de travail POSIX. vous devezvoir les mêmes images qu'avant, dans le même ordre.75 déployez-la sur une station de travail POSIX. Vous devez normalement voir les mêmes images qu'avant, dans le même ordre. 77 76 78 77 = 2. Architecture matérielle multi-processeur clusterisée = … … 80 79 Pour supporter la charge induite par ces nouvelles tâches, il faut augmenter 81 80 le nombre d'unités de traitement (processeurs ou coprocesseurs). 82 Pour éviter que l'accès à la mémoire devienne un goulot d'étranglement,81 Afin d'éviter que l'accès à la mémoire ne devienne un goulot d'étranglement, 83 82 il est également souhaitable d'augmenter le nombre de bancs mémoire physique, de façon 84 83 à répartir les données. Et lorsque le nombre d'entités communicantes (initiateurs ou cibles) augmente, 85 il est utile de structurer l'architecture en sous-systèmes .84 il est utile de structurer l'architecture en sous-systèmes distincts. 86 85 87 Cette structuration a des justifications fonctionnelles :86 Cette structuration a des justifications fonctionnelles : 88 87 * On cherche à regrouper dans un même sous-sytème les différents composants 89 matériels qui réalisent une même partie de l'application, et communiquent fortement entre eux.90 * Elle facilite également la réalisation matérielle : Chaque sous-système pourra être implanté88 matériels qui réalisent une même partie de l'application, et qui communiquent fortement entre eux. 89 * Elle facilite également la réalisation matérielle : chaque sous-système pourra être implanté 91 90 physiquement dans un même domaine synchrone, et utiliser sa propre horloge, 92 conformément au principe GALS(Globally Asynchronous, Locally Synchronous).91 conformément au principe ''GALS'' (Globally Asynchronous, Locally Synchronous). 93 92 94 93 [[Image(MjpegCourse/ClusteredNoirqMulti:clustered_noirq_multi.png, align=right)]] 95 94 96 Chaque sous-système constitue un ''cluster'' , et contient des processeurs,95 Chaque sous-système constitue un ''cluster'' (ou encore ''grappe''), et contient des processeurs, 97 96 de la mémoire, et dispose de son propre mécanisme d'interconnexion local. 98 97 99 Les différents clusters sont interconnectés entre eux par un emicro-réseau à interface100 VCI /OCB, qui pourra être modélisé par un composant `Vgmn`.98 Les différents clusters sont interconnectés entre eux par un micro-réseau à interface 99 VCI, qui pourra être modélisé par un composant `Vgmn`. 101 100 102 101 On utilisera comme mécanisme d'interconnexion interne à chaque cluster le composant 103 !LocalCrossbar (voir SoclibComponents). Ce composant matériel est un petit crossbar ,102 !LocalCrossbar (voir SoclibComponents). Ce composant matériel est un petit crossbar (tous les composants initiateur sont physiquement reliés à tous les composants cible), 104 103 qui possède un nombre variable de ports ''initiateur'' et ''cible'' 105 104 permettant de connecter les composants matériels appartenant au cluster. Il possède également … … 107 106 108 107 Cette structuration aboutit donc à l'utilisation d'un mécanisme d'interconnexion à deux niveaux 109 (interconnect global : `Vgmn`, et interconnect local: `LocalCrossbar`), bien que tous les108 (interconnect global : `Vgmn`, et interconnect local : `LocalCrossbar`), bien que tous les 110 109 composants matériels (initiateurs et cibles) continuent à partager le même espace d'adressage. 111 110 {{{ … … 113 112 Un processeur d'un cluster peut adresser directement un banc mémoire ou un périphérique 114 113 appartenant à un autre cluster. La principale conséquence est que tous les composants matériels 115 de l'architecture doivent maintenant être identifiés par un double index :114 de l'architecture doivent maintenant être identifiés par un double index : 116 115 * un index global définissant le cluster. 117 116 * un index local identifant le composant dans le cluster. … … 129 128 = 3. Déploiement et exploration architecturale = 130 129 131 Modifiez la description DSX de l'application MJPEG :130 Modifiez la description DSX de l'application MJPEG : 132 131 * Remplacez l'instanciation de !VgmnNoirqMulti par 133 132 {{{ … … 145 144 146 145 Dans ce type d'architecture multi-clusters, les temps d'accès à la mémoire sont très différents, 147 suivant qu'un processeur adresse la mémoire locale au sous-système, ouà un autre sous-système.148 On parle d'architecture NUMA(Non Uniform Memory Access).146 suivant qu'un processeur adresse la mémoire locale à son propre sous-système, la mémoire locale à un autre sous-système. 147 On parle ainsi d'architecture ''NUMA'' (Non Uniform Memory Access). 149 148 150 149 Refaites le placement des canaux de communication de manière ''intelligente''. Essayez ensuite de 151 varier sur le placement de l'état par rapport au placement du canal, de placer le canal plutôt du150 faire varier le placement de l'état par rapport au placement du canal, de placer le canal plutôt du 152 151 côté de la consommation, ou de la production, ... 153 152 … … 166 165 = 4. Compte-Rendu = 167 166 168 Comme pour les TP précédents, vous rendrez une archive contenant :169 {{{ 167 Comme pour les TP précédents, vous rendrez une archive contenant : 168 {{{ 170 169 $ tar tzf binome0_binome1.tar.gz 171 170 tp4/