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 :

Probleme d'efficacite d'un programme


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 31
    Par défaut Probleme d'efficacite d'un programme
    Tout d'abord, desole du titre peu explicite mais je savais pas trop marquer...

    Un 2eme desole mais je suis sur un clavier anglais donc sorry pour les amoureux des accents...

    En fait, je fais du C++ depuis quelques annees et je suis dans un Master d'Informatique en Ecosse.

    Le professeur nous a demande de programmer des bouts de code tres faciles sauf que je me confronte a un probleme moral tres intense...

    En fait, j'ai le choix entre deux modelisation differentes :

    1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for
        for
            prog 
     
    for
        for    
            prog
    2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for
        for
            if
                prog
            else
                prog
    La question est la suivante, laquelle est la mieux ?

    Etant donne qu'il y a une tempo dans 1 "prog" de chaque, je m'en fous pas mal de la vitesse.

    En fait, y a t'il une maniere que prefere le compilateur ?

    Merci d'avance pour vos reponses.

    Xavier

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    En fait, il faut surtout savoir si, les deux programmes doivent être effectués de manière conditionnelle, de manière "séquentielles" (d'abord toutes les boucle du premier puis toutes les boucle du deuxième) ou même l'un apres l'autre, de manière inconditionnelle (l'un puis l'autre, dans la même boucle).

    Les deux exemple que tu site ne sont en effet pas du tout équivalent... je manque de temps pour une réponse plus précise , je te la donnerai en rentrant
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 31
    Par défaut
    Dans le premier cas, chaque boucle for dure la moitie du temps d'execution du programme.

    Dans le deuxieme cas, le if dure la moitie du temps et le else dure la moitie du temps egalement.

    En esperant avoir repondu a ta question.

    Xavier

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par valinor4 Voir le message
    Dans le premier cas, chaque boucle for dure la moitie du temps d'execution du programme.

    Dans le deuxieme cas, le if dure la moitie du temps et le else dure la moitie du temps egalement.

    En esperant avoir repondu a ta question.

    Xavier
    Bon, enfin rentré ...

    Pour commencer, je vais "modifier" un peu tes exemples pour qu'ils soient plus parlants

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for n1
        for m1
            prog1 
     
    for o
        for p   
            prog2
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for n2
        for m2
            if test
                prog1
            else
                prog2
    Dans le premier cas, si tu déroules tes boucles tu auras une suite d'appels ressemblant à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    prog1
    prog1
    prog1
    ... un total de (n1*m1) appels à prog1
     
    prog2
    prog2
    prog2
    ... un total de (o*p) appels à prog2
    alors que, dans l'autre tu aura un résultat proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    prog1 ou prog2 (en fonction du resultat de test)
    prog1 ou prog2 (en fonction du resultat de test)
    prog1 ou prog2 (en fonction du resultat de test)
    ... un total de (n*m) appel à prog1 ou à prog2 (en fonction du resultat de test)
    Le seul cas dans lequel tu peux envisager que les deux codes pourraient donner une résultat identique de manière certaines c'est si:
    1. n2 = n1+o
    2. m2 = m1+p
    3. test vérifie que n2 > n1 ET m2 > m1
    (si les trois conditions ne sont pas remplies en même temps les codes ne fourniront pas un résultat identique)

    Ceci dit, et si tu es dans les conditions pour que le résultat reste identique, on peut estimer, de prime abord, que la première version sera plus rapide à l'exécution, en dehors de toute optimisation que le processeur pourrait nous sortir "de derrière les fagots"

    En effet, la deuxième version nécessitera l'utilisation, au niveau des instructions processeur, de trois comparaisons, et de trois sauts (je dirais de prime abord un saut conditionnel et deux sauts inconditionnels), et que ces instructions supplémentaire ont un cout en nombre de fréquence d'horloge du processeur...

    Sauf que....
    • C'est sans compter sur "l'intelligence" du compilateur, et plus d'un ont déjà été bluffés par les raccourcis qu'il arrive à prendre
    • Au pire, ces six instructions supplémentaires vont demander... une trentaine de fréquence d'horloge ... au grand maximum
    • Au vu des fréquences atteintes par les processeurs actuels, et même en regardant les processeurs "vieux" de 7 ans, il faudrait que le produit n2 * m2 s'élève à plusieurs (dizaines de) millions pour que l'on *commence* à remarquer une différence de l'ordre de ... quelque milisecondes

    On ne le répétera jamais assez
    Early optimisation is the root of all evil (une optimisation apparaissant trop tôt est le chemin vers tous les maux)
    Moralite:
    Avant de commencer à t'inquiéter des performances, commence en priorité absolue par créer un code qui est facile à lire, qui fonctionne, et qui fait ce que tu attends de lui.

    Si, vraiment, ton programme ne présente pas les performances souhaitées, il s'agira de faire un audit en profondeur du code pour y trouver les "goulots d'étranglement", en vue de modifier cette partie du code uniquement, et, surtout, de confirmer le gain de performances par un benchmark...

    Si le seul résultat d'une modification apportée est de rendre le code plus difficile à lire, elle doit être abandonnée sur le champs et sans remords
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 31
    Par défaut
    Merci beaucoup de ta reponse qui est pour le moins complete et claire.

    Sujet resolu.

    Xavier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 20
    Dernier message: 23/06/2006, 20h49
  2. Réponses: 15
    Dernier message: 18/05/2006, 13h43
  3. probleme de connexion MySql et programme distant
    Par owen2 dans le forum Installation
    Réponses: 6
    Dernier message: 20/04/2006, 17h29
  4. Probleme menu démarré tous les programmes
    Par tiboooo dans le forum Windows XP
    Réponses: 3
    Dernier message: 17/11/2005, 14h48
  5. [Kylix] Problème au lancement d'un programme
    Par jeanbi dans le forum EDI
    Réponses: 7
    Dernier message: 19/01/2005, 23h00

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