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?
DirectX anwendung wird nach ersten 5 sekunden langsamer
DirectX anwendung wird nach ersten 5 sekunden langsamer
Blog: http://3d.benjamin-thaut.de Tolle mobile engine: http://www.projectanarchy.com
- xq
- Establishment
- Beiträge: 1590
- 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
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
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.
Programmiert viel in
- Krishty
- Establishment
- Beiträge: 8350
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: DirectX anwendung wird nach ersten 5 sekunden langsamer
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.
Re: DirectX anwendung wird nach ersten 5 sekunden langsamer
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 ...
Blog: http://3d.benjamin-thaut.de Tolle mobile engine: http://www.projectanarchy.com
- xq
- Establishment
- Beiträge: 1590
- 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
@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.
Programmiert viel in