DirectX 12/Mantle/Vulkan 和 HSA

DirectX 12/Mantle/Vulkan and HSA

随着低级图形 API 的兴起,例如 DirectX 12、Mantle 和 Vulkan,我想知道它们如何与异构系统架构 (HSA) 交互(如果有的话)?

据我所知,支持 HSA 需要一些开发人员参与,但我很好奇是否有任何低级图形 API 现在可以自己处理这个问题,或者是否仍然由开发人员承担负担充分利用它?

HSA 对简化系统内存和视频内存之间的数据共享等功能特别感兴趣,尤其是当它们共享相同的物理 RAM 时。

由于这个问题可能是针对当前事态的,所以我可以接受这种概述(尽管有关未来路线图的信息会很好),并且我会接受仅涵盖单个图形的答案API(因为我怀疑很多人(如果有的话)都熟悉这三个加上 HSA)。另外,如果我完全误解了它的工作原理,那么也请随时指出来;我对这两种技术都不是很熟悉,但想知道它们目前是如何交互的。

查看 wiki page 上的图表,低级 API 更接近于他们所谓的非 HSA 系统。

每个操作(内存复制、启动作业...)都必须由应用程序显式分派。尽管应用程序可以将顺序操作分组到一个命令缓冲区中,并一次性分派整个缓冲区,并在异步执行命令的同时继续执行其他操作。

另一方面,传统的 openGL/DirectX9 通过隐藏所有调度和复制更接近 HSA。然而,这会在验证和尝试预测应用程序下一步将做什么以最小化延迟方面引入开销。更不用说几乎没有选项可以检查操作是否已完成 api 具有同步根。这意味着如果您碰巧调用需要操作结果的方法,(HSA) 驱动程序将阻塞,直到该操作完成。

新的低级 API 为应用程序程序员提供更多控制并停止隐藏细节实际上是一个主要卖点。