S4x : Programmation Concurrente
Problème
Faire un outil de traitement d'images en utilisant les concepts vu en cours, en comparant les approches séquentielles et parallèles. Utilisez des algorithmes permettant de tester le côté parallèle (conversion d'espace de couleurs ? filtrage (flou), détection de contours?, ...) et au moins un pour la concurrence (ex : histogramme ? ...). Faire des timings et une interface graphique de base pour changer dynamiquement les paramètres et configuration (nombre de threads, etc...).
C'est un projet que vous pourrez continuer par la suite (ajout de réseaux, etc...) ou le montrer pour chercher des stages, etc...
Groupes : comme c'est difficile => 1, 2, ou 3 élèves par groupe, au choix
AIDE : moi je vous aide à lire et écrire des images, intégrer une interface graphique, configurer votre carte graphique pour effectuer du code sur GPU.
Si vous n'arrivez pas à tout faire, ce n'est pas grave. Essayez de faire le socle de base en C++, en appliquant les concepts du multithreading et de la concurrence. Exemple : s'il n'y a que des sorties consoles sans IHM, ce n'est pas grave. On verra comment ça avance ensemble pour noter vos travaux.
On s’intéresse ici à l’étude des performances de techniques de programmation multithreadé parallèle et concurrente pour accélérer des algorithmes sur des images, stockées sous forme de tableaux 1D. L’analyse se porte sur des collections d’éléments de type tableaux, listes, piles et arbres. Les algorithmes de base consistent à convertir une iamge en niveau de gris, la flouter, ainsi que lq seuiller. On souhaite analyser la complexité de ces algorithmes sur les différentes structures de données par des mesures de performances temporelles, ceci en faisant varier la taille des données à traiterm à savoir la taille des images. La visualisation des graphiques résultants nous permettra d’analyser le comportement de ces structures de données par type d’algorithmes, notamment identifier des tendances d'évolutions particulières lorsque la taille des données à traiter augmente. Ceci nous permettra, dans le cadre d'une application concrète, de pouvoir prendre des décisions pertinentes lors du choix d’une structure de données parmi d’autres, selon un ensemble d’actions à effectuer, le but étant de sélectionner la structure la plus rapide.
Dispositif expérimental
Application
Vous êtes développeur dans une société de service et le CNES (centre national des études spatiales) demandent à votre société de lui proposer de faire une étude technique afin d'optimiser leur programme d'analyse d'images satellitales. Il vous demande de faire une étude comparative de solutions comme Python et C++ pour paralléliser leurs calculs. Ils ont des experts en imagerie spatiale mais pas de développeur avec les compétences requises. Il vous demande aussi de proposer des solutions plus innovantes comme le GPU Computing (Cuda, OpenCL, etc...). Il souhaiterait avoir un prototype afin de pouvoir prendre des décisions en fonction des comparaisons des performances, limitations (taille mémoire, etc...), contraintes logicielles, portabilité (Linux, Windows, ...), etc...
Analyse des résultats préalables
Explications précises et succinctes des résultats préalables.
Explicitation par un calcul de complexité certains résultats.
Limites des résultats préalables et ouvertures
Explications précises et succinctes des limites des résultats préalables et ce qu'ils ne permettent pas de vérifier. Quelles questions soulèvent ces résultats?
Argumentaire
Vente de rêve à insérer ici