MCPLive > 杂志文章 > 解析AMD DirectX 12硬件的秘密武器

解析AMD DirectX 12硬件的秘密武器

2015-10-09林子涵《微型计算机》2015年9月下

Async Shaders—异步着色器提高GPU效率

AMD在DirectX 12上作出的另一项有效改进,就是有关异步着色器的设计和使用了。一般来说,目前GPU中的计算都是通过着色器来完成。当然,着色器(Shader)这个名称是来源于GPU发展的早期,现在虽然还叫着色器,但是它的功能都复杂化了,除了能够完成图形计算的内容外,还可以进行诸如通用计算、物理计算、后期处理等内容。目前GPU着色器上运行的计算队列包括图形队列、计算队列和复制队列三种。在DirectX 12之前,GPU的着色器计算,都通过只含有单一类型计算命令的队列来完成。比如这一个队列都是传统的着色器计算、下一个队列则是后处理计算等。不同的队列之间不能交叉计算,比如不能一会儿计算这个,一会儿计算那个,必须等一个队列完成或者中断后,才能进行下一个队列。三种不同队列的任务切换和等待都相当耗费时间,这使得GPU很少有100%的工作负载,浪费了性能。

随后,人们对这种做法进行了改良。提出了优先级别等概念。新的方法增加了优先级、暂停等。这样的设计可以使得一些特别紧急、优先级特别高的任务能够优先完成,在一定程度上提高了效率,但并没有在GPU整体的效能上作出很好的改变。

而在面向DirectX 12、采用GCN架构的GPU上,AMD设计了一个名为ACE(异步计算引擎)的部件。ACE(异步计算引擎)的作用是协调着色器上所有的计算,使得它们可以根据需要异步进行。简而言之,之前的队列都必须是一类计算,并且一队一队进入GPU。但是,在有了ACE之后,ACE会将所有的任务预先排好序,开启三组并行计算任务,让诸如复制、计算、图形等内容,在GPU内并行计算完成。也就是说,GPU内可以同时并行三条不同的计算序列,这比之前只能接收单条计算序列而言,效率大幅度提升。因为在并行化后,GPU无谓的等待时间变得更少了,任务切换也变得不那么频繁,反正总是这三种计算任务,那么某些CU单元处理图形、某些CU单元处理复制、某些CU单元处理计算即可。一旦部分CU单元不够用或者负载不平衡,那么再切换CU单元的工作也完全来得及。

这个功能被AMD称作异步着色器,英文名为Async Shaders,这个新技术的出现,使得AMD的GPU在面对DirectX 12计算时更为游刃有余。目前业内的GPU中,只有AMD独家拥有类似队列排序、并行计算的功能,这是AMD在DirectX 12时代GPU设计上的一大创新。

底层改进效率—多卡并行更高效

AMD在DirectX 12上的技术创新还有一个,那就是多卡并行能力大幅度提升。我们知道,之前AMD在多卡并行上付出了很多努力,开发了CrossFire交火技术,其双卡效率非常出色,同时也对三卡、四卡交火提供了支持,但是后两者的整体效率受制于API,只能说表现尚可。

现在,DirectX 12开始原生支持多卡并行技术,在开放了底层优化后,多卡并行更容易,也能更有效率地在更多GPU上实现。DirectX 12使得游戏开发人员和驱动人员,能够精确地控制分配给每一个GPU的任务,也能够更精确地控制硬件,获取更高的利用率和性能。即便是APU与独立GPU这两种3D性能相差很大的产品,在DirectX 12上,只要开发人员和驱动优化得当,那么APU和独立GPU也能“联手行动”,获得性能增益,带来更出色的使用体验,这使得用户的投资能够很好的保值,不会浪费。

此外,对于多卡系统来说,DirectX 12还有一个特别惊人的功能,那就是显存不再复制,而是共同使用。在之前的多卡并行系统中,所有的并行GPU能使用的显存容量,只能是所有参与并行的GPU中显存小的那一个。举例来说,一张2GB的R9 280X和一张4GB的R9 280X搭建CrossFire系统的话,那么这个系统大的显存容量只有2GB。这是因为对每个GPU来说存在数据同步的需求,这使得它们必须在各自的显存中拥有对方更改的所有数据,这样才能保证下一次计算不会出错。但是这样一来,大量显存就会被无谓浪费掉,尤其在多卡的超清分辨率计算中,这样的问题尤为重要。

由于DirectX 12优化了GPU执行流程,因此更容易为CPU和GPU提供并行优化。
由于DirectX 12优化了GPU执行流程,因此更容易为CPU和GPU提供并行优化。

多卡并联性能也由于DirectX 12的存在,将得到很大的改善。
多卡并联性能也由于DirectX 12的存在,将得到很大的改善。

从工作流程图可见,拥有异步着色器的GPU在DirectX 12中效率要高很多,可以开启三组并行计算任务。
从工作流程图可见,拥有异步着色器的GPU在DirectX 12中效率要高很多,可以开启三组并行计算任务。

但是在DirectX 12上,显存的浪费问题可能得到很大的缓解。因为DirectX 12的工作特性,使得开发人员能够很好的将计算任务分配到不同的GPU上,每个GPU不再需要保存对方的信息在自己的显存中,因此显存从之前的复制转向了叠加。依旧是上述那个例子,在DirectX 12上下优化得当的话,一张2GB的R9 280X和一张4GB的R9 280X搭建CrossFire系统的话,那么这个系统大的显存容量就可能会达到6GB。而如果是两张4GB的显卡搭建多卡系统的话,那就可以完全使用8GB显存,大大拓宽了显存空间。

目前在Windows 10发布后,DirectX 12相关应用的发展速度开始提速,估计年内像《奇点灰烬》、《杀出重围:人类分裂》支持DirectX 12的游戏就会发布。同时《奇点灰烬》 DirectX 12 Demo、Elemental Demo等DirectX 12性能测试工具已经上线,那么AMD开发出的优化技术到底能带来多大的效果呢?请关注《微型计算机》近期制作的DirectX 12专项测试。

分享到:

用户评论

用户名:

密码: