wiki:MjpegCourse/Coproc

Version 2 (modified by Nicolas Pouillon, 17 years ago) (diff)

Ebauche

TP2: Introduction d'un coprocesseur matériel spécialisé

TP Précédent: MjpegCourse/Multipipe

0. Objectif

L'objectif de ce TP est de vous montrer comment introduire un coprocesseur matériel spécialisé dans une architecture matérielle comportant principalement des processeurs programmables.

Nous allons nous concentrer sur la traduction en matériel de la tâche la plus gourmande en ressources du TCG: la tâche Idct.

Nous repartirons de la plateforme du TP3?: VgmnNoirqMulti?. Sur la base de cette plateforme à deux processeurs Mips, nous ajouterons un composant dédié au traitement de l'Idct.

Reprenez les fichiers du TP2:

  • La description de la plateforme
  • La description de l'application
  • Le code des tâches (Libu ne gère qu'un seul pipeline et Split n'existe pas)

Pour un déploiement entièrement logiciel, quel est le temps nécessaire pour décoder 25 images ?

1. Tâche matérielle virtuelle

1.1. Déploiement

Ici, la tâche sera virtuellement matérielle dans le sens où nous utiliserons le code C de notre tâche pour implémenter le comportement matériel de l'Idct.

Ajoutez une déclaration à la tâche idct:

idct = TaskModel(
	        'idct',
	        infifos = [ 'input' ],
	        outfifos = [ 'output' ],
	        impl = [ SwTask( 'idct',
	                                         stack_size = 1024,
	                                         sources = [ 'src/idct.c' ],
	                                         defines = [ 'WIDTH', 'HEIGHT' ] ),
	                         Synthetic()
	                         ] )

L'implémentation Synthetic() doit être accompagnée d'une déclaration de tâche logicielle (SwTask) et permet la synthèse virtuelle de la tâche. On peut alors déployer la tâche comme si elle était matérielle, son comportement est simulé.

Avec cette tâche déployée en coprocesseur virtuel, quel est le temps nécessaire pour décoder 25 images ?

1.2. Précision temporelle

Pour rendre la tâche matérielle virtuelle plus exacte en temps de simulation, on peut ajouter des directives dans le code source des tâches pour préciser le temps qu'il faudrait pour réaliser la même action en matériel: srl_busy_cycles (voir SrlApi).

Insérez dans le code de votre Idct un temps de traitement de 8 cycles entre la lecture entière d'un bloc et l'écriture du résultat.

Quel est le temps de simulation nécessaire pour 25 images ?

2. Tâche matérielle

Maintenant nous allons utiliser un coprocesseur dédié au traitement de l'Idct.

Remplacez la déclaration Synthetic() par une déclaration de coprocesseur matériel HwTask( IdctCoproc ).

Quel est le temps de simulation nécessaire pour 25 images ?

Qu'en déduisez-vous sur la différence entre les deux possibilités pour tester une implémentation matérielle ?

Quel intérêt y a-t-il à pouvoir caractériser précisément le temps de traitement d'une tâche matérielle à partir d'un code en C ?

3. Compte-Rendu

Comme pour les TP précédents, vous rendrez une archive contenant:

$ tar tzf binome0_binome1.tar.gz
tp5/
tp5/rapport.pdf
tp5/vgmn_noirq_multi.py
tp5/mjpeg/
tp5/mjpeg/mjpeg.py
tp5/mjpeg/src/
tp5/mjpeg/src/iqzz.c
tp5/mjpeg/src/idct.c
tp5/mjpeg/src/libu.c

Cette archive devra être livrée avant le mardi 13 mars 2007, 18h00 à [MailAsim:nipo Nicolas Pouillon]

Attachments (2)

Download all attachments as: .zip