最近研究GPU架构,关于GPU的基本原理(顶点->纹理->像素->光栅 这个pipeline)可以参考我之前阅读的一些文章,相信读了他们,会对什么是GPU,GPU的工作原理等之类的问题有了一定的感性认识,具体如下:
1 GPU大百科全书系列
2 图形与计算那些事 AMD次世代架构解析
3 DixrectX支配游戏! 历代GPU架构全解析
读过这三篇文章后,会熟知AMD与NVIDIA的不同架构,本质来说,在架构上两家都是采用的“极端”的设计方法:AMD采用基于SMID(单指令多数据)的VLIW架构,而NVIDIA则采用的MIMD(多指令多数据)的多发射的超标量;
AMD 优点:
1 超强的计算能力
SIMD架构能够有效提升GPU的矢量处理性能,由于VS和PS的绝大部分运算都是4D Vector,它只需要一个指令端口就能在单周期内完成4倍运算量,效率达到100%。
2 节省晶体管,避免功耗问题
采用VLIW架构,指令的捆绑全由编译器完成,因此只需一个发射单元,这就可以节省下一大堆的晶体管,避免了功耗问题。
AMD 缺点:
1 ALU计算单元不能充分利用:
4D SIMD架构一旦遇到1D标量指令时,效率就会下降到原来的1/4,3/4的模块被完全浪费,尤其是一旦遇上分支预测的情况,SIMD在矢量处理方面高效能的优势将会被损失殆尽。 例如:指令一:a=b+c;指令二:d=a*e。这两条指令中,第二条指令中的a必须等待第一条指令的运算结果,出现这样的情况时候,两条指令大多数情况下就不能实现超标量执行了。
NVIDIA的科学家对图形指令结构进行了深入研究,它们发现标量数据流所占比例正在逐年提升,如果渲染单元还是坚持SIMD设计会让效率下降。为此NVIDIA在G80中做出大胆变革:流处理器不再针对矢量设计,而是统统改成了标量ALU单元,这种架构叫做MIMD(Multiple Instruction Multiple Data,多指令多数据流)。
NVIDIA 优点:
1 ALU得到充分利用,到达了CPU级的利用水平;
如此一来,对于依然占据主流的4D矢量操作来说,G80需要让1个流处理器在4个周期内才能完成,或者是调动4个流处理器在1个周期内完成,那么G80的执行效率岂不是很低?没错,所以NVIDIA大幅提升了流处理器工作频率(两倍于核心频率),扩充了流处理器的规模(128个),这样G80的128个标量流处理器的运算能力就基本相当于传统的64个(128×2?)4D矢量ALU。大家应该知道R600拥有64个5D矢量ALU,最终的性能G80要远胜R600。
2 强大高效的ALU运算单元,适合于通用计算Tesla。
G80的MIMD架构开了一个好头,128个流虽然听起来虽然没有 320个那么多,但这些流是可以媲美真正的CPU核心,在执行任何指令时都能发挥出接近理论值的性能,这样高效率的核心如果只是用来玩游戏岂不太可惜了?
随着图形画面越来越复杂,1D、2D、3D指令所占比例正在逐年增多,而G80在遇到这种指令时可说是如鱼得水,与4D一样不会有任何效能损失,指令转换效率高并且对指令的适应性非常好,这样G80就将GPU Shader执行效率提升到了新的境界;
NVIDIA 缺点:
1 需要更多的晶体管,存在功耗问题
G80的架构听起来很完美,但也存在不可忽视的缺点:根据前面的分析可以得知,4个1D标量ALU和1个4D矢量ALU的运算能力是相当的,但是前者需要4个指令发射端和4个控制单元,而后者只需要1个,如此一来MIMD架构所占用的晶体管数将远大于SIMD架构!
所以的SIMD架构可以用较少的晶体管造出庞大数量的流处理器、拥有恐怖的理论浮点运算能力;而NVIDIA的MIMD架构必须使用更多的晶体管制造出看似比较少的流处理器,理论浮点运算能力相差很远。双方走的都是极端路线,AMD以数量弥补效率的不足,而NVIDIA以效率弥补数量的劣势。
阅读(755) | 评论(0) | 转发(0) |