Changes between Version 11 and Version 12 of MjpegCourse/Coproc
- Timestamp:
- Mar 5, 2007, 8:16:12 PM (18 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
MjpegCourse/Coproc
v11 v12 41 41 puisqu'il doit être configuré par le logiciel. C'est ce même 42 42 contrôleur MWMR qui a déjà été utilisé pour interfacer les composants matériels RAMDAC et TG. 43 Nous repartirons de la plateforme du [MjpegCourse/Multipro TP3]: !VgmnNoirqMulti .44 Nous modifierons cette plateforme comportant trois processeurs Mips, pour remplacer43 Nous repartirons de la plateforme du [MjpegCourse/Multipro TP3]: !VgmnNoirqMulti, pour une architecture comportant 3 processeurs. 44 Nous modifierons cette architecture, pour remplacer 45 45 un des processeurs programmable par un coprocesseur matériel dédié à la transformation IDCT. 46 46 47 == Mettre ici le dessin de la plate-forme matérielle complête avec 2 processeur set 3 controleurs MWMR ==47 == Mettre ici le dessin de la plate-forme matérielle complête avec 2 processeur et 3 controleurs MWMR == 48 48 49 49 Reprenez les fichiers du TP3: … … 53 53 54 54 [[Image(MjpegCourse:q.gif)]] Q1. Rappelez le temps 55 nécessaire pour décoder 25 images, dans le cas d'un e implantation56 utilisant trois processeurs, lorsque la tâche {{{idct}}} est placée sur unprocesseur,57 que la tâche {{{vld}}} est placée sur un second processeur, et que toutes les autres58 tâches logicielles se partagent le troisième processeur.55 nécessaire pour décoder 25 images, dans le cas d'un déploiement 56 utilisant 2 processeurs, lorsque la tâche {{{idct}}} est placée sur le premier processeur, 57 que la tâche {{{vld}}} est placée sur le second processeur, 58 et que toutes les autres tâches logicielles se partagent le troisième processeur. 59 59 60 60 = 1. Coprocesseur virtuel = … … 80 80 En pratique, la simulation dans ce mode consiste à exécuter un programme parallèle comportant 81 81 deux 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''.82 Le premier processus est le simulateur SystemC modélisant l'architecture matérielle 83 (y compris le contrôleur MWMR et le composant ''threader''). Le second processus est la tâche logicielle encapsulée. 84 84 85 Pour utiliser ce mode d'émulation, il faut modifier deux choses dans la description DSX: 85 == mettre ici le dessin contenant le threader == 86 87 Pour utiliser un tel coprocesseur ''virtuel'', il faut modifier deux choses dans la description DSX: 86 88 * dans la définition du modèle de la tâche {{{idct}}}, il faut ajouter l'implémentation `SyntheticTask()` 87 89 {{{ … … 94 96 sources = [ 'src/idct.c' ], 95 97 defines = [ 'WIDTH', 'HEIGHT' ] ), 96 Synthetic() 97 ] ) 98 SyntheticTask() ] ) 98 99 }}} 99 100 * 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}}}. … … 102 103 }}} 103 104 104 Le coprocesseur matériel IDCT (comme beaucoup de coprocesseurs matériels de type ''flot de données'')105 Après synthèse, le coprocesseur matériel IDCT (comme beaucoup de coprocesseurs matériels de type ''flot de données'') 105 106 exécute une boucle infinie dans laquelle il effectue successivement les actions suivantes: 106 107 1. recopie d'un bloc de 64 coefficients du canal MWMR d'entrée vers une mémoire locale BUFIN, … … 108 109 1. recopie de ces 64 pixels de la mémoire locale BUFOUT vers le canal MWMR de sortie. 109 110 110 Compte-tenu des caractéristiques 111 Pour modéliser le temps de traitement la tâche matérielle virtuelle plus exacte en temps de simulation, on peut ajouter des directives 112 dans 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: 113 `srl_busy_cycles` (voir SrlApi). 111 [[Image(MjpegCourse:q.gif)]] Q2. Combien de coefficients sont transférés par cycle sur l'interface FIFO d'entrée? Combien de pixels sont 112 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. 114 113 115 Il n'existe aucune référence au temps de calcul dans le code C de la tâche {{{idct}}} logicielle. 116 En lisant le code de l'implémentation matérielle du coprocesseur `Idct`, déduisez les temps 117 nécessaires aux différentes parties du traitement. 118 our introduire un coprocesseur matériel, 119 il faut commencer par modifier le modèle de la tâche {{{idct}}}, 120 en définissant une implémentation matériellel: 114 Les temps de communication correspondant aux étapes 1 et 3 sont précisément décrits par le simulateur SystemC, 115 qui reproduit (cycle par cycle) le comportement des interfaces FIFO entre le threader et le contrôleur MWMR 116 (y compris en cas de contention pour l'accès à la mémoire). 121 117 122 [[Image(MjpegCourse:q.gif)]] En utilisant un coprocesseur virtuel, pour la tâche {{{idct}}}, 123 détermidez quel est le gain en performances apporté par le coprocesseur, pour 124 différents temps de traitement (1 cycle, 8 cycles, 64 cycles, 512 cycles ou 2048 cycles 125 pour traiter un bloc de 64 pixels).quel est le temps 126 nécessaire pour décoder 25 images ? 118 En revanche, le nombre de cycles nécessaires pour exécuter l'étape 2 ci-dessus (temps de calcul "interne" à la tâche logicielle) 119 n'est pas défini par le code de la tâche logicielle. Si on ne précise rien, cela correspond à un temps d'exécution du calcul 120 en ""zéro" cycles. Pour préciser un nombre de cycles d'exécution, il faut modifier le code C de la tâche {{{idct}}}, et insérer, 121 entre les deux primitives ''srl_mwmr_read()'' et '''srl_mwmr_write()'', 122 un appel à la la fonction bloquante srl_busy_cycles( ncycles ). L'argument ''ncycles'' est le nombre de cycles d'attente entre les 123 deux primitives de communication, et il modélise donc le temps de calcul (voir SrlApi). 124 {{{ 125 ... 126 srl_mwmr_read(); 127 ... 128 srl_busy_cycles( n ); 129 ... 130 srl_mwmr_write(); 131 ... 132 }}} 133 134 [[Image(MjpegCourse:q.gif)]] Q3. pour quelle raison peut-on affirmer sans aucune expérimentation (c'est à dire sans aucune simulation), 135 qu'il est sans intérêt de synthétiser un coprocesseur matériel dont le temps de calcul pour traiter un bloc de 136 64 pixels soit inférieur à 64 cycles? 137 138 Modifier la description DSX pour déployer l'application MJPEG sur une architecture comportant 2 processeurs MIPS et un coprocesseur 139 ''virtuel'' pour la tâche {{{idct}}}. 140 141 [[Image(MjpegCourse:q.gif)]] Q4. Mesurez le nombre de cycle pour décompresser 25 images, en faisant varier la valeur du paramètre ''ncycles'' de la fonction ''srl_busy_cycles()'', dans le code C de la tâche {{{idct}}}. On essaiera les valeurs 8, 64, 512, et 4096 cycles. 142 En déduire un objectif de performance "raisonnable" pour la synthèse du coprocesseur IDCT. 127 143 128 144 = 3. Coprocesseur matériel = 129 145 130 Remplacez la déclaration `Synthetic()` par une déclaration de coprocesseur matériel virtuel `HwTask( IdctCoproc )`. 146 On va maintenant utiliser un "vrai" coprocesseur matériel IDCT, disponible dans la bibliothèque SoCLib. 147 Ce coprocesseur matériel est générique, en ce sens qu'on peut paramètrer le nombre de cycles 148 pour effectuer la transformation d'un bloc de 64 pixels. Les valeurs possibles de ce paramètre 149 sont 8, 64, 512, et 4096 cycles. 131 150 132 [[Image(MjpegCourse:q.gif)]] Quel est maintenant le temps de simulation nécessaire pour 25 images ? 151 Remplacez dans le modèle DSX de la tâche {{{idct}}, la déclaration `SyntheticTask()` par 152 une déclaration de coprocesseur matériel `HwTask( IdctCoproc )`, et relancez la simulation 153 de cette nouvelle plate-forme, pour les 4 valeurs possibles du paramètre. 133 154 134 [[Image(MjpegCourse:q.gif)]] Qu'en déduisez-vous sur la différence entre les deux possibilités pour tester 135 une implémentation matérielle ? 136 137 [[Image(MjpegCourse:q.gif)]] Quel intérêt y a-t-il à pouvoir caractériser précisément le temps de traitement 138 d'une tâche matérielle à partir d'un code en C ? 155 [[Image(MjpegCourse:q.gif)]] Q5. Comment expliquez-vous les différences entre les performances 156 obtenues, suivant qu'on utilise un processeur réel ou virtuel? 139 157 140 158 = 4. Compte-Rendu =