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 vitesse


Sujet :

C

  1. #1
    WaM
    WaM est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10
    Par défaut optimisation vitesse
    bonjour

    Alors voila j'ai codé un petit moteur 3d en rendu software (histoire de piger comment ca marche etc.), c'est pas mal avancé pour ce que je me suis fixé, et maintenant j'aimerais optimiser la chose : en affichant seulement 2 cubes c'est fluide (en 'bridant' à 65fps, je n'utilise que +/- 10% du cpu), mais des que je rajoute une sphere qui a 400 faces, ca rame bien (~25fps à 100% de cpu)
    Vous pouvez voir ce qui se passe, c'est ici : http://aawm.free.fr/misc/cube/

    Mes questions sont donc :
    - j'ai lu des trucs sur l'utilisation de profilers ; cela m'aiderait-il à localiser les fonctions gourmandes en cpu ? si oui, où trouver un tel logiciel ?
    - existe-t-il des optimisations 'générales' 'classiques' en C (mis à part -bien entendu- l'optimisation du point de vue des algos utilisés) ?

    Merci

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2003
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 247
    Par défaut
    Un profiler peut effectivement être utile. Je ne connais que AQTime qui est excellent, mais malheureusement payant.

    Sinon, il n'y a pas particulièrement de recette miracle dans l'optimisation ligne à ligne. Il faut surtout laiser faire le compilo. En gros, c'est comme en ASM, il faut essayer de diminuer les accès à la mémoire et de diminuer le nombre de saut (appel de fonction, if, etc.) Mais le compilo s'en charge principalement à ta place.

    Cependant, en rendu software, tu n'aura jamais de bons framerates.

  3. #3
    Membre Expert

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Par défaut
    Salut

    existe-t-il des optimisations 'générales' 'classiques' en C
    En C, pas vraiement, mais plus généralement, optimiser du code c'est :
    1. Utiliser des algorithmes de complexité inférieure ;
    2. Optimiser le code ;
    3. Utiliser un langage de plus bas niveau.


    La première étape ne peut pas être automatisée. C'est elle qui donne les meilleurs résultats. Un code pas du tout optimisé est à préférer à un code optimisé mais dont l'algorithme est plus complexe.

    La seconde étape est avec les micros actuels quasement inmpossible à réaliser à la main. C'est le compilateur qui s'en charge, mais tous les compilateurs ne sont pas égaux à cette tâche. Les compilateurs Intel s'en sortent généralement pas trop mal (surprenant hein ?) et Borland qui a pas mal d'expérience dans ce domaine.

    Enfin, le dernier recours est le passage a un langage de plus bas niveau... Bon, en C on ne peux plus descendre tout en restant dans du "haut niveau", c'est surtout valable pour du Java par exemple.

  4. #4
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par Smortex
    En C, pas vraiement, mais plus généralement, optimiser du code c'est :
    • Optimiser le code ;
    C'est vrai que c'est pas mal quand meme.

  5. #5
    Membre Expert

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Par défaut
    Citation Envoyé par Skyrunner
    Citation Envoyé par Smortex
    En C, pas vraiement, mais plus généralement, optimiser du code c'est :
    • Optimiser le code ;
    C'est vrai que c'est pas mal quand meme.
    Humm ... J'ai besoin de vacances moi ...

    Je voulais dire, plus "concrètement", mettre en ouevre différentes techniques de modification du code permettant d'avoir des amĺiorrations telles que :
    • Meuilleurs séquencement inconditionnel des instructions (pas de sauts -> plus d'effet pipeline)
    • Modification des bornes et pas de boucles (Combien de probleme sur un autre forum avec des question du genre "pourquoi mes boucles tournent a l'envers ?")
    • etc....


    Donc voila, je voulais dire "modification du code".... Merci !

  6. #6
    WaM
    WaM est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10
    Par défaut
    ok merci les gars, je vais jeter un oeil au profiler si possible
    ...et je vais repenser à mes algos :d

  7. #7
    WaM
    WaM est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10
    Par défaut
    je reposte juste pour dire que c'est bon
    la solution, pour les éventuels suivants qui auront le même problème :
    je passais un objet 3d assez gros (10kio je dirais) en argument à mes fonctions...plusieurs fois pour chaque frame...
    Maintenant je passe un pointeur sur cet objet, et le fps a été multiplié par 10 ! (~230 fps)
    Voila, une erreur de débutant résolue !

  8. #8
    Membre Expert

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Par défaut
    Et oui ... les paramètres étant passés par valeur, une copie est effectuée à chaque appel. Donc tu transforme implicitement la copie d'une zone mémoire de la taille de ton objet a un nombre dont la taille est plus réduite (par exemple 4 octets si ta machine a des pointeurs sur 32bits).

    Bonne continuation !

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

Discussions similaires

  1. Optimisation Vitesse d'Exécution Calcul matriciel
    Par olivier21c dans le forum Langage
    Réponses: 33
    Dernier message: 02/09/2011, 11h46
  2. Optimisation & Vitesse d'execution ?
    Par MaXOhBalle dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 16/09/2009, 09h44
  3. optimiser vitesse application
    Par petitours dans le forum Access
    Réponses: 3
    Dernier message: 03/04/2008, 15h25
  4. Réponses: 5
    Dernier message: 20/11/2007, 08h48
  5. Optimisation vitesse pure
    Par Kujara dans le forum C++
    Réponses: 44
    Dernier message: 15/10/2007, 14h47

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