|
本帖最后由 weihua8206 于 2009-10-27 23:36 编辑
10月初,英伟达在GPU技术会议上发布了新一代显卡架构——Fermi,GT300的技术规格终于呈现在了广大媒体和用户眼前。Fermi将给我们带来什么呢?作为晶体管数量之最,是像GT200发布时的独领风骚,还是像FX系列一样饱受非议呢?下面我们分部分来进行解析
一、制程:
如果说性能超强的GT200系列有什么软肋,那无疑就是其落后的制程了。65nm制程+14亿晶体管数量=巨大的芯片,由于芯片巨大,成本高昂,GT200系列始终无法给AMD足够大的威胁,毕竟RV770以及搭配RV770的显卡成本太低了,而且性能并不差很多。
NVIDIA不会在同一条河里摔倒两次,Fermi没有继续采用已经落后的55nm工艺,而是采用了先进而且成熟的40nm工艺。新工艺显然有助于有效的控制了芯片成本:虽然NVIDIA暂时还没有透露Fermi的具体大小,但我们可以推算一下。Fermi和Cypress都是40nm工艺,假设核心面积和晶体管数量呈等比例,那么在后者334平方毫米的基础上,Fermi将是466平方毫米,比576平方毫米的GT200小足足两成!!
也许有网友要提出疑问:466平方毫米的体积仍然远大于竞争对手的334平方毫米,那岂不是成本依旧劣势,性价比仍然不行么?
weihua8206原创,转载请注明,谢谢
笔者认为,这种疑问是不成立的:GT200之所以在性价比方面不能彻底击败RV770,其根本原因是制程落后造成的成本差距过大,对供电以及外围电路要求太高。而这次的GT300则和竞争对手采用了同样的40nm制程,可以预见,GT300与5870在芯片面积上的差距,可能会完全反映在性能差距上!基于GT300的显卡的制造成本也会低于基于GT200的显卡。
成本进一步拉近,性能领先更多,GT300值得期待!
weihua8206原创,转载请注明,谢谢
二、架构:
首先,最核心的流处理器(Streaming Processor/SP)数量大增,达到了512个之多,比GT200提升了一倍多。NVIDIA把它命名为CUDA核心(CUDA Core),由这个名字,我们不难看出NVIDIA攻占通用计算市场的野心。
weihua8206原创,转载请注明,谢谢
所有流处理器现在都符合IEEE 754-2008浮点算法和完整的32位整数算法,而后者在过去只是模拟的,事实上仅能计算24-bit整数乘法;同时全面引入的还有积和熔加运算(Fused Multiply-Add/FMA),每循环操作数单精度512个、双精度256个(之前的G200仅能硬件支持单精度FMA)。所有一切都符合业界标准,计算结果不会产生意外偏差。
在双精度浮点(FP64)计算方面,Fermi也比前代产品大大提升,峰值执行率可以达到单精度浮点(FP32)的1/2,而过去只有1/8,AMD现在也不过1/5,比如Radeon HD 5870分别为单精度2.72TFlops、双精度544GFlops。笔者预计,Fermi的双精度执行效率将至少达到750GFlops,远远将HD5870抛开。
每32个流处理器组成1组SM(Streaming Multiprocessor),最多16组。除了流处理器,每组SM还有4个特殊功能单元(Special Function UnitSFU),用于执行抽象数学和插值计算。同时MUL已被删掉,所以不会再有单/双指令执行计算率了。
然后我们来看下缓存:以往的GPU都是采用共享内存(memory)的方式来模拟缓存的。Fermi引入了真正的缓存(cache),每组SM拥有64KB可配置内存(合计1MB),可分成16KB共享内存加48KB一级缓存,或者48KB共享内存加16KB一级缓存,可灵活满足不同类型程序的需要。整个芯片还拥有一个容量768KB的共享二级缓存,执行原子内存操作(AMO)的时候比GT200快5-20倍。
回顾一下以往历代赛扬处理器与同代奔腾(或者奔腾与同代酷睿)处理器之间的性能差距,从无到有的缓存(CACHE)对GPU性能的提升可能会是决定性的!即将面世的GT300有可能为我们带来一次GPU性能的飞跃!
第三,来看下Fermi的线程:CPU和GPU执行的都是被称作线程的指令流。高端CPU现在每次最多只能执行8个线程(Intel Core i7),而GPU的并行计算能力就强大多了:G80 12288个、GT200 30720个、Fermi 24576个。
为什么Fermi还不如GT200多?因为NVIDIA发现计算的瓶颈在于共享内存大小,而不是线程数,所以前者从16KB翻两番达到64KB,后者则减少了20%,不过依然是G80的两倍,而且每32个线程构成一组“Warp”。
在G80和GT200上,每个时钟周期只有一半Warp被送至SM,换言之SM需要两个循环才能完整执行32个线程;同时SM分配逻辑和执行硬件紧密联系在一起,向SFU发送线程的时候整个SM都必须等待这些线程执行完毕,严重影响整体效率。
Fermi解决了这个问题,在每个SM前端都有两个Warp调度器和两个独立分配单元,并且和SM其它部分完全独立,均可在一个时钟循环里选择发送一半Warp,而且这些线程可以来自不同的Warp。分配单元和执行硬件之间有一个完整的交叉开关(Crossbar),每个单元都可以像SM内的任何单元分配线程(不过存在一些限制)。
第四:Fermi还引入了并行内核(Parallel Kernel)的概念:在GPU编程术语中,内核是运行在GPU硬件上的一个功能或小程序。G80/GT200整个芯片每次只能执行一个内核,容易造成SM单元闲置。这在图形运算中不是问题,通用计算上就不行了。
Fermi的全局分配逻辑则可以向整个系统发送多个并行内核,不然SP数量翻一番还多,更容易浪费。
应用程序在GPU和CUDA模式之间的切换时间也快得多了,NVIDIA宣称是GT200的10倍。外部连接亦有改进,Fermi现在支持和CPU之间的并行传输,而之前都是串行的。
第五,Fermi提供了完整的ECC校验功能:AMD Cypress可以检测内存总线上的错误,却不能修正,而NVIDIA Fermi的寄存器文件、一级缓存、二级缓存、DRAM全部完整支持ECC错误校验,这使得Fermi在专业计算领域上迈出了重大的一步:很多客户此前就是因为Tesla没有ECC才拒绝在通用计算领域采纳NVIDIA的GPGPU方案,因为他们的数据库非常庞大,必须有ECC来保证可靠性。
第六,内存寻址:
以前的架构里存在多种不同的寻址指令,有本地内存寻址(每线程)、共享内存寻址(每组线程)、全局内存寻址(每内核)等。这就为程序员编程带来了困难,他们必须小心翼翼的梳理各种指针向量,避免出现寻址错误。
Fermi统一了寻址空间,简化为一种指令,内存地址取决于存储位置:最低位是本地,然后是共享,剩下的是全局。这种统一寻址空间也是支持C++的必需前提。
GT80/GT200的寻址空间都是32-bit的,最多搭配4GB GDDR3显存,而Fermi一举支持64-bit寻址和DDR5,支持显存容量最多可达惊人的16000K TB,这样的天文数字意味着GT300核心将支持任意的海量显存(只要内存厂商能造得出来)。
三、软件与硬件指令集:
NVIDIA宣布了名为“Nexus”的插件,它使程序员可以在Visual Studio里执行CUDA代码的硬件调试,相当于把GPU当成CPU看待,这使得CUDA的难度大大降低。
Fermi的指令集架构大大扩充,不仅支持DX11和OpenCL,更加入了对C++,Visual Studio的支持,当然还有C、Fortran、OpenGL 3.1/3.2。对于需要使用GPGPU通用计算功能的程序员来说,Fermi将是非常值得期待的。
根据以上分析,我们不难看出:GT300在图形领域将是一款极具竞争力的产品,而且在科学计算领域也有望取得突破。在HD5870风头出尽的今天,NVIDIA的反击是我们喜闻乐见的,究竟GT300有多强?是否如笔者预测的一般呢,请广大玩家拭目以待! |
|