Changes between Version 10 and Version 11 of MjpegCourse/Coproc


Ignore:
Timestamp:
Mar 5, 2007, 6:44:12 PM (17 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • MjpegCourse/Coproc

    v10 v11  
    1313comportant principalement des processeurs programmables.
    1414
    15 L'introduction d'un ''accélérateur'' matériel n'est pas toujours justifiée.
     15L'introduction d'un accélérateur matériel n'est pas toujours justifiée.
    1616La loi d'Amdhal précise qu'il est inefficace d'accélérer un traitement
    1717qui ne représente qu'une petite partie du temps de calcul total
     
    2323comme un processeur matériel spécialisé.
    2424
    25 Pour éviter de re-écrire toute l'application logicielle, on s'impose que le coprocesseur
    26 matériel utilise les mêmes canaux de communication (en entrée et en sortie), que ceux
     25Pour éviter de re-écrire toute l'application logicielle, on ne veut pas modifier
     26la structure du TCG. Par conséquent, le coprocesseur
     27matériel doit utilise les mêmes canaux de communication MWMR (en entrée et en sortie), que ceux
    2728utilisés par la tâche logicielle. Il faut donc que le coprocesseur matériel respecte le protocole
    2829MWMR à 5 étapes:
     
    3334 * libération du verrou.
    3435
    35 Pour simplifier le travail des outils de synthèse, on utilise pour cela un composant
    36 matériel générique, appelé contrôleur MWMR qui est un initiateur VCI, capable
    37 de lire ou d'écrire en mémoire, dans des FIFO MWMR, et qui fournit au coprocesseur
    38 autant de canaux de communications que celui-ci en a besoin. C'est ce même
    39 composant matériel qui est utilisé par les composants RAMDAC et TG.
     36Pour simplifier le travail des outils de synthèse, et séparer clairement les fonctions de calcul et les
     37fonctions de communication, ce n'est pas le coprocesseur matériel synthétisé qui implémente le
     38protocole MWMR. On utilise pour accéder aux canaux MWMR un composant matériel générique, appelé contrôleur MWMR.
     39Cet initiateur VCI est capable de lire ou d'écrire dans les canaux MWMR (en respectant le protocole à 5 étapes), et  fournit au coprocesseur
     40autant d'interfaces de type FIFO que celui-ci en a besoin. Ce composant est également une cible VCI,
     41puisqu'il doit être configuré par le logiciel. C'est ce même
     42contrôleur MWMR qui a déjà été utilisé pour interfacer les composants matériels RAMDAC et TG.
     43Nous repartirons de la plateforme du [MjpegCourse/Multipro TP3]: !VgmnNoirqMulti.
     44Nous modifierons cette plateforme comportant trois processeurs Mips, pour remplacer
     45un des processeurs programmable par un coprocesseur matériel dédié à la transformation IDCT.
    4046
    41 Nous repartirons de la plateforme du [MjpegCourse/Multipro TP3]: !VgmnNoirqMulti.
    42 Nous modifierons cette plateforme comportant deux processeurs Mips, pour ajouter
    43 un coprocesseur matériel dédié à la transformation IDCT.
     47== Mettre ici le dessin de la plate-forme matérielle complête avec 2 processeurs et 3 controleurs MWMR ==
    4448
    4549Reprenez les fichiers du TP3:
    46  * La description de la plateforme
    47  * La description de l'application
     50 * La description de la plateforme matérielle
     51 * La description de l'application (c'est à dire le TCG et les directives de déploiement)
    4852 * Le code des tâches (`Libu` ne gère qu'un seul pipeline et `Split` n'existe pas)
    4953
    5054[[Image(MjpegCourse:q.gif)]] Q1.  Rappelez le temps
    51 nécessaire pour décoder 25 images, dans le cas d'une implantation logicielle
    52 utilisant deux processeurs.
     55nécessaire pour décoder 25 images, dans le cas d'une implantation
     56utilisant trois processeurs, lorsque la tâche {{{idct}}} est placée sur un processeur,
     57que la tâche {{{vld}}} est placée sur un second processeur, et que toutes les autres
     58tâches logicielles se partagent le troisième processeur.
    5359
    54 = 1. Modification du TCG =
     60= 1. Coprocesseur virtuel =
    5561
    56 Pour introduire un coprocesseur matériel,
    57 il faut commencer par modifier le modèle de la tâche {{{idct}}},
    58 en définissant une implémentation matériellel:
     62Il existe plusieurs solutions micro-architecturales pour la réalisation
     63d'un coprocesseur matériel spécialisé. Dans le cas d'une transformation IDCT,
     64on peut, suivant le nombre d'opérateurs arithmétiques utilisés, effectuer le calcul d'un bloc de 64 pixels
     65en un cycle, en 8 cycles, en 64 cycles, en 512 cycles ou plus. En première approxiation,
     66le coût matériel est inversement proportionnel au temps de calcul.
     67
     68Pour éviter de gaspiller du silicium, il faut donc - avant de se lancer dans la synthèse - évaluer précisément
     69la puissance de calcul requise pour le coprocesseur, une fois celui-ci placé
     70dans son environnement de travail. Il faut donc faire de l'exploration
     71architecturale ''avant synthèse''.
     72
     73Pour cela, on commence par ''émuler'' le coprocesseur matériel - sans le synthétiser -
     74en encapsulant la tâche logicielle {{{idct}}} existante dans un composant matériel générique
     75appelé ''threader'', qui est un service fourni par l'environnement DSX.
     76Pour ce qui concerne le matériel, ce composant ''threader'' s'interface avec le composant matériel
     77''contrôleur MWMR'', mais il est également capable de communiquer avec la tâche logicielle {{{idct}}},
     78de façon a utiliser ce code pour effectuer les calculs qui devront être réalisés par le
     79coprocesseur matériel.
     80En pratique, la simulation dans ce mode consiste à exécuter un programme parallèle comportant
     81deux processus UNIX communicant entre eux par des ''pipes'' UNIX.
     82 * Le premier processus est le simulateur SystemC modélisant l'architecture matérielle (y compris le ''contrôleur MWMR'' et le composant ''threader'').
     83 * Le second processus est la tâche logicielle {{{idct}}} encapsulée dans le composant ''threader''.
     84
     85Pour utiliser ce mode d'émulation, il faut modifier deux choses dans la description DSX:
     86 * dans la définition du modèle de la tâche {{{idct}}}, il faut ajouter l'implémentation `SyntheticTask()`
    5987{{{
    6088idct = TaskModel(
     
    6997                                 ] )
    7098}}}
    71 
    72 = 2. Coprocesseur virtuel =
    73 
    74 Il existe plusieurs solutions micro-architecturales pour la réalisation
    75 d'un coprocesseur matériel spécialisé. Dans le cas d'une transformation IDCT,
    76 on peut, suivant le nombre d'opérateurs arithmétiques utilisés, effectuer le calcul d'un bloc de 64 pixels
    77 en un cycle, en 8 cycles, en 64 cycles ou en 256 cycles. Le coût matériel est inversement
    78 proportionnel au temps de calcul.
    79 
    80 Avant de se lancer dans la synthèse, il faut donc évaluer précisément
    81 la puissance de calcul requise pour le coprocesseur, une fois celui-ci placé
    82 dans son environnement de travail. On commence donc par ''encapsuler''
    83 la tâche matérielle `idct` dans un composant matériel générique appelé ''threader''.
    84 Ce composant s'interface d'un côté avec le contrôleur MWMR, et de l'autre avec
    85 la tâche logicielle.
    86 
    87 L'implémentation `Synthetic()` sert à déclarer cette implémentation et doit
    88 être accompagnée d'une déclaration de tâche logicielle (`SwTask`).
    89 Elle permet la synthèse virtuelle de la tâche. On peut alors déployer la tâche comme si
    90 elle était matérielle, son comportement est simulé.
     99 * Dans la partie déploiement, il faut déployer la tâche {{{idct}}} comme une tâche matérielle (comme on l'a fait pour les tâches {{{ramdac}}} ou {{{tg}}}.
     100{{{
     101mapper.map("idct", vci = mapper.hard.vgmn)
     102}}}
    91103
    92104Le coprocesseur matériel IDCT (comme beaucoup de coprocesseurs matériels de type ''flot de données'')
    93 exécute une boucle infinie dans laquelle if effectue successivement les actions suivantes:
    94  * recopie d'un bloc de 64 coefficients du canal MWMR d'entrée vers une mémoire locale BUFIN,
    95  * calcul d'un bloc de 64 pixels, et stockage de ces pixels dans une seconde mémoire locale BUFOUT,
    96  * recopie de ces 64 pixels de la mémoire locale BUFOUT vers le canal MWMR de sortie.
     105exécute une boucle infinie dans laquelle il effectue successivement les actions suivantes:
     106 1. recopie d'un bloc de 64 coefficients du canal MWMR d'entrée vers une mémoire locale BUFIN,
     107 1. calcul d'un bloc de 64 pixels, et stockage de ces pixels dans une seconde mémoire locale BUFOUT,
     108 1. recopie de ces 64 pixels de la mémoire locale BUFOUT vers le canal MWMR de sortie.
    97109
     110Compte-tenu des caractéristiques
    98111Pour modéliser le temps de traitement la tâche matérielle virtuelle plus exacte en temps de simulation, on peut ajouter des directives
    99112dans le code source C des tâches pour préciser le temps qu'il faudrait pour réaliser la même action en matériel:
     
    103116En lisant le code de l'implémentation matérielle du coprocesseur `Idct`, déduisez les temps
    104117nécessaires aux différentes parties du traitement.
     118our introduire un coprocesseur matériel,
     119il faut commencer par modifier le modèle de la tâche {{{idct}}},
     120en définissant une implémentation matériellel:
    105121
    106122[[Image(MjpegCourse:q.gif)]] En utilisant un coprocesseur virtuel, pour la tâche {{{idct}}},