Changes between Version 12 and Version 13 of MjpegCourse/Multipipe


Ignore:
Timestamp:
Jan 6, 2011, 5:34:35 PM (13 years ago)
Author:
joel
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • MjpegCourse/Multipipe

    v12 v13  
    11{{{
    22#!html
    3 <h1>TP4 : Exécution sur architecture multi-cluster</h1>
     3<h1>TP4 : Éxécution sur architecture multi-cluster</h1>
    44}}}
    55[[PageOutline]]
     
    1010
    1111On 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,
     12pour permettre - par exemple - de traiter des images de plus grandes dimensions,
    1313tout en respectant la fréquence video.
    1414Cette augmentation de débit peut être obtenue en augmentant la fréquence d'horloge, mais
     
    1818Pour augmenter le parallélisme, il ne suffit pas d'augmenter le nombre de processeurs dans
    1919l'architecture matérielle, il faut également augmenter le nombre de tâches de l'application
    20 logicielle, ce qui impose de modifier la structure du TCG.
     20logicielle (afin d'utiliser ces nouveaux processeurs) : cela impose de modifier la structure du TCG.
    2121
    2222 * La première partie du TP vise la définition d'un graphe de tâches ''multi-pipeline''.
    2323 * La seconde partie du TP porte sur la définition d'une architecture matérielle ''multi-clusters''.
    2424 * 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).
    2626
    2727Commencez par créer un répertoire de travail `tp4`, et recopiez dans ce répertoire les différents
     
    3131
    3232Le 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.
     33un 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
     34en parallèle, mais travaillent sur des blocs différents de l'image.
    3635Il est difficile d'augmenter le nombre d'étages de ce macro-pipeline, car les tâches les plus coûteuses
    3736en temps de calcul (VLD et IDCT) ne se découpent pas facilement en sous-tâches.
     
    4039
    4140On 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`.
     41de décompression (tel qu'illustré sur la figure ci-contre). Chaque pipeline traite une image complète.
     42Pour ce faire, on introduit une tâche chargée de distribuer aternativement aux deux pipe-line le flux MJPEG.
     43Cette nouvelle tâche, nommée `split`, se situera entre les tâches `tg` et `demux`.
    4544La tâche `libu` doit être modifiée pour récupérer alternativement les images décompressées
    4645provenant des deux pipelines, avant de les envoyer vers la tâche `ramdac`.
    4746
    4847Modifiez 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 modifiier
     48Vous devez introduire un nouveau modèle de tâche pour la tâche `split`, puis modifier
    5049le modèle de la tâche `libu`. Il faut ensuite modifier
    5150la topologie du TCG en définissant explicitement  toutes les intances de tâches et tous
    5251les canaux de communication nécessaires.
    5352
    54 Le code de la tâche `split` doit analyser octet par octet le flux MJPEG, pour détecter
     53Le code de la tâche `split` doit analyser octet par octet le flux MJPEG, précisement en détectant
    5554le marqueur de début d'image (SOI = 0xffd8), de façon à l'aiguiller vers le bon canal de sortie. 
    5655
    57 Le pseudo core correspondant à l'algorithme de split est:
     56Le pseudo-code correspondant à l'algorithme de `split` est :
    5857{{{
    5958canal de sortie = le premier
    6059
    61 toujours:
     60toujours :
    6261   b = lire un octet
    6362   si b == 0xff
     
    6766         envoyer le bloc
    6867         changer de canal de sortie
    69       ecrire b dans la sortie
    70       ecrire m dans la sortie
    71       retourner au debut de la boucle
    72    ecrire b dans la sortie
     68      é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
    7372}}}
    7473
    7574Pour valider fonctionnellement cette nouvelle description de l'application logicielle,
    76 déployez-la sur station de travail POSIX. vous devez voir les mêmes images qu'avant, dans le même ordre.
     75déployez-la sur une station de travail POSIX. Vous devez normalement voir les mêmes images qu'avant, dans le même ordre.
    7776
    7877= 2. Architecture matérielle multi-processeur clusterisée =
     
    8079Pour supporter la charge induite par ces nouvelles tâches, il faut augmenter
    8180le nombre d'unités de traitement (processeurs ou coprocesseurs).
    82 Pour éviter que l'accès à la mémoire devienne un goulot d'étranglement,
     81Afin d'éviter que l'accès à la mémoire ne devienne un goulot d'étranglement,
    8382il est également souhaitable d'augmenter le nombre de bancs mémoire physique, de façon
    8483à 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.
     84il est utile de structurer l'architecture en sous-systèmes distincts.
    8685
    87 Cette structuration a des justifications fonctionnelles:
     86Cette structuration a des justifications fonctionnelles :
    8887 * 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é
    9190   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).
    9392
    9493[[Image(MjpegCourse/ClusteredNoirqMulti:clustered_noirq_multi.png, align=right)]]
    9594
    96 Chaque sous-système constitue un ''cluster'', et contient des processeurs,
     95Chaque sous-système constitue un ''cluster'' (ou encore ''grappe''), et contient des processeurs,
    9796de la mémoire, et dispose de son propre mécanisme d'interconnexion local.
    9897
    99 Les différents clusters sont interconnectés entre eux par une micro-réseau à interface
    100 VCI/OCB, qui pourra être modélisé par un composant `Vgmn`.
     98Les différents clusters sont interconnectés entre eux par un micro-réseau à interface
     99VCI, qui pourra être modélisé par un composant `Vgmn`.
    101100
    102101On 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),
    104103qui possède un nombre variable de ports ''initiateur'' et ''cible''
    105104permettant de connecter les composants matériels appartenant au cluster. Il possède également
     
    107106
    108107Cette structuration aboutit donc à l'utilisation d'un mécanisme d'interconnexion à deux niveaux
    109 (interconnect global: `Vgmn`, et interconnect local: `LocalCrossbar`), bien que tous les
     108(interconnect global : `Vgmn`, et interconnect local : `LocalCrossbar`), bien que tous les
    110109composants matériels (initiateurs et cibles) continuent à partager le même espace d'adressage.
    111110{{{
     
    113112Un processeur d'un cluster peut adresser directement un banc mémoire ou un périphérique
    114113appartenant à 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:
     114de l'architecture doivent maintenant être identifiés par un double index :
    116115 * un index global définissant le cluster.
    117116 * un index local identifant le composant dans le cluster.
     
    129128= 3. Déploiement et exploration architecturale =
    130129
    131 Modifiez la description DSX de l'application MJPEG:
     130Modifiez la description DSX de l'application MJPEG :
    132131 * Remplacez l'instanciation de !VgmnNoirqMulti par
    133132{{{
     
    145144
    146145Dans 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).
     146suivant qu'un processeur adresse la mémoire locale à son propre sous-système, la mémoire locale à un autre sous-système.
     147On parle ainsi d'architecture ''NUMA'' (Non Uniform Memory Access).
    149148
    150149Refaites 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 du
     150faire varier le placement de l'état par rapport au placement du canal, de placer le canal plutôt du
    152151côté de la consommation, ou de la production, ...
    153152
     
    166165= 4. Compte-Rendu =
    167166
    168 Comme pour les TP précédents, vous rendrez une archive contenant:
    169 {{{
     167Comme pour les TP précédents, vous rendrez une archive contenant :
     168{{{ 
    170169$ tar tzf binome0_binome1.tar.gz
    171170tp4/