KhronosGroup / KhronosGroup/Vulkan-Docs

Mechanism for querying physical queue topology?

Open
#569 15 comments 0 reactions 1 assignee Claimed by @TomOlson View on GitHub
Resolving Inside Khronos
Dominant language
JavaScript
Stars
3.3k
Forks
549
Avg merge
5d 5h
Merged PRs (30d)
2

Description

Many drivers seem to have wildly different interpretations of what a `VkQueue` represents. In some drivers (e.g. nvidia on maxwell), all VkQueues are just time sliced on the same execution unit, and there is zero performance benefit from using more than one (in my testing). Other drivers (e.g. amdgpu) map their queues to underlying compute pipes in various ways. The latter is especially obvious when observing the state of the compute queues in gpuvis, where they will be labelled something like `comp_1.0.0`, `comp_1.0.1`, `comp_1.1.0` etc. indicating the underlying topology (i.e. which queues map to which compute pipe).

Due to this confusion, and the wildly varying performance characteristics that can be obtained as a result of using these queues in different ways, it might be a good idea to add some sort of mechanism for querying the underlying physical layout of queues - so applications can make sure to not over-submit work that won't run in parallel either way. (To avoid losses due to what I assume are expensive context switches, which appear to make quite a difference on e.g. nvidia)

I'm not sure exactly what the API would look like, but the basic question I'd be hoping to answer in my applications are “which queues can run concurrently with which other queues?”, perhaps by command type (e.g. compute, graphics, transfer).

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.