Vulkan Timestamp queries liefern falsche Results
Verfasst: 07.11.2022, 16:20
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?
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?