Changes between Version 25 and Version 26 of MjpegCourse/Coproc


Ignore:
Timestamp:
Mar 11, 2008, 1:14:19 PM (17 years ago)
Author:
Nicolas Pouillon
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • MjpegCourse/Coproc

    v25 v26  
    1919de communication entre le coprocesseur et le reste de l'application.
    2020
    21 La tâche {{{idct}}}  étant la plus gourmande en temps de calcul, nous allons
     21La tâche {{{idct}}} étant la plus gourmande en temps de calcul, nous allons
    2222analyser les gains de performance apportés par l'implantation de la tâche {{{idct}}}
    2323comme un processeur matériel spécialisé.
     
    2727matériel doit utiliser les mêmes canaux de communication MWMR que ceux
    2828utilisés par la tâche logicielle. Il faut donc que le coprocesseur matériel respecte le protocole
    29 MWMR à 5 étapes:
    30  * prise du verrou,
    31  * consultation de l'état de la FIFO logicielle,
    32  * transfert des données,
    33  * mise à jour de l'état de la FIFO logicielle,
    34  * libération du verrou.
     29MWMR.
    3530
    3631Pour simplifier le travail de l'outil de synthèse de coprocesseur,
     
    4439été utilisé pour interfacer les composants matériels `Ramdac` et `Tg`.
    4540
    46 Vous repartirez de la plateforme du [MjpegCourse/Multipro TP3]:
     41Vous repartirez de la plateforme du [MjpegCourse/Multipro TME3]:
    4742!VgmnNoirqMulti, pour une architecture comportant 3 processeurs,
    4843et vous modifierez cette architecture, pour remplacer
     
    5247[[Image(vgmn_coproc.png, align=right)]]
    5348
    54 Reprenez les fichiers du TP3:
     49Reprenez les fichiers du TME3:
    5550 * La description de la plateforme matérielle
    5651 * La description de l'application (c'est à dire le TCG et les directives de déploiement)
     
    6156utilisant 3 processeurs, lorsque la tâche {{{idct}}} est placée sur le premier processeur,
    6257que la tâche {{{vld}}} est placée sur le second processeur,
    63 et que toutes les autres tâches logicielles se partagent le troisième processeur.
     58et que toutes les autres tâches (demux, libu, iqzz) se partagent le troisième processeur.
    6459
    6560= 1. Coprocesseur virtuel =
     
    9893   utilisés par le coprocesseur matériel pour effectuer la transformation IDCT d'un bloc de 64 pixels.
    9994{{{
    100 idct = TaskModel( 'idct',
    101                   infifos = [ 'input' ],
    102                   outfifos = [ 'output' ],
    103                   impl = [ SwTask( 'idct',
    104                                    stack_size = 1024,
    105                                    sources = [ 'src/idct.c' ],
    106                                    defines = [ 'WIDTH', 'HEIGHT','EXEC_TIME' ] ),
    107                            SyntheticTask()
    108                           ] )
     95TaskModel(
     96        'idct',
     97        ports = {'input':MwmrInput(64*4),
     98                 'output':MwmrOutput(64),
     99                },
     100        impls = [ SwTask( 'idct',
     101                          stack_size = 4096,
     102                          sources = [ 'idct.c' ],
     103                          defines = [ 'WIDTH', 'HEIGHT', 'EXEC_TIME' ] ),
     104                  SyntheticTask()
     105                 ] )
    109106}}}
    110107 * La valeur du paramètre  EXEC_TIME doit être définie au moment où on instancie la tâche {{{idct}}} dans le TCG.
    111108{{{
    112 Task( 'idct0', idct,
     109Task( 'idct0', 'idct',
    113110      portmap = { 'output':idct_libu,
    114111                  'input' :iqzz_idct },
     
    119116   (comme on l'a fait pour les tâches {{{ramdac}}} ou {{{tg}}}).
    120117{{{
    121 mapper.map("idct0", vci = mapper.hard.vgmn)
     118mapper.map( mapper.tcg['idct'],
     119            vci = mapper.hard['vgmn0'],
     120            address = 0x73000000 )
    122121}}}
    123122
     
    133132
    134133[[Image(MjpegCourse:q.gif)]] Combien de coefficients sont transférés par cycle sur l'interface FIFO d'entrée? Combien  de pixels sont
    135 transférés par cycle sur l'interface FIFO de sortie? En déduire les durées minimales (en nombre de cycles) pour les étapes 1 et 3 ci-dessus.
     134transférés par cycle sur l'interface FIFO de sortie?
     135Ajoutez-y une estimation des temps de transferts dus à l'accès aux deux canaux MWMR (les 5 étapes).
     136En déduire les durées minimales (en nombre de cycles) pour les étapes 1 et 3 ci-dessus.
    136137
    137138Le nombre de cycles nécessaires pour exécuter l'étape 2 ci-dessus (temps de calcul pour un bloc de 64 pixels) est
     
    140141
    141142Pour préciser le nombre de cycles d'exécution pour l'étape 2, il faut modifier le code C de la tâche {{{idct}}}, et insérer,
    142 entre les deux primitives ''srl_mwmr_read()'' et ''srl_mwmr_write()'',
    143 un appel à la  la fonction bloquante ''srl_busy_cycles()''.
     143entre les deux primitives `srl_mwmr_read()` et `srl_mwmr_write()`,
     144un appel à la  la fonction `srl_busy_cycles()`.
    144145{{{
    145146srl_mwmr_read();
     
    154155[[Image(MjpegCourse:q.gif)]] Pour quelle raison peut-on affirmer sans aucune expérimentation
    155156(c'est à dire sans aucune simulation), qu'il est sans intérêt de synthétiser un coprocesseur
    156 matériel dont le temps de calcul soit inférieur à une centaine de cycles?
     157matériel dont le temps de calcul soit inférieur à un millier de cycles?
    157158
    158159Modifier la description DSX pour déployer l'application MJPEG sur une architecture comportant 2
     
    160161
    161162[[Image(MjpegCourse:q.gif)]] Mesurez le nombre de cycle pour décompresser 25 images,
    162 en faisant varier la valeur du paramètre ''EXEC_TIME''. On essaiera les valeurs 100, 200, 400, 800, 1600.
     163en faisant varier la valeur du paramètre ''EXEC_TIME''. On essaiera les valeurs 100, 500, 1000, 4000, 8000, 16000.
    163164En déduire un objectif de performance "raisonnable" pour la synthèse du coprocesseur IDCT.
    164165
     
    196197tp5/
    197198tp5/rapport.pdf
    198 tp5/vgmn_noirq_multi.py
    199199tp5/mjpeg/
     200tp5/mjpeg/vgmn_noirq_multi.py
    200201tp5/mjpeg/mjpeg.py
    201202tp5/mjpeg/src/
    202 tp5/mjpeg/src/iqzz.c
    203 tp5/mjpeg/src/idct.c
    204 tp5/mjpeg/src/libu.c
    205 }}}
    206 
    207 Cette archive devra être livrée avant le mardi 13 mars 2007, 18h00 à [MailAsim:nipo Nicolas Pouillon]
     203tp5/mjpeg/src/iqzz/iqzz.c
     204tp5/mjpeg/src/idct/idct.c
     205tp5/mjpeg/src/libu/libu.c
     206}}}
     207
     208Cette archive devra être livrée avant le mardi 18 mars 2008, 18h00 à [MailAsim:nipo Nicolas Pouillon]
    208209
    209210= Suite =