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 BRAMBOR(solv) récursivement. Les résultats <strong>de</strong> ces tâches divisées sont combinés (cmb) <strong>pour</strong> obtenir le résultatglobal.dc :: (α → Bool) → (α → β) → (α → [α]) → ( [β] → β) → α → βdc istriv solv dvd cmb x| istriv x = solv x| not( istriv x) = cmb ◦ (map $ (dc istriv solv dvd cmb) ) ◦ dvd $ x4.4.3 Paquetage et dépaquetage <strong>de</strong>s arrays <strong>pour</strong> le traitement SIMDNous appelons paquetage d’un array 1D <strong>la</strong> transformation d’un array 1D en un autre array 1D dontles éléments sont les vecteurs paquetés (PVec). Dans <strong>la</strong> littérature on parle aussi <strong>de</strong> vectorisation <strong>de</strong>sdonnées (dérivée d’un terme ang<strong>la</strong>is vectorize).4.4.3.1 Paquetage d’un array 1DLa transformation <strong>de</strong> paquetage est triviale dans le cas d’un array 1D où l’on n’a qu’un seul axe àvectoriser et le procédé est ainsi très simple et direct. Malgré ce<strong>la</strong>, nous tenons à décrire ici cette opérationpar l’approche fonctionnelle, car nous pouvons ainsi démontrer, sur un exemple trivial, <strong>la</strong> construction,l’in<strong>de</strong>xation et le travail avec les arrays dans Haskell.La fonction mkAr1DPVec définit cette transformation :mkAr1DPVec :: I → Ar I α → Ar I (PVec I α)mkAr1DPVec n ar = array bndsnew[ ( i , pvec (1,n) [ (k,ar ! (lo+ ( i−lo) ∗ n+(k−1))) | k ← [1 .. n] ]) | i ← range bndsnew]where(lo ,hi ) = bounds $ arbndsnew= (lo , lo−1+(div (hi−lo+1) n))Elle prend <strong>de</strong>ux paramètres. Le premier, n, définit le nombre d’éléments qui seront paquetés dans leséléments PVec <strong>de</strong> l’array <strong>de</strong> sortie. Le <strong>de</strong>uxième paramètre ar est l’array d’entrée, remarquons que sataille doit être divisible par n. La manière <strong>de</strong> découpage <strong>de</strong> l’array d’entrée est illustré sur <strong>la</strong> fig. 4.3lolo+nlo+2nhiFIG. 4.3 : Découpage d’un array lors <strong>de</strong> sa transformation à un array paqueté, nombre d’éléments dans unélément paqueté n = 24.4.3.2 Paquetage d’un array 2DLe passage d’un array <strong>de</strong> 2D ou <strong>de</strong> plusieurs dimensions à un array <strong>de</strong> <strong>la</strong> même dimension composé<strong>de</strong> vecteurs paquetés PVec nécessite le choix <strong>de</strong> l’axe principal <strong>pour</strong> <strong>la</strong> vectorisation. Le choixsimple est prédéfini par <strong>la</strong> manière dont les données sont stockées dans <strong>la</strong> mémoire. Sur les processeursGPP/GPPMM, toutes les données, y compris les structures nD, sont stockées dans un espace linéaire 1Det accédées ainsi. L’accès par les instructions SIMD que nous utilisons sur les architectures GPPMM<strong>pour</strong> <strong>la</strong> lecture et <strong>la</strong> sauvegar<strong>de</strong> <strong>de</strong>s données n’en fait pas exception. Si nous souhaitons utiliser ces instructionsdans nos algorithmes, nous sommes contraints dans notre choix <strong>de</strong> l’axe <strong>de</strong> vectorisation <strong>de</strong> nosdonnées par le sens <strong>de</strong> leur stockage dans <strong>la</strong> mémoire.En revanche, si nous souhaitons paqueter les données d’un array dans l’axe perpendicu<strong>la</strong>ire à celui<strong>de</strong> <strong>la</strong> mémoire, notre travail exige une autre approche car nous ne pouvons pas accé<strong>de</strong>r à ces donnéesdirectement par les instructions SIMD. Nous sommes obligés d’utiliser soit <strong>la</strong> lecture élément par élément,soit une autre approche qui nous permettrait d’interpréter correctement les données lues dans un68

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

Saved successfully!

Ooh no, something went wrong!