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]Est-ce possible ?


Sujet :

C++

  1. #21
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Citation Envoyé par loufoque
    Bien sûr que si.
    Lorsqu'il fait de l'inlining il peut adapter la fonction en fonction de ses paramètres.
    Uniquement avec des constantes... ce qui rend l'intérêt quasi nul... puisque le programmeur aurait également pu le faire!

    Citation Envoyé par loufoque
    Le compilateur est d'ailleurs probablement plus malin que toi pour optimiser.
    J'en doute fort.
    Plus malin que toi... sûrement...

  2. #22
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    Sans être méchant, il est évident que le compilateur, voyant une valeur constante, optimise de lui-même.
    Il est également évident que ce n'est pas mon cas, car j'utilise des variables...

  3. #23
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Charlemagne
    Uniquement avec des constantes... ce qui rend l'intérêt quasi nul... puisque le programmeur aurait également pu le faire!
    Pas uniquement sur des constantes... Si je construis une class Segment { x0, x1 }, avec une fonction "length" en inline qui va a priori faire un { return abs(x1-x0); }. Comment puis-je optimiser ca ? Pas possible !

    Par contre, le compilateur, lui, a connaissance du context appelant, et va donc optimiser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int l;
    {
        Segment test(0,5);
        int l = test.length();
    }
    en....
    Mieux encore, les compilateurs connaissent les valeurs possibles d'une variable... Et optimisent en fonction de cette information.
    D'ou l'importance de l'utilisation des assert() dans le code. Non seulement ils permettent de s'assurer d'une précondition, mais donnent d'excellentes indications au compilateur (__assume sous Visual).

  4. #24
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    T'as rien compris.
    Tu ne fais que transposer la constante....intérêt quasi nul...

    Dans ton exemple, j'aurais pu également te donner la valeur de la longueur de ton segment.
    Demande donc plutôt à l'utilisateur d'entrer les coordonnées du segment...

  5. #25
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    Je rejoins Charlemagne (ça c'est rigolo à dire/écrire...) !
    Evidement qu'il va optimiser, tu lui donnes des valeurs constantes dans le code.
    Si tu fais intervenir des variables tenant sur 4 octets (ou plus) il ne va pas s'amuser à calculer tous les possibles (2^32 dans ce cas) et évaluer chaque cas...

    Si tu fais ça comme code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int l,i,j;
    {
    for (i=0 ; i< 3000000 ; i++)
    {
        for(j=0;j<251000;j++)
        {
            Segment test(i,j);
            l = test.length();
            printf("l = %d", l);
        }
    }
    }
    Je doutes qu'il arrive à optimiser...

  6. #26
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Merci du soutien.

    Petite remarque:
    En l'occurrence je sais que mon compilo (Intel Compiler) sait optimiser ta boucle car il remarquera que la variable locale 'l' n'est pas utilisée et ne va pas faire de boucle du tout! Les autres compilos savent probablement l'optimiser également.
    C'est différent par exemple si tu affiches les résultats à l'écran...

  7. #27
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    J'ai édité .

  8. #28
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Charlemagne
    T'as rien compris.
    Dans ton exemple, j'aurais pu également te donner la valeur de la longueur de ton segment.
    Oui, parceque tu sais sémantiquement ce que length() "devrait" faire... si par contre, à un moment, un programmeur change le length() en abs(x1-x0)/2 par exemple, ton optimisation manuelle ne tient plus, et pire, casse le code sans que personne ne puisse s'en apercevoir sauf toi.

    C'est la base du refactoring. Plus le code est optimisé en évitant les appels de fonction "évidents", moins il est refactorisable (et donc maintenable).

    Les 'segment', 'length' sont donnés à titre d'exemple, il est bien évidemment idiot de faire ce que je dis sur un 'length()'

    Mais bon... on va arrêter là cette disgression

  9. #29
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Tu comprends rien à rien...

    Et alors, ton programme affichait invariablement la valeur 5, dorénavant il affichera 2.5...
    Le compilateur optimise le calcul sur des données constantes! très bien, c'est sympa de sa part...

    Tu veux essayer de nous faire croire que tous les sauts sont finalement inutiles dans un programme ou quoi?

  10. #30
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Charlemagne
    Tu comprends rien à rien...
    Je confirme... j'ai rien compris à ton dernier message, mais bon... c'est pas très grave non plus

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Est-il possible d'optimiser cette requête ?
    Par kraiggy dans le forum Développement
    Réponses: 6
    Dernier message: 20/03/2009, 15h49
  2. Réponses: 61
    Dernier message: 01/08/2008, 22h56
  3. Est-il possible d'optimiser cette requête ?
    Par Katachana dans le forum Requêtes
    Réponses: 2
    Dernier message: 25/06/2008, 14h50
  4. Réponses: 5
    Dernier message: 20/08/2006, 02h55
  5. Optimiser une requête..est-ce possible ?
    Par Thierry8 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 27/09/2005, 11h31

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