12.07.2015 Views

Algorithmes de la morphologie mathématique pour - Pastel - HAL

Algorithmes de la morphologie mathématique pour - Pastel - HAL

Algorithmes de la morphologie mathématique pour - Pastel - HAL

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Algorithmes</strong> <strong>de</strong> <strong>la</strong> <strong>morphologie</strong> <strong>mathématique</strong> <strong>pour</strong> les architectures orientées fluxJaromír BRAMBORAlgorithme 8.2 : algoHGWFst, Algorithme <strong>de</strong> van Herk-Gil-Werman <strong>de</strong> di<strong>la</strong>tation/érosion par unsegment suivant <strong>la</strong> direction <strong>de</strong> <strong>la</strong> première coordonnée1 algoHGWFst :: I → Bro<strong>de</strong>rFnc→ (α → α → α) → Ar ( I , I ) α → Ar ( I , I ) α2 algoHGWFst k brdfnc f ar =3 arrayFromMxNBlocs4 ◦ ( listArray ( (1,1) , (1,q)) )5 ◦ (map (phase3Gen "Fst" brdfnc k f ) )6 ◦ (map (7 ( λ (mbsA,mbsB) →(8 arrayFromMxNBlocs◦ ( listArray ( (1,1) , (mbnum,1)) )$mbsA,9 arrayFromMxNBlocs◦ ( listArray ( (1,1) , (mbnum,1)) )$mbsB10 )11 )12 ◦ ( λmbs → (map (phase1 "Fst" f ) mbs),( map (phase2 "Fst" f ) mbs) )13 ◦ elems14 ◦ (arrayToMxNBlocs mbnum 1) )15 )16 ◦ elems17 ◦ (arrayToMxNBlocs 1 q)18 $ ar19 where20 (p,q) = dimsAr2D ar21 mbnum= div p kvaleurs. Les lignes restantes <strong>de</strong> ce bloc fonctionnel (ligne 7 à 11) construisent <strong>de</strong>ux buffers à partir <strong>de</strong>srésultats du traitement à l’intérieur <strong>de</strong>s macro blocs.L’application <strong>de</strong> <strong>la</strong> phase3Gen se <strong>pour</strong>suit, ligne 5, à l’échelle du stream <strong>de</strong>s colonnes et prendcomme argument le stream <strong>de</strong>s tuples composés, <strong>pour</strong> chacune <strong>de</strong>s colonnes <strong>de</strong>s <strong>de</strong>ux buffers correspondants.Les lignes restantes (ligne 3 et 4) recomposent l’array <strong>de</strong> sortie à partir du stream résultant <strong>de</strong>scolonnes.8.2.2 Parallélisation <strong>pour</strong> les architectures SIMDUne fois expliqué l’algorithme HGW <strong>pour</strong> les éléments <strong>de</strong> base, nous nous <strong>de</strong>mandons <strong>de</strong> quellemanière nous pouvons explorer les capacités SIMD <strong>de</strong> notre architecture multimédia <strong>pour</strong> accélérer lecalcul <strong>de</strong> cet algorithme. Puisque cet algorithme utilise les principes <strong>de</strong> traitement qui sont compatiblesavec le traitement <strong>de</strong>s données paquetées, nous pouvons facilement dériver un algorithme SIMD à partir<strong>de</strong> <strong>la</strong> <strong>de</strong>scription <strong>de</strong> l’algorithme travail<strong>la</strong>nt avec les éléments <strong>de</strong> base, comme présenté par l’algorithme8.2. Nous allons travailler, comme à l’échelle <strong>de</strong>s colonnes, tant à l’échelle <strong>de</strong>s macro blocs, avecles structures composées <strong>de</strong>s vecteurs paquetés PVec I α plutôt que d’utiliser les structures composées<strong>de</strong>s éléments <strong>de</strong> base du type α.Formellement, nous pouvons décrire ce procédé par <strong>la</strong> spécialisation <strong>de</strong> l’algorithme 8.2 <strong>pour</strong> lesdonnées paquetées et l’algorithme qui décrira ce procédé <strong>de</strong>vra assurer le paquetage <strong>de</strong> l’array d’entrée,appel <strong>de</strong> l’algorithme algoHGWFst et, à <strong>la</strong> sortie, également le dépaquetage <strong>de</strong>s résultats afin d’obtenirl’array composé <strong>de</strong>s données du type <strong>de</strong> base.Cependant, nous ne pouvons pas choisir n’importe quelle direction <strong>pour</strong> <strong>la</strong> propagation <strong>de</strong>s valeursSIMD car nous sommes contraints par le sens <strong>de</strong> stockage <strong>de</strong>s données vectorielles dans <strong>la</strong> mémoire.Ainsi, il est simple <strong>de</strong> construire l’algorithme <strong>pour</strong> les segments qui sont perpendicu<strong>la</strong>ires au sens <strong>de</strong>stockage. En revanche, il est impossible d’utiliser l’algorithme SIMD <strong>de</strong> van Herk-Gil-Werman <strong>pour</strong> unsegment parallèle au sens du stockage et nous sommes obligés d’effectuer une opération <strong>de</strong> changementdu sens <strong>de</strong> stockage <strong>de</strong>s données vectorielles, comme décrit dans le chapitre 6 dédié à cette problé-172

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!