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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<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 BRAMBORCe skeleton algorithmique est important car il nous permet, par <strong>la</strong> suite, <strong>de</strong> définir facilement l’algorithmecomplet <strong>pour</strong> les quatre opérations en les distinguant par un seul paramètre.6.3.4 Algorithme complet <strong>pour</strong> les transpositions et les rotations par SIMDUne fois expliqué ce qui se passe à l’intérieur d’un macro bloc, nous allons détailler le processus <strong>pour</strong>les transpositions et les rotations <strong>de</strong>s arrays. Pour ce<strong>la</strong>, nous allons revenir à l’algorithme 6.2, présentéprécé<strong>de</strong>mment sur <strong>la</strong> page 132, qui décrivait le skeleton algorithmique <strong>pour</strong> les transpositions/rotationspar macro blocs en travail<strong>la</strong>nt élément par élément. Il va nous servir comme modèle <strong>pour</strong> <strong>la</strong> constructiond’un nouvel algorithme.Ce nouvel algorithme, que nous présentons ici comme l’algorithme 6.6, va utiliser <strong>pour</strong> son travaill’approche SIMD. Ainsi, l’accès aux données sera effectué en utilisant les types <strong>de</strong>s vecteurs paquetés.Ce qui signifie que cet algorithme va percevoir l’array d’entrée comme un array dont les éléments sontdu type <strong>de</strong>s vecteurs paquetés PVec. Par <strong>la</strong> suite, il découpera cet array en macro blocs et il effectueral’opération choisie localement à l’intérieur <strong>de</strong> chacun <strong>de</strong>s macro blocs en utilisant, bien sûr, les algorithmesSIMD décrits précé<strong>de</strong>mment. Puis il effectuera <strong>la</strong> même opération globalement avec les macroblocs en utilisant l’algorithme <strong>de</strong> base issue <strong>de</strong> <strong>la</strong> définition <strong>de</strong> cette opération.Algorithme 6.6 : trRot2DMBSIMD, algorithme complet <strong>de</strong> <strong>la</strong> transposition et rotation d’un array2D utilisant l’approche macro bloc et les fonctionnalités SIMD1 trRot2DMBSIMD :: [Char] → [Char] → I → Ar ( I , I ) α → Ar ( I , I ) α2 trRot2DMBSIMD how axe mbsize ar =3 (mkAr2DFromAr2DPVec axe)4 ◦ arrayFromMxNBlocs5 ◦ fg6 ◦ ( listArray ( (1,1) , (m,n)) )7 ◦ (map ( listArray ( (1,1) , (1, mbsize ) ) ) )8 ◦ (map fl )9 ◦ (map elems)10 ◦ elems11 ◦ (arrayToMxNBlocs m n )12 ◦ (mkAr2DPVec axe mbsize )13 $ ar14 where15 (p,q) = dimsAr2D ar ; (m,n) = ( (div p mbsize ) , (div q mbsize ) )16 fg = trRot2D how17 fl = trRot2DNxPVecNbf howLes paramètres <strong>de</strong> cet algorithme sont les suivants : how désigne le type d’opération à effectuer etpeut avoir les valeurs ”T D” <strong>pour</strong> <strong>la</strong> transposition par diagonale, ”TA” <strong>pour</strong> <strong>la</strong> transposition par l’antidiagonale,”R + ” <strong>pour</strong> <strong>la</strong> rotation <strong>de</strong> + π 2 et ”R − ” <strong>pour</strong> <strong>la</strong> rotation <strong>de</strong> − π 2. Le paramètre axe désigne lesens <strong>de</strong> vectorisation et peut avoir les valeurs ”Fst” <strong>pour</strong> le premier axe et ”Snd” <strong>pour</strong> le <strong>de</strong>uxième. Leparamètre mbsize désigne <strong>la</strong> taille <strong>de</strong>s macro blocs et ar désigne l’array d’entrée.Expliquons alors, pas à pas, <strong>la</strong> construction exacte <strong>de</strong> cet algorithme. La lecture commence sur <strong>la</strong>ligne 13 et on va progresser vers les lignes précé<strong>de</strong>ntes. La première étape est constituée du passaged’un array ar (ligne 13) avec les éléments du type α à un array avec les éléments paquetés PVec I α.Pour effectuer ce<strong>la</strong>, nous allons utiliser <strong>la</strong> fonction mkAr2DPVec (ligne 12) avec <strong>la</strong> bonne clé, soit ”Fst”,soit ”Snd”. Le choix du sens <strong>de</strong> <strong>la</strong> vectorisation est prédéfini par l’axe <strong>de</strong> stockage <strong>de</strong>s données dans <strong>la</strong>mémoire. Ensuite, en utilisant <strong>la</strong> fonction elems, nous extrayons tous les éléments <strong>de</strong> cet array vectoriséet nous les p<strong>la</strong>çons dans un stream (ligne 10). Pour pouvoir appliquer les fonctions macro blocs SIMDcomme décrites précé<strong>de</strong>mment, nous <strong>de</strong>vons passer, <strong>pour</strong> chacun <strong>de</strong>s macro blocs, à son expression en140

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

Saved successfully!

Ooh no, something went wrong!