MCPLive > 杂志文章 > 管窥DirectX 11与通用计算技术

管窥DirectX 11与通用计算技术

2009-09-15陈可《微型计算机》2009年8月下

灵活多变:Compute Shader

在DirectX 11中,新增的Compute Shader(CS)计算着色器拥有核心地位。与DX10中引入的GS几何着色器不同的是,CS并不是渲染管线的一部分,它的主要用途在于增强GPU的通用计算能力。

我们知道,现在的GPU能够被应用于某些通用计算工作,譬如在高并行计算应用中,GPU就表现出十倍于CPU的卓越能力。对游戏开发者而言,经常出于某种需要希望GPU能执行通用计算指令,但以往的渲染结构却对GPU制造了诸多障碍——比如说,程序员可以在一个像素着色程序中强行加入通用算法,但却无法随意利用诸如树形结构之类的数据结构,这就给程序员带来很大的麻烦。因为要在像素间共享数据的过程非常繁琐,先绘制三角数据结构、再加入贴图是唯一的解决方案,但这将严重影响GPU的渲染性能。而在DirectX 11和CS着色器的帮助下,未来的游戏开发者将不再受困于此,他们可以直接越过复杂的数据结构、并在这些数据结构中运行更多的通用算法。而这些算法将由CS着色器专门负责,不会给渲染单元带来额外的负担。


DirectX 10硬件只要获得相应的驱动,便可享有DirectX 11游戏的多线程支持

CS代码可以做到高度灵活,它们可以支持随机读写、不规则列阵(而不是简单的流体或者固定大小的2D列阵)、多重输出,并可根据程序员的需要直接调用单线程或多线程应用。CS体系中拥有32Kb容量的共享寄存器和线程组管理系统,具备可执行无序IO运算的能力。总之,CS可以带来几乎无限的新型应用,关键在于开发者能够在多大程度发挥它的功效。

在获得灵活性的同时,CS也会带来一些性能损失。由于单线程任务现在无法以像素为单位,所以这些线程将会丧失几何集合功能。从技术上讲:虽然CS程序依然可以利用纹理取样功能,但是原本的“自动三线LOD计算”将会丧失自动功能,程序员必须指定LOD指令。另外,一些并不重要的普通数据的深度拣选(depth culling)、抗锯齿(anti-aliasing)、α混合(alpha blending)和其它运算不能在一个CS程序中被执行。


DirectX11的Tessellation处理流程

CS可以为开发者带来多种多样的灵活渲染,这项先进技术应该正中游戏开发商们的下怀:它们的兴趣大多是寻求先进技术来增强游戏引擎,比如增强抗锯齿性能或无规则透明度的性能,带来更先进的Deferred Shading(延迟着色)技术、后处理效果(post processing effect)等等,CS都可以大放异彩。除了上述这些特殊的渲染应用,游戏开发者可能还希望让GPU完成诸如IK(inverse
kinematics,逆运动学)、物理计算、人工智能计算等过去由CPU完成的通用计算,而利用CS在GPU上执行这些算法时,可以获得非常理想的效率。

分享到:

用户评论

用户名:

密码: