Microsofts DirectX-Team hat sein Werkzeug für Performance-Tuning und Debugging in der Version 1909.23 herausgebracht. Damyan Pepper, Dev Lead des PIX-Teams, schrieb dazu im offiziellen Devblog am 23. September 2019 von zwei Schwerpunkten für die Grafikprogrammierung: programmatische GPU-Captures über das Kommandozeilenwerkzeug pixtool und neue Funktionen für Timing-Captures rund um Thread-Kontextwechsel. Die Kennung 1909.23 löst die zuvor genutzte 1909.13 ab. Mehr zur DirectX-Umgebung von PIX on Windows findet sich an anderer Stelle.
Programmatische Captures in pixtool
Der neue Befehl programmatic-capture lässt pixtool auf eine GPU-Capture warten, die die Anwendung selbst auslöst. Solche programmatisch initiierten Aufnahmen waren bislang vor allem über die grafische Oberfläche von PIX erreichbar. Über die Kommandozeile lassen sie sich jetzt in skriptgesteuerte und automatisierte Abläufe einbinden. Ein typischer Aufruf lautet pixtool launch „D3D12HelloProgrammaticCapture.exe“ programmatic-capture. Mit der Option open öffnet sich die erzeugte Capture direkt in PIX, über save-capture landet sie als wpix-Datei auf der Festplatte. Dazu kommt list-counters, das Zählerdaten zur Aufnahme ausgibt. So wandern GPU-Captures in Build- und Test-Pipelines, ohne dass jemand manuell an der Oberfläche eingreifen muss.
Timing-Captures sehen Thread-Wechsel genauer
Bei den Timing-Captures dreht sich vieles um Thread-Kontextwechsel. Auf der Timeline zeigen visuelle Adorner jetzt an, was einen Thread-Wechsel ausgelöst hat und wodurch die Ausführung wieder anlief. Wird ein Bereich nicht eingeplanter Zeit ausgewählt, füllt die Element-Details-Ansicht die passenden Informationen zum Kontextwechsel an den Grenzen des Stillstands. Hyperlinks in den Element-Details führen schnell zu den betroffenen Threads, Kernen und Kontextwechseln. Die Core-Lanes zeigen außerdem deutlich, in welchen Zeiträumen die Anwendung gerade nicht läuft, und nennen die Prozesse, die stattdessen ausgeführt werden.
Neben diesen beiden Bereichen führt der Devblog weitere Anpassungen auf. Das Optimized Shader Access Tracking baut die Pipeline-Ansicht schneller auf, in einem Fall maß das Team dabei den Faktor 100. Hinzu kommen Unterstützung für ReflectSharedProperties und GDI-artige geteilte Ressourcen bei der Capture von 9on12-Anwendungen, Reflection-Informationen zu MetaCommand-Parametern in den Event-Details, ein Aggregationsmodus des System Monitors für Zähler sowie Änderungen an der Unterstützung von D3D12onWin7. Für 12on7 müssen die Binärdateien in Unterverzeichnissen liegen.
