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
- 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