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.

Jaromír BRAMBOR6.3. ALGORITHMES RAPIDES SIMD DE TRANSPOSITION ET DE ROTATIONLa fonction rot2DPlus90MB définit <strong>la</strong> rotation d’un array <strong>de</strong> + π 2en utilisant l’approche macro blocs ettravaille à l’intérieur <strong>de</strong>s macro blocs élément par élément :rot2DPlus90MB :: I → I → Ar ( I , I ) α → Ar ( I , I ) αrot2DPlus90MB m n ar = trRot2DMB "R+" m n arLa fonction rot2DMinus90MB définit <strong>la</strong> rotation d’un array <strong>de</strong> − π 2et travaille à l’intérieur <strong>de</strong>s macro blocs élément par élément :rot2DMinus90MB :: I → I → Ar ( I , I ) α → Ar ( I , I ) αrot2DMinus90MB m n ar = trRot2DMB "R−" m n aren utilisant l’approche macro blocs6.3 <strong>Algorithmes</strong> rapi<strong>de</strong>s SIMD <strong>de</strong> transposition et <strong>de</strong> rotationNous allons nous intéresser aux algorithmes qui exploiteraient les possibilités <strong>de</strong>s architectures SIMDet qui rendraient les transpositions et les rotations plus rapi<strong>de</strong>s qu’une approche directe et triviale <strong>de</strong> <strong>la</strong>transposition ou rotation effectuée élément par élément.Mais avant <strong>de</strong> décrire les algorithmes SIMD <strong>de</strong>stinés aux architectures GPPMM, nous allons présenterun outil qui va nous servir dans tout ce chapitre - les fonctions shuffle.6.3.1 Fonctions shuffleLes shuffles sont les fonctions <strong>de</strong> réarrangement <strong>de</strong>s éléments dans les vecteurs. Dans notre cas, ellesfont alterner les éléments <strong>de</strong> <strong>de</strong>ux vecteurs paquetés selon un paramètre définissant <strong>la</strong> façon exacte <strong>de</strong>leur chevauchement et les p<strong>la</strong>cent dans un nouveau vecteur paqueté <strong>de</strong> sortie. Ainsi, on les catégorisecomme les cas spéciaux <strong>de</strong> <strong>la</strong> permutation <strong>de</strong>s éléments d’un vecteur. Puisque notre intérêt est <strong>de</strong> resterabstrait d’une architecture quelconque, nous introduisons les fonctions généralisées du low-shuffling etdu hi-shuffling qui, même généralisées, ont leurs correspondants directs dans tous les jeux d’instructions<strong>de</strong>s architectures multimédia.Dans les définitions <strong>de</strong>s shuffles, nous utilisons <strong>de</strong>ux fonctions auxiliaires, ielems et alter. La fonctionielems prend un vecteur et une étendue d’in<strong>de</strong>x et retourne les éléments inclus dans cette étendue :ielems :: ( Ix α) ⇒ Ar α β → (α,α) → [β]ielems ar rng = [ar ! i | i ← range$rng]La fonction alter crée, à partir <strong>de</strong> <strong>de</strong>ux listes xs et ys <strong>de</strong> <strong>la</strong> même taille N, une seule liste <strong>de</strong> sortie <strong>de</strong><strong>la</strong> taille 2N en alternant les entrées. Le paramètre n règle l’alternance <strong>de</strong> cette manière : les premiers néléments <strong>de</strong> <strong>la</strong> première liste sont inscrits comme premiers dans <strong>la</strong> liste <strong>de</strong> sortie et suivis par n premierséléments <strong>de</strong> <strong>la</strong> <strong>de</strong>uxième liste. Ce processus se répète <strong>pour</strong> tous les groupes suivants <strong>de</strong> n éléments <strong>de</strong>slistes d’entrée. Notons que <strong>la</strong> taille N <strong>de</strong>s listes d’entrée doit être un multiple <strong>de</strong> n.alter :: I → ( [α], [α]) → [α]alter n (xs,ys) = select n [ ] (xs,ys)whereselect k zs (x :xs,ys) | k > 0 = select (k−1) (zs +[x ] ) (xs,ys)select k zs (xs,ys) | k == 0 = select n zs (ys,xs)select k zs ( [ ] ,_)= zsLe low-shuffling est défini par <strong>la</strong> fonction shflo. Les moitiés inférieures <strong>de</strong>s <strong>de</strong>ux vecteurs d’entréesont extraites en utilisant <strong>la</strong> fonction ielems. Leurs éléments sont alternés, en utilisant <strong>la</strong> fonction alter,avec l’alternance n commençant avec le premier vecteur. La fonction dimsAr1D, définie en Annexe B,page 202, retourne <strong>la</strong> taille d’un vecteur.shflo :: I → (PVec I α, PVec I α) → PVec I αshflo s (x ,y) = listArray (1,p) ( alter s ( (ielems x (1, h)) ,(ielems y (1, h)) ) )where p = dimsAr1D x ; h = div p 2133

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

Saved successfully!

Ooh no, something went wrong!