本帖最后由 fastone 于 2016-1-23 21:00 编辑
如题,其实那和交火和SLI什么的不一样,学名称之为Multi-Adapter,通俗的理解为多显示适配器技术。
它不仅可以让AMD、NVIDIA的显卡(还有Intel核显)互联互通,而且还提高了显存利用率,以往的交火或者SLI都只能利用一半的显存容量,现在DX12下可以完整利用2张显卡的显存和运算资源。和交火和SLI最大的不同是,这种技术需要程序开发人员来通过编程决定每个显卡来做什么事情。
DX12和DX11相比的最大区别就是DX12采用了完整统一的流水线状态控制方式,和更加灵活资源模式和管理。DX12下,驱动程序不再一起负担核心计算,成为了一个了类似开关的作用。
用于Multi-Adapter的GPU的适配器可以是任何支持DX12的图形适配器。多适配器被引用作为节点。
在调用相关的DX12 API的时候,其中渲染流水管线状态和相关指令可以指向其中任何一个节点也可以指向多个节点。
(图貌似搞小了)
Multi-Adapter的工作模式——最简单的一种叫做Implicit Multi-Adapter(隐式多适配器),它本质上是Multi-Adapter操作模式中最低的一级,允许开发者使用类似SFR分割帧渲染那样友好的方式来控制多显卡渲染处理,这会限制性能,但带来的问题也更少。这种模式需要搭配的GPU们性能比较接近
对于DX12来说,真正“所谓混合交火”的是Explicit Multi-Adapter(EMA,显式多显卡适配器)模式,正如它的名字一样,EMA需要开发者给多GPU运行提供明确的编程,指明每个GPU要怎样工作,分配多少内存,GPU之间如何通讯等等。这样开发者就能明确控制这个渲染过程,这样多显卡平台的性能也有机会更强,因为开发者几乎控制了整个API及游戏,相比以往的多GPU技术,开发者可以控制更多、获得更多信息。
EMA模式的代价就是资源消耗,更高的性能意味着更高的责任,而且与隐式多适配器模式不同,游戏开发者要想实现EMA模式就得投入很多工作,要想工作的很好,那投入的精力就需要更多了。 至于EMA模式,它实际上还有2种工作模式——有Linked GPU及Unlinked GPU之分,Unlinked是EMA模式的基础,提供了大部分EMA模式的功能,而linked模式可以提供更多的功能,但它的限制也更多。
下面举个简单例子,用GTX950来负责生成绘制三角形,R9 FuryX 来计算模糊效果。本例用的就是Unlinked Explicit Multi-Adapter模式以及AFR(交替帧渲染)技术。AFR可以支持原本的交火或者SLI。
以下是相关实现的代码片段
首先由GTX950渲染出一些三角形,然后FuryX负责Shader相关功能计算模糊,两者交替进行,最后输出
如下图(为了显示过程,同时显示了GTX950的每帧情况)
其实高级的EMA还可以实现,让A卡计算动态光照,N卡计算全局光照和让A卡计算延迟渲染所需的,让N卡负责搞AO。
由于平时工作较忙,制作了这个简单的例子,并且借朋友账号来发帖,也是朋友推荐来发的,在此感谢fastone!春节后我将写个高级的例子将完整的可执行程序和代码发上来让大家参考。
|