● 雪中送炭的Compute Shader
尽管海量的ALU以及解决指令集问题的曙光同时出现在了AMD面前,但想要真正等来黎明,前面还有一段不得不面对的黑暗。
R600是符合DirectX 10设计的GPU,其ALU所能够执行的数据类型也深深的带上了DirectX 10的图形烙印。R600所能够执行的代码必须具备完整的几何关联性。这种繁冗的几何关联性问题导致了符合DirectX 10要求的ALU并不能随心所欲的被使用,代码格式的限制以及寄存器资源的特定要求成了横亘在AMD面前的一座大山。
人们都说锦上添花并不能体现价值,雪中送炭才是最重要的。商人微软是重要的,因为它对API的更新成了雪中送炭。
我们在《曝你不知道的DX11 解析GPU通用计算妙用》中已经进行了相关的描述,在DirectX 11中,微软进行的最具革命性的创新就是引入Compute Shader。Compute Shader是一种纯数学形式的代码,它不仅可以结合延迟操作模式和树状结构方便的进行线程间的大并行度管理,实现跨指令的数据共享,快速的实现各种通用计算应用,而且取消了代码形式上对几何过程的强制关联。
直接数学代码的引入,意味着程序员们可以以平时面对CPU时所惯用的自然编程方式和手段,直接利用符合DirectX 11要求的ALU进行常规的浮点数据吞吐、运算和操作。使用Compute Shader格式的代码可以同时被CPU和GPU处理,只要CPU和GPU之间存在某种直接的快速联系,Compute Shader代码便可以被微软的编译器拆解成适用于CPU和GPU的指令格式分别输送到各自的流水线中进行处理。这使得很多过去在CPU上即便借助指令集仍然执行缓慢的应用,比如AI控制、超大并行吞吐以及逆向运动学分析等得以实践。
简单地说,透过Compute Shader,CPU和GPU被紧密的联系在了一起,在Compute Shader代码面前,他们将一视同仁的成为平等的执行单元。