微软今天正式发布了一项新的 DirectX 12 功能,该功能在预览版中推出已有一段时间,它引入了新型 GPU 自主功能,试图消除 CPU 瓶颈。
在一篇长长的博文中,Direct3D 工程师 Amar Patel 和 DirectX 编译器工程师 Tex Riddell 对工作图(Work Graphs)进行了解释,这是 D3D12 中的 GPU 自主系统,旨在解决 GPU 上一般计算工作负载的限制,并释放 GPU 的潜在能力。简单地说,新系统旨在转换为更高效的 GPU 驱动渲染系统,减少在不同工作负载中使用 CPU 的需要。
在许多 GPU 工作负载中,GPU 上的初始计算决定了 GPU 需要执行的后续工作。这可以通过返回 CPU 发布新工作来实现。但通常情况下,GPU 最好能直接为自己提供信息。D3D12 中的 ExecuteIndirect 就是这样一种形式,应用程序使用 GPU 记录一个非常有限的命令缓冲区,该缓冲区需要在 GPU 上进行串行处理,以发布新的工作。
考虑一个新选项。假设在 GPU 上运行的着色器线程(生产者)可以请求其他工作运行(消费者)。消费者也可以是生产者。只要 GPU 有能力运行,系统就能安排所请求的工作。应用程序还可以让系统管理任务间数据流的内存。
这就是工作图。一个节点图,每个节点的着色器代码都可以请求调用其他节点,而无需等待它们启动。工作图可以捕捉用户的算法意图和整体结构,而不会让开发人员过多地了解具体的硬件运行情况。异步的特性使系统可以最大限度地自由决定如何以最佳方式执行工作。
DirectX 12 "工作图" 功能的全部详情请点击此处: