Changes between Version 25 and Version 26 of MjpegCourse/Coproc
- Timestamp:
- Mar 11, 2008, 1:14:19 PM (17 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
MjpegCourse/Coproc
v25 v26 19 19 de communication entre le coprocesseur et le reste de l'application. 20 20 21 La tâche {{{idct}}} 21 La tâche {{{idct}}} étant la plus gourmande en temps de calcul, nous allons 22 22 analyser les gains de performance apportés par l'implantation de la tâche {{{idct}}} 23 23 comme un processeur matériel spécialisé. … … 27 27 matériel doit utiliser les mêmes canaux de communication MWMR que ceux 28 28 utilisé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. 29 MWMR. 35 30 36 31 Pour simplifier le travail de l'outil de synthèse de coprocesseur, … … 44 39 été utilisé pour interfacer les composants matériels `Ramdac` et `Tg`. 45 40 46 Vous repartirez de la plateforme du [MjpegCourse/Multipro T P3]:41 Vous repartirez de la plateforme du [MjpegCourse/Multipro TME3]: 47 42 !VgmnNoirqMulti, pour une architecture comportant 3 processeurs, 48 43 et vous modifierez cette architecture, pour remplacer … … 52 47 [[Image(vgmn_coproc.png, align=right)]] 53 48 54 Reprenez les fichiers du T P3:49 Reprenez les fichiers du TME3: 55 50 * La description de la plateforme matérielle 56 51 * La description de l'application (c'est à dire le TCG et les directives de déploiement) … … 61 56 utilisant 3 processeurs, lorsque la tâche {{{idct}}} est placée sur le premier processeur, 62 57 que la tâche {{{vld}}} est placée sur le second processeur, 63 et que toutes les autres tâches logiciellesse partagent le troisième processeur.58 et que toutes les autres tâches (demux, libu, iqzz) se partagent le troisième processeur. 64 59 65 60 = 1. Coprocesseur virtuel = … … 98 93 utilisés par le coprocesseur matériel pour effectuer la transformation IDCT d'un bloc de 64 pixels. 99 94 {{{ 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 ] ) 95 TaskModel( 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 ] ) 109 106 }}} 110 107 * La valeur du paramètre EXEC_TIME doit être définie au moment où on instancie la tâche {{{idct}}} dans le TCG. 111 108 {{{ 112 Task( 'idct0', idct,109 Task( 'idct0', 'idct', 113 110 portmap = { 'output':idct_libu, 114 111 'input' :iqzz_idct }, … … 119 116 (comme on l'a fait pour les tâches {{{ramdac}}} ou {{{tg}}}). 120 117 {{{ 121 mapper.map("idct0", vci = mapper.hard.vgmn) 118 mapper.map( mapper.tcg['idct'], 119 vci = mapper.hard['vgmn0'], 120 address = 0x73000000 ) 122 121 }}} 123 122 … … 133 132 134 133 [[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. 134 transférés par cycle sur l'interface FIFO de sortie? 135 Ajoutez-y une estimation des temps de transferts dus à l'accès aux deux canaux MWMR (les 5 étapes). 136 En déduire les durées minimales (en nombre de cycles) pour les étapes 1 et 3 ci-dessus. 136 137 137 138 Le nombre de cycles nécessaires pour exécuter l'étape 2 ci-dessus (temps de calcul pour un bloc de 64 pixels) est … … 140 141 141 142 Pour 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()''.143 entre les deux primitives `srl_mwmr_read()` et `srl_mwmr_write()`, 144 un appel à la la fonction `srl_busy_cycles()`. 144 145 {{{ 145 146 srl_mwmr_read(); … … 154 155 [[Image(MjpegCourse:q.gif)]] Pour quelle raison peut-on affirmer sans aucune expérimentation 155 156 (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 à un e centainede cycles?157 matériel dont le temps de calcul soit inférieur à un millier de cycles? 157 158 158 159 Modifier la description DSX pour déployer l'application MJPEG sur une architecture comportant 2 … … 160 161 161 162 [[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.163 en faisant varier la valeur du paramètre ''EXEC_TIME''. On essaiera les valeurs 100, 500, 1000, 4000, 8000, 16000. 163 164 En déduire un objectif de performance "raisonnable" pour la synthèse du coprocesseur IDCT. 164 165 … … 196 197 tp5/ 197 198 tp5/rapport.pdf 198 tp5/vgmn_noirq_multi.py199 199 tp5/mjpeg/ 200 tp5/mjpeg/vgmn_noirq_multi.py 200 201 tp5/mjpeg/mjpeg.py 201 202 tp5/mjpeg/src/ 202 tp5/mjpeg/src/iqzz .c203 tp5/mjpeg/src/idct .c204 tp5/mjpeg/src/libu .c205 }}} 206 207 Cette archive devra être livrée avant le mardi 1 3 mars 2007, 18h00 à [MailAsim:nipo Nicolas Pouillon]203 tp5/mjpeg/src/iqzz/iqzz.c 204 tp5/mjpeg/src/idct/idct.c 205 tp5/mjpeg/src/libu/libu.c 206 }}} 207 208 Cette archive devra être livrée avant le mardi 18 mars 2008, 18h00 à [MailAsim:nipo Nicolas Pouillon] 208 209 209 210 = Suite =