Skip to content
Snippets Groups Projects
README.md 3.34 KiB
Newer Older
GUEHL PASCAL's avatar
GUEHL PASCAL committed
# S4x : Programmation Concurrente
GUEHL PASCAL's avatar
GUEHL PASCAL committed

GUEHL PASCAL's avatar
GUEHL PASCAL committed
## Problème
GUEHL PASCAL's avatar
GUEHL PASCAL committed

GUEHL PASCAL's avatar
GUEHL PASCAL committed
Développer 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?, ...). Faire des timings et une interface graphique de base pour changer dynamiquement les paramètres et configuration (nombre de threads, etc...).
GUEHL PASCAL's avatar
GUEHL PASCAL committed

GUEHL PASCAL's avatar
GUEHL PASCAL committed
C'est un projet que vous pourrez continuer par la suite (ajout de réseaux, etc...) ou le montrer pour chercher des stages, etc...
GUEHL PASCAL's avatar
GUEHL PASCAL committed

GUEHL PASCAL's avatar
GUEHL PASCAL committed
Groupes : 1, 2, ou 3 élèves par groupe, au choix
GUEHL PASCAL's avatar
GUEHL PASCAL committed

GUEHL PASCAL's avatar
GUEHL PASCAL committed
On s’intéresse ici à l’étude des performances de techniques de programmation multithreadée parallèle et concurrente pour accélérer des algorithmes sur des images. L’analyse se porte sur des iamges stockées sous forme de tableaux 1D d'unsigend char (std::vector< std::uint8_t >). Les algorithmes de base consistent à convertir une iamge en niveau de gris, la flouter, ainsi que la seuiller. On souhaite analyser la complexité de ces algorithmes selon différentes techniques de programmation par des mesures de performances temporelles, ceci en faisant varier la taille des données à traiter, à savoir la taille des images. L'interface graphique nous permettra d’analyser le comportement de ces techniques, 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 technique parmi d’autres, selon un ensemble d’actions à effectuer, le but étant de sélectionner la technique la plus rapide et celle nécessitant le moins de travail.
GUEHL PASCAL's avatar
GUEHL PASCAL committed

## Application
GUEHL PASCAL's avatar
GUEHL PASCAL committed

GUEHL PASCAL's avatar
GUEHL PASCAL committed
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...
GUEHL PASCAL's avatar
GUEHL PASCAL committed

GUEHL PASCAL's avatar
GUEHL PASCAL committed
![image](Images/application_screenshot.jpg)
GUEHL PASCAL's avatar
GUEHL PASCAL committed

## BONUS : Concurrence
GUEHL PASCAL's avatar
GUEHL PASCAL committed

Idée : chargement d'images asynchrone.
GUEHL PASCAL's avatar
GUEHL PASCAL committed

Pendant la boucle de rendu, demander à un thread d'aller ouvrir et charger une image sans bloquer la boucle de rendu. Tant que le thread n'a pas fini, on interroge s'il a fini et uniquement là, on demande à OpenGL d'updater/créer la texture en envoyant les données du CPU vers la mémoire GPU.
Im me semble que ça peut se faire avec l'objet C++ "condition" (comme en Python).
schéma de l'idée (il faut aller voir la doc et un example de "condition" en C++) : 
```while ()
{
    Button::Apply("Load Image")
    {
        threadImage
    }
GUEHL PASCAL's avatar
GUEHL PASCAL committed

    if ( isNewImageIsLoaded )
    {
        // create/update OpenGL texture
        ...
GUEHL PASCAL's avatar
GUEHL PASCAL committed

        isNewImageIsLoaded = false;
    }
}