Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 18:20

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 29 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: So Jul 17, 2005 15:42 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Feb 24, 2003 18:19
Beiträge: 165
Wohnort: Cologne
luketheduke hat geschrieben:
eigentlich geht es ja nicht darum, die framerate auf 5 stellen hinter dem dezimalpunkt genau festzulegen, sondern darum, die CPU zu entlasten.


in diesem fall würde ich zwischen bei dem Performance Counter noch irgendwo ein Sleep(1 oder 2) hinsetzen..

_________________
www.omfg.biz - aktuelles projekt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 17, 2005 15:50 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
FPS Zahl limitieren: Timer benutzen

Muss man halt umschalten können :)

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 17, 2005 18:26 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Ich habe eine überaschende Erfarung gemacht. Ich habe keine Ahnung voran es liegen könnte. Ich habe mein aktuelles Projekt, BallonKiller, auf einem Laptiop(AMD 2200 oder mehr kann nicht genau sagen, 512 RAM, Mobility Radeon 128 OWN Ram, neuste Treibern ) laufen lassen, und unter 100% CPU Auslastung geht es einfach nicht. :shock: Egal ob ich jetzt über einen Timer oder Sleep hilfe zukommen lasse.

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 17, 2005 20:45 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Feb 24, 2003 18:19
Beiträge: 165
Wohnort: Cologne
humm :shock: .. das ist in der tat seltsam... was macht das programm denn sonst noch?! ;)

ich hab mal etwas an nem openglprogramm rumgespielt und das is dabei rumgekommen:

ohne Sleep, ohne VSync: ~200 FPS, 99 Prozent CPU-Auslastung, ab und zu mal auf 90% runter wegen der aktiven Spyware ;)
mit Sleep(1), ohne VSync: ~190-200 FPS, ~50 Prozent Auslastung
mit Sleep(5), ohne VSync: ~140 FPS, 2-5 Prozent Auslastung
ohne Sleep, mit VSync: 60 FPS, 5 Prozent Auslastung
mit Sleep(1), mit VSync: 60 FPS, 5 Prozent Auslastung
mit Sleep(5), mit VSync: 60 FPS, 5 Prozent Auslastung

Geforce Ti4200, AMD Athlon2500+ mit Win2k, aktuelle treiber... und das überzeugt mich eigentlich sehr dass der QueryPerformanceTimer & Sleep den gewünschten Effekt erzielen... seltsam finde ich es nur, dass bei meiner "hochwissenschaftlichen Messung" die Auslastung ohne VSync und Sleep(5) scheinbar niedriger ist als mit VSync - aber die schuld kann ich ja dem treiber zuweisen :)

_________________
www.omfg.biz - aktuelles projekt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 17, 2005 22:24 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Stell mal das Intervall deines Timers hoch, sagen wir auf 500, dann hat dein PC weniger Auslastung, b.z.w. sollte er haben!

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 18, 2005 00:04 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Zitat:
schuld kann ich ja dem treiber zuweisen
Das kann man immer als eine Ausrede benutzen. ;)

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 18, 2005 00:12 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ja ich benutze seit einiger Zeit auch sleep(1). Das is wirklich ne gute Möglichkeit die CPU frei zu bekommen. sleep(5) muss ich mal ausprobieren, ob das nicht meine geringen Framezahlen zu sehr belastet. Ansonsten ist éine CPU-Auslastung von unter 10% schon genial. Vorallem für NoteBook Nutzer.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 18, 2005 09:31 
Offline
DGL Member

Registriert: Mo Apr 05, 2004 19:51
Beiträge: 105
red hat geschrieben:
ohne Sleep, mit VSync: 60 FPS, 5 Prozent Auslastung

Also hatte ich doch soweit Recht, dass man nur mit VSync die CPU-Auslastung drücken kann... weiter oben hat jemand behauptet, dass trotzdem 100% CPU-Last erzeugt werden. Ich hatte das auch so in Erinnerung, dass die CPU derweil entlastet wird - auch wenn mein letztes Programm damit schon ne Weile her ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 18, 2005 10:07 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Das war ich. ;-)
Ich hatte es ausgetestet und die Last ist trotz eines einfachem Quads nicht runter gegangen. Habe das insgesammt jetzt auf zwei Systemen ausprobiert. Und bei beiden das selber Ergebnis. 100% Last. Allerdings waren das keine NVs sondern ATIs.

