Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [SFML 2.0] Problèmes de performances  (Lu 9320 fois)

0 Membres et 3 Invités sur ce sujet

Spirou003

  • Newbie
  • *
  • Messages: 17
    • Voir le profil
    • E-mail
[SFML 2.0] Problèmes de performances
« le: Août 30, 2012, 09:47:17 pm »
Bonjour,

Ca fait un petit bout de temps maintenant que je programme avec SFML (dont je suis comblé  :) ) et il y a peu de temps j'ai décidé de passer à la version 2.0. Jusque là, tout va bien, je ne remarque aucun problème vraiment ennuyeux, jusqu'à l'execution d'un code minimal pour tester SFML 2. Là, j'ai quelques problèmes qui se présentent:
 
  • Le premier est lié au CPU: un programme très basique de test (une fenêtre vide) a une consommation CPU plus forte en SFML 2 qu'un en SFML 1.6 contenant deux fenêtres et plusieurs composants plus lourds
  • Quand je regarde la consommation mémoire du programme, elle ne cesse d'augmenter
  • J'ai remarqué que lorsque ma fenêtre sfml récupère le focus (au lancement ou quand je lui clique dessus), ma barre des tâches se bloque pendant quelques secondes (et si je clique pendant le blocage, le clic s'effectue en retard)
  • J'ai aussi un problème marrant, mais intriguant: j'ai testé la synchro. verticale tantôt, en mode débug le CPU était tout beau à 2, mais en release il montait à 14 quand je bougeais la souris. J'ai donc mis ma carte graphique à jour (puisque c'est souvent une cause de problèmes, à ce que j'ai pu comprendre) et là la situation s'est inversée: en mode debug, le CPU explose à 25 non-stop (le max quoi (chez moi)), tandis qu'en release j'ai plus qu'un petit 2
J'ai fait des recherches pour trouver d'où pourraient venir ces bugs, mais je n'ai rien trouvé (excepté un topic qui parlait du blocage de la barre des tâches, mais je l'ai trouvé avant de passer à la version 2 et si je me souviens bien, aucune solution n'avait été trouvée). Aussi, je précise que je n'ai jamais eu de problème de ce genre avec la version 1.6

Et voilà mon code source de test (celui utilisé pour la 2.0):
#include <SFML/Graphics.hpp>
using namespace sf;

int main()
{
    RenderWindow window(VideoMode(800, 600, 32), "SFML Graphics");
    Event event;

    window.setVerticalSyncEnabled(true);

    while (window.isOpen())
    {
        while (window.pollEvent(event))
        {
            if (event.type == Event::Closed)
            {
                window.close();
            }
        }
        window.clear(Color(128,128,128,255));
        window.display();
    }

    return 0;
}


En ce qui concerne mon environnement de travail, je suis sous Windows 7, carte graphique NVidia GeForce 330 GT et j'utilise Code::Blocks avec le compilateur mingw (que j'ai mis à jour récemment) (il se trouvait sur le blog de Lynix, que j'ai trouvé dans le tuto de la 1.6 sur SFML et Code::Blocks (ou alors je l'ai pris direct sur le tuto?... j'sais plus), d'ailleurs j'en profite pour signaler que le lien ne marche plus)


Voilà, merci d'avance!

[Édit]: changement d'icone du sujet

[Édit 2]: ajout des fichiers .txt dont je parle en page 2

[attachment deleted by admin]
« Modifié: Septembre 04, 2012, 09:20:57 pm par Spirou003 »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0] Problèmes de performances
« Réponse #1 le: Août 30, 2012, 11:52:00 pm »
Citer
Le premier est lié au CPU: un programme très basique de test (une fenêtre vide) a une consommation CPU plus forte en SFML 2 qu'un en SFML 1.6 contenant deux fenêtres et plusieurs composants plus lourds
Avec ou sans synchro verticale ? Quelle est / était la consommation CPU exacte ?

Citer
Quand je regarde la consommation mémoire du programme, elle ne cesse d'augmenter
Même après avoir mis à jour tes drivers graphiques ? Elle ne cesse vraiment jamais, tu as attendu au moins une minute ? Et même question, avec ou sans synchro verticale ?

