• Aucun résultat trouvé

4.4 Exemples d’op´ erations r´ ealisables

4.4.3 Mesures

Les op´erations de mesures sont des op´erateurs prenant en entr´ee une image et renvoyant une information r´eduite telle que le volume global de cette derni`ere. Nous distinguerons ici deux types d’op´erations : le calcul d’un param`etre scalaire et le calcul de l’histogramme. 4.4.3.1 Mesure d’un param`etre global scalaire

La mesure d’un param`etre global d’une image avec des instructions vectorielles repose sur des mesures partielles qui doivent ˆetre, `a l’issue du traitement de tous les vecteurs, regroup´ees pour obtenir le r´esultat complet.

Lorsque les valeurs mesur´ees sont du mˆeme format que les pixels de l’image, la mesure est faite simplement comme pr´esent´e en figure 4.37 o`u l’on calcule dans deux vecteurs N minima et N maxima sur l’image, N ´etant le nombre d’´el´ements dans un vecteur. Chacun des ´el´ements contient un r´esultat partiel qu’il faut ensuite traiter un `a un pour obtenir les r´esultats complets. On utilise alors l’unit´e scalaire du processeur pour r´ealiser cette derni`ere op´eration.

Fig. 4.35: D´eploiement sur le r´eseau de processeurs d’une ´etape de rotation d’images par d´ecalages en lignes et en colonnes

La mesure de param`etres dont le format est diff´erent de celui employ´e pour le codage des pixels n´ecessite quelques instructions suppl´ementaires par rapport `a ce que nous avons pu d´ecrire dans le cas de la mesure du minimum et du maximum. En effet, il est n´ecessaire de convertir les ´el´ements du vecteur vers un autre format de donn´ees disposant, dans la plupart de cas, d’un nombre de bits plus important. L’unit´e de calcul vectoriel du processeur dispose d’instructions de m´elange de vecteurs permettant une telle conversion du format des donn´ees.

La figure 4.38 pr´esente un exemple de calcul du volume d’une image. Le volume ´etant la somme de tous les pixels, il est obligatoire d’accumuler le volume dans une variable disposant d’une capacit´e de codage beaucoup plus importante que celle employ´ee pour le stockage d’un pixel. Si l’on consid`ere que les pixels sont cod´es sur 8 bits et que l’on travaille dans le pire cas, c’est-`a-dire avec une image o`u toutes les donn´ees sont `a 255, un volume stock´e sur 32 bits permet de manipuler des images jusqu’`a 224 pixels, soit plus de 16 millions de valeurs. Ce chiffre est en dessous de la v´erit´e puisque le volume n’est pas calcul´e sur une unit´e scalaire, mais sur une unit´e vectorielle travaillant avec N ´el´ements 32 bits. En r´ealit´e chaque ´el´ement contient une somme partielle pouvant ˆetre le r´esultat de l’addition de 16 millions de pixels. Si l’unit´e scalaire regroupant les donn´ees peut g´erer les d´ebordements de retenue, il est possible en r´ealit´e de calculer le volume sur une image comportant N · 224 pixels ce qui repr´esente dans notre exemple en figure 4.38 plus de 64 millions de pixels.

CHAPITRE 4. PROCESSEURS VLIW VECTORIELS

(a) image originale (b) premier d´ecalage des lignes avec α2

(c) d´ecalage des colonnes avec α (d) second d´ecalage des lignes avec α2 Fig. 4.36: Exemple de rotation d’angle α = π

8 d’une image par d´ecalage

CHAPITRE 4. PROCESSEURS VLIW VECTORIELS

4.4.3.2 Calcul de l’histogramme

Le calcul de l’histogramme de mani`ere vectorielle est grandement facilit´e par l’utilisation du mode d’adressage indirect vectoriel dont nous avons parl´e dans la section 4.3.2.3. Nous nous pla¸cons dans un cas standard o`u l’unit´e scalaire fonctionne sur 32 bits et o`u un vecteur contient N ´el´ements cod´es sur 32 bits. Les pixels sont cod´es en niveaux de gris sur 8 bits de sorte que l’histogramme puisse ˆetre contenu dans la m´emoire locale. Le processeur dispose donc de N m´emoires de largeur 32 bits compos´ees chacune au minimum de 256 mots o`u l’on pourra calculer en parall`ele N histogrammes partiels de l’image.

On effectue dans un premier temps une phase d’initialisation `a z´ero des N histogrammes, puis la mise `a jour des histogrammes se fait de la mani`ere suivante : on charge 4·N donn´ees 8 bits dans un vecteur, on convertit ce vecteur de pixels 8 bits en quatre vecteurs de pixels 32 bits et on proc`ede `a un acc`es indirect vectoriel pour mettre `a jour les N histogrammes. En mettant en place un pipeline logiciel, il est possible de mettre `a jour en quelques cycles N histogrammes en parall`ele. Pour terminer le calcul, il faut r´eunifier les N histogrammes en employant le cluster scalaire, cette ´etape consommant environ 256 · N cycles.

La figure 4.39 illustre les ´etapes du calcul des histogrammes partiels `a partir d’une image en niveau de gris 8 bits et en consid´erant 4 ´el´ements 32 bits par vecteurs. Quatre acc`es indirects vectoriels sont donc n´ecessaires pour mettre `a jour quatre histogrammes `a partir de 16 pixels.

Le contenu de la m´emoire vu par l’unit´e scalaire est pr´esent´e en figure 4.40. On se rend compte qu’il est simple de calculer l’histogramme complet de l’image puisque nous retrouvons la distribution d’un niveau de gris donn´e des N histogrammes partiels dans un vecteur en m´emoire locale.

Fig. 4.40: Stockage des histogrammes partiels en m´emoire locale provenant d’images cod´ees sur b bits

Le mode d’adressage d´ecrit ici pourrait ˆetre utilis´e pour disposer d’une autre m´ethode d’extraction de voisinage en d´ecoupant une image en bandes et o`u chaque banque m´emoire interne disposerait uniquement d’un voisin sp´ecifique `a une topologie [59]. Dans le cas de la maille 8-connexe, o`u l’on consid`ere un voisinage de rayon 1, il est n´ecessaire que le processeur vectoriel dispose de 9 m´emoires pour stocker chacun des voisins et le pixel central. Ce mode d’adressage et assez particulier et nous allons pr´esenter dans les prochaines sections comment les op´erations de voisinages sont r´ealis´ees avec notre architecture.