Vulkan Timestamp queries liefern falsche Results

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Matthias Gubisch
Establishment
Beiträge: 488
Registriert: 01.03.2009, 19:09

Vulkan Timestamp queries liefern falsche Results

Beitrag von Matthias Gubisch »

Ich versuche die Laufzeiten meiner Shader bzw Passes auf der GPU zu messen.

Dafür stellt Vulkan ja die VkQueryPools zur Verfügung, und mit vkCmdWriteTimestamp kann man einen Timestamp erzeugen.

Für GraphicPipelines klappt das auch ganz gut und die Zeiten sehen realistisch aus (Vergleich mit Nsight liefert eine Abweichung im Vertretbaren Rahmen)

Versuche ich jetzt aber einen ComputeShader zu vermessen bekomme ich immer Zeiten im Bereich von 1 Microsekunde, und zwar für alle ComputeShader, egal ob das ein 5 Zeiler oder ein 200 Zeilen Langer Shader ist.

Aufgesetzt werden die Timestamps so:
StartTimestamp: vkCmdWriteTimestamp(cmd, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, pool, start_time_id);
StopTimestamp: vkCmdWriteTimestamp(cmd, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, pool, stop_time_id);

Erwartungshaltung wäre dass ich damit den kompletten Pipelinedurchlauf messe. Ich weiß performancetechnisch nicht ideal wegen Sync und so aber für ne grobe Debug Hausnummer der Passes ist das OK.

Jemand eine Idee warum ich bei GraphicPipelines passende Zeiten bekomme und bei ComputePipelines nicht?
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
Antworten