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 :

Passage C->C++ : Différences de performances et de résultat


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Par défaut Passage C->C++ : Différences de performances et de résultat
    Salut les gens, je savais pas trop ou poster ca, mais votre débat me fait penser à ce qui m'arrive en ce moment :

    J'ai developpé un petit logiciel de traitement d'image, en C.
    Le traitement était trés long, mais le taux de réussite d'environ 80%

    Je l'ai passé en Cpp (sans changer mes fonctions C) pour des raisons externes, et cela à eu pour conséquence tout à fait innatendue de rendre mon traitement 4 fois plus rapide environ, mais avec un taux de réussite moindre ! (environ 50%)

    Alors bon première réaction = "l'informatique est définitivement pas une science exacte", mais deuxième réaction = "Bah ouais définitivement ca me dégoute "

    Avez vous deja connu ce genre de situation ?

    (Vraiment, fonctions en tout point similaires, je n'ai fait que passer mes .c en .cpp, à quelques warnings prés)

  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Un taux de réussite à 50%, il y a forcement des bugs dans ton application...

  3. #3
    Membre confirmé Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Par défaut
    Non.
    L'objectif du traitement est de détecter dans un deuxieme temps quelque chose de précis sur l'image (je ne peux pas en parler plus précisément désolé), et c'est de ce taux de réussite la que je parle (sachant que la banque de données d'image dont je dispose possede les cas les plus difficiles, 80% est un trés bon résultat).

    La n'est pas le sujet de toute facon.

    Je suis vraiment intrigué par cet écart impressionant entre les deux versions, et bon, c'est pas la première fois que l'informatique est non détérministe, donc j'aimerais savoir si quelqu'un à déjà connu ca.

  4. #4
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    J'ai beaucoup de mal a croire que le langage soit un facteur significatif dans ton histoire: tu as vraisemblablement change d'algo en meme temps et c'est ca qui explique ta chute dans le taux de reussite.

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    J'ai beaucoup de mal a croire que le langage soit un facteur significatif dans ton histoire: tu as vraisemblablement change d'algo en meme temps et c'est ca qui explique ta chute dans le taux de reussite.
    et dans l'augmentation de la vitesse..

    Il est impossible (même avec des traitements de chaînes de caractères) de diminuer un temps de calcul de 75% en passant de C à C++....

    @skip78 :

    soit tu n'as pas fait que "Vraiment, fonctions en tout point similaires, je n'ai fait que passer mes .c en .cpp, à quelques warnings prés", soit tu avais des structures et constructions aberrantes en C... (je soupçonne une "simili-construction C++" en C..., ou plus précisément un programme C fait par quelqu'un qui ne possède que les paradigmes objets, ou alors qui est débutant)

  6. #6
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    et dans l'augmentation de la vitesse.
    Il est vraisemblable qu'elle soit due a cela aussi.
    Il est impossible (même avec des traitements de chaînes de caractères) de diminuer un temps de calcul de 75% en passant de C à C++....
    Je n'utiliserais pas le mot "impossible". J'imagine assez bien un tel rapport pour des operations particulieres, suite a de l'inlining autorise par une implementation a base de template plutot que l'utilisation de pointeurs sur fonctions (genre un tri avec une fonction de comparaison sur un type de base, avec qsort() fait une indirection a chaque comparaison, std::sort() peut inliner facilement). Mais les cas doivent etre relativement rares.

  7. #7
    Membre confirmé Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    J'ai beaucoup de mal a croire que le langage soit un facteur significatif dans ton histoire: tu as vraisemblablement change d'algo en meme temps et c'est ca qui explique ta chute dans le taux de reussite.
    Moi aussi j'ai beaucoup, mais alors vraiment BEAUCOUP de mal à y croire, et c'est pour ca que je me permet de poster ceci ici, je savais que j'aurais pas mal de réactions, et je suis maintenant servi


    Citation Envoyé par souviron34 Voir le message
    soit tu n'as pas fait que "Vraiment, fonctions en tout point similaires, je n'ai fait que passer mes .c en .cpp, à quelques warnings prés", soit tu avais des structures et constructions aberrantes en C... (je soupçonne une "simili-construction C++" en C..., ou plus précisément un programme C fait par quelqu'un qui ne possède que les paradigmes objets, ou alors qui est débutant)
    Bah j'ai pas grand interet à mentir n'est ce pas
    J'ai absolument rien changé.
    Pour ce qui est des structures et constructions aberrantes en C, mdr
    je vois pas comment je pourrais être aberrant à ce point, mais ca proviens peut être de là :

    Mon interface graphique utilise GTK+, et pour retrouver tous mes arguments au fil des callbacks, et éviter les statics, j'ai tout foutu dans une structure globale.

    C'est plutot commun en GTK, mais bon peut être que ca peut venir de la ?

    De plus le GTK+ utilise une "pseudo structure objet", comme tu dis, mais bon c'est cencé fonctionner en C++.


    Je tiens tout de même à préciser que le programme fonctionne à la perfection malgrès les écarts de résultats.

    C'est ce qui me fait penser que mon code d'origine est pas si mauvais ...

    Mais si quelqu'un peut m'affirmer à 100% que la différence de vitesse ne peut PAS être due au changement de language, c'est que c'est du au fait que mon passage en Cpp est mauvais non ?

    Pourtant je vous le répète, je n'ai pas changé une ligne de code, j'ai juste un programme en C dans des fonctions .cpp
    Cela ayant pour but d'inclure une lib en cpp.

    Enfin voilou de mon coté je tente de repasser tout ca en C malgrès tout, dans l'hypothèse ou c'est effectivement la conception de mon programme qui est foireuse.

  8. #8
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 527
    Par défaut
    Citation Envoyé par skip78 Voir le message
    (Vraiment, fonctions en tout point similaires, je n'ai fait que passer mes .c en .cpp, à quelques warnings prés)
    Est-ce que tes routines de traitement d'images appellent des fonctions mathématiques ?( je suppose évidemment que oui surtout si c'est du traitement d'image )
    Cela dépend de la manière dont sont implémentées ces fonctions selon le langage en C ou en C++ l'implémentation au niveau bibliothèque de code.
    Si tu veux plus t'en rendre compte je te conseille de t'initier à l'assembleur et de tracer en assembleur pour voir comment le code a été compilé selon la version..
    il se peut que dans un cas les bibliothèques fassent appellent à une émulation logicielle des fonctions mathématiques ( sin,cos....) et dans l'autre par des calculs avec des instructions assembleur implicites i386/i387.
    Pour faire plus clair dans une version le compilo il voit sin( telle_valeur) il fait l'édition des liens avec une routine de code qui émule sin().
    Dans l'autre cas il compile directement en code assembleur l'instruction i386 correspondante..
    Tout cela tu le verras si tu traces directement dans le code assembleur..
    Il y aussi les astuces de mise sur le registre de pile avec des push et pop assembleur comment le compilateur fait cela.


    une suggestion de lecture que je ressorts à chaque fois
    http://msdn.microsoft.com/en-us/libr...69(VS.60).aspx

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    ...
    il se peut que dans un cas les bibliothèques fassent appellent à une émulation logicielle des fonctions mathématiques ( sin,cos....) et dans l'autre par des calculs avec des instructions assembleur implicites i386/i387.
    ...
    M'étonnerais fortement (ou alors par volonté délibérée de privilégier un langage) que les bibliothèques de maths soit si différentes que ça... avec le même compilo, la même machine, le même OS, le même IDE...


    M'enfin, rien n'est hors de portée de M$ en ce qui concerne les coups tordus..

Discussions similaires

  1. Réponses: 9
    Dernier message: 19/05/2009, 22h42
  2. Réponses: 14
    Dernier message: 12/04/2009, 20h47
  3. Différence de performance en FULLSCREEN et WINDOWED ?
    Par supergrey dans le forum DirectX
    Réponses: 9
    Dernier message: 09/03/2008, 17h40
  4. Différence de performance entre JOIN et Subselect ?
    Par guidav dans le forum Requêtes
    Réponses: 1
    Dernier message: 20/07/2007, 10h01
  5. Réponses: 7
    Dernier message: 11/07/2007, 22h01

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