| | 1 | {{{ |
| | 2 | #!html |
| | 3 | <h1>TP4 : Exécution sur architecture multi-cluster</h1> |
| | 4 | }}} |
| | 5 | [[PageOutline]] |
| | 6 | |
| | 7 | = 0. Objectif = |
| | 8 | |
| | 9 | On cherche dans ce quatrième TP à augmenter encore le débit de la chaîne de décompression, |
| | 10 | pour permettre - par exemple - de traîter des images de plus grandes dimensions, |
| | 11 | tout en respectant la fréquence video. |
| | 12 | Cette augmentation de débit peut être obtenue en augmentant la fréquence d'horloge, mais |
| | 13 | cette approche a évidemment des limites. On essayera donc plutôt d'augmenter le parallélisme |
| | 14 | de traitement du flux MJPEG. |
| | 15 | |
| | 16 | Pour augmenter le parallélisme, il ne suffit pas d'augmenter le nombre de processeurs dans |
| | 17 | l'architecture matérielle, il faut également augmenter le nombre de tâches de l'application |
| | 18 | logicielle, ce qui impose de modifier la structure du TCG. |
| | 19 | |
| | 20 | * La première partie du TP vise la définition d'un graphe de tâches ''multi-pipeline''. |
| | 21 | * La seconde partie du TP porte sur la définition d'une architecture matérielle ''multi-clusters''. |
| | 22 | * La troisième partie du TP analyse l'impact du placement des canaux de communication |
| | 23 | sur les bancs mémoire dans les architectures `NUMA` (Non Uniform Memory Access). |
| | 24 | |
| | 25 | Commencez par créer un répertoire de travail `tp4`, et recopiez dans ce répertoire les différents |
| | 26 | fichiers et/ou répertoires sources contenus dans le répertoire `tp3`. |
| | 27 | |
| | 28 | = 1. Parallélisation du TCG = |
| | 29 | |
| | 30 | Le TCG défini dans le TP1 et re-utilisé dans les TP2 et TP3 comportait 7 tâches. Il exploitait |
| | 31 | un parallélisme de type ''macro-pipeline''. |
| | 32 | Différentes tâches traitent différents blocs de la même image: Toutes les tâches s'exécutent |
| | 33 | en parallèle, mais sur des blocs différents de l'image. |
| | 34 | Il est difficile d'augmenter le nombre d'étages de ce macro-pipeline, car les tâches les plus coûteuses |
| | 35 | en temps de calcul (VLD et IDCT) ne se découpent pas facilement en sous-tâches. |
| | 36 | |
| | 37 | [[Image(mjpeg_multi.png, align=right)]] |
| | 38 | |
| | 39 | On va donc exploiter un autre type de parallélisme en utilisant deux pipelines |
| | 40 | de décompression. Chaque pipeline traite une image complête. |
| | 41 | On introduit une tâche chargée de distribuer aternativement aux deux pipe-line le flux MJPEG. |
| | 42 | Cette nouvelle tâche `split` se situera entre les tâches `tg` et `demux`. |
| | 43 | La tâche `libu` doit être modifiée pour récupérer alternativement les images décompressées |
| | 44 | provenant des deux pipelines, avant de les envoyer vers la tâche `ramdac`. |
| | 45 | |
| | 46 | Modifiez la structure du TCG dans la description DSX de l'application. |
| | 47 | Vous devez introduire un nouveau modèle de tâche pour la tâche `split`, et modifiier |
| | 48 | le modèle de la tâche `libu`. Il faut ensuite modifier |
| | 49 | la topologie du TCG en définissant explicitement toutes les intances de tâches et tous |
| | 50 | les canaux de communication nécessaires. |
| | 51 | |
| | 52 | Le code de la tâche `split` doit analyser octet par octet le flux MJPEG, pour détecter |
| | 53 | le marqueur de début d'image (SOI = 0xffd8), de façon à l'aiguiller vers le bon canal de sortie. |
| | 54 | |
| | 55 | Pour valider fonctionnellement cette nouvelle description de l'application logicielle, |
| | 56 | déployez-la sur station de travail POSIX. vous devez voir les mêmes images qu'avant, dans le même ordre. |
| | 57 | |
| | 58 | = 2. Architecture matérielle multi-processeur clusterisée = |
| | 59 | |
| | 60 | Pour supporter la charge induite par ces nouvelles tâches, il faut augmenter |
| | 61 | le nombre d'unités de traitement (processeurs ou coprocesseurs). |
| | 62 | Pour éviter que l'accès à la mémoire devienne un goulot d'étranglement, |
| | 63 | il est également souhaitable d'augmenter le nombre de bancs mémoire physique, de façon |
| | 64 | à répartir les données. Et lorsque le nombre d'entités communicantes (initiateurs ou cibles) augmente, |
| | 65 | il est utile de structurer l'architecture en sous-systèmes. |
| | 66 | |
| | 67 | Cette structuration a des justifications fonctionnelles: |
| | 68 | * On cherche à regrouper dans un même sous-sytème les différents composants |
| | 69 | matériels qui réalisent une même partie de l'application, et communiquent fortement entre eux. |
| | 70 | * Elle facilite également la réalisation matérielle : Chaque sous-système pourra être implanté |
| | 71 | physiquement dans un même domaine synchrone, et utiliser sa propre horloge, |
| | 72 | conformément au principe GALS (Globally Asynchronous, Locally Synchronous). |
| | 73 | |
| | 74 | [[Image(ClusteredNoirqMulti:clustered_noirq_multi.png, align=right)]] |
| | 75 | |
| | 76 | Chaque sous-système constitue un ''cluster'', et contient des processeurs, |
| | 77 | de la mémoire, et dispose de son propre mécanisme d'interconnexion local. |
| | 78 | |
| | 79 | Les différents clusters sont interconnectés entre eux par une micro-réseau à interface |
| | 80 | VCI/OCB, qui pourra être modélisé par un composant `Vgmn`. |
| | 81 | |
| | 82 | On utilisera comme mécanisme d'interconnexion interne à chaque cluster le composant |
| | 83 | !LocalCrossbar (voir SoclibComponents). Ce composant matériel est un petit crossbar, |
| | 84 | qui possède un nombre variable de ports ''initiateur'' et ''cible'' |
| | 85 | permettant de connecter les composants matériels appartenant au cluster. Il possède également |
| | 86 | deux ports ''initiateur'' et ''cible'' permettant l'accès au micro-réseau, représentés dans la |
| | 87 | description DSX comme un seul port. |
| | 88 | |
| | 89 | Cette structuration aboutit donc à l'utilisation d'un mécanisme d'interconnexion à deux niveaux |
| | 90 | (interconnect global: `Vgmn`, et interconnect local: `LocalCrossbar`), bien que tous les |
| | 91 | composants matériels (initiateurs et cibles) continuent à partager le même espace d'adressage. |
| | 92 | {{{ |
| | 93 | #!comment |
| | 94 | Un processeur d'un cluster peut adresser directement un banc mémoire ou un périphérique |
| | 95 | appartenant à un autre cluster. La principal conséquence est que tous les composants matériels |
| | 96 | de l'architecture doivent maintenant être identifiés par un double index: |
| | 97 | * un index global définissant le cluster. |
| | 98 | * un index local identifant le composant dans le cluster. |
| | 99 | }}} |
| | 100 | |
| | 101 | Pour faciliter l'exploration architecturale, on souhaite définir une architecture générique |
| | 102 | dont les paramètres sont: |
| | 103 | * la latence minimale du Vgmn |
| | 104 | * le nombre de clusters et, pour chaque cluster, |
| | 105 | * le nombre de bancs mémoire |
| | 106 | * le nombre de processeurs |
| | 107 | Chaque cluster contiendra en outre un contrôleur de verrous (composant Locks). |
| | 108 | |
| | 109 | Complétez la définition de l'architecture ClusteredNoirqMulti. |
| | 110 | |
| | 111 | = 3. Déploiement et exploration architecturale = |
| | 112 | |
| | 113 | Modifiez la description DSX de l'application MJPEG: |
| | 114 | * Remplacez l'instanciation de !VgmnNoirqMulti par |
| | 115 | {{{ |
| | 116 | archi = ClusteredNoirqMulti( cpus = [1, 2, 2, 1], |
| | 117 | rams = [1, 1, 1, 1], |
| | 118 | min_latency = 10 ) |
| | 119 | }}} |
| | 120 | * Remplacez le déploiement de `tg` et `ramdac` sur {{{archi.vgmn}}} par un déploiement |
| | 121 | sur {{{archi.cluster[0]}}} et {{{archi.cluster[3]}}} respectivement. |
| | 122 | * Ne touchez aucun autre paramètre, particulièrement les autres paramètre de déploiement |
| | 123 | dans les rams, c'est pour la question suivante. |
| | 124 | |
| | 125 | [[Image(MjpegCourse:q.gif)]] Combien faut-il de cycles pour décompresser 25 images? |
| | 126 | |
| | 127 | La structure de l'application logicielle (TCG), et l'architecture matérielle étant définies, |
| | 128 | l'exploration architecturale consiste donc à analyser l'influence du placement des |
| | 129 | objets logiciels sur les composants matériels. On s'intéresse tout particulièrement |
| | 130 | au placement des canaux de communication sur les bancs mémoire physiques. |
| | 131 | |
| | 132 | Dans ce type d'architecture multi-clusters, les temps d'accès à la mémoire sont très différents, |
| | 133 | suivant qu'un processeur adresse la mémoire locale au sous-système, ou à un autre sous-système. |
| | 134 | On parle d'architecture NUMA (Non Uniform Memory Access). |
| | 135 | |
| | 136 | Refaites le placement des canaux de communication de manière ''intelligente''. |
| | 137 | |
| | 138 | [[Image(MjpegCourse:q.gif)]] Combien faut-il de cycles pour décompresser 25 images? |
| | 139 | |
| | 140 | = 4. Compte-Rendu = |
| | 141 | |
| | 142 | Comme pour les TP précédents, vous rendrez une archive contenant: |
| | 143 | {{{ |
| | 144 | $ tar tzf binome0_binome1.tar.gz |
| | 145 | tp4/ |
| | 146 | tp4/rapport.pdf |
| | 147 | tp4/clustered_noirq_multi.py |
| | 148 | tp4/mjpeg/ |
| | 149 | tp4/mjpeg/mjpeg.py |
| | 150 | tp4/mjpeg/src/ |
| | 151 | tp4/mjpeg/src/iqzz.c |
| | 152 | tp4/mjpeg/src/libu.c |
| | 153 | tp4/mjpeg/src/split.c |
| | 154 | }}} |
| | 155 | |
| | 156 | Cette archive devra être livrée avant le mardi 6 mars 2007, 18h00 à [MailAsim:nipo Nicolas Pouillon] |