100% CPU Auslastung beim "Nichtstun"?
-
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?
-
Optimizer schrieb:
Übrigens, ich Sleep immer 2ms weniger als ich noch Zeit hab, deshalb bin ich auch sicher wieder rechtzeitig dran.
2 ms reichen da???
Optimizer schrieb:
Zum Glück fressen WC3 und Far Cry nicht 100% wenn sie minimiert sind.
Dann von mir das Negativbeispiel: Anno 1503 !
Optimizer schrieb:
@TGGC: Kennst du einen vernünftigen Grund, nicht absolut überflüssige Zeit abzugeben sondern lieber in einer Schleife abzuwarten?
Je nachdem _muß_ er ja nicht warten, sondern rendert soviel fps wie geht!
Bei festem Logiktick für Physik etc. natürlich nicht.
-
@Sgt. Nukem:
Ich würde eher sagen, sie schrauben runter um die Auslastung zu erhöhen. Je höher die Auslastung, um so weniger Verlust. Das diese Automatik bei Spielen versagt, ist klar. Da muss man schon manuell sagen: mach mal halb schnell, ich möchte grad sparen.@Optimizer:
a) du kannst dir da nicht sicher sein
b) der Idle process würde die Zeit auch bloß in einer Schleife "verwarten"
c) ich warte nicht, sondern rendere den nächsten Frame
D.h. deine Methode verschwendet Rechenleistung, meine nicht. Immer noch nicht alles klar?Noch ein Positivbeispiel: OSR!
Bye, TGGC \-/
-
Sgt. Nukem schrieb:
2 ms reichen da???
Eigentlich sogar eine. Läuft butterweich. In der neuen Version dann hab ich nen Framelock bei 100.
Optimizer schrieb:
Dann von mir das Negativbeispiel: Anno 1503 !
Anno1503 ist überhaupt eines der technisch schlechtesten Spiele, die ich mir gekauft hab. Genauso wie Battlefield Vietnam (hab ich mir zum Glück nicht gekauft, sondern nur mal ausgeliehen). Und das passt dann schon richtig, dass die 100% fressen.
Optimizer schrieb:
Je nachdem _muß_ er ja nicht warten, sondern rendert soviel fps wie geht!
Bei festem Logiktick für Physik etc. natürlich nicht.Genau. Wenn ich mehrmals rendere, hab ich bestenfalls noch eine flüssigere Mausbewegung, aber sonst ändert sich das Bild nicht. Und 100 fps reichen.
a) das kannst du auch nicht, wenn du in ner Endlosschleife rumläufst. Das Betriebssystem kann dir trotzdem die Kontrolle entreißen, so dass du nicht punktgenau wieder startest. Probier es doch einfach mal aus, es funktioniert mit Sleep wunderbar.
b) aber nicht mit 100% Auslastung
c) ja, bei einem Spiel, wo du keine festen Logiktics brauchst und die Bewegungen beliebig skalieren kannst, ist das sicherlich sinnvoll.
-
a) will ich ja auch garnicht
b) Klar, insgesamt wird ehh immer 100% ausgelastet, oder soll die CPU mal eben stillstehen?
c) Bei welchem Spiel sollte ich denn nicht zwischen 2 Logikticks interpolieren? Und was bringt es, die Zeit abzugeben? Die Rechenzeit nutzt ehh keiner mehr aus.Bye, TGGC \-/
-
a) aber ich, da ich feste Logikframes brauche
b) lass es mich anders umschreiben: Die CPU wird weniger heiss, verbraucht weniger Strom und im Taskmanager geht die Anzeige für die CPU-Auslastung runter.Du weisst genau, was ich meine.
c) Bei jedem Spiel, wo ein Spiel bei gleichen Bedingungen auf jedem Rechner absolut gleich ablaufen muss /rekonstruierbar sein muss (z.B. für Replays).
Du musst da mal differenzieren zwischen einem Action Spiel wie euer MiniCan, wo ein paar wenige Objekte verwaltet werden und der Server gemütlich für alle Objekte ständig Positionsupdates senden kann
und
einem Strategiespiel, wo der Server es sich höchstens noch erlauben kann, User-Inputs zu versenden und alle Clients daraus die selbe Spielsituation konstruieren können müssen.
Oder eben mal ein Replay abspeichern wie in WC3 mit gerade mal 40kb Größe für eine halbe Stunde Spiel.
-
TGGC schrieb:
b) der Idle process würde die Zeit auch bloß in einer Schleife "verwarten"
Knapp daneben... in der Idle-Schleife wird eben die CPU z.B: mit speedStep runtergetaktet, bis die Power wieder gebraucht wird.
-junix
-
Wie ich sagte, wenn man zum Sparen was runtertakten will, dann funktioniert diese Automatik nicht. Damit die CPU weniger heiss wird, muss eben nicht die Auslastung (also wieviel der vorhandenen Leistung genutzt wird) runter, sondern die Leistung an sich herabgesetzt werden. Die Auslastung ist letztendlich immer 100%.
Und warum sollte ich nicht zwischen den diskreten Logikschritten Frames interpolieren können? Dadurch läuft doch immer noch alles rekonstruierbar ab. Schalt doch mal bei Quake die Interpolation zwischen den Logikschritten ab, na dann schönes Spielen... W3 macht es sicher auch so, das ruckelt ja auch je nach Rechner mehr oder weniger.
Bye, TGGC \-/
-
@sgt nukem und sein "Maus" problem:
und wenn man sich etwas mit directx auskennt weis man, dass es eigentlich für eine 8 tasten maus reicht, nur EINEN EINZIGEN Parameter in EINER Funktion zu ändern!
also da sag ich mal: an der falschen stelle gespaart...andererseits: wer braucht schon 8 Tasten an der Maus?
-
@TGGC: Fakt ist: Leg Dich in Deinem Loop kurz schlafen, die Auslastung sinkt, und Dein Laptop wird weniger Strom fressen. Mein Laptop-Lüfter ist da gleicher Meinung wie ich..
Ne lustige Diskussion.. Soll n'Game wirklich dafür ausgelegt sein, möglichst stromsparend zu sein?..Ist doch eh egal, ob n'Game 100% auslastet oder 50%.. Manno..
-
@TGGC: Ich glaube, 100fps sind für ein Strategiespiel ausreichend, dann kann ich mir den Aufwand mit dem Interpolieren und der Fallunterscheidung, ob jetzt minimiert ist, oder nicht, sparen.
... Die Auslastung ist letztendlich immer 100%.
Falsch. Punkt. Ich bin einer der unglücklichen Besitzer eines Laptops mit Desktop-CPU (also keine Mobile Technologie) und ich kenne den Unterschied zwischen ausgelastet und nicht ausgelastet sehr genau.
Schalt doch mal bei Quake die Interpolation zwischen ...
Absolut nicht vergleichbar, da völlig andere Situation. Und WC3 hat IMHO einen Framelock bei 75, zumindest habe ich nie mehr gehabt (bei dem Login-Screen zum Battle.net ist es am höchsten, da sieht man ja wirklich nur ein flaches Tor). Und bevor du glaubst, es ist VSync, mein TFT zeigt 60Hz an.
durito schrieb:
Ne lustige Diskussion.. Soll n'Game wirklich dafür ausgelegt sein, möglichst stromsparend zu sein?..
Ist doch eh egal, ob n'Game 100% auslastet oder 50%.. Manno..
Das mit dem Stromsparen sollte mehr so ein Troll-Argument sein.
Aber ich finde es halt einfach geil, wenn ein Spiel butterflüssig läuft und die Auslastung ist niedrig. Ich muss doch nicht mit Gewalt CPU-Zeit fressen und sinnlos verbraten. Es macht letztendlich keinen Unterschied, außer vielleicht, man lässt noch was im Hintergrund arbeiten.
Wenn man einen Laptop hat, denkt man halt einfach an sowas. Es ist ja nicht so, dass ich Kompromisse eingehe... ich hole mir schon die Zeit, die ich brauche.