directx-12 - DirectX 12/Mantle/Vulkan 和 HSA

标签 directx-12 vulkan mantle

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

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

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

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

最佳答案

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

enter image description here

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

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

enter image description here

新的低级 API 为应用程序程序员提供了更多控制权,不再隐藏细节,这实际上是一个主要卖点。

关于directx-12 - DirectX 12/Mantle/Vulkan 和 HSA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33498203/

相关文章:

c++ - DirectX 12 SDK LNK2001

directdraw - 如何在 DirectX 12 中绘制文本?

vulkan - 表面格式是 B8G8R8A8_UNORM,但是 vkCmdClearColorImage 需要 float ?

graphics - 对 Vulkan API 中的渲染 channel 感到困惑

opengl - UBO/SSBO 与 Vulkan 的着色器内存绑定(bind)有何不同?

opengl - AMD Mantle API 文档