VSync ist ja lediglich dazu da um auf das Blanksignal (wenn ich das richtig in Erinnerung habe) des Monitors zu warten. Ich kenne da auch eine DOS Softwareimplementationen und dort wurde auch in einer Schleife (ohne Sleep) drauf gewartet. Evtl. hat NV dort etwas eingebaut um das nicht so extrem werden zu lassen. Könnte mir vorstellen, dass die nach dem Bild zeichnen noch ein paar ms warten bis die in der nähe des Signals sind und dann aus einer Schleife heraus auf das Signal warten. Das würde auch erklären warum die immer noch ca. 5% Last erzeugen.

Ich denke mal auf das VSync sollte man sich besser nicht verlassen, da es ja anscheinend auf jedem System anders implementiert sein kann. Zusätzlich dazu hat man mitunter auf jeden System eine andere Hz Zahl. Und 100 ist nicht mehr sonderlich unwahrscheinlich. Wenn man dann noch eine geringer Grafikleistung hast wird das System auch NVs zu 100% ausgelastete. Wenn zum Beispiel nur 110 Bilder/s gerendert werden können. Dann ist das Ersparnis verschwindend gering und bringt im Endeffekt nichts. Also denke ich mal, wenn man es manuell auf 30 - 35 Bilder/s begrenzt hat man wesentlich mehr davon. Wenn das dann minimal abweicht sollte das auch noch alles im Rahmen des Erträglichen sein.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 18, 2005 10:38 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Das Problem hat mich ja dann doch ein wenig gefuchs. Ich habe es gerade mal so gemacht.

Code:
  1. procedure TForm1.ApplicationEvents1Idle(Sender: TObject;
  2.   var Done: Boolean);
  3. var
  4.   FrameStart, FrameEnd: Cardinal;
  5.   SL: Integer;
  6. begin
  7.   Done := False;
  8.  
  9.   FrameStart := GetTickCount;
  10.  
  11.   // Scene Zeichnen
  12.  
  13.   FrameEnd := GetTickCount;
  14.   SL := Trunc(1000 / 30 - (FrameEnd - FrameStart));
  15.   if SL > 0 then
  16.     sleep(SL);
  17.  
  18.   // FPS Ausgeben
  19. end;


Die FPS wird so auf ziemlich genau 30 Bilder begrenzt. Die fps liegt in etwa bei 30.1 - 30.4. Ich denke mal damit kann man leben. Je höher die FPS allerdings eingestellt wird um so weniger kommt dabei tatsächlich raus. Bei 150 kamen so etwas um die 120 raus. Liegt aber wohl an der unglaublichen Genauigkeit von GetTickCount. Die aber für 30 Bilder ausreicht. Perfornamnce Count ist besser. War ich nur zufaul für. ;-)

@sniper: Du solltest anstelle eines Round lieber ein Trunc verwenden da die FPS so im Zweifel nicht nach unten korrigiert wird.
Dein Problem ist bei mir auch aufgetreten (aber nur bei höheren FPS) und die Lösung ist zum Haare ausreißen einfach. ;-)
Sleep bekommt als Parameter ein vorzeichenlosen Integer (Cardinal). Beim Rendern kann es aber durchaus sein, dass er Länger als dafür vorgesehen gebraucht hat. Dann sollte nicht gewartet werden. Aber du errechnest, dass eine negative Anzahl ms gewartet werden muss. Das Vorzeichen wird aber in dem letzten Bit gespeichert. Er will also mal eben knappe 4 Mia ms warten. Speicher das Ergebnis der Berechnung in ein Integer und überprüfe om Negativ oder nicht. Siehe Quellcode.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 18, 2005 11:46 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Danke.
@Lossy Ex: Bei mir wird (dein Code umgesezt) entweder auf 30, 50 oder 100 FPS begrenzt, egal ob ich jetzt 1000/1000 schreibe. :roll: Ich gebe es auf, ich baue jetzt 3 Möglichkeiten ein, so in etwa:
1. FPS Limit mit einem Timer (Interval eingeben)
2. FPS Limit mittels Sleep (Wartezeit eingeben)
3. kein Limit

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 18, 2005 11:53 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Hast du rein Zufällig VSync an? Und so noch rein zufälliger nen 100 Hz Monitor? 100, 50 und 30 klingt fast so als ob du genau in solch einer Abtastung drinne wärst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 18, 2005 13:25 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Ein Bild sagt immer mehr als..
Bild

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 18, 2005 13:58 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Du musst zugeben die Vermutung lag nah?

Es gibt im übrigen noch die Einstellung im Treiber. Damt kannst du das Verhalten von VSync steuern. Also immer aktivieren, deaktivieren etc. Aber bei 60 Hz und VSync wären 100 Bilder/s recht unwahrscheinlich. Aber egal. Wie auch immer solch ein Verhalten zustande kommen mag.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 29 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 16 Queries | GZIP : On ]