Ok Ich habe dieses Problem für ein paar Tage jetzt untersucht, so lassen Sie mich gehen, was ich wissen bisher, was mich zu glauben, dass dies ein Problem mit NVidia Treiber und nicht sein könnte mein Code.Nvidia Grafiktreiber verursacht merkliche Frame Stottern
Grundsätzlich beginnt mein Spiel nach ein paar Sekunden zu stottern (zufällige Bilder nehmen 70ms anstelle von 16ms, auf einem regelmäßigen Muster). Dies geschieht NUR, wenn im Nvidia Control Panel (neueste Treiber, Windows 10) eine Einstellung namens "Threaded Optimization" aktiviert ist. Leider ist diese Einstellung standardmäßig aktiviert und ich möchte lieber nicht, dass die Benutzer ihre Einstellungen ändern müssen, um eine angenehme Erfahrung zu machen.
Das Spiel ist nicht CPU oder GPU intensiv (2ms ein Frame ohne VSync an). Es ruft keine openGL-Funktionen auf, die Daten synchronisieren müssen, und es streamt keine Puffer oder liest Daten von der GPU oder irgendetwas zurück. Über den einfachsten möglichen Renderer.
Das Problem war immer da, es fing erst an bemerkbar zu werden, wenn ich fmod für Audio hinzufügte. fmod ist nicht die Ursache dafür (mehr später in der Post)
Der Versuch, das Problem mit NVidia Nsight zu debuggen, machte das Problem weg. "Start Collecting Data" bewirkt, dass das Stottern sofort verschwindet. Kein Würfel hier.
Im Profiler wird viel CPU-Zeit in "nvoglv32.dll" verbracht. Dieser Prozess wird nur generiert, wenn die Threading-Optimierung aktiviert ist. Ich vermute, dass es ein Synchronisationsproblem ist, also debugge ich mit Visual Studio Concurrency Viewer.
diese Blöcke der CPU-Zeit auf dem nvidia Thread Untersuchung, die früheste benannte Funktion, die ich in ihrer Aufrufliste bekommen ist „CreateToolhelp32Snapshot“, gefolgt von viel Zeit in Thread32Next verbracht. Ich habe Thread32Next im Profiler gesehen, als ich mir die CPU-Zeiten früher angesehen habe, also scheint es, als wäre ich auf dem richtigen Weg.
Es sieht also so aus, als würde der nvidia-Treiber aus irgendeinem Grund einen Schnappschuss des gesamten Prozesses aufnehmen? Was könnte der Grund sein, warum tut es das, und wie halte ich es an?
Auch dies erklärt, warum das Problem begann, bemerkbar zu werden, sobald ich in fmod hinzugefügt, weil es Informationen für alle Prozesse Threads greift, und fmod erzeugt viele Threads.
Irgendwelche Hilfe? Ist das nur ein Fehler in Nvidias Treiber oder gibt es etwas, was ich tun kann, um es zu reparieren, andere Leute zu sagen, Threads "Optimierung" zu deaktivieren?
bearbeiten 1: Das gleiche Problem tritt auch mit aktuellen nvidia-Treibern auf meinem Laptop auf. So bin ich nicht verrückt
bearbeiten 2: das gleiche Problem tritt auf Version 362 (iV Hauptversion) von Nvidias Treiber
Hey, Tyler. :) Aus Neugier - haben Sie einige Debug-Treiber installiert oder so? Ich kann nicht für das Leben von mir erraten, warum ein Graphiktreiber diese Art von Informationen ergreifen sollte, es sei denn, es ist für irgendeine Art von Debugging/Logging Gründen. –
nein. Sie sind die öffentlich verfügbaren Treiber von Nvidias Website. Ich bin nicht einmal sicher, wo ich einen Debug-Modus-Treiber bekommen würde ... – TylerGlaiel
auch sollte ich erwähnen, ich habe es auch selbst ohne Visual Studio ausgeführt, nur für den Fall, dass Visual Studio Debug-Code injiziert ... gleich Ausgabe – TylerGlaiel