Changes between Initial Version and Version 1 of MjpegCourse/Multipipe


Ignore:
Timestamp:
Feb 26, 2007, 1:10:05 PM (17 years ago)
Author:
Nicolas Pouillon
Comment:

Nom hiérarchique

Legend:

Unmodified
Added
Removed
Modified
  • MjpegCourse/Multipipe

    v1 v1  
     1{{{
     2#!html
     3<h1>TP4 : Exécution sur architecture multi-cluster</h1>
     4}}}
     5[[PageOutline]]
     6
     7= 0. Objectif =
     8
     9On cherche dans ce quatrième TP à augmenter encore le débit de la chaîne de décompression,
     10pour permettre - par exemple - de traîter des images de plus grandes dimensions,
     11tout en respectant la fréquence video.
     12Cette augmentation de débit peut être obtenue en augmentant la fréquence d'horloge, mais
     13cette approche a évidemment des limites. On essayera donc plutôt d'augmenter le parallélisme
     14de traitement du flux MJPEG.
     15
     16Pour augmenter le parallélisme, il ne suffit pas d'augmenter le nombre de processeurs dans
     17l'architecture matérielle, il faut également augmenter le nombre de tâches de l'application
     18logicielle, 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
     25Commencez par créer un répertoire de travail `tp4`, et recopiez dans ce répertoire les différents
     26fichiers et/ou répertoires sources contenus dans le répertoire `tp3`.
     27
     28= 1. Parallélisation du TCG =
     29
     30Le TCG défini dans le TP1 et re-utilisé dans les TP2 et TP3 comportait 7 tâches. Il exploitait
     31un parallélisme de type ''macro-pipeline''.
     32Différentes tâches traitent différents blocs de la même image: Toutes les tâches s'exécutent
     33en parallèle, mais sur des blocs différents de l'image.
     34Il est difficile d'augmenter le nombre d'étages de ce macro-pipeline, car les tâches les plus coûteuses
     35en 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
     39On va donc exploiter un autre type de parallélisme en utilisant deux pipelines
     40de décompression. Chaque pipeline traite une image complête.
     41On introduit une tâche chargée de distribuer aternativement aux deux pipe-line le flux MJPEG.
     42Cette nouvelle tâche `split` se situera entre les tâches `tg` et `demux`.
     43La tâche `libu` doit être modifiée pour récupérer alternativement les images décompressées
     44provenant des deux pipelines, avant de les envoyer vers la tâche `ramdac`.
     45
     46Modifiez la structure du TCG dans la description DSX de l'application.
     47Vous devez introduire un nouveau modèle de tâche pour la tâche `split`, et modifiier
     48le modèle de la tâche `libu`. Il faut ensuite modifier
     49la topologie du TCG en définissant explicitement  toutes les intances de tâches et tous
     50les canaux de communication nécessaires.
     51
     52Le code de la tâche `split` doit analyser octet par octet le flux MJPEG, pour détecter
     53le marqueur de début d'image (SOI = 0xffd8), de façon à l'aiguiller vers le bon canal de sortie. 
     54
     55Pour valider fonctionnellement cette nouvelle description de l'application logicielle,
     56dé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
     60Pour supporter la charge induite par ces nouvelles tâches, il faut augmenter
     61le nombre d'unités de traitement (processeurs ou coprocesseurs).
     62Pour éviter que l'accès à la mémoire devienne un goulot d'étranglement,
     63il 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,
     65il est utile de structurer l'architecture en sous-systèmes.
     66
     67Cette 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
     76Chaque sous-système constitue un ''cluster'', et contient des processeurs,
     77de la mémoire, et dispose de son propre mécanisme d'interconnexion local.
     78
     79Les différents clusters sont interconnectés entre eux par une micro-réseau à interface
     80VCI/OCB, qui pourra être modélisé par un composant `Vgmn`.
     81
     82On utilisera comme mécanisme d'interconnexion interne à chaque cluster le composant
     83!LocalCrossbar (voir SoclibComponents). Ce composant matériel est un petit crossbar,
     84qui possède un nombre variable de ports ''initiateur'' et ''cible''
     85permettant de connecter les composants matériels appartenant au cluster. Il possède également
     86deux ports ''initiateur'' et ''cible'' permettant l'accès au micro-réseau, représentés dans la
     87description DSX comme un seul port.
     88
     89Cette 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
     91composants matériels (initiateurs et cibles) continuent à partager le même espace d'adressage.
     92{{{
     93#!comment
     94Un processeur d'un cluster peut adresser directement un banc mémoire ou un périphérique
     95appartenant à un autre cluster. La principal conséquence est que tous les composants matériels
     96de 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
     101Pour faciliter l'exploration architecturale, on souhaite définir une architecture générique
     102dont 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
     107Chaque cluster contiendra en outre un contrôleur de verrous (composant Locks).
     108
     109Complétez la définition de l'architecture ClusteredNoirqMulti.
     110
     111= 3. Déploiement et exploration architecturale =
     112
     113Modifiez la description DSX de l'application MJPEG:
     114 * Remplacez l'instanciation de !VgmnNoirqMulti par
     115{{{
     116archi = 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
     127La structure de l'application logicielle (TCG), et l'architecture matérielle étant définies,
     128l'exploration architecturale consiste donc à analyser l'influence du placement des
     129objets logiciels sur les composants matériels. On s'intéresse tout particulièrement
     130au placement des canaux de communication sur les bancs mémoire physiques.
     131
     132Dans ce type d'architecture multi-clusters, les temps d'accès à la mémoire sont très différents,
     133suivant qu'un processeur adresse la mémoire locale au sous-système, ou à un autre sous-système.
     134On parle d'architecture NUMA (Non Uniform Memory Access).
     135
     136Refaites 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
     142Comme pour les TP précédents, vous rendrez une archive contenant:
     143{{{
     144$ tar tzf binome0_binome1.tar.gz
     145tp4/
     146tp4/rapport.pdf
     147tp4/clustered_noirq_multi.py
     148tp4/mjpeg/
     149tp4/mjpeg/mjpeg.py
     150tp4/mjpeg/src/
     151tp4/mjpeg/src/iqzz.c
     152tp4/mjpeg/src/libu.c
     153tp4/mjpeg/src/split.c
     154}}}
     155
     156Cette archive devra être livrée avant le mardi 6 mars 2007, 18h00 à [MailAsim:nipo Nicolas Pouillon]