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

Langages de programmation Discussion :

"Lourdeur" d'une instruction


Sujet :

Langages de programmation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 234
    Par défaut "Lourdeur" d'une instruction
    Salut,

    Où pourrais-je obtenir des informations sur l'impacte qu'on les instructions suivantes ?

    affectation : a = b
    appel d'une fonction: uneFonction()
    appel d'une fonction dans un autre objet: MachinBidule.uneFonction()
    comparaison: a < b
    embranchement: if( a == b )
    boucle : do{ ... } while( ... )
    instantiation: UnMachin = new Machin()

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Citation Envoyé par Jimalexp Voir le message
    Salut,

    Où pourrais-je obtenir des informations sur l'impacte qu'on les instructions suivantes ?

    affectation : a = b
    appel d'une fonction: uneFonction()
    appel d'une fonction dans un autre objet: MachinBidule.uneFonction()
    comparaison: a < b
    embranchement: if( a == b )
    boucle : do{ ... } while( ... )
    instantiation: UnMachin = new Machin()
    L'impact ? Tu veux dire le coût en temps machine ?
    Ça va hautement dépendre du langage encore une fois et, si c'est compilé, de la machine elle-même.

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 234
    Par défaut
    C'est ça, le coût en temps machine. On va dire que c'est dans le langage C s'il faut une précision de ce côté là.

    C'est pour me faire une idée générale.

  4. #4
    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
    tout ce qu'on pourrait éventuellement donner est un coût relatif..

    Et même là..

    Pourquoi poses-tu cette question ?

    je pense que tu es en train de tomber dans un piège récurrent chez les débutants, c'est de tenter d'optimiser un code à partir des instructions de base.. Ce qui n'a quasiment jamais aucun sens...

    Maintenant, relativement :

    1. affectation : a = b tout dépend : si a et b sont des types "simples", cela va de une copie d'octet à une copie de 8 octets (double). Si a et b sont des structures cela peut être lourd...

    2. appel d'une fonction: uneFonction() au moins un jmp, plus copie des paramètres dans la pile (dans les 2 sens).

    3. appel d'une fonction dans un autre objet: MachinBidule.uneFonction() :
      au moins changement de contexte, plus un jmp, plus copie des paramètres dans la pile (dans les 2 sens), plus re-changement de contexte.

    4. comparaison: a < b test signé

    5. embranchement: if( a == b ) test

    6. boucle : do{ ... } while( ... ) test

    7. instantiation: UnMachin = new Machin() : allocation de mémoire plus assignations diverses (peuvent être coûteuses suivant ce qui est copié (voir plus haut)).


    Donc ordre (tentative) :

    4,5,6 : sans doute équivalents
    1 : (suivant les cas)
    2
    3,7 : ça dépend..

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    [...]
    Pourquoi poses-tu cette question ?

    je pense que tu es en train de tomber dans un piège récurrent chez les débutants, c'est de tenter d'optimiser un code à partir des instructions de base.. Ce qui n'a quasiment jamais aucun sens...[...]
    Je pense que c'est ça aussi
    @Jimalexp tu es mieux d'attendre un peu d'avoir des cours sur la théorie de la compilation et sur l'assembleur. Ça te donnera des bons moyens de comparaison. ^_^

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 814
    Par défaut
    Et puis tout ça, c'est en général peanuts par rapport aux accès référentiel(spécialement bases de données). Ou par rapport au poids de l'algo. Vendredi dernier, j'ai légèrement modifié une macro VBA construite à la va-vite. Résultat : temps de calcul passé de 30 minutes à 2 secondes. Après, le temps pris par mon if par rapport à un select case, autant dire que je m'en fous. J'ai juste optimisé l'algo en limitant les interventions sur le référentiel(en l'occurence le tableau lui-même).....

  7. #7
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 234
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    Pourquoi poses-tu cette question ?

    je pense que tu es en train de tomber dans un piège récurrent chez les débutants, c'est de tenter d'optimiser un code à partir des instructions de base.. Ce qui n'a quasiment jamais aucun sens...
    Merci.

    Je suis actuellement confronté à un exercice où le temps d'exécution est important. Il y a donc un code existant écrit selon l'approche conventionelle et qui dois être reformulé au niveau des endroits critiques.

    A part ça, c'est pour "boucher les trous" au niveau des conaissances. Je suis en deuxième année d'un bachelier et les modules de l'année prochaine porterons sur le développement. Ce genre de questions devrais donc être déjà vu.

    C'est nécessaire parceque les cours du soir sont plus "lights". Il y a aussi ce problème qu'un cours donné dans un établissement ne vaut pas celui donné dans un autre établissement malgré un titre identique.

    @Garulfo: Je connais les grandes lignes sur la compilation (transformation du code source, création des objets, link, bibliothéques, passage à l'exécutable...) mais très peu sur l'assembleur. Ce sera une nouvelle piste à explorer.

  8. #8
    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 Jimalexp Voir le message
    Je suis actuellement confronté à un exercice où le temps d'exécution est important. Il y a donc un code existant écrit selon l'approche conventionelle et qui dois être reformulé au niveau des endroits critiques.
    Mais encore une fois, l'optimisation à des endroits critiques se fera par optimisation de l'algorithme (99.999999%), alors que l'optimisation des instructions, sera, au mieux, de 0.000001 %...

    Déjà, à un niveau très très expérimenté, c'est extrêmement rare de tomber sur un cas d'optimisation où les instructions jouent.

    Alors à un niveau comme celui que tu mentionnes, il n'y a tout juste pas besoin de le prendre en compte, sauf à avoir une vague idée qu'un new fait de l'allocation et donc coûte nettement plus que faire une égalité ou référer à un élément de tableau...

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