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.

Jaromír BRAMBOR7.3. SKELETON ALGORITHMIQUE DE LA PROPAGATION SIMD EN 4-VOISINAGEmfoldl1 :: (α → α → α) → [α] → [α]mfoldl1 _ [ ] = [ ]mfoldl1 f (e:es) = e : ( mfoldl f e es)Ce skeleton n’applique pas <strong>la</strong> fonction f sur le premier élément e du stream et le retourne aussitôt dansle stream résultant. En revanche, sa valeur est utilisée comme argument d’entrée <strong>pour</strong> <strong>la</strong> réduction quiest assurée, <strong>pour</strong> tous les éléments suivants es du stream, par l’application <strong>de</strong> <strong>la</strong> fonction mfoldl. Lafigure 7.5 illustre cette situation.e 0e 1e 2r 0f r 1 r 1f r 2 r 2fe f rN-1N-1r N-1FIG. 7.5 : Fonctionnement du skeleton applico-réductif mfoldl1.7.3 Skeleton algorithmique <strong>de</strong> <strong>la</strong> propagation SIMD en 4-voisinageAprès avoir expliqué <strong>la</strong> particu<strong>la</strong>rité du sens du parcours <strong>pour</strong> les propagations dans le cas où ontravaille avec les vecteurs paquetés et après avoir expliqué le principe <strong>de</strong> fonctionnement <strong>de</strong>s algorithmesqui s’appuient sur les techniques <strong>de</strong> changement <strong>de</strong> l’axe <strong>de</strong> stockage <strong>de</strong> données, nous sommes prêts àconstruire le premier skeleton algorithmique qui utilisera ce type <strong>de</strong> propagation.Il est évi<strong>de</strong>nt qu’en utilisant les parcours <strong>de</strong> l’image <strong>pour</strong> <strong>la</strong> propagation, comme illustrés sur <strong>la</strong>fig. 7.3, nous utiliserons le découpage <strong>de</strong> l’array en macro blocs. Un macro bloc sera constitué par lesdonnées qui sont parcourues lors <strong>de</strong> <strong>la</strong> propagation. Ainsi, <strong>la</strong> propagation s’effectuera à l’échelle <strong>de</strong>smacro blocs et les évaluations à l’intérieur <strong>de</strong> chacun <strong>de</strong>s macro blocs seront indépendantes les unes <strong>de</strong>sautres.7.3.1 Propagation à l’intérieur d’un macro blocExpliquons alors le fonctionnement d’une telle propagation à l’intérieur d’un macro bloc. Par <strong>la</strong> suite,nous allons bâtir notre algorithme entier à partir <strong>de</strong> ce fonctionnement <strong>de</strong> base.Le skeleton pGenMB définit <strong>la</strong> propagation dans un macro bloc, dont les éléments sont les vecteurspaquetés, à l’ai<strong>de</strong> <strong>de</strong> <strong>la</strong> fonction f qui définit l’opération exacte à effectuer. Il est naturel que dans le cœur<strong>de</strong> ce skeleton, nous nous appuyons sur un <strong>de</strong>s skeletons applico-réductifs ; mfoldl1 dans ce cas précis.La définition que nous présentons ici ne fait, en effet, que concrétiser l’utilisation <strong>de</strong> ce <strong>de</strong>rnier <strong>pour</strong> unesituation qui nous intéresse – <strong>la</strong> propagation à l’intérieur d’un macro bloc :Tout d’abord nous construisons le stream <strong>de</strong>s in<strong>de</strong>x (ligne 10) en utilisant <strong>la</strong> fonction streamAr2Davec les paramètres how, qui définit le sens du parcours, et mb, qui est un array <strong>de</strong>s vecteurs paquetéset qui représente le macro bloc. Notre algorithme commence par l’utilisation <strong>de</strong> ce stream d’in<strong>de</strong>x ixs(ligne 8). Sur chaque in<strong>de</strong>x <strong>de</strong> ce stream, nous appliquons (ligne 7) <strong>la</strong> fonction extraction <strong>de</strong>s élémentsà partir du macro bloc (mb!). Notons que dans ce cas, nous ne traitons pas les bords <strong>de</strong> l’image et, parconséquent, nous n’avons pas besoin d’assurer l’extraction <strong>de</strong>s éléments par une fonction particulièrequi gérerait les effets <strong>de</strong> bord. Ainsi, nous obtenons le stream <strong>de</strong>s vecteurs paquetés sur lequel nousappliquons (ligne 6) directement le skeleton applico-réductif mfoldl1 avec <strong>la</strong> fonction f comme argumentqui assure <strong>la</strong> propagation. Les expressions restantes (lignes 5 et ligne 4) qui utilisent les fonctions zipet array constituent <strong>la</strong> manière standard <strong>de</strong> créer un macro bloc <strong>de</strong> sortie à partir <strong>de</strong>s résultats <strong>de</strong> <strong>la</strong>propagation.151

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

Saved successfully!

Ooh no, something went wrong!