Bonjour, cliquez-ici pour vous inscrire et participer au forum.
  • Login:



+ Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Signification Gcc -O2

  1. cosmoff

    Date d'inscription
    septembre 2012
    Messages
    309

    Signification Gcc -O2

    Bonjour,
    J ai testé un code :
    While (time(NULL) < 10 ) {
    Var *= 1.2;
    I++;
    }
    Je regarde combien de fois je rentre dans la boucle en 10 seconde. Et je remarque que lorsque je compile avec l option -O2 je vais 10 fois plus dans la boucle ce qui m a beaucoup étonné.
    Je me suis renseigné sur l option -O2 et je suis tombé sur ça :
    Optimize even more. GCC performs nearly all supported optimizations that do not involve a space-speed tradeoff. The compiler does not perform loop unrolling or function inlining when you specify -O2

    Dans mon code je n utilise pas de fonction inline bien que la fonction inline fait gagner du temps car on évite des saut d adresse donc je suis étonné. Mais j ai bien une boucle, et je ne comprend pas comment il arrive à optimiser la vitesse d exécution de mon programme en supprimant la boucle?

    Je précise que j ai déjà fait un peu d assembleur.

    Merci d avance pour votre aide

    -----

     


    • Publicité



  2. Jack

    Date d'inscription
    avril 2003
    Localisation
    Metz
    Messages
    16 226

    Re : Signification Gcc -O2

    Je ne comprends pas comment tu peux effectuer la boucle pendant 10 secondes avec ton "While (time(NULL) < 10 ) ".
    Tu peux expliquer le principe?
     

  3. cosmoff

    Date d'inscription
    septembre 2012
    Messages
    309

    Re : Signification Gcc -O2

    Oui en réalité il fait faire :
    Int début = time (null);
    While (time (null) < début + 10){
    La fonction time retourne un temps tout simplement
     

  4. Jack

    Date d'inscription
    avril 2003
    Localisation
    Metz
    Messages
    16 226

    Re : Signification Gcc -O2

    Et donc, la question est-elle toujours d'actualité avec le code modifié?
     

  5. PA5CAL

    Date d'inscription
    décembre 2005
    Localisation
    Paris
    Âge
    52
    Messages
    11 741

    Re : Signification Gcc -O2

    Bonsoir

    Je ne vois pas ce qu'il y a d'étonnant à aller plus vite quand on réalise une optimisation du code. Parvenir à gagner un facteur entre 5 et 10 sur la vitesse en partant d'un code C non optimisé (ou optimisé en taille) est très courant.

    Si tu souhaites savoir où le gain a pu être réalisé, le plus simple serait encore de comparer le code généré avec et sans l'option -O2. Tu pourrais par exemple découvrir que le code non optimisé est particulièrement inefficace, ou bien que le code optimisé ne fait pas vraiment ce que tu souhaites.
     


    • Publicité



  6. cosmoff

    Date d'inscription
    septembre 2012
    Messages
    309

    Re : Signification Gcc -O2

    Ce qui me pose problème c est que mon code est très simple (3 instructions) et je ne vois pas où on peut l optimiser
     

  7. Paraboloide_Hyperbolique

    Date d'inscription
    juin 2012
    Localisation
    Liège
    Âge
    33
    Messages
    1 745

    Re : Signification Gcc -O2

    Bonjour,

    L'optimisation peut se voir au niveau du code assembleur (flag -S dans gcc). Vous pouvez constater les différences en entrant votre code ici: https://godbolt.org/ et en spécifiant le flag d'optimisation voulu.
     

  8. polo974

    Date d'inscription
    février 2007
    Messages
    8 409

    Re : Signification Gcc -O2

    il suffit de comparer le code assembleur.
    option -S
    Le mieux est l'ennemi du bien, et c'est bien mieux comme ça...
     

  9. pm42

    Date d'inscription
    juillet 2015
    Messages
    4 178

    Re : Signification Gcc -O2

    Citation Envoyé par polo974 Voir le message
    il suffit de comparer le code assembleur.
    option -S
    En effet. On peut aussi dire que nous donner le code complet qui marche sans mettre des majuscules sur Int et While pourrait aider si on voulait tester nous même.
     

  10. PA5CAL

    Date d'inscription
    décembre 2005
    Localisation
    Paris
    Âge
    52
    Messages
    11 741

    Re : Signification Gcc -O2

    Citation Envoyé par cosmoff Voir le message
    Ce qui me pose problème c est que mon code est très simple (3 instructions) et je ne vois pas où on peut l optimiser
    Il n'y a peut-être que trois lignes contenant des instructions en langage C, mais chacune réalise en fait plusieurs opérations.

    Je ne sais pas à quelle cible est destiné ce code, mais sur de petites plateformes (micro-contrôleurs 8 bits, par exemple) ces opérations peuvent être nombreuses.

    Par exemple, un simple I++ nécessite de :
    - pointer sur la première adresse de la variable I,
    - copier cette variable dans des registres,
    - ajouter une unité aux registres (succession d'additions avec retenue),
    - re-pointer sur la première adresse de la variable I,
    - recopier les registres dans cette variable.
    Typiquement, un tel code peut être optimisé en conservant la valeur de I dans des registres étendus au regard de l'addition (sur 16 bits pour une UC 8 bits) et en n'effectuant les pointages et les copies qu'une fois, avant et après la boucle. On peut aisément gagner un facteur 10 sur la vitesse avec ce type d'optimisation.
    Dernière modification par PA5CAL ; 30/12/2017 à 11h55.
     

  11. lou_ibmix_xi

    Date d'inscription
    juin 2006
    Localisation
    Toulon
    Âge
    39
    Messages
    2 394

    Re : Signification Gcc -O2

    "man gcc" a la réponse à nos questions... et même bien plus!
    Les optimisations en fonction du niveau y sont détaillées.
    Et bonus, je suis tombé là-dessus:
    Code:
    gcc -Q -O2 --help=optimizers
    certains adhèrent au principe du tiers exclu, d'autres pas, moi c'est aucun des deux.
     


    • Publicité







Sur le même thème :


    301 Moved Permanently

    301 Moved Permanently


    nginx/1.2.1



 

Discussions similaires

  1. signification
    Par matthieu.53 dans le forum Mathématiques du collège et du lycée
    Réponses: 1
    Dernier message: 06/02/2014, 17h36
  2. signification
    Par scanf6 dans le forum Matériel - Hardware
    Réponses: 1
    Dernier message: 09/02/2013, 16h46
  3. signification?
    Par cassetete555 dans le forum Mathématiques du supérieur
    Réponses: 4
    Dernier message: 21/06/2011, 14h04
  4. signification ->
    Par marcus112 dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 09/06/2011, 15h48
  5. signification de R+ et R*
    Par camchimiste dans le forum Mathématiques du collège et du lycée
    Réponses: 5
    Dernier message: 10/10/2009, 15h47