IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Optimisation de temps


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 21
    Points : 14
    Points
    14
    Par défaut Optimisation de temps
    Bonjour à tous

    Je développe actuellement une application de traitement d'images en temps réel. Les images que j'utilise sont en HD (1920 *1080 pixels) avec une acquisition de 30 FPS. malheureusement je n'arrive pas à atteindre un temps d'analyse inférieur à 1/30 seconde par image.

    J'ai pensé à utiliser plusieurs thread ou utiliser une carte graphique mais n'ayant pas une grande connaissance dans ce domaine je m'en remet à vous. Quelles sont mes possibilités, puis-je baisser de manière significative mon temps de traitements ?

    Merci d'avance vos réponse

  2. #2
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Bonjour

    Si tu peux nous fournir le kernel de calcul, on pourra vraiment t'aider.

    Sinon :
    - vérifie que tu as bien activé les options d'optimisation du compilateur
    - vérifie s'il n'y a pas d'optimisation de l'algo lui-même
    - fait attention au parcours dans la mémoire (pour minimiser les défauts de cache)
    - si tu as plusieurs cœurs disponibles, regarde du côté d'OpenMP (ou std::thread)
    - essaye d'utiliser les extensions SIMD
    - après il te reste l'utilisation de la carte graphique avec OpenCL ou Cuda

  3. #3
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 474
    Points
    11 474
    Billets dans le blog
    11
    Par défaut
    Tout dépend des traitements que tu as à faire.
    J'ai personnellement utilisé les intstructions SSE2, ou CUDA pour l'optimisation de traitements sur des images Full HD.
    Les gains étaient vraiment appréciables, mais avec le SSE2 il faut une grande rigueur et une bonne compréhension de ce que tu fais.
    Pour CUDA, il faut penser d'une toute autre manière, à cause de la manière dont est parallélisé le traitement.
    Et une autre solution que je n'ai pas testée c'est OpenMP.

    [EDIT]

    Owned.

  4. #4
    Membre expérimenté Avatar de SkyZoThreaD
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2013
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 584
    Points : 1 615
    Points
    1 615
    Par défaut
    Il n'y a pas à tortiller. Il faut utilisr le gpu pour le traitement d'images haute def. Tu peux utiliser des langages gpu comme Cuda ou Opencl qui sont très bons et bien documentés.
    Mais sans aller jusque là, tu peux très bien écrire un petit prog OpenGL et faire le traitement d'image par des shaders (GLSL ou Cg) dans un FBO et récupérer les données par un glReadPixels. Y'a pas plus "temps réel"

  5. #5
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Citation Envoyé par SkyZoThreaD Voir le message
    Il n'y a pas à tortiller. Il faut utilisr le gpu pour le traitement d'images haute def. Tu peux utiliser des langages gpu comme Cuda ou Opencl qui sont très bons et bien documentés.
    Mais sans aller jusque là, tu peux très bien écrire un petit prog OpenGL et faire le traitement d'image par des shaders (GLSL ou Cg) dans un FBO et récupérer les données par un glReadPixels. Y'a pas plus "temps réel"
    Il s'agit d'une option, qui portera très probablement ses fruits car généralement les problèmes de traitements d'images sont des problèmes que les GPU aiment bien.
    Cependant (sauf erreur de ma part) Cuda ne fonctionne que sur les cartes graphiques nVidia, OpenCL est relativement compliqué à utiliser. Les deux sont assez difficiles à installer correctement. (D'une carte graphique à l'autre, les performances ne sont pas (toujours) portables).
    Envisager une optimisation CPU (multi-thread) n'est pas stupide, si elle amène les performances voulues, le développement sera plus rapide et le code plus facilement maintenable.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    Bonsoir,

    Tout d'abord merci d'avoir porté attention à mon problème

    je traite mes images à l'aide de la bibliothèque OpenCV. Elle marche très bien mais sur des tailles d'images plus petites.

    Mon but est repérer des marqueurs de couleur (une douzaine) dans mes images. Au début j'utilisé des régions d’intérêt pour chacun de mes points afin de minimiser le temps de calcul. L'ennui c'est que mes marqueurs se déplacent rapidement et ils sortent des régions d’intérêts. J'ai donc décidé de traiter entièrement l'image, mais en contre partie la complexité explose ...

    Je ne connais aucune des solutions que vous m'avez proposé, je vais me renseigner sur les acronymes que j'ai pu voir passer dans la discussion ^^.

    Je recherche avant tout une solution simple et qui peut être rapidement mis en place. Je ne suis pas encore un expert en c++

  7. #7
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Citation Envoyé par cocs78 Voir le message
    Je recherche avant tout une solution simple et qui peut être rapidement mis en place. Je ne suis pas encore un expert en c++
    Regarde du côté d'OpenMP alors (dans un premier temps) (après avoir vérifié tes options de compilation).

  8. #8
    Membre expérimenté Avatar de SkyZoThreaD
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2013
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 584
    Points : 1 615
    Points
    1 615
    Par défaut
    Sur le site d'OpenCV on peut lire
    Enabled with OpenCL, it can take advantage of the hardware acceleration of the underlying heterogeneous compute platform
    Donc pas la peine de passer à OpenCL. Soit la version que tu utilises n'a pas été compilée avec OpenCL, soit ton GPU ne permet pas l'utilisation d'openCL. On pourrait savoir quel type de GPU tu as sur ton poste?

    Envisager une optimisation CPU (multi-thread) n'est pas stupide, si elle amène les performances voulues, le développement sera plus rapide et le code plus facilement maintenable.
    Ce n'est pas stupide effectivement. Mais en terme de performances, tant qu'on reste dans le traitement d'images, le plus petit des gpus contemporains sera 20 fois plus puissant que le plus gros cpu. Ceci dit c'est beaucoup de contraintes effectivement.

    A mon avis, que ce soit avec SIMD ou du multi-thread, je ne pense pas que de telles opérations à cette vitesse là soient faisables de manière fluide. Ça fait quand-même 62208000 pixels/seconde !

  9. #9
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 474
    Points
    11 474
    Billets dans le blog
    11
    Par défaut
    Je fais de la conversion de color space (HYVY vers RGB24) en temps réel sur du 30FPS Full HD.
    C'est pas les opérations les plus complexes, mais bon... c'est fluide comme il faut.

  10. #10
    Membre expérimenté Avatar de SkyZoThreaD
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2013
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 584
    Points : 1 615
    Points
    1 615
    Par défaut
    Convertir un colorspace n'est pas gourmand en ressources. Je suppose que l'ago de cocs doit être plus lourd, ou sa machine est moins puissante

  11. #11
    Membre à l'essai
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    En ce qui concerne ma GPU c'est une GeForce GT 635M version 331.65, je développe sur un pc portable.

    Pour les traitements que j'effectue, il s'agit en autre de convertir les images aux format HSV, effectuer des opérations de types morphologiques (érosion, dilatation), puis détection des couleurs qui m'intéresse. Je n'ai aucun soucis avec mes images en 640* 480 mais en 1920*1080 c'est plus chaud

    J'ai aussi pu constater que OpenCV est compilé avec openCL (normalement) et pouvait être aussi compilé avec CUDA. Je vais vérifier quelles sont mes options de compilation et je vous tiens au courant.

    Merci

Discussions similaires

  1. Optimisation du temps de traitement
    Par djuddju dans le forum Oracle
    Réponses: 4
    Dernier message: 20/04/2006, 21h16
  2. optimiser le temps d'exécution de l'explorateur windows
    Par ben_iap dans le forum Autres Logiciels
    Réponses: 6
    Dernier message: 31/01/2006, 22h04
  3. Réponses: 9
    Dernier message: 20/06/2005, 12h17
  4. [SGBD]Optimiser le temps d'accès aux données (schéma BD)
    Par vsavoir dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 08/10/2004, 18h33
  5. optimisation de temps de traitement xml/xslt
    Par Erwy dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 06/05/2004, 16h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo