第四章\第五节 Ultra-Threaded Dispatch Processor(超线程分配处理器)
熟悉A卡的朋友应该知道,从R520核心开始
ATI就集成了Ultra-Threaded Dispatch Processor,这就是
ATI引以为傲的超线程分配
处理器,通过这个特殊的模块来管理庞大的像素渲染单元。如今R600的Thread Processor不仅仅是管理像素单元这么简单了,统一渲染架构的GPU Shader部分需要同时处理像素、顶点、几何等方面的操作,Thread Processor的任务更加艰巨!
我们可以看到,Thread Processor集成了三个指令队列,分别为顶点、几何及像素,这也就是GPU最常见的三种渲染操作,从Setup Engine流出的数据在此汇集排队,并且根据不同的程序动态分配三种Shader的比例,比较常见的情况就是像素>顶点>几何。Shader指令分配完毕就开始等候仲裁器指定相应的单元进行处理。
R600拥有四组Shader阵列,每组阵列各对应2个Arbiter(仲裁器)和2个Sequencer(定序器),通过它们来决定渲染操作由哪部分SIMD Array执行,并且对指令的优先权进行排序。仲裁器能够最小化队列中线程之间的延迟,在最短的时间内找出优先度最高的线程交由空闲的SIMD执行,以此来保证庞大的统一着色单元时时刻刻都处在满负载状态。
某些高优先级的指令可以直接插队立即执行,而低优先级的指令可以被暂时存放在高速缓存之中,等待空闲时机再进行处理。Thread Processor的队列中能够同时保存数百条指令,这样不但可以让SIMD处于饱和状态,而且指令之间的延迟也被降至最低,Thread Processor一旦发现将要执行的指令数据尚未到位,则会立即替换下一条指令,直至数据重新获得为止。
顶点和纹理指令拥有专门的仲裁器、定序器和缓存,因为他们在执行前必须经过纹理单元进行采样操作。
由于R600统一着色单元架构的特殊性(超标量SIMD架构),每个着色单元包括5个1D标量ALU,因此Thread Processor需要负责将各种组合形式的指令分类打包,最大限度地发挥着色单元的运算能力,与R600的执行效率息息相关!
总的来说,可以把Thread Processor看作是一个大型的联合线程计数器、小线程单元、专门的分歧单元,和一个高性能任务堆栈列表,可以在高速的动态流控制和扩展并行处理间取得最好的平衡。R600的Shader部分就是庞大的SIMD(单指令多数据
处理器),而Thread Processor用相对较少的控制器来控制大规模
处理器,同时对一组数据中的每一个分别执行相同的操作来实现空间上的并行性,由此来提高统一渲染架构的效率和SIMD的执行效率。这也是R600的能否发挥真正实力的关键所在!
