Kann ich durch das Freischalten der Framerate in XNA / MonoGame feststellen, wie effizient mein Code ist?

12

Ich habe die Framerate in MonoGame freigeschaltet über:

this.graphics.SynchronizeWithVerticalRetrace = false;
base.IsFixedTimeStep = false;

Und als Grundlage dafür, wie effizient ich das Spiel aktualisiere und zeichne.

Bei einer Auflösung von 240 x 160, bei der nichts außer einem Bildzähler gezeichnet oder aktualisiert wird, erhalte ich einen FPS-Wert von 9.000 bis 11.000 FPS.

Wenn ich meinen gesamten Code wieder hinzufüge, sinkt er auf ungefähr 1.100 FPS.

Ist dies ein gutes Indiz dafür, dass mein Code die GPU erheblich verlangsamt (10x), und sollte ich mir Sorgen machen? Das Spiel wird mit 60 FPS laufen, also bin ich noch ziemlich weit davon entfernt, aber an welchem ​​Punkt in der freigeschalteten Bildrate sollte ich mir Sorgen machen?

GPU: AMD FirePro W5000 (FireGL V)

Prüfung
quelle
1
Als Randnotiz: In Ihrem Entwicklungspfad würde ich vorschlagen, dass Sie Ihr Ziel-FPS sowohl im Debug- als auch im Release-Modus belassen. Bei der Veröffentlichung könnte etwas gut laufen, aber beim Debuggen könnte es höllisch langsam sein, was wirklich nicht nützlich ist :)
Vaillancourt
Nicht wirklich. Andere Antworten beantworten dies gut, aber das Wichtigste ist, dass die Grafikkarte den größten Teil der Last mithilfe der Hardwarebeschleunigung übernimmt. Wenn Sie nicht im selben Thread wie die Grafiken arbeiten (das sollten Sie nicht tun), gibt es keinen Grund dafür, dass FPS von Ihrem Code beeinflusst wird - innerhalb eines vernünftigen Rahmens - überhaupt.
Dan Pantry

Antworten:

30

Nur grob.

Erstens ist FPS kein lineares Maß . Der Unterschied zwischen 11k FPS und 9k ist extrem gering (0,0000201 Sekunden pro Frame). Der Unterschied zwischen 60 und 2060 FPS (ein Delta mit 2 KBit / s, das auch zwischen 11 KBit / s und 9 KBit / s besteht) ist 0,0161 Sekunden ... viel größer. Es kann daher als Leistungsmetrik gefährlich sein, nur weil große Unterschiede so schlecht sein können oder auch nicht.

Stattdessen Zeit pro Frame zu verwenden, ist etwas einfacher zu überlegen, aber selbst dann ist es immer noch eine sehr weite Sicht auf die Situation. Hier erfahren Sie nur, wie viele Sekunden ein Frame des Spiels dauert. Sie erfahren nicht warum , es sei denn, Sie sehen einen starken Anstieg der Bildzeit unmittelbar nach dem Hinzufügen oder Aktivieren einer bestimmten Funktion.

Es kann ein grundlegendes Barometer sein, um zu entscheiden, ob es an der Zeit ist, detailliertere Profile zu erstellen. Es ist besonders schlecht, FPS zu verwenden, um festzustellen, ob Sie CPU- oder GPU-gebunden sind. Das GPU-Profiling ist nicht so einfach wie das Messen der Zeit auf der CPU (wo sich wahrscheinlich Ihr Timing- und FPS-Berechnungscode befindet).

Wann sollten Sie sich Sorgen machen? Nun, Sie sagten, das Spiel ziele auf 60 FPS ab. Wenn Sie anfangen, in der Nähe oder darunter einzutauchen, müssen Sie wahrscheinlich genauer über Ihre Leistungsprobleme nachdenken. Bis dahin würde ich mich darauf konzentrieren, alles zum Laufen zu bringen, und mich dann darum kümmern, es schnell zu machen .


quelle
6
+1 für den letzten Satz. Eine vorzeitige Leistungsoptimierung ist meiner Meinung nach eine ziemlich schlechte Praxis (aus Erfahrung).
sirdank
1
c2.com/cgi/wiki?PrematureOptimization - Empfohlene Lektüre zum Thema
Machinarius
Nicht immer, wenn Sie einen High-End-Computer haben und dieser ungefähr 80 FPS erreicht, ist er auf Ihrem Computer gut genug, aber wenn Sie Computer der unteren Preisklasse ansprechen möchten, erhalten diese möglicherweise nur 15 FPS. Idealerweise ist dies der beste Wenn Sie Ihre Tests auf einer Maschine mit den Mindestanforderungen durchführen möchten, auf die Sie abzielen möchten, wird sie möglicherweise auch für diese optimiert, wenn Sie sie nicht für Ihre Maschine optimieren. Wenn es auf Ihren Low-End-Rechnern schnell genug läuft, gibt es natürlich keinen Grund, zusätzliche Anstrengungen zu unternehmen, um weiter zu optimieren, insbesondere wenn das Risiko von vermehrten Fehlern besteht.
Programmdude
5

Ich verstehe nicht, warum du es nicht benutzen konntest! Denken Sie daran, dass Sie möglicherweise einen anderen Code verwenden müssen, um die Unterschiede zwischen festen und variablen Zeitschritten zu berücksichtigen. Wenn Sie also vorhaben, diesen bei der Veröffentlichung zu beheben, müssen Sie Anpassungen vornehmen. Siehe diesen Artikel: http://rbwhitaker.wikidot.com/time-steps

Ist dies ein guter Hinweis darauf, dass mein Code die GPU erheblich verlangsamt

Könnte auch die CPU sein. Ich würde empfehlen, den in Visual Studio integrierten Profiler regelmäßig auszuführen (oder immer dann, wenn Sie einen großen Bildratenabfall sehen), um Hotspots in Ihrem Code zu finden.

soll ich besorgt sein

Das hängt natürlich von der Hardware ab, auf die Sie abzielen. Sie müssen Ihren Code anhand der Computer mit den niedrigsten Mindestanforderungen testen, die Sie unterstützen möchten. Wenn es dort mindestens 60 Mal läuft, wäre ich nicht zu besorgt.

Tandersen
quelle