Citer
J'ai remarqué que lorsque ma fenêtre sfml récupère le focus (au lancement ou quand je lui clique dessus), ma barre des tâches se bloque pendant quelques secondes (et si je clique pendant le blocage, le clic s'effectue en retard)
Toujours pas de solution (et pas reproductible chez moi), en effet.

Citer
J'ai aussi un problème marrant, mais intriguant: j'ai testé la synchro. verticale tantôt, en mode débug le CPU était tout beau à 2, mais en release il montait à 14 quand je bougeais la souris. J'ai donc mis ma carte graphique à jour (puisque c'est souvent une cause de problèmes, à ce que j'ai pu comprendre) et là la situation s'est inversée: en mode debug, le CPU explose à 25 non-stop (le max quoi (chez moi)), tandis qu'en release j'ai plus qu'un petit 2
Donc quel est le problème finalement ?
Laurent Gomila - SFML developer

Spirou003

  • Newbie
  • *
  • Messages: 17
    • Voir le profil
    • E-mail
Re : [SFML 2.0] Problèmes de performances
« Réponse #2 le: Août 31, 2012, 08:31:32 am »
Bonjour,

Merci d'avoir répondu aussi rapidement  :)

Citer
Même après avoir mis à jour tes drivers graphiques ? Elle ne cesse vraiment jamais, tu as attendu au moins une minute ? Et même question, avec ou sans synchro verticale ?

Je viens de faire le test, en fait elle grimpe fort au début, puis après environ une minute ça "ralenti la cadence" et ça finit par se stabiliser après un moment (mais je saurais pas dire combien, j'ai laissé le programme ouvert pendant que je jouais, puis quand j'ai eu fini j'ai pu constater que ça ne bougeait plus. Mais sûr et certain moins de 30 minutes)

Citer
Donc quel est le problème finalement ?
Quand je compile en debug, le programme occupe tout le CPU alors que la sync. vert. fonctionne bien (l'affichage prend ~16 ms)

Citer
Avec ou sans synchro verticale ? Quelle est / était la consommation CPU exacte ?
J'ai refait des tests rapides avec le moniteur de ressources (hier c'était le gestionnaire des tâches) et les résultats me paraîssent un peu plus cohérents (compilés en release):
  • le programme en 1.6 (deux fenêtres etc) tourne à 2.5 en moyenne (mais le gestionnaire des tâches indiquait un CPU oscillant entre 1 et 2, parfois 3)
  • celui en 2.0 tout vide tourne à 1.2 en moyenne (mais le gestionnaire des tâches indiquait toujours un CPU >= 2)
Je crois que je ferai plus confiance au gestionnaire des tâches quand il s'agit de CPU  ;D (enfin plus au chiffre près car j'ai re-testé le débug en SFML 2 et là ça reste ~25)

Donc au final il ne reste que le problème de la barre des tâches (mais comme tu ne peux rien y faire, je vais m'en accomoder pour le moment et quand j'aurai le courage j'essaierai de voir ce qui change entre les sources de la 1.6 et de la 2.0 (à condition d'y comprendre quelque chose... ^^')) et celui du CPU en débug qui se bloque à 25

Lo-X

  • Hero Member
  • *****
  • Messages: 618
    • Voir le profil
    • My personal website, with CV, portfolio and projects
Re : [SFML 2.0] Problèmes de performances
« Réponse #3 le: Août 31, 2012, 10:03:49 am »
Il est normal que le processus demande plus de ressources en debug (d'autant plus si tu fais des cout, qui sont très très gourmands). Seules les performances en release comptent.

Spirou003

  • Newbie
  • *
  • Messages: 17
    • Voir le profil
    • E-mail
Re : [SFML 2.0] Problèmes de performances
« Réponse #4 le: Août 31, 2012, 10:48:31 am »
Sauf que là, je pense que c'est un peu démesuré d'avoir un CPU maximum pour le code que j'ai mis dans mon premier post (qui ne fait aucun affichage) juste parce que c'est compilé en débug.

Sinon, je suis parfaitement d'accord avec toi que le plus important, c'est le release en ce qui concerne les performances, mais pour la phase de développement c'est toujours mieux d'avoir un débug opérationnel  :P

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0] Problèmes de performances
« Réponse #5 le: Août 31, 2012, 10:54:37 am »
Si tu enlèves la synchro verticale, ça tourne à quel framerate en debug ? Si on est largement au-dessus de 60 FPS, alors je suis d'accord, il y a un problème puisque le CPU est censé passer la plupart de son temps à dormir.

Essaye aussi avec window.setFramerateLimit(60) au lieu de la synchro verticale.
Laurent Gomila - SFML developer

Spirou003

  • Newbie
  • *
  • Messages: 17
    • Voir le profil
    • E-mail
Re : [SFML 2.0] Problèmes de performances
« Réponse #6 le: Août 31, 2012, 03:06:10 pm »
Sans la synchro verticale, ça monte à plus de 3.000 fps
Et avec le setFramerateLimit(60), je suis à environ 66 fps et le CPU bloque à zéro!  :o

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0] Problèmes de performances
« Réponse #7 le: Août 31, 2012, 03:15:43 pm »
Alors c'est sans doute un problème de driver graphique (c'est lui qui gère la synchro verticale).
Laurent Gomila - SFML developer

