如果我们不能区分它们,为什么 Vulkan 中队列家族中的队列需要优先级?

Why do queues in a queue family in Vulkan need priority if we can't distinguish between them?

如题所问。我的主要观点是 "why",关于队列和队列系列的这种逻辑结构的有益因素是什么。

chip/card 制造商是否真的将多个独立队列蚀刻到他们的芯片上?那些同时可以分别区分?

实施单独处理 units/streams 对实施有什么好处吗?推而广之,它是否会追溯有益于 OpenCL 等旧 API?

我观察到一个有趣的事实:在我的 "Intel(R) Core(TM) i3-8100B CPU @ 3.60GHz" Mac Mini 中,"vulkaninfo.app" 中列出了 2 个 GPU(来自 LunarG SDK)。 糟糕,该应用链接了 2 libMoltonVK.dylib("Contents/Frameworks" 中有 1 个,“/usr/local/lib”中有 1 个)。

"Why" 不是 SO 格式的好问题。引发猜测。

队列在 Vulkan 中是可区分的。他们每个人都有自己的索引,可以用来区分他们。请记住,它们更像是驱动程序。即使驱动程序有更多队列,即使是单个队列通常也可以使用所有 GPU 的计算资源。

此外,Vulkan 规范并没有真正说明当您提供特定优先级值时应该发生什么。 driver\GPU 忽略它是完全有效的。

芯片制造商确实拥有独立的计算单元。他们理论上可以执行彼此不同的代码。但这通常不是有利的。在通常的工作中渲染一些规则的 W × H 图像,它使所有计算单元都具有相同的工作。

原因:因为您可以提交不同重要性的不同类型的工作,并且您可以向 Vulkan 实现提示您首先要完成的工作。

问题中的其他所有内容都毫无意义:

Do chip/card makers actually etch multiple independent queues onto their chips? That are at the same time separately distinguishable?

不一定,这些可能是按时间分割的逻辑队列。

Does implementing separate processing units/streams provide any benefit to implementations? And by extension, does it retroactiely benefit older APIs such as OpenCL?

不,一个名为 Metal(来自 Apple)的当代 API 根本没有队列计数或队列族的概念。