返回 登录
0

DirectX* 12 中的多适配器支持

简介

本示例展示了如何使用 DirectX 12 实施显式多适配器应用。 英特尔的集成 GPU (iGPU) 和独立 NVIDIA GPU (dGPU) 用于分担场景光线追踪工作负载。 并行使用这两种 GPU 有助于提升性能,并支持更复杂的工作负载。

本示例使用多个适配器渲染采用像素着色器的简单光线追踪场景。 两个适配器并行渲染场景的一部分。

显式多适配器概述

显式多适配器支持是 DirectX 12 的新特性。 该特性支持并行使用多个 GPU,无论其制造商和类型(如集成或独立)是什么。 借助独立的资源管理,以及 API 层上针对每个 GPU 的并行队列,所以能够将工作分配多个 GPU 上。

DirectX 12 主要采用了两种 API 特性来支持多适配器应用:

对两个适配器均可见的跨适配器内存。

DirectX 12 使用了跨适配器特定资源和堆标记:
D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER
D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER
跨适配器资源存储在主适配器的内存中,并且能够以最小的成本从其他适配器中引用。
图片描述

并行队列和跨适配器同步支持并行执行命令。 当创建同步栅栏时,使用特殊标记: D3D12_FENCE_FLAG_SHARED_CROSS_ADAPTER.

跨适配器栅栏支持一个适配器的队列响应另一个适配器队列的信号。
图片描述
上图表展示了使用三个队列加速向跨适配器资源复制的操作。 以下是本示例中使用的技巧,并展示了以下步骤:
GPU A 上的队列 1 和 GPU B 上的队列 1 并行渲染部分 3D 场景。
渲染完成后,队列 1 发出信号,让队列 2 开始复制。
队列 2 将渲染的场景复制到跨适配器资源和信号中。
GPU B 上的队列 1 等待 GPU A 上的队列 2 发出信号,并将两个渲染场景集成到最终的输出中。
跨适配器实施步骤

在 DirectX 12 应用中整合次要适配器包含以下步骤…阅读全文


了解更多相关内容,请关注CSDN英特尔开发专区

评论