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 BRAMBORNous mentionnons également <strong>de</strong>ux autres implémentations qui ont été écrites dans le <strong>la</strong>ngage C, sansavoir exploré les capacités SIMD. La première (mentionnée comme C non-SIMD* dans <strong>la</strong> tab. 8.1) a suividirectement <strong>la</strong> définition, utilisait abondamment les structures if-else dans les tests <strong>de</strong> dépassement <strong>de</strong>sbords, et correspond à une implémentation intuitive qu’un programmeur effectue si <strong>la</strong> performance <strong>de</strong>l’algorithme n’est pas sa priorité. Nous avons restructuré le co<strong>de</strong> <strong>de</strong> cette implémentation dans une formeplus propre qui ne fait plus appel aux instructions spécifiques à l’architecture (mentionnée comme C non-SIMD**). Nous avons espéré que le compi<strong>la</strong>teur <strong>pour</strong>rait, dans un tel co<strong>de</strong>, procé<strong>de</strong>r à <strong>la</strong> vectorisation<strong>de</strong> <strong>la</strong> même manière que nous l’avons exposée dans l’algorithme 8.3, mais malgré le gain que nousavons obtenus et qui est dû à <strong>la</strong> restructuration <strong>de</strong> cette implémentation, le temps d’exéctution est plutôtdécevant, surtout si on le compare avec les temps obtenu <strong>pour</strong> les implémentations C++ temp<strong>la</strong>te SSE2qui intègrent le travail SIMD dans <strong>la</strong> structure <strong>de</strong> l’algorithme.Temps d’exécution en ms <strong>de</strong>s algorithmes <strong>de</strong> <strong>la</strong> di<strong>la</strong>tation par segmentsalgorithme métho<strong>de</strong> typeTaille du segment symétrique (1 ∼ 3 pixels)1 3 5 15 30 60Itératif assembleur 32 bits HOR 1.486 3.893 5.791 13.00 21.96 36.85Itératif assembleur 32 bits VER 3.256 8.596 10.31 31.18 52.35 91.84HGW C non-SIMD* HOR — — 31 — — —HGW C non-SIMD** HOR — — 6.1 — — —HGW C++ temp<strong>la</strong>te SSE2 HOR 0.626 0.625 0.622 0.602 0.602 0.592HGW C++ temp<strong>la</strong>te SSE2 VER 0.334 0.331 0.313 0.276 0.261 0.260Légen<strong>de</strong> : HOR = segment horizontal, VER = segment vertical ; L’implémentation assembleur 32 bits est programméeen assembleur et utilise directement les instructions 32 bits <strong>de</strong> l’architecture Intel IA-32 ; l’implémentation Cnon-SIMD* selon <strong>la</strong> définition <strong>mathématique</strong>, utilise abondamment les constructions if-else ; l’implémentation Cnon-SIMD** est <strong>la</strong> plus optimisée possible en C et à <strong>la</strong> main sans utiliser les types vectoriels. L’implémentationC++ temp<strong>la</strong>te SSE2 utilise les c<strong>la</strong>sses fournies avec le compi<strong>la</strong>teur Intel ICL <strong>pour</strong> le calcul vectoriel. L’imaged’entrée/sortie : 768 × 576 × 8 bits = 432 ko ; processeur Intel Pentium 4 à 2.4 GHz, mémoire cache L2 = 512ko ; système d’exploitation Microsoft Windows XP ; compi<strong>la</strong>teur Intel ICL 7.1 <strong>pour</strong> Windows.TAB. 8.1 : Résultats expérimentaux <strong>de</strong> diverses implémentations <strong>de</strong> <strong>la</strong> di<strong>la</strong>tation par segmentsLe graphe présentant les temps d’exécution dépendant <strong>de</strong> <strong>la</strong> taille du segment <strong>pour</strong> l’implémentationitérative, cf. <strong>la</strong> fig. 8.7(a), a tout-à-fait <strong>la</strong> forme attendue sachant que <strong>la</strong> complexité <strong>de</strong> cet algorithme <strong>pour</strong>une image donnée est <strong>de</strong> O(K), où K est le nombre <strong>de</strong> voisins traités par pixel. Les temps d’exécutiongrandissent avec <strong>la</strong> taille <strong>de</strong> l’élément structurant linéairement.Nous présentons cette courbe comme contre-exemple <strong>pour</strong> démontrer qu’il est possible <strong>de</strong> calculerles di<strong>la</strong>tations / érosions beaucoup plus rapi<strong>de</strong>ment et surtout, avec un algorithme ayant <strong>la</strong> complexitéO(1), où le temps du calcul ne dépend pas du nombre <strong>de</strong>s voisins traités par pixel, q.v. <strong>la</strong> fig. 8.7(b).Il s’agit <strong>de</strong> l’implémentation SIMD <strong>de</strong> l’algorithme <strong>de</strong> van Herk-Gil-Werman, cf. les définitions <strong>de</strong> <strong>la</strong>fonction algoHGWFstSIMD (l’algorithme 8.4) et <strong>de</strong> <strong>la</strong> fonction algoHGWSndSIMD (l’algorithme 8.4).L’écart entre les <strong>de</strong>ux courbes dans <strong>la</strong> fig. 8.7(b) qui est d’une valeur constante n’est pas surprenantcar nous savons comment nous avons construit ces <strong>de</strong>ux implémentations. Cet écart correspond, eneffet, à 2 exécutions <strong>de</strong> <strong>la</strong> transposition par diagonale <strong>de</strong> l’image entière. Un phénomène plus intéressantprésenté par les mêmes données est celui <strong>de</strong> <strong>la</strong> baisse du temps du calcul avec <strong>la</strong> taille du segmentgrandissant qui est, au premier regard, paradoxal.Au début, nous avons jugé que cette baisse était due aux optimisations que le compi<strong>la</strong>teur peuteffectuer dans le co<strong>de</strong> <strong>de</strong> boucles lors <strong>de</strong> l’exécution <strong>de</strong> <strong>la</strong> phase p 1 et p 2 à l’échelle <strong>de</strong>s macro blocs. Maisl’explication est, en fait, plus simple. Il s’agirait d’un phénomène dû à <strong>la</strong> gestion <strong>de</strong>s boucles car <strong>pour</strong>les tailles grandissantes <strong>de</strong>s segments, nous obtenons moins <strong>de</strong> macro blocs et par conséquent, moins <strong>de</strong>boucles. Ce phénomène est présent également dans les implémentations non-SIMD <strong>de</strong> l’algorithme <strong>de</strong>van Herk et même dans d’autres, nous renvoyons le lecteur aux articles DB05 et aux publications DD06 quiprésentent les graphiques avec <strong>de</strong>s tendances simi<strong>la</strong>ires.174

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

Saved successfully!

Ooh no, something went wrong!