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

OpenCV Discussion :

Binaire avec Visual Studio plus lent qu'avec G++


Sujet :

OpenCV

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 147
    Points : 180
    Points
    180
    Par défaut Binaire avec Visual Studio plus lent qu'avec G++
    Bonjour,

    Alors voilà mon problème.
    J'ai un code opencv qui compile sans problème.
    En deux mots, je prends deux images, je crée une base de donnée avec les pixels, et j'utilise la base de donnée sur une autre image pour récupérer les textures. Ensuite belief propagation pour affiner le résulat.

    Mon problème est le suivant. Quand je compile avec mingw/g++ sous codeblock, le code se termine en environ 12 minutes pour une image (oui c'est long, mais BP prend du temps). Quand je compile le même code sous visual studio 2008 pro, le code met plus de deux heures à finir.

    J'utilise dans les deux cas openmp pour que ça tourne sur les huit coeurs, le code est bien lancé en mode release, les options de compilation sont celles de base, mais j'ai tenté avec d'autre, même résultat.

    J'ai besoin de visual studio car il faut que je compile en 64bits pour la suite. Et pas moyen de compiler en 64 bits sous mingw.

    Si quelqu'un à une idée, merci de votre aide.

  2. #2
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 364
    Points : 5 378
    Points
    5 378
    Par défaut
    salut,

    l'écart est important !!
    comment compiles-tu avec Visual ?

    Je suppose que tu compiles en release O2.

    As-tu essayer d'activer SSE pour voir la différence ?
    C/C++ -> Code generation -> Enable Enhenced Instruction Set.

    Mais je suppose que ton programme ne fait "rien", c'est la lib qui bosse le plus. Donc, c'est étrange un écart de perfs aussi grand.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 147
    Points : 180
    Points
    180
    Par défaut
    Bonjour,

    Merci pour la réponse.
    Non, la plupart du code est le mien. Dans ce cas opencv sert surtout à la gestion des images plus qu'à résoudre mon problème.

    La compilation est bien en -O2.

    J'ai viré l'optimisation du belief propagation, le code tourne en 4 minutes sous VS9 et moins de 30 secondes sous g++.
    Je viens de relancer avec l'option SSE, cela ne change pas grand chose, il me faut toujours 4 minutes.
    J'ai aussi vérifié l'utilisation des coeurs et elle est à 100% en permanence.

    Les deux images de sorties sont aussi les mêmes, au pixel prés.

    Est-il possible qu'une sortie de tableau provoque ce ralentissement sous VS et pas sous g++ ?
    Le code tourne bien sous g++, de nombreux tests ne l'ont jamais fait planter, mais sait-on jamais.

    Merci.

  4. #4
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 364
    Points : 5 378
    Points
    5 378
    Par défaut
    Je viens de relancer avec l'option SSE, cela ne change pas grand chose
    Ca ne m'étonne pas vu que c'est la lib qui fait tout le boulot.

    je ne connais pas opencv, mais je pense qu'un link statique ou dynamique ne va pas changer grand chose.

    Citation Envoyé par isangoma Voir le message
    J'ai besoin de visual studio car il faut que je compile en 64bits pour la suite. Et pas moyen de compiler en 64 bits sous mingw.
    Ca répond pas à ton pb, mais :
    mingw32 est livré avec code::blocks, mais la version 64bit existe :
    http://sourceforge.net/projects/mingw-w64/

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 147
    Points : 180
    Points
    180
    Par défaut
    Encore merci.

    Non ce n'est pas la lib qui fait le boulot.
    La plupart du temps de calcul est en fait le calcul de distance (ssd en utilisant RGB, HSV ...) sur des groupes de pixels.
    Du coup j'ai beaucoup de calcul flottant, la lib n'est donc pas vraiment sollicitée.

    Merci pour le lien, j'ai déjà tenté mais jamais réussis à compiler proprement avec mingw64.
    Maintenant que opencv2.4 est fournis directement en 64bits, je devrais retenter le coup.

    Si jamais une autre idée vient, je suis toujours preneur.

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/10/2010, 16h28
  2. Réponses: 1
    Dernier message: 20/05/2008, 18h05
  3. [VB.NET] Création de control avec visual studio
    Par HULK dans le forum Windows Forms
    Réponses: 6
    Dernier message: 01/08/2007, 18h06
  4. probleme de link avec visual studio .net 2003
    Par kamal101 dans le forum MFC
    Réponses: 9
    Dernier message: 28/03/2005, 21h44
  5. Probleme d'utilisation de directX 9 avec visual studio.net
    Par cranedoeuf dans le forum DirectX
    Réponses: 1
    Dernier message: 24/05/2004, 04h33

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