• Aucun résultat trouvé

Les interfaces de haut niveau : le confort au détriment de la flexibilité ?

2.2 Modèles de programmation et architectures matérielles

2.2.5 Les interfaces de haut niveau : le confort au détriment de la flexibilité ?

Les modèles de programmation proposés ci-dessus nécessitent en général des connais- sances pointues des architectures ciblées et de la parallélisation des calculs. De plus, ces modèles de programmation sont en général liés et dédiés à un type d’architecture ; les utili- ser dans un autre contexte est inefficace.

Depuis plusieurs années, des modèles de haut niveau tentent de percer afin de faciliter la prise en charge des architectures modernes. Parmi ces nouveaux modèles, OpenACC [94] propose des directives préprocesseur afin de délocaliser les calculs sur accélérateur dans le cadre d’une architecture hétérogène. La directive en tête de boucle dans l’extrait 2.2 permet de déporter automatiquement l’exécution de celle-ci sur tout accélérateur respectant la spé- cification. Similairement, la version 4 d’OpenMP [18], datant de 2013, ajoute des directives à destination des accélérateurs matériels, unifiant de fait les modèles de programmation pour architecture à mémoire partagée et pour architecture hétérogène.

11 #pragma acc kernels copyin(a[0 : N], b[0 : N]), copyout(c[0 : N])

12 for (i = 0; i < N; i++) 13 c[i] = a[i] + b[i];

Extrait 2.2 – Addition de vecteurs déportée en OpenACC

Ces modèles de haut niveau facilitent la programmation en proposant des constructions plus simples que leurs équivalents de plus bas niveau. Grâce à eux, il est possible, en anno- tant du code déjà fonctionnel, de le porter à moindre frais sur les accélérateurs supportés. Toutefois, ces interfaces de haut niveau peuvent s’avérer limitées pour représenter la com- plexité des architectures cibles et, donc, atteindre les performances d’un modèle de plus bas niveau.

2.3 Conclusion

Face aux limites physiques, provoquées par les effets quantiques dès que la finesse de gravure atteint quelques nanomètres, les concepteurs de processeurs augmentent la complexité de leurs architectures. Les architectures modernes comme le processeur manycore MPPA exposent différents niveaux de parallélisme : cœurs VLIW à instructions vectorielles, nœuds de calcul à mémoire partagée, cluster à mémoire distribuée et interconnexion par réseau sur puce et accélérateur en lien avec un hôte.

2.3. Conclusion

Pour exploiter ces différents paradigmes, plusieurs modèles de programmation existent. Des modèles de bas niveau comme OpenCL rendent le code portable sur différentes classes d’accélérateurs matériels, mais des optimisations spécifiques au matériel restent nécessaires pour atteindre de bonnes performances. À l’inverse, certains modèles de haut niveau facilitent la programmation et sont portables sur un plus large ensemble d’architectures, généralement aux dépens de la performance.

L’enjeu de cette thèse est de concilier facilité de programmation, portabilité et perfor- mance sur l’architecture complexe du processeur MPPA. Nous utilisons, pour ce faire, les différents modèles de programmation compatibles avec cette architecture, à savoir OpenMP sur les nœuds de calcul à mémoire partagée dans le chapitre 5, le langage flot de données Sigma-C dans le chapitre 6 et la spécification OpenCL (chapitre 7).

Chapitre3

Traitement d’images et bibliothèques

logicielles

Le temps irrévocable a fui, l’heure s’achève. Mais toi, quand tu reviens et traverses mon rêve, Tes bras sont plus frais que le jour qui se lève, Tes yeux plus clairs.

A travers le passé ma mémoire t’embrasse. Te voici. Tu descends en courant la terrasse Odorante, et tes faibles pas s’embarrassent Parmi les fleurs.

Par un après-midi de l’automne, au mirage De ce tremble inconstant que varient les nuages, Ah ! verrais-je encor se farder ton visage D’ombre et de soleil ?

— Paul-Jean Toulet, Souvenirs d’automne

C