Spirou003

  • Newbie
  • *
  • Messages: 17
    • Voir le profil
    • E-mail
Re : [SFML 2.0] Problèmes de performances
« Réponse #8 le: Août 31, 2012, 03:25:54 pm »
Bah ce qui est bizarre, c'est que ça se passe mal qu'en mode débug. Côté driver graphique, j'ai fait la mise à jour hier avant de poster (enfin si pilote et driver c'est bien le même)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0] Problèmes de performances
« Réponse #9 le: Août 31, 2012, 03:29:15 pm »
Difficile de savoir ce qui se passe, à moins d'utiliser un profiler et de regarder quelle(s) fonction(s) bouffent tout le CPU.

Citer
enfin si pilote et driver c'est bien le même
Oui oui.
Laurent Gomila - SFML developer

Spirou003

  • Newbie
  • *
  • Messages: 17
    • Voir le profil
    • E-mail
Re : [SFML 2.0] Problèmes de performances
« Réponse #10 le: Août 31, 2012, 03:44:45 pm »
D'accord, mais je n'ai jamais utilisé de tel outil par contre...  :-\

Édit: je viens d'utiliser un profiler (Sleepy) et voilà le résultat
« Modifié: Septembre 01, 2012, 05:14:34 pm par Spirou003 »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0] Problèmes de performances
« Réponse #11 le: Septembre 03, 2012, 01:38:19 am »
Donc ça c'est avec la synchro verticale c'est ça ? Et on peut voir la même chose mais sans synchro verticale, histoire de comparer ?
Laurent Gomila - SFML developer

Spirou003

  • Newbie
  • *
  • Messages: 17
    • Voir le profil
    • E-mail
Re : [SFML 2.0] Problèmes de performances
« Réponse #12 le: Septembre 04, 2012, 05:05:05 pm »
N'étant plus sûr de ce que j'ai fait dans le screen (tsss, pas sérieux) j'ai refait le tout

Plutôt qu'un screen j'ai enregistré un fichier pour chaque profilage, ça prend moins de temps à faire (l'autre fois j'avais du le faire en plusieurs fois le screen) et ça contient plus d'informations (c'est-à-dire tout  ;D )

[attachment deleted by admin]

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0] Problèmes de performances
« Réponse #13 le: Septembre 04, 2012, 05:18:47 pm »
Et comment je les lis si j'ai pas envie d'installer Sleepy ? :P
Laurent Gomila - SFML developer

Spirou003

  • Newbie
  • *
  • Messages: 17
    • Voir le profil
    • E-mail
Re : [SFML 2.0] Problèmes de performances
« Réponse #14 le: Septembre 04, 2012, 05:27:34 pm »
Bah tu les ouvres avec un éditeur hexa et tu décryptes?  ;D

Il te faut juste l'aperçu en gros du truc (pour chaque enregistrement) (comme le premier screen) ou des détails sur certains des appels qui semblent arriver souvent?
Et aussi, quand j'ai fait les profilages, j'ai choisi de profiler les 4 threads du programme en action; est-ce que cela te semble "correct"? Ou juste celui qui prend le CPU est suffisant?

 

anything