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 :

comment optimiser son code en calcul ???


Sujet :

C

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Points : 141
    Points
    141
    Par défaut comment optimiser son code en calcul ???
    je cherche à optimiser mon code au maximum, est ce qu'il existe une "table"
    qui definie le nombre d'operation machine par instruction, ou un truc dans le genre pour que je connaisse les instructions les plus gourmandes en temps...

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: comment optimiser son code en calcul ???
    Citation Envoyé par gronaze
    je cherche à optimiser mon code au maximum, est ce qu'il existe une "table"
    qui definie le nombre d'operation machine par instruction, ou un truc dans le genre pour que je connaisse les instructions les plus gourmandes en temps...
    Ca dépend de tellement de choses plus ou moins complexes, que c'est quasiment imprévisible. Il faut faire des mesures. Un profiler (gprof, par exemple) peut aider.
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Du temps des 186 à 386, yavait des instructions machine qui prenaient plus d'un cycle (comme la multiplication)
    Mais je crois qu'aujourd'hui toute instruction machine, sur PC, fait 1 cycle. En tout cas l'affectation et l'addition c'est sur.
    Apres faut savoir que les variables doivent etre mises dans des registres avant operation (ce qui coute une affectation). Il faut savoir aussi que le compilateur est tres intelligent et qu'il cherche à mettre dans les registres des contenus de variable qu'un minimum de fois (pour eviter au maximum le transfert à la memoire vive qui est lente).
    C'est typiquement le cas d'un i dans une boucle for...
    Apres, toute indexation (tab[i]) ou acces à un champ (objet.champ) coute une addition supplementaire, evidemment. Et les indirections (*ptr ou ptr->champ) coutent une affectation supplementaire, evidemment.

    Si tu veux te prendre la tete, je crois qu'une option du compilateur permet de generer le code assembleur correspondant au code machine créé et ainsi voir ce qu'a fait exactement le compilateur

    Apres, un truc important à savoir, c'est qu'un appel à une fonction coute pas mal d'operations, entre l'enregistrement de l'adresse de retour, l'empilage des parametres, le deplacement du pointeur de pile et du pointeur de code.

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Gruik
    Si tu veux te prendre la tete, je crois qu'une option du compilateur permet de generer le code assembleur correspondant au code machine créé et ainsi voir ce qu'a fait exactement le compilateur
    Avec les caches mémoire et instruction, les pipe-lines, la prédiction... tu ne vas rien voir du tout. Détails dans la doc Intel...

    Le Pentium 4 , c'est pas le 386...
    De même, pour les Maceux, le Power PC, c'est pas le 68000...
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Points : 141
    Points
    141
    Par défaut
    Ok merci pour le gprof ça correspond assez bien a ce que je cherchais

  6. #6
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Avec les caches mémoire et instruction, les pipe-lines, la prédiction... tu ne vas rien voir du tout. Détails dans la doc Intel...

    Le Pentium 4 , c'est pas le 386...
    De même, pour les Maceux, le Power PC, c'est pas le 68000...
    Tu m'as cassé


    Oui ce sont des choses qui nous depassent completement
    Comme il a dit, la seule solution pour savoir ce qui est plus rapide c'est le bench et le profiler (que je connaissais pas)

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

Discussions similaires

  1. Comment protéger son code du reverse engineering ?
    Par progfou dans le forum Débats sur le développement - Le Best Of
    Réponses: 120
    Dernier message: 12/01/2011, 18h12
  2. comment optimiser son code?
    Par airod dans le forum Débuter
    Réponses: 1
    Dernier message: 28/07/2009, 17h38
  3. comment déboguer son code ?
    Par AdHoc dans le forum Zend
    Réponses: 11
    Dernier message: 05/02/2007, 15h03
  4. Réponses: 9
    Dernier message: 22/02/2006, 11h32
  5. [Perf] Comment optimiser son code ?
    Par Frifron dans le forum Général Java
    Réponses: 12
    Dernier message: 11/08/2005, 09h05

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