100% CPU Auslastung beim "Nichtstun"?



  • Du hast recht. Nieder mit dem Idle Process!

    Bye, TGGC \-/



  • Aber wieso benötigt das Programm denn 100% CPU Leistung? Ist das normal bei 3D Anwendungen? Das kann ich mir irgendwie nicht vorstellen...

    Ist denn mein MainLoop so ok, oder sollte ich da was dran ändern, dass das Ganze effizienter läuft?

    Danke!



  • Abracadabra schrieb:

    Aber wieso benötigt das Programm denn 100% CPU Leistung? Ist das normal bei 3D Anwendungen? Das kann ich mir irgendwie nicht vorstellen...

    Ist denn mein MainLoop so ok, oder sollte ich da was dran ändern, dass das Ganze effizienter läuft?

    Danke!

    Ne, das ist ok so. Das ist bei jeder Anwendung so, wenn Du nen Loop ohne Unterbrechung machst. Der Comp hat somit ja staendig was zu tun, warum sollte da die Auslastung <100% sein?

    Es ist Effizient. Es geht ja darum, moeglichst viele FPS zu erreichen -> hohe CPU-Auslastung.



  • er geht die schleife ja sooft wie möglich durch, ist er also mit dem einen durchgang fertig, kommt sofort der nächste,wieso sollte die cpu dann nicht voll ausgelastet sein?



  • durito schrieb:

    Es ist Effizient. Es geht ja darum, moeglichst viele FPS zu erreichen -> hohe CPU-Auslastung.

    Nee, es geht aber auch noch darum auf User-Eingaben zu reagieren.

    Wenn du dich bezüglich anderer Threads sportlich verhalten willst, füge ein Sleep(1) in die Schleife ein - Dann geht auch die 100% CPU-Last ganz schnell weg, und trotzdem renderst du so schnell wie es die Systemauslastung zulässt.

    PS:
    Ich bin kein Grafik/Game-Programmierer,
    aber sollte es nicht zumindest einen Mechanismus geben der sicherstellt das die FPS nicht höher als die Bildschirmwiederholungsrate (oder eine vernünftige physiologische Konstante, sagen wir 50 FPS) ist?
    Denn sonst wäre das ja nun wirklich verschwendete Rechenzeit.



  • Warum bitte soll während einem Spiel das im Vollbild und Vordergrund läuft, irgendein Programm im Hintergrund ganz schnell reagieren?

    Noch Alles klar?

    Bye, TGGC \-/



  • TGGC schrieb:

    Warum bitte soll während einem Spiel das im Vollbild und Vordergrund läuft, irgendein Programm im Hintergrund ganz schnell reagieren?

    Um Dir sooofort (millisekundengenau) mitzuteilen, wenn neue eMail eingetroffen ist!
    Stell' Dir vor ein Börsenspekulant spielt Dein Spiel!!

    😃



  • TGGC schrieb:

    Warum bitte soll während einem Spiel das im Vollbild und Vordergrund läuft, irgendein Programm im Hintergrund ganz schnell reagieren?

    Hat das Prog selbst denn keine Messagepump in einem separaten Thread oder wird das für gewöhnlich im selben Thread wie das Rendering gemacht?

    TGGC schrieb:

    Noch Alles klar?

    Entschuldige die Unwissenheit.
    Aber es gibt deshalb eigentlich keinen Grund gleich patzig zu werden, selbst wenn hier im Kindergarten-Forum gewöhnlich ein weniger respektvoller Umgangston gepflegt wird als anderswo.



  • scrontch schrieb:

    durito schrieb:

    Es ist Effizient. Es geht ja darum, moeglichst viele FPS zu erreichen -> hohe CPU-Auslastung.

    Nee, es geht aber auch noch darum auf User-Eingaben zu reagieren.

    Naja auf User Eingaben wohl kaum. Da hat TGGC recht... aber grundsätzlich auf andere Systemevents sollten die Programme schon reagieren können.

    scrontch schrieb:

    Wenn du dich bezüglich anderer Threads sportlich verhalten willst, füge ein Sleep(1) in die Schleife ein -

    Es reicht eigentlich ein Sleep(0) um die Zeitscheibe zu unterbrechen und anderen Prozessen d ie Gelegenheit zum Rechnen zu geben (solange diese höhere Priorität besitzen)

    scrontch schrieb:

    Dann geht auch die 100% CPU-Last ganz schnell weg,

    Das wiederum wage ich zu bezweifeln...

    scrontch schrieb:

    Ich bin kein Grafik/Game-Programmierer,
    aber sollte es nicht zumindest einen Mechanismus geben der sicherstellt das die FPS nicht höher als die Bildschirmwiederholungsrate (oder eine vernünftige physiologische Konstante, sagen wir 50 FPS) ist?
    Denn sonst wäre das ja nun wirklich verschwendete Rechenzeit.

    Naja, der Punkt ist der, dass jedes Frame - soviel ich weiss - in einem Game eigentlich ne Art von System tick darstellt bei dem was passiert. (So wars zumindest bei der guten alten HL engine)... Es wird also nicht nur ein Bildchen gemalt sondern auch Objekte rumgeschoben, etc.

    -junix



  • scrontch schrieb:

    TGGC schrieb:

    Noch Alles klar?

    Entschuldige die Unwissenheit.
    Aber es gibt deshalb eigentlich keinen Grund gleich patzig zu werden, selbst wenn hier im Kindergarten-Forum gewöhnlich ein weniger respektvoller Umgangston gepflegt wird als anderswo.

    Aber es gibt deshalb eigentlich keinen Grund gleich zu heulen, weil ich mal darauf hinweise, das man mal etwas nachdenken sollte. Dann wird einem schnell klar, das wenn ein Spiel läuft, es unsinnig ist Rechenzeit abgeben zu wollen. Au

    Bye, TGGC \-/



  • Meistens rennt nen Game doch auch nur mit THREAD_PRIORITY_NORMAL - Andere Programme laufen doch trotzdem weiter - Warum noch nen Sleep() einbauen (bei dem man nichtmal weiss wie lange der Thread dann überhaupt schläft...) ?

    Ich glaube bei opengl + vsync-an lässt SwapBuffers() den Thread schlafen, falls nötig...



  • HI

    Also bei Spielen wirds wohl immer bei den 100% bleiben, weil man will alles aus der Maschine rauslocken um maximale leistung zu nutzten um was nettes zu sehen.

    Will man nur eine Garphik anwendung machen, die auch in einen Fenster (beschleunigt)Grafik ausgibt, kann man es natürlich sanfter lösen, indem man das Scene Rendern und Buffer swap in der WM_PAINT, macht. Somit 'spart' man einiges an leistung. Is für 3d Spiele wohl uninteressant, aber Spiele sind auch nicht das einzige Anwendungsfeld von dx und ogl etc..

    Mfg
    Flow



  • geeky schrieb:

    Meistens rennt nen Game doch auch nur mit THREAD_PRIORITY_NORMAL -

    Jo, würd ich sagen.

    geeky schrieb:

    Andere Programme laufen doch trotzdem weiter - Warum noch nen Sleep() einbauen (bei dem man nichtmal weiss wie lange der Thread dann überhaupt schläft...) ?

    Naja, wie gesagt: ICh hätts eingebaut um die Zeitscheibe zu unterbrechen... War aber mehr son hüftschuss...

    -junix



  • scrontch schrieb:

    PS:
    Ich bin kein Grafik/Game-Programmierer,
    aber sollte es nicht zumindest einen Mechanismus geben der sicherstellt das die FPS nicht höher als die Bildschirmwiederholungsrate (oder eine vernünftige physiologische Konstante, sagen wir 50 FPS) ist?
    Denn sonst wäre das ja nun wirklich verschwendete Rechenzeit.

    Jo, das gibt es schon. Der Befehl zum Buffer swappen (zumindest bei glut oder SDL) synchronisiert mit VSync (d.h. die Ausfuehrung des Befehls wird verzoegert). Kann aber ueber Grafikkartentreiber deaktiviert werden.



  • junix schrieb:

    geeky schrieb:

    Andere Programme laufen doch trotzdem weiter - Warum noch nen Sleep() einbauen (bei dem man nichtmal weiss wie lange der Thread dann überhaupt schläft...) ?

    Naja, wie gesagt: ICh hätts eingebaut um die Zeitscheibe zu unterbrechen... War aber mehr son hüftschuss...

    Naja, das war beim Cooperative Multitasking von Win 3.11 auch nötig. Da mußte jede Anwendung selber sehen, daß sie die CPU wieder anderen zur Verfügung stellt. (Was natürlich bei sauschlecht programmierten Progs direkt zu 'nem Komplett-Lockup des Systems führte)

    Aber bei Preemptive Multitasking wie >= Win 95 und Linux hat sich das OS drum zu kümmern, daß jeder Task mal dran kommt. Da würde ich also nicht zuviel dran schrauben wollen.



  • Naja, wenn ich weiss, dass der nächste Logikschritt erst in 4ms kommt, dann schlaf ich schon mal 2ms und lauf den Rest in einer Schleife ab...
    Man muss ja nicht mit Gewalt die Power verheizen und meinen Akku am Notebook verbrauchen. 🤡

    Und vor allem: Wenn man das Spiel minimiert, wird nichts mehr gerendert, und wenn dann die CPU Auslastung minimiert immer noch bei 100% liegt, dann frage ich mich schon ernsthaft, was der Geiz soll.



  • Optimizer schrieb:

    Naja, wenn ich weiss, dass der nächste Logikschritt erst in 4ms kommt, dann schlaf ich schon mal 2ms und lauf den Rest in einer Schleife ab...
    Man muss ja nicht mit Gewalt die Power verheizen und meinen Akku am Notebook verbrauchen. 🤡

    Und vor allem: Wenn man das Spiel minimiert, wird nichts mehr gerendert, und wenn dann die CPU Auslastung minimiert immer noch bei 100% liegt, dann frage ich mich schon ernsthaft, was der Geiz soll.

    Jo, sicherlich.

    Bei Notebook hast Du recht.

    Und tatsächlich ziehen die meisten (!) kommerziellen Spiele auch minimiert noch 100%, stimmt leider. Oder lassen sich erst gar nicht vernünftig minimieren, ohne daß DX oder GL den Windows-Desktop zukleistert und man ohne Reboot oder Abmelden gar nichts mehr zaubern kann... 🙄

    Generell haben viele kommerzielle Spiele immer noch die gleichen Design-Mängel wie früher, vieles was mich nervt, worauf kein Ar5ch achtet:

    • Seit dem Half-Life Patch XY konnte ich alle 5 Maustasten belegen, das ist in vielen aktuellen Titeln immer noch nicht möglich (und ich hab' jetzt eine 8-Tasten-Maus).
    • Die Dinger die diese scheiß InstallShield-Apps benutzen, das, wenn das Setup beendet wird, nochmal mit einem horrenden Windows-Error die erste CD verlangt, um die EXE endgültig zu beenden. (Das Ding mit Wiederholen, Ignorieren, Abbrechen - und egal auf was man klickt, man bekommt es nicht weg, bevor die CD 1 wieder drin ist. Zudem schiebt es sich immer nach vorne! *grml*) Nachdem man dann CD 1 eingelegt hat nur um das Setup - ohne Fehler - zu beenden, braucht man dann wieder CD 3 zum Zocken... OMG!

    Ich merke gerade, ich werde leicht Off-Topic. 😮
    Naja, wollte das nur mal gesagt haben! 😃 😉

    Das Problem mit dem Sleep ist IMHO, daß man das nicht vernünftig granulieren kann, und nicht weiß, ob der Scheduler einem nach 2 ms auch den Thread wieder anwirft...



  • Optimizer schrieb:

    Und vor allem: Wenn man das Spiel minimiert, wird nichts mehr gerendert, und wenn dann die CPU Auslastung minimiert immer noch bei 100% liegt, dann frage ich mich schon ernsthaft, was der Geiz soll.

    Und vor allem habe ich von Vollbild und Vordergrund gesprochen! Wenn mein Spiel minimiert ist, teste ich auch immer nur schnell, ob ich wieder den Fokus hab und lege mich dann nicht 1 ms, nein gleich 100ms lang schlafen. Aber so lang ich den Fokus habe, gibt es keinen Grund Rechenzeit abzugeben, oder kennst du einen? Es wäre erst recht Stromverschwendung beim Laptop, würde das Spiel z.b. nur 10% Rechenzeit verbrauchen, dann geht 90% der Akkuleistung für den Leerlaufthread drauf. Tolle Idee!

    Bye, TGGC \-/



  • TGGC schrieb:

    Es wäre erst recht Stromverschwendung beim Laptop, würde das Spiel z.b. nur 10% Rechenzeit verbrauchen, dann geht 90% der Akkuleistung für den Leerlaufthread drauf. Tolle Idee!

    Nein, Laptops schrauben ihre Leistung / Stromverbrauch je nach Auslastung runter...



  • Und der Lüfter bleibt ruhig. 😉
    Übrigens, ich Sleep immer 2ms weniger als ich noch Zeit hab, deshalb bin ich auch sicher wieder rechtzeitig dran. Zum Glück fressen WC3 und Far Cry nicht 100% wenn sie minimiert sind. 🙂

    @TGGC: Kennst du einen vernünftigen Grund, nicht absolut überflüssige Zeit abzugeben sondern lieber in einer Schleife abzuwarten?


Anmelden zum Antworten