Ultra-Threading超标量技术:CPU技术在显卡上的应用
SM3.0规范规定图形芯片的pixel shader单元必须支持Dynamic Branch,即动态分支跳转(这在CPU里早已实现),简单的说就是:处理单元根据实时运算得出来数值,直接执行应该执行的指令,而不是一味按照程序的指令一路执行下去。有了动态分支跳转,开发人员就可以优化pixel shader指令,把经常执行的都放到前面,加快渲染速度。
不过问题也就随即出现,由于传统的图形处理架构对数据是并行处理的,动态分支跳转会使得有些结果出来的早,有些结果出来得晚,那么就破坏了图形架构的并行性,也一定程度上抵消了动态分支跳转所带来的好处。
ATI重新设计了图形pixel shader处理单元,让它可以实现超标量、多线程执行,当一个处理单元先处理完可以不用等待其他单元,而是直接处理下一批数据。
R520的pixel shader引擎会把要处理的象素分成许多4x4大小的块,每块用一个pixel shader单元处理,一次处理称为一个线程,由一个最多支持512个线程的“中央分派单元”分派各个pixel shader处理单元,pixel shader处理单元被称作Quad Pixel Shader Core,可以同时在一个2x2的象素上执行Shader指令。中央分派单元发现某个处理单元闲置的时候,它会把等待分配的线程分配给它;当中央分派单元发现某个处理单元的线程因为需要等待某些数据而停滞的时候,它会暂时停止这个线程,让处理单元先处理其他线程,等条件满足了才继续处理暂停的线程。
有了这种机制,R520可以让pixel shader单元的利用率达到90%。当大量需要动态分支预测的游戏出现的时候,R520的优势将会非常明显。