Changes between Version 19 and Version 20 of MjpegCourse/Coproc
- Timestamp:
- Mar 6, 2007, 8:09:19 PM (18 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
MjpegCourse/Coproc
v19 v20 55 55 [[Image(MjpegCourse:q.gif)]] Q1. Rappelez le temps 56 56 nécessaire pour décoder 25 images, dans le cas d'un déploiement 57 utilisant 2processeurs, lorsque la tâche {{{idct}}} est placée sur le premier processeur,57 utilisant 3 processeurs, lorsque la tâche {{{idct}}} est placée sur le premier processeur, 58 58 que la tâche {{{vld}}} est placée sur le second processeur, 59 59 et que toutes les autres tâches logicielles se partagent le troisième processeur. … … 68 68 et ce nombre est inversement proportionnel au temps de calcul. 69 69 70 Pour éviter de gaspiller du silicium, il faut donc- avant de se lancer dans la synthèse - évaluer précisément70 Pour éviter de gaspiller du silicium, il faut - avant de se lancer dans la synthèse - évaluer précisément 71 71 la puissance de calcul requise pour le coprocesseur, une fois celui-ci placé 72 72 dans son environnement de travail. Il faut donc faire de l'exploration … … 78 78 Pour ce qui concerne le matériel, ce composant ''threader'' s'interface avec le composant matériel 79 79 ''contrôleur MWMR'', mais il est également capable de communiquer avec la tâche logicielle {{{idct}}}, 80 de façon a utiliser ce codepour effectuer les calculs qui devront être réalisés par le80 de façon a utiliser le code existant - sans modification - pour effectuer les calculs qui devront être réalisés par le 81 81 coprocesseur matériel. 82 82 En pratique, la simulation dans ce mode consiste à exécuter un programme parallèle comportant … … 90 90 * dans la définition du modèle de la tâche {{{idct}}}, il faut ajouter l'implémentation `SyntheticTask()`. Le coprocesseur matériel étant paramètrable, il faut également définir un nouveau paramètre `EXEC_TIME` dans la liste des paramètres de la tâche {{{idct}}}. Ce paramètre permet de spécifier le nombre de cycles utilisés par le coprocesseur matériel pour effectuer la transformation IDCT d'un bloc de 64 pixels. 91 91 {{{ 92 idct = TaskModel( 93 'idct', 94 infifos = [ 'input' ], 95 outfifos = [ 'output' ], 96 impl = [ SwTask( 'idct', 97 stack_size = 1024, 98 sources = [ 'src/idct.c' ], 99 defines = [ 'WIDTH', 'HEIGHT','EXEC_TIME' ] ), 100 SyntheticTask() ] ) 92 idct = TaskModel( 'idct', 93 infifos = [ 'input' ], 94 outfifos = [ 'output' ], 95 impl = [ SwTask( 'idct', 96 stack_size = 1024, 97 sources = [ 'src/idct.c' ], 98 defines = [ 'WIDTH', 'HEIGHT','EXEC_TIME' ] ), 99 SyntheticTask() ] ) 101 100 }}} 102 101 * La valeur du paramètre EXEC_TIME doit être définie au moment où on instancie la tâche {{{idct}}} dans le TCG. 103 102 {{{ 104 103 Task( 'idct0' , idct , 105 portmap = {'output':idct_libu,106 107 104 portmap = { 'output':idct_libu, 105 'input' :iqzz_idct }, 106 defines = { 'XSIZE':'48', 'YSIZE':'48', 'EXEC_TIME':'64'} ) 108 107 }}} 109 108 * 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}}}. … … 112 111 }}} 113 112 114 Le coprocesseur matériel IDCT (comme beaucoup de coprocesseurs matériels de type ''flot de données'')113 Le coprocesseur matériel IDCT (comme beaucoup de coprocesseurs matériels orientés "flot de données'") 115 114 exécute une boucle infinie dans laquelle il effectue successivement les actions suivantes: 116 115 1. recopie d'un bloc de 64 coefficients du canal MWMR d'entrée vers une mémoire locale BUFIN, … … 126 125 127 126 Le nombre de cycles nécessaires pour exécuter l'étape 2 ci-dessus (temps de calcul pour un bloc de 64 pixels) est 128 défini par la valeur du paramètre EXEC_TIME. Si on ne précise rien, cela correspond à un temps d'exécution de "zéro" cycles. 129 Pour préciser un nombre de cycles d'exécution, il faut modifier le code C de la tâche {{{idct}}}, et insérer, 127 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é 128 "en temps nul" du point de vue du matériel. 129 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, 130 130 entre les deux primitives ''srl_mwmr_read()'' et ''srl_mwmr_write()'', 131 un appel à la la fonction bloquante ''srl_busy_cycles()''. {{{ 131 un appel à la la fonction bloquante ''srl_busy_cycles()''. 132 {{{ 132 133 srl_mwmr_read(); 133 134 ...