omme vu dans le chapitre 1, le traitement d’images est un domaine industriel clé qui compte de nombreuses applications grand public. Les réalités augmentée et virtuelle ont été rendues accessibles au grand public par l’essor des smartphones, et les véhicules autonomes ainsi que les drones annoncent des changements sociétaux majeurs. De telles applications s’appuient en général sur des bibliothèques logicielles qui implémentent les différents opérateurs de traitement d’images et permettent de facilement les réutiliser grâce à des interfaces de programmation.

Ce chapitre effectue un survol des avancées actuelles en matière de traitement d’images dans la section 3.1, puis se focalise plus particulièrement sur une branche de ce domaine, la morphologie mathématique, décrite dans la section 3.2. Nous décrivons ensuite, dans la section 3.3, deux bibliothèques de traitement d’images sur lesquelles nous avons fondé les travaux de cette thèse.

3. Traitement d’images et bibliothèques logicielles

3.1 Le traitement d’images aujourd’hui

Le traitement d’images consiste à extraire et transformer l’information d’une image, considérée comme un tableau de pixels en deux dimensions. Des dimensions supplémentaires peuvent toutefois intervenir : les IRM produisent ainsi des images tridimensionnelles, et les flux vidéos peuvent s’interpréter selon une troisième dimension temporelle. Quant à l’espace colorimétrique, il comporte lui aussi généralement trois dimensions : (R, G, B), (L, a, b), ou (X, Y, Z). Ces dimensions supplémentaires multiplient d’autant les calculs. Ainsi, les applications de traitement d’images mettent souvent en jeu un grand volume de données. Toutefois, les calculs sur les pixels étant relativement indépendants, ces calculs sont facilement parallélisables.

Parmi les sous-domaines du traitement d’images, la vision par ordinateur consiste à ex- traire la sémantique d’une image, en reconnaissant, par exemple, les objets qui la composent, comme illustré en figure 3.1. Différentes méthodes sont aujourd’hui en concurrence. La morphologie mathématique, que nous détaillerons plus bas, suit une approche algorithmique pure et géométrique afin de détecter les formes. L’apprentissage artificiel, particulièrement en vogue actuellement, se base, comme son nom l’indique, sur la recherche de caractéris- tiques clefs par apprentissage sur une base de données d’images.

Figure 3.1 – Vision par ordinateur : reconnaissance d’objets dans une image avec détection, localisation et détermination de leurs contours par segmentation

Les produits de ces champs de recherche prennent la forme de bibliothèques logicielles qui rassemblent les implémentations de différents opérateurs sous une interface de pro- grammation facilitant le développement d’applications. Dans le domaine de la vision par ordinateur, la plus connue de ces bibliothèques est OpenCV [95]. Celle-ci propose un large choix de filtres de traitement d’images, dont quelques opérateurs de base de la morphologie mathématique.

Les bibliothèques d’apprentissage artificiel s’appuient sur un principe différent : elles proposent de construire différentes structures apprenantes — arbres de décision, réseaux de neurones — qu’il faudra entraîner sur une base d’apprentissage, puis valider séparément sur une base de validation. Plusieurs bibliothèques d’apprentissage artificiel à sources ouvertes ont été développées par des laboratoires universitaires ; parmi eux Torch [30], Theano [12], Caffe [79] ou Scikit-learn [98, 22].

Depuis 2015, les grands industriels du monde numérique se sont emparés de ces questions et ont libéré les uns après les autres les sources de leurs bibliothèques. C’est d’abord Google, qui a ouvert les vannes avec Tensorflow [88, 1], sa bibliothèque dédiée aux réseaux de neurones profonds. Celle-ci permet de décrire via une interface de haut niveau en Python des graphes de neurones, qui seront ensuite générés en C++ ou en CUDA pour les processeurs graphiques. En janvier 2016, Microsoft a publié CNTK [2], son outil pour l’apprentissage profond, qu’il utilise pour la reconnaissance vocale. En mai de la même année, Amazon a rendu accessible DSSTNE [82], optimisé pour les calculs de matrices creuses et, notamment, 22