FPS nicht lineare Funktion, schonmal dran gedacht?
Verfasst: 09.01.2010, 16:20
Hallo!
Häufig liest man doch Fragen wie: Meine FPS (frames per second) liegen bei 1000, kaum mache ich dies und das, fallen sie schon auf 500... So kann ich ja nie eine performante Engine programmieren!
Aus diesem Grund möchte ich Euch gerne den Text auf folgender Internetseite (über die ich zufällig gestolpert bin) ans Herz legen: http://www.mvps.org/directx/articles/fp ... e_time.htm (Auch der Rest der Seite ist für den ein oder anderen vielleicht einen Blick wert.)
Kurz gesagt sind FPS recht schlecht für die Performance-Messung, da die Funktion nicht linear ist. Auch wenn das wahrscheinlich fast alle (inkl. mir) wissen, so zeigen doch Fragen obiger Art und auch die Antworten darauf, dass es in der Praxis oder der "Hitze des Gefechts" wenig beachtet wird.
Ein Beispiel:
Was würdet Ihr als größeren Performance-Einbruch ansehen? Wir ändern etwas an der Render-Funktion und die FPS gehen von 1000 auf 500 zurück und im zweiten Fall gingen die FPS von sagen wir 62,5 auf 58,8 zurück. Wenn jetzt jemand gedacht hat, dass im ersten Fall der größere Einbruch war, dann ist das falsch. In beiden Fällen braucht die Änderung genau 1 ms mehr Rechenzeit pro Frame:
1. Fall: Das Rendern eines Frames dauert vorher 1 ms macht 1 s / 1 ms = 1000 ms / 1 ms = 1 / 1000 s pro Frame oder 1000 FPS. Die Änderung führt dazu, dass das Rendern 1 ms mehr braucht, nun dauert das Rendern eines Frames 2 ms macht 1 s / 2 ms = 1000 ms / 2 ms = 1 / 500 s pro Frame oder 500 FPS.
2. Fall: Das Rendern eines Frames dauert vorher 16 ms macht 1 s / 16 ms = 1000 ms / 16 ms = 1 / 62.5 s pro Frame oder 62.5 FPS. Die Änderung führt wieder dazu, dass das Rendern 1 ms mehr braucht, nun dauert das Rendern eines Frames 17 ms macht 1000 s / 17 ms = 1000 ms / 17 ms = 1 / 58.8 s pro Frame oder 58.8 FPS.
Wie man sieht braucht die Änderung in beiden Fällen nur 1 ms länger, trotzdem bricht die Framerate im ersten Fall um "dramatische" 500 FPS von 1000 FPS auf 500 FPS ein, in zweiten Falle aber eben nur "läppische" 3.7 FPS von 62.5 FPS auf 58.8 FPS.
Fazit: Also bevor Ihr Euch über dramatische Einbrüche der FPS Gedanken macht, schaut Euch lieber die Renderzeit eines Frames an und vergleicht diese, und vor allem macht Euch nicht zu früh zu viele Gedanken. Eine neue Technik, die am Anfang dramatisch FPS zu kosten scheint, kann am Ende ganz unproblematisch sein.
Also ich hoffe, ich habe diese allgemeine bekannte Tatsache wieder ins Gedächtnis gerufen und damit einige Leute vor "Panikattacken" oder Kopfschmerzen bewahrt.
Viele Grüße
Stephan Theisgen
Häufig liest man doch Fragen wie: Meine FPS (frames per second) liegen bei 1000, kaum mache ich dies und das, fallen sie schon auf 500... So kann ich ja nie eine performante Engine programmieren!
Aus diesem Grund möchte ich Euch gerne den Text auf folgender Internetseite (über die ich zufällig gestolpert bin) ans Herz legen: http://www.mvps.org/directx/articles/fp ... e_time.htm (Auch der Rest der Seite ist für den ein oder anderen vielleicht einen Blick wert.)
Kurz gesagt sind FPS recht schlecht für die Performance-Messung, da die Funktion nicht linear ist. Auch wenn das wahrscheinlich fast alle (inkl. mir) wissen, so zeigen doch Fragen obiger Art und auch die Antworten darauf, dass es in der Praxis oder der "Hitze des Gefechts" wenig beachtet wird.
Ein Beispiel:
Was würdet Ihr als größeren Performance-Einbruch ansehen? Wir ändern etwas an der Render-Funktion und die FPS gehen von 1000 auf 500 zurück und im zweiten Fall gingen die FPS von sagen wir 62,5 auf 58,8 zurück. Wenn jetzt jemand gedacht hat, dass im ersten Fall der größere Einbruch war, dann ist das falsch. In beiden Fällen braucht die Änderung genau 1 ms mehr Rechenzeit pro Frame:
1. Fall: Das Rendern eines Frames dauert vorher 1 ms macht 1 s / 1 ms = 1000 ms / 1 ms = 1 / 1000 s pro Frame oder 1000 FPS. Die Änderung führt dazu, dass das Rendern 1 ms mehr braucht, nun dauert das Rendern eines Frames 2 ms macht 1 s / 2 ms = 1000 ms / 2 ms = 1 / 500 s pro Frame oder 500 FPS.
2. Fall: Das Rendern eines Frames dauert vorher 16 ms macht 1 s / 16 ms = 1000 ms / 16 ms = 1 / 62.5 s pro Frame oder 62.5 FPS. Die Änderung führt wieder dazu, dass das Rendern 1 ms mehr braucht, nun dauert das Rendern eines Frames 17 ms macht 1000 s / 17 ms = 1000 ms / 17 ms = 1 / 58.8 s pro Frame oder 58.8 FPS.
Wie man sieht braucht die Änderung in beiden Fällen nur 1 ms länger, trotzdem bricht die Framerate im ersten Fall um "dramatische" 500 FPS von 1000 FPS auf 500 FPS ein, in zweiten Falle aber eben nur "läppische" 3.7 FPS von 62.5 FPS auf 58.8 FPS.
Fazit: Also bevor Ihr Euch über dramatische Einbrüche der FPS Gedanken macht, schaut Euch lieber die Renderzeit eines Frames an und vergleicht diese, und vor allem macht Euch nicht zu früh zu viele Gedanken. Eine neue Technik, die am Anfang dramatisch FPS zu kosten scheint, kann am Ende ganz unproblematisch sein.
Also ich hoffe, ich habe diese allgemeine bekannte Tatsache wieder ins Gedächtnis gerufen und damit einige Leute vor "Panikattacken" oder Kopfschmerzen bewahrt.
Viele Grüße
Stephan Theisgen