|
ati的thread能力比并不是很弱
根据R600公开ISA以后 对r600 以及其衍生的rv770的thread能力 以及GPU threadmanage的动作有了比较正确的认识
if,else之类的动作 在threada manage 的dips-pacth processor被解开 有选择性的把来自各个Vertex/Fragment 的thread 根据一致性打包成64thread为粒度的wavefront 交付给每个SIMD ARRY(16 * 4D+1D规模) 由arbiter 以及sequencer来分配 调度给每个4D+1D 执行单元 。这些完全一致的thread就如指令流一样经过执行单元,而arbiter 以及sequencer用来错开指令冲突或寄存器冲突
而dips-pacth processor会把由branch造成的不一致的thread挂起 压后至少64个周期 和其他与其符合并发条件的thread 打包成另外一个64thread 并列的指令串 交给空闲出来的另一个SIMD ARRY执行。这个过程中branch造成的延迟 还是被以切换wavefront 的方式尽可能的遮掩了。R600的结构最大能够操作96个这样的wavefront
R600要说最大thread 并发能力是 6144thread 而rv670/rv770 则可以并发192 wavefront 12288threads 和G80 /g92持平 (32thread x24warps x2SM X8TPC=12288threads)
但是 真正有实际价值的是实际并列thread R600拥有4个SIMD ARRY 所以它的实际平行度是64thread x4 =256thread
而g92 拥有8个TPC 每个TPC 2SM ,每个SM 1 WARP warpsize=32thread =32x2 x8 =512thread
简单的归纳thead namage的动作 就是把具有一致性的thread 大包成一个一个wavefront,让它在各个SIMD ARRY中中执行,当某个wavefront遭遇tex 延迟 或者其他阻塞的时候挂起它 然后切换到另外的wavefront,通过切换wavefront来规避管线阻塞 带来的性能下降,对于branch造成的不一致性 将会被抽离原有的wavefront 在合适的条件包装进另外一个wavefront,由于wavefront粒度比较大
R600体系结构理论能够容忍最小的branch size也就是64 pixel
关于thead manage的动作 其实g8x 和r6xx是一样的 但是不同的地方在于g8x 的wavefront size 也就NV自己称作warps 比较小 只有32thread,而且还存在size=16thread的half warp
拿g92来做对比的话 几乎与对手2倍的Shader core频率 造成了实际解branch能力是 r6xx的体系的4-8倍 这点比较恐怖。不过这个优势还是要在GPGPU方面才能看到
branch size=8x8 pixel 来说 满足图形应用应该说是够用的。。。
作soft shadow R6XX-RV6XX 都逊色一些 还是因为做这些操作TMU不够劲吧 |
|