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 et types


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 91
    Points : 62
    Points
    62
    Par défaut Optimisation et types
    Bonjour,

    Est il utile pour optimiser les performance d'une application de stipuler des unsigned int au lieu d'int ?

    Je voudrait optimiser du code C, auriez vous des conseils ?

    par exemple j'ai un tableau d'int qui pourrait être unsigned, mais cela pourrait il influencer les performances ?

    J'ai déjà cherché des topics intéressant parce que ca doit être redondant comme sujet mais je n'ai rien trouvé sur une optimisation par les types ?

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par anat1212 Voir le message
    Bonjour,

    Est il utile pour optimiser les performance d'une application de stipuler des unsigned int au lieu d'int ?

    Je voudrait optimiser du code C, auriez vous des conseils ?

    par exemple j'ai un tableau d'int qui pourrait être unsigned, mais cela pourrait il influencer les performances ?

    J'ai déjà cherché des topics intéressant parce que ca doit être redondant comme sujet mais je n'ai rien trouvé sur une optimisation par les types ?
    Strictement aucune influence...


    Un conseil pour optimiser du code C ??


    • Connaître parfaitement le C
    • Connaître comment marche l'exécution d'un programme
    • Connaître l'achitecture sur laquelle on tourne


    Eventuellement faire appel à un consultant...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par anat1212 Voir le message
    Est il utile pour optimiser les performance d'une application de stipuler des unsigned int au lieu d'int ?
    A part si tu joues sans arrêt sur des opérations influençant le signe (notamment décalages / rotations binaires), non. Et franchement, si tu en es à ce stade, autant passer à l'assembleur qui est nettement plus adapté à ce genre de code. De toutes façons, au mieux, tu gagneras un ou deux cycles CPU pour des dizaines de lignes de code C, donc négligeable.

    Citation Envoyé par anat1212 Voir le message
    Je voudrait optimiser du code C, auriez vous des conseils ?
    Optimiser, OK, mais dans quel sens ?
    • Taille de code ?
    • Vitesse d'exécution ?
    • Consommation mémoire ?
    • Vitesse de compilation ?
    • Taille /nombre des sources ?
    • Maintenabilité ?
    • Évolutivité ?
    • Vitesse de descente d'une version depuis la gestion de configuration ?
    C'est vaste, comme tu le vois... Et dans 90% des cas, une optimisation sur un de ces points va "empirer" un des autres points. Classiquement, l'optimisation en faveur de la taille de code pénalise souvent la vitesse d'exécution et réciproquement.

    Citation Envoyé par anat1212 Voir le message
    J'ai déjà cherché des topics intéressant parce que ca doit être redondant comme sujet mais je n'ai rien trouvé sur une optimisation par les types ?
    Normal, c'est rarement via un bête type de variable que l'on optimise réellement un programme. Ce genre d'optimisation n'a en général lieu que dans le code critique (c'est à dire souvent temps réel, ou très bas niveau), et c'est un domaine peu connu, donc peu discuté.

    Partout ailleurs, les algos sont en général bien plus souvent fautifs côté performances que les optimisations dites "fines" comme celles que tu voudrais faire.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 91
    Points : 62
    Points
    62
    Par défaut
    Merci c'est bien ce que je pensais, la mémoire est notre amie, c'est elle qui fait qu'on fait des applications plus rapide (je parle pas de cache ?¿)

    Je voudrais juste optimiser un max (dans le sens de rapidité de traitement/calcul), j'ai une application en C, donc la seule chose que j'ai a rechercher c'est limiter/optimiser les instructions, merci pour l'info (je ne parle pas d'assembleur), et aux niveau des flag d'optimisation de gcc quand je compile avec par exemple -O3 je seg fault a foison dans un gros benchmark alors que sans je n'ai pas d'erreur...

    Enfaite je ne peux pas mettre le flag -march=core2 parce que il s'agit bien d'une machine avec un C2D mais la version de GCC est une ancienne version et je ne peux pas utiliser de nouvelle version ? Auriez vous une alternative ?

    Toutes ces limitations sont du au faite que je suis dans une école donc je n'ai pas tant de liberté, pourriez vous me conseiller des flags d'optimisation pour une application qui fait beaucoup de passation de mémoire, beaucoup d'affectation, peu de calculs ? (ca parait con)

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    -O2

    -O3 est effectivement relativement souvent très dangereux..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  6. #6
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Je compile en "-O3" sans aucun problème... Par contre, une chose que j'ai constatée à de très nombreuses reprises, c'est que le moindre warning de compilation peut provoquer des drames lorsque les optimisations lourdes sont activées.

    Donc, la démarche :
    • Activer le niveau MAXIMAL de warning ("-Wall -pedantic" est un minimum).
    • Résoudre TOUS les warnings. Je rappelle qu'un cast pour lever un warning, c'est pas une résolution.
    • Compiler en "-O3" : en règle générale, ça passe, sauf erreur flagrante d'algorithme.


    Pour le reste : les trois quarts de l'optimisation viendront de l'algorithme, et non pas des réglages du compilateur. Si ton algo est foireux / lourd / surconsommateur, les réglages du compilateur n'y feront rien.

    Je t'encourage plutôt à poster ton code pour que l'on puisse t'aider à vérifier si l'algo est optimal ou pas. Les réglages te feront gagner peut-être 5% à 20% de temps CPU à tout casser entre un réglage "peu optimisé" et un réglage "optimisé à mort", mais rarement plus... Souvent, c'est quasiment négligeable sans avoir un benchmark réellement objectif.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Mac LAK Voir le message
    Je compile en "-O3" sans aucun problème...
    ..
    • Compiler en "-O3" : en règle générale, ça passe, sauf erreur flagrante d'algorithme.

    ..
    ça, ça dépend beaucoup du style de code..

    Compiler en -O3 un encodeur ou décodeur mpeg ne marchera pas du tout..
    Même chose pour un logiciel complexe en COO avec des "classes" avec un gros niveau hiérarchique et "parent void*" etc ..


    -O2 passe partout dans pratiquement tous les cas de figure.



    M'enfin, c'est juste mon expérience...



    Sinon je suis d'accord, il faudrait d'abod voir le code et l'algorithme...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  8. #8
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    ça, ça dépend beaucoup du style de code..
    Code bas niveau la plupart du temps, avec opérations bit à bit, (dé)sérialisations en pagaille, structures de pointeurs de fonction, bref de tout. Mais, je le répète, ça explose direct au moindre warning et/ou si je ne compile pas avec la totalité des warnings activés (et, bien sûr, aucun warning visible à la compilation !! ).

    Et je ne t'apprends rien en te disant que lever certains warnings proprement peut prendre pas mal de temps...


    EDIT : Paradoxalement, et en hors-sujet, c'est nettement moins sensible en C++. On peut avoir du -O3 correct avec quelques warnings restants sans aller au casse-pipe direct, j'en ai souvent qui trainent sur des librairies tierces... Mais en C, ça ne pardonne pas.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  9. #9
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 943
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 943
    Points : 5 655
    Points
    5 655
    Par défaut
    Hoe,
    Citation Envoyé par anat1212 Voir le message
    quand je compile avec par exemple -O3 je seg fault a foison dans un gros benchmark alors que sans je n'ai pas d'erreur...
    Bref : j'ai pas fait d'erreur, mais ça marche pas !

    Ne pas confondre les erreurs/warnings du compilateur et bug.
    Si les cons volaient, il ferait nuit à midi.

Discussions similaires

  1. Optimisation sur les types.
    Par lfmarante dans le forum C++
    Réponses: 4
    Dernier message: 02/02/2008, 17h15
  2. Full optimisation type de données
    Par zakaria.chafi dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 21/01/2008, 11h02
  3. Optimisation d'un champ de type Date
    Par nicoaix dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 13/11/2007, 17h37
  4. [Optimisation] Quel type de variable manipuler ?
    Par guidav dans le forum Langage
    Réponses: 2
    Dernier message: 09/01/2007, 11h29

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