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

SDL Discussion :

Probleme utilisation du cpu


Sujet :

SDL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 48
    Points
    48
    Par défaut Probleme utilisation du cpu
    J'ai un petit souci bien embetant. J'ai fait un programme sous linux qui permet de controler un palet, et de se cogner a tous les bords de la fenetre. Sous linux, pas de probleme.
    Par contre sous windows, mon cpu devient fous. Le programme consomme 60% du cpu de mon portable(quand meme un amdSempron 3000+) alors que je ne demande que 60 image secondes.
    Par contre, des que je reduit ma fenetre, l'utilisation retombe a 2%.

    Du coup, je fait un autre programme test, ou je lui demande d'afficher seulement une fenettre avec un fonc, mais toujours a 60 image secondes.
    Resultat : toujours 60% du cpu d'utilisé !!!
    Et a 40 images secondes, j'ai 40% du cpu d'utilisé!!!

    Je met le code source en fichier joint et je met ici la boucle principale:
    while ( game_running )
    {
    SDL_Flip(ecran);
    game_running=update_event();
    SDL_Delay(time_left()); /*peut etre c'est elle qui ne va pas*/
    next_time += TICK_INTERVAL;
    }

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    pour savoir si c'est la fonction timeleft() qui ne marche pas, remplace là par une constane: timeleft(25);
    (25ms, tu devrais avoir a peu près 40 fps sauf si update_event() prend bcp de temps.)

    Si avec cette modification ton programme s'exécute aussi rapidement sous win que sous linux, ça veut dire que c'est timeleft() qui ne marche pas bien sous windows.
    Sinon, c'est autre part que se situe le problème.


    edit: en regardant ton prog, j'ai rien trouvé qui clochait, mais j'ai peut être une piste: peut être que linux fait tourner ton cpu à fond, tandis que windows regule sa vitesse... d'où un plus grand pourcentage d'utilisation sous windows
    Un conseil, laisse tomber linux et dev pour un vrai OS

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    J'ai remplacer time_left par une constante, mais j'ai toujours le meme probleme. snif !

    Ce que j'ai fait aussi, c'est que j'ai mit un compteur,
    pour savoir combien de fois le programme dépasse le temps imparti (1000ms / fps) pour faire ses calculs
    et j'ai aussi mis un compteur pour savoir combien de fois il est en avance auquel cas il doit attendre un peu.

    Voila le genre de truc que j'ai sous dows a 60 fps:
    pas assez de temps : 135 avec en moyenne un depassement de 37.451852ms
    attendre : 995 avec comme moyenne ; 2.207035ms a attendre pour une attente maxi de 16.666667

    Je précise que mon cpu tourne bien a 1,8 ghz !!!


    J'ai fait la meme chose sous nunux, mais la pas de probleme :
    pas assez de temps : 0 ou des fois 1.
    attendre : toutes les autres fois.

    Et ce meme quand je descent le cpu a 800 mhz !!!


    Du coup j'ai tester un peu toutes les procedures pour savoir laquel pose probleme.
    Et j'ai trouver c'est SDL_Flip(ecran);

    Parce que ma boucle principale ainsi réécrite utilise 2% du cpu !!!
    while ( game_running )
    {
    //SDL_Flip(ecran);
    game_running=update_event();
    SDL_Delay(time_left());
    next_time += TICK_INTERVAL;
    }

    Mais franchement, je ne voit pas comment me passer de SDL_Flip(ecran); !!!
    help !!

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    Tu peux pas te passer de SDL_Flip en utilisant SDL_UpdateRect, mais pas tous les jeux peuvent en bénéficier.
    C'est quand même assez bizarre que ça prenne au temps de temps. Peut être que ta surface "ecran" ou ton écran ne sont pas initialisées de façon optimale (je crois qu'il faut que la surface soit lockée et que la fenêtre utilise le double buffering HW), mais ça n'explique pas la différence entre windows et linux...
    Peut être que l'implémentation de SDL_Flip est différente entre les 2 OS, peut être que le nombre de bpp sous windows est != que sous linux, etc...

    Bonne chance pour régler ce problème

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par Jyaif
    Bonne chance pour régler ce problème
    merci!

    Par contre, je voudrais savoir si vous avez le meme probleme dans vos jeux.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    dans les menus d'un de mes jeu, avec une fenêtre de 800x600 avec un SDL_Delay(15), j'ai 10% du cpu d'utilisé.
    Essaye d'initialiser ecran avec SDL_HWSURFACE | SDL_DOUBLEBUF (moi c'est ce que je fais)

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par Jyaif
    dans les menus d'un de mes jeu, avec une fenêtre de 800x600 avec un SDL_Delay(15), j'ai 10% du cpu d'utilisé.
    Ouai mais ca me convient pas j'suis désolé. C'est quand meme pas possible d'avoir un fonction qui bouffe autant alors qu'elle fait rien.

    Franchement, si y'as pas d'autre solution, je voit pas l'interet de faire un jeu avec la sdl ...

    Tous le monde a ce problème alors?

  8. #8
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par jkalzsmu
    Ouai mais ca me convient pas j'suis désolé. C'est quand meme pas possible d'avoir un fonction qui bouffe autant alors qu'elle fait rien.

    Franchement, si y'as pas d'autre solution, je voit pas l'interet de faire un jeu avec la sdl ...

    Tous le monde a ce problème alors?
    Non, sous mon linux Ubuntu, ton programme test n'utilise que 0.3% du CPU...

    Je vais tester sous Windows ce soir, je vous tiens au courant...

    Jc

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par fearyourself
    Non, sous mon linux Ubuntu, ton programme test n'utilise que 0.3% du CPU...Jc
    Oui j'ai aussi ubuntu, et il y a aucun probleme.C'est sous la daube que ca prend trop de ressource.

    Citation Envoyé par fearyourself
    Je vais tester sous Windows ce soir, je vous tiens au courant...
    Jc
    Merci c'est sympa !

  10. #10
    Membre confirmé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Points : 546
    Points
    546
    Par défaut
    Je suis sous XP, sur un portable au bureau : entre 5 et 8% de cpu utilisé. La perf du portable (le graphique vert) reste sur 4%, au lieu des 2% quand je fais rien...

    PS: pour un prog de test, ta fenetre est bien trop large pour mon portable, t'aurais pu diminuer (rien pour recompiler ici). Et impossible de quitter facilement (Esc ou q)

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Ok alors peut etre que le probleme est avec media center. Je voit que ca.

  12. #12
    Membre confirmé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Points : 546
    Points
    546
    Par défaut
    Ici, chez moi, ca bouffe un peu plus et je suis sur W2K...

  13. #13
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Sur mon XP, ton programme test tourne entre 4 et 20%. Pas les 60% que tu donnes.

    Jc

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Merci bien de toutes ses test chez vous.

    Moi j'ai mon cpu utilisé a 60%, mais c'est peut etre parce qu'il est moins puissant que les votres et en plus j'ai juste un chipset graphique intégré tout moisi.
    Mais bon, mon portable peut largement faire tourner du 2d facilement quand meme. Quand je lance le flipper de dows, ca me bouffe que 3% du cpu. Ca c une valeur normale.

    En tout cas, meme 20% je trouve ca assez enorme. Surtout au vu de l'efficacité sous linux. Il y avait civilization qui été fat avec la sdl, je voit pas comment faire un jeu complet avec deja 70% d'un cpu relativement puissant est utilisé pour l affichage...

  15. #15
    Membre confirmé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Points : 546
    Points
    546
    Par défaut
    Citation Envoyé par jkalzsmu
    je voit pas comment faire un jeu complet avec deja 70% d'un cpu relativement puissant est utilisé pour l affichage...
    Attention, les 60% bouffés le sont à cause de la boucle des évènements. Si tu fais des choses à partir de cette boucle, tu passeras moins dedans, et ton cpu sera bouffé par le reste de ton programme. Ca revient au même. Dès qu'une action est entreprise par ton soft, elle bouffe 100% du proc pendant un temps très court (et suivant ce que windows lui donne comme temps d'utilisation) ce qui ramène à 4 ou 10 ou 20% d'utilisation du cpu.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par Mindiell
    Attention, les 60% bouffés le sont à cause de la boucle des évènements.
    Non parce que meme quand je fait une boucle avec seulement un sdl_flip et un sdl_delay, ca me prend 60% du cpu a 60 images secondes!!!

    Donc c vraiment sdl_flip qui prend toute la puissance

  17. #17
    Membre confirmé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Points : 546
    Points
    546
    Par défaut
    ou SDL_Delay, non ?

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    non non, c'est bien dans SDL_Flip que le prog passe tout son temps

    Je viens de penser à un autre truc. Est-ce qu'en fullscreen ça utilise autant ton cpu ? Je sais pas comment ça se passe avec SDL, mais en Java avec l'api standart, le double buffering en fullscreen est beaucoup plus rapide qu'en mode fenêtré (l'api a juste à changer le pointeur de la mémoire video vers le buffer, il n'y a rien à copier...).

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 26
    Points : 29
    Points
    29
    Par défaut
    En fait tout ça dépend beaucoup de ta carte graphique et de ses drivers.
    Parfois les échanges sont plus rapide quand tout reste dans la mémoire vidéo, parfois c'est mieux de s'installer en RAM centrale...
    Apparament, ce qui se passe c'est que dans ton windows le SDL_FLIP n'est pas géré par la carte graphique mais par le CPU, qui fait tout "à la main". Ça n'explique pas qu'on arrive à un taux aussi énorme que 60%, cela dit. Essaie de trouver les paramètres de réglage du mode vidéo qui vont bien, et en particulier vérifie que SDL passe par DirectX et pas par le GDI pour l'affichage, le premier étant en général beaucoup mieux accéléré.
    Enfin, je ne suis pas sur que ce temps soit effectivement utilisé, et il n'est pas certain que l'utilisation CPU continue d'augmenter quand tu ajouteras des choses à ton jeu.
    Un SDL_Flip est quand même une opération assez intensive puisqu'il s'agit d'échanger des écrans entiers (donc beaucoup d'octets), possiblement entre la mémoire vidéo et la ram centrale, ce qui signifie beaucoup d'accès à la mémoire et au bus système qui peuvent mettre le CPU en attante de la mémoire ou bien de la carte graphique... et s'il n'y a pas d'interruption ou de DMA prévu et utilisé, le CPU est obligé de rester là à attendre au lieu de faire autre chose...

  20. #20
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 386
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 386
    Points : 20 476
    Points
    20 476
    Par défaut
    Citation Envoyé par PulkoMandy
    Parfois les échanges sont plus rapide quand tout reste dans la mémoire vidéo, parfois c'est mieux de s'installer en RAM centrale...
    Pas possible avec SDL ; avec SDL pour gérer les graphismes on passe par des SDL_surfaces qui ne sont ni plus ni moins que l'espace de mémoire de la carte graphique.
    Sous Windows c'est juste une surcouche qui gére des surfaces Direct Draw

    Citation Envoyé par PulkoMandy
    Un SDL_Flip est quand même une opération assez intensive puisqu'il s'agit d'échanger des écrans entiers (donc beaucoup d'octets), possiblement entre la mémoire vidéo et la ram centrale, ce qui signifie beaucoup d'accès à la mémoire et au bus système qui peuvent mettre le CPU en attante de la mémoire ou bien de la carte graphique... et s'il n'y a pas d'interruption ou de DMA prévu et utilisé, le CPU est obligé de rester là à attendre au lieu de faire autre chose...
    Sous Windows , j'en doute fortement il n'y a rien de DMA ni d'échanges RAM et VRAM ou peu.
    SDL_Flip c'est IDirectDraw::Flip bricolé pour que cela soit portable prendre les sources de SDL...
    IDirectDraw::Flip ne joue que sur la carte graphique exclusivement..
    sous unix je ne sais pas comment SDL gére tout cela

Discussions similaires

  1. probleme utilisation de iis
    Par seb833434 dans le forum IIS
    Réponses: 2
    Dernier message: 15/06/2006, 17h19
  2. Probleme utilisation d'Objets managé grace a gcroot
    Par pepefourras dans le forum MFC
    Réponses: 4
    Dernier message: 16/05/2006, 00h26
  3. [Eclipse 3.1 et WTP 0.7M5] Utilisation du CPU à 100%
    Par stanislas dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 09/07/2005, 23h21
  4. [Windows 2003 Server] Problème d'utilisation du CPU
    Par Quentin dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 11/04/2005, 11h26
  5. Trouver le % d'utilisation du CPU
    Par le mage tophinus dans le forum Assembleur
    Réponses: 20
    Dernier message: 21/04/2003, 19h43

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