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 :

inline ne fonctionne pas ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 399
    Par défaut inline ne fonctionne pas ?
    Bonjour tout le monde.

    J'ai un problème avec l'inline de fonction, j'ai l'impression qu'il ne fonctionne pas correctement. Je dis ca suite a un calcul du fps sur mon code car je voulais tester quelques opti.

    en gros je suis en train de coder un moteur de particule en openGL et j'ai besoin d'initialiser un tableau statique avec des valeurs par défaut a chaque update de mes particules :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    //particle.h
    ...
    static float valuesBuffer[NB_PARAMS];
    ...
     
    //particle.cpp
    ...
    int Particle::update(int timeDelta)
    {
    valuesBuffer[0] = 1;
    valuesBuffer[1] = 0;
    valuesBuffer[2] = 1;
    valuesBuffer[3] = 1;
    valuesBuffer[4] = 1;
    valuesBuffer[5] = 1;
    valuesBuffer[6] = 0;
     
    // traitement...
     
    }
    ...
    Avec ce code et 100000 particules (donc 100000 updates par frame) j'obtiens environ 50fps.

    Maintenant si je fais ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    //particle.h
    ...
    static float valuesBuffer[NB_PARAMS];
     
    inline static void initValuesBuffer()
    {
    valuesBuffer[0] = 1;
    valuesBuffer[1] = 0;
    valuesBuffer[2] = 1;
    valuesBuffer[3] = 1;
    valuesBuffer[4] = 1;
    valuesBuffer[5] = 1;
    valuesBuffer[6] = 0;
    }
    ...
     
    //particle.cpp
    ...
    int Particle::update(int timeDelta)
    {
    initValuesBuffer();
     
    // traitement...
     
    }
    ...
    J'obtiens environ 43fps. donc la je comprend pas ! Je pensais que ces 2 bouts de code une fois compilé était equivalent ce qui n'est manifestement pas le cas. Quelqu un pourrait m'expliquer ?

    C'est assez problématique parceque je ne veux pas que les valeurs par défaut soient en dur dans la méthode update.

    Au début je faisai une copie d'un tableau DEFAULT_VALUES dans valuesBuffer et j'arrivai a 43 environ également.

    J'ai testé pleins de trucs différents et j'ai jamais reussi a atteindre plus de 43/44 fps.

    Quelqu un a une idée pour combiner performance et code bien structuré ? Je pensais que l'inline marcherait et je suis assez surpris du resultat.

    Merci
    SPARK
    Moteur de particule C++ opensource avec modules de rendu OpenGL, Irrlicht et SFML

  2. #2
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Parfois, le compilateur peut décider de ne pas inliner une fonction que tu as demandé d'inliner.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 399
    Par défaut
    Exact !

    j'ai été voir dans les options du compilo (j'utilise visual c++ 2008 express) et l'inline de fonction été réglé par défaut, je l'ai mis a /Ob1 et maintenant j'obtiens 214fps avec les 2 méthodes

    Merci bien
    SPARK
    Moteur de particule C++ opensource avec modules de rendu OpenGL, Irrlicht et SFML

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Tu compiles bien en Release, au moins?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Si c'est update que tu tiens à optimiser, vois aussi ce que tu penses faire pour utiliser du SIMD.

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

Discussions similaires

  1. ma propriété display:inline ne fonctionne pas
    Par Ekimasu dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 15/11/2007, 10h41
  2. Réponses: 6
    Dernier message: 27/01/2004, 11h14
  3. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04
  4. Un Hint sur un PopupMenu ne fonctionne pas !!??
    Par momox dans le forum C++Builder
    Réponses: 6
    Dernier message: 26/05/2003, 16h48
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

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