DirectX anwendung wird nach ersten 5 sekunden langsamer

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
Ingrater
Establishment
Beiträge: 103
Registriert: 18.04.2007, 21:52

DirectX anwendung wird nach ersten 5 sekunden langsamer

Beitrag von Ingrater »

Ich arbeite gerade an einer DirectX 11 Anwendung für meine Master-Arbeit. Dabei muss ich folgendes Phänomen beobachten:

Ich messe die Zeiten verschiedenere grob aufgelöster Renderabschnitte mit timer queries. Wenn ich meine Anwendung frisch starte, sehe ich 5 sekunden lang Werte in Millisekunden die ich erwrarten würde. Nach 5 Sekunden allerdings steigen die Zeiten der einzelnen Abschnitte plötzlich um ungefähr faktor 300%, allerdings ohne dass die FPS sinken (warscheinlich weil noch genug Luft für verlangsamungen ist). Wenn ich allerdings mit GPA einen frame capture mache (egal ob in den ersten 5 sekunden, oder später in der "langsamen" Phase) sehe ich in GPA immer die Werte der ersten 5 Sekunden.

Ich gehe momentan wie folgt vor. Direkt am Anfang des Frames beginne ich ein disjoint query und beende ein timer query. Immer mal wieder zwischen drin beende ich ein timer query um mir die aktuelle Zeit abzuholen. Am ende des Frames wird dann wieder ein timer query beended und letztendlich auch das disjoint query. Direkt danach kommt der swapChain->Present aufruf. Dann passiert erst mal 4 frames lang gar nichts mit Queries. Dann hole ich mir zuerst das Ergebnis des disjoint Queries und danach, in der Reihenfolge in der sie abgesetzt wurden, die Ergebnisse der timer Queries. Im nächsten Frame geht das ganze dann wieder von vorne los. Ich besitze überigens eine Nvidia Karte, Treiber update habe ich schon erfolglos versucht. Davor hatte ich versucht jedes Frame das beschriebene durchzuführen, allerdings die queries in einer Ringbuffer manier durchzulaufen, sodass sie 4 frames lang nicht abgeholt werden. Der Effekt mit der verlangsamung nach 5 Sekunden trat trozdem auf. Ich habe auch schon versucht direkt am Ende des Frames die Queries abzuholen, das hat allerdings nur dazu geführt, dass der CPU ewig lang auf die queries wartet und dadurch die FPS einbrechen.

Hat schonmal jemand ein ähnliches Phänomen beobachtet? Irgendwelche Tipps oder Ideen an was es liegen könnte?
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: DirectX anwendung wird nach ersten 5 sekunden langsamer

Beitrag von xq »

Wenn ich das richtig verstanden habe: Du möchtest deine Framerate und Teile deines Renderabschnittes zeitlich messen, richtig?
Ich kenne Timer Queries nicht, aber auf Grund deines letzten Satzes gehe ich davon aus, dass es nicht unbedingt für high resolution timing gedacht ist. Versuche doch mal die High Performance Counter aus der WinAPI zu nutzen:
High Resolution Counter
Diese Counter haben eine wesentlich höhere Auflösung als Millisekunden und ich denke das ist das was du möchtest, da du keinerlei queries beenden musst.

Grüße
Felix
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Benutzeravatar
Krishty
Establishment
Beiträge: 8245
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: DirectX anwendung wird nach ersten 5 sekunden langsamer

Beitrag von Krishty »

Man kann die Render-Zeit nicht via High Resolution Counter messen weil die GPU asynchron zur CPU arbeitet. Man kann damit nur messen, wie lange es dauert, die Befehle zur CPU zu senden.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Ingrater
Establishment
Beiträge: 103
Registriert: 18.04.2007, 21:52

Re: DirectX anwendung wird nach ersten 5 sekunden langsamer

Beitrag von Ingrater »

Ich habs gefunden. In den Nvidia Treibern gibt es eine Option "Energieverwaltungsmodus" der in der Standardeinstellung auf "Adaptiv" steht. Ändert man dies auf "Maximale Lesitung bevorzugen" tritt das Problem nicht mehr auf. Jetzt kann ich endlich meine Shader vernüftig profilen ...
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: DirectX anwendung wird nach ersten 5 sekunden langsamer

Beitrag von xq »

@Krishty: Okay danke, dann hab ich das verpeilt.
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Antworten