Changes between Version 21 and Version 22 of MjpegCourse/Coproc
- Timestamp:
- Mar 7, 2007, 1:38:05 AM (18 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
MjpegCourse/Coproc
v21 v22 119 119 }}} 120 120 * Dans la partie déploiement, il faut déployer la tâche {{{idct}}} comme une tâche matérielle 121 (comme on l'a fait pour les tâches {{{ramdac}}} ou {{{tg}}} .121 (comme on l'a fait pour les tâches {{{ramdac}}} ou {{{tg}}}). 122 122 {{{ 123 123 mapper.map("idct0", vci = mapper.hard.vgmn) … … 126 126 Le coprocesseur matériel IDCT (comme beaucoup de coprocesseurs matériels orientés "flot de données'") 127 127 exécute une boucle infinie dans laquelle il effectue successivement les actions suivantes: 128 1. recopie d'un bloc de 64 coefficients du canal MWMR d'entrée vers une mémoire locale,129 1. calcul d'un bloc de 64 pixels, et stockage de ces pixels dans une seconde mémoire locale,130 1. recopie de ces 64 pixels de la mémoire locale vers le canal MWMR de sortie.128 1. lecture d'un bloc de 64 coefficients du canal MWMR d'entrée vers une mémoire locale, 129 1. calcul d'un bloc de 64 pixels, et stockage de ces pixels dans la mémoire locale (distinct du bloc d'entrée), 130 1. écriture de ces 64 pixels de la mémoire locale vers le canal MWMR de sortie. 131 131 132 132 Les temps de communication correspondant aux étapes 1 et 3 sont précisément décrits par le simulateur SystemC, … … 134 134 (y compris en cas de contention pour l'accès à la mémoire). 135 135 136 [[Image(MjpegCourse:q.gif)]] Combien de coefficients sont transférés par cycle sur 136 [[Image(MjpegCourse:q.gif)]] Combien de coefficients sont transférés par cycle sur l'interface FIFO d'entrée? Combien de pixels sont 137 137 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. 138 138 139 139 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 140 défini par la valeur du paramètre EXEC_TIME, mais si on ne modifie pas le code C de la tâche {{{idct}}}, ce calcul sera effectué 141 "en temps nul" du point de vue du matériel. 141 "en temps nul" du point de vue du matériel. 142 142 143 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, 143 144 entre les deux primitives ''srl_mwmr_read()'' et ''srl_mwmr_write()'', … … 150 151 srl_mwmr_write(); 151 152 }}} 152 L'argument EXEC_TIME définit le nombre de cycles d'attente entre les 153 deux primitives de communication, et modélise donc le temps de calcul (voir SrlApi). 154 155 [[Image(MjpegCourse:q.gif)]] pour quelle raison peut-on affirmer sans aucune expérimentation (c'est à dire sans aucune simulation), 156 qu'il est sans intérêt de synthétiser un coprocesseur matériel dont le temps de calcul soit inférieur à une centaine de cycles? 157 158 Modifier la description DSX pour déployer l'application MJPEG sur une architecture comportant 2 processeurs MIPS et un coprocesseur 159 ''virtuel'' pour la tâche {{{idct}}}. 153 L'argument définit le nombre de cycles que prendrait une version matérielle du même traitement, 154 et modélise donc le temps de calcul (voir SrlApi). EXEC_TIME est issu des paramètres `defines` de la tâche. 155 156 [[Image(MjpegCourse:q.gif)]] Pour quelle raison peut-on affirmer sans aucune expérimentation 157 (c'est à dire sans aucune simulation), qu'il est sans intérêt de synthétiser un coprocesseur 158 matériel dont le temps de calcul soit inférieur à une centaine de cycles? 159 160 Modifier la description DSX pour déployer l'application MJPEG sur une architecture comportant 2 161 processeurs MIPS et un coprocesseur ''virtuel'' pour la tâche {{{idct}}}. 160 162 161 163 [[Image(MjpegCourse:q.gif)]] Mesurez le nombre de cycle pour décompresser 25 images, … … 170 172 sont 8, 64, 512, et 4096 cycles. 171 173 174 Ce paramètre se passe par les defines. Il porte le même nom (EXEC_TIME). 175 Ceci permet d'avoir une description homogène. 176 172 177 Remplacez dans le modèle DSX de la tâche {{{idct}}}, la déclaration `SyntheticTask()` par 173 178 une déclaration de coprocesseur matériel `HwTask( IdctCoproc )`, et relancez la simulation … … 177 182 qu'on utilise un processeur réel ou virtuel ? 178 183 179 [[Image(MjpegCourse:q.gif)]] Quel intérêt a-t-on à utiliser un coprocesseur virtuel ? 184 [[Image(MjpegCourse:q.gif)]] Quel intérêt a-t-on à utiliser un coprocesseur virtuel pendant 185 les phases d'exploration architecturale ? 180 186 181 187 = 4. Compte-Rendu =