2010年3月27日英伟达发布的一个显卡架构!
什么是Fermi
GT200的14亿个晶体管曾经让我们惊叹,Cypress的21.5亿个相比RV770的9.56亿个增加了一倍多,而Fermi达到了史无前例的30亿个,同样比自己的上一代翻了一番还多,比对手也多了40%。
从最高层面上说,Fermi很简单,无非是512个
流处理器,384-bit GDDR5显存,而深层次的架构我们会在稍后逐一揭晓,不过Fermi至今还停留在纸面上,还不是一款真正的产品,所以型号划分、
时钟频率、售价等等都还没有确定。事实上,直到两个月前NVIDIA才第一次让人看到了样品,最近不久刚刚获得可以正常工作的芯片,正式发布至少要到2009年底,而全面上市就是2010年第一季度的事儿了。
Fermi为什么这么晚?NVIDIA产品营销副总裁Ujesh Desai说了一句:因为设计这么大的GPU实在是太难了。
AMD用RV770核心给NVIDIA好好上了一课,庞大而沉重的GT200失去了反击之力,CUDA、PhysX这种对手所没有的功能特性于是成了宣传重点。
作为GeForce业务负责人,Ujesh Desai愿意承担责任,并承认在GT200时代严重失策。根据RV670 Radeon HD 3800的表现,NVIDIA推测其继任者的性能也不过尔尔,但RV770的表现大大出乎意料,而GT200定价过高,最终导致了一夜之间暴降千元的悲剧。
NVIDIAGPU工程副总裁Jonah Alben没有把责任都推到Ujesh身上,承认自己在工程上也有失误。GT300从一开始就应该采用新的55nm工艺,但NVIDIA在130nm NV30 GeForce FX被150nm Radeon 9700 Pro大败之后趋于保守,最后一次使用了65nm工艺,最终成就了一个面积庞大、功耗超高的巨无霸。
虽然40nm工艺进程依然稍微落后于对手,但NVIDIA不会在同一条河里摔倒两次,没有在Fermi上沿用55nm,否则又是一颗无法接受的大芯片。
不过NVIDIA暂时还没有透露Fermi的具体大小,只能估计一下。Fermi和Cypress都是40nm工艺,假设核心面积和晶体管数量呈等比例,那么在后者334平方毫米的基础上,Fermi将是466平方毫米,比576平方毫米的GT200小足足两成。
尽管AMD的Sweet Point策略让NVIDIA吃尽了苦头,不过NVIDIA依然认为最重要的并非首先开发价格较低的小芯片,而是提高大芯片的效率,然后衍生出不同的尺寸和配置规格。期待Fermi的主流版本能在2010年尽快出炉。
NVIDIA相信Fermi在3D游戏里会比Radeon HD 5870更快,当然不快也不行,但是如果你只是把Fermi单纯地看作是一颗游戏GPU就错了,因为它的真正目标是Tesla,是高性能通用计算,是个人和
数据中心超级计算机——这就是GT300里边那个字母T的含义,它要做一颗通用目的微处理器。
这有点儿像Intel Nehalem架构,确切目标也不是桌面,而是高性能计算服务器领域,所以新的
Xeon处理器才在服务器
工作站上横扫一片,但游戏性能并不比Core 2 Quad好多少。
NVIDIA声称,要达到同样的性能,使用CPU就得2000台x86服务器,总成本约800万美元,功耗1200kW,而换成GPU只需32台Tesla S1070s系统(如图1),成本不过40万美元,功耗更是仅仅45kW。虽然这里没有算上驱动Tesla所需要的服务器(毕竟GPU不可能完全摆脱CPU),但这部分占得也不会太多。
Fermi架构解析
1、SP、SM
从高层次上看,Fermi和GT200结构形似,并无太大不同,但往深处看就会发现绝大部分都已经进化。
最核心的流处理器(Streaming Processor/SP)数量大增,还有了个新名字CUDA核心(CUDA Core),由此即可看出NVIDIA的转型之意,不过我们暂时还是继续沿用流处理器的说法。
所有流处理器都符合IEEE 754-2008浮点算法(Cypress也是如此)和完整的32位整数算法,而后者在过去只是模拟的,事实上仅能计算24-bit整数乘法;同时引入的还有积和熔加运算(Fused Multiply-Add/FMA),每循环
操作数单精度512个、双精度256个。所有一切都符合业界标准,计算结果不会产生意外偏差。
双精度浮点(FP64)性能大大提升,峰值执行率可以达到单精度浮点(FP32)的1/2,而过去只有1/8,AMD也不过1/5,比如Radeon HD 5870分别为单精度2.72TFlops、双精度544GFlops。由于最终核心频率未定,所以暂时还不清楚Fermi的具体
浮点运算能力(双精度预计可达624GFlops)。
G80/GT200都是8个流处理器构成一组SM(Streaming Multiprocessor),Fermi增加到了32个,最多16组,少于GT200的30组,但流处理器总量从240个增至512个,是G80的整整四倍。
除了
流处理器,每组SM还有4个特殊功能单元(Special Function UnitSFU),用于执行抽象数学和插值计算,G80/GT200均为2个。同时MUL已被删掉,所以不会再有单/双指令执行计算率了。
至于SM之上的纹理处理器群(Texture Processor Cluster/TPC),NVIDIA暂时没有披露具体组成方式,而且
ROP单元、纹理/像素填充率等其它图形指标也未公布。
GT200的每组SM都有16KB
共享内存,由其中8个SP使用。注意它们不是缓存(cache),而是
软件管理的内存(memory),可以写入、读取数据。为了满足应用程序和通用计算的需要,Fermi引入了真正的缓存,每组SM拥有64KB可配置内存(合计1MB),可分成16KB共享内存加48KB一级缓存,或者48KB共享内存加16KB一级缓存,可灵活满足不同类型程序的需要。
GT200的每组TPC还有一个一级纹理缓存,不过当GPU出于计算模式的时候就没什么用了,故而Fermi并未在这方面进行增强。
整个芯片拥有一个容量768KB的共享二级缓存,执行原子内存操作(AMO)的时候比GT200快5-20倍。
3、效率
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内的任何单元分配线程(不过存在一些限制)。
这种线程架构也不是没有缺点,就是要求Warp的每个线程都必须同时执行同样的指令,否则会有部分单元空闲。每组SM每个循环内可以执行的不同操作数:FP32 32个、FP64 16个、INT 32个、SFU 4个、LD/ST 16个。
4、并行内核(Parallel Kernel)
在GPU编程术语中,内核是运行在GPU硬件上的一个功能或小程序。G80/GT200整个芯片每次只能执行一个内核,容易造成SM单元闲置。这在图形运算中不是问题,通用计算上就不行了。
Fermi的全局分配逻辑则可以向整个系统发送多个并行内核,不然SP数量翻一番还多,更容易浪费。
应用程序在GPU和CUDA模式之间的切换时间也快得多了,NVIDIA宣称是GT200的10倍。外部连接亦有改进,Fermi支持和CPU之间的并行传输,而之前都是串行的。
5、ECC支持
AMD Cypress可以检测内存总线上的错误,却不能修正,而NVIDIA Fermi的寄存器文件、
一级缓存、
二级缓存、DRAM全部完整支持ECC错误校验,这同样是为Tesla准备的,之前我们也提到过。
很多客户此前就是因为Tesla没有ECC才拒绝采纳,因为他们的安装量非常庞大,必须有ECC。
以前的架构里多种不同载入指令,取决于内存类型:本地(每线程)、共享(每组线程)、全局(每内核)。这就和指针造成了麻烦,程序员不得不费劲清理。
Fermi统一了
寻址空间,简化为一种指令,内存地址取决于存储位置:最低位是本地,然后是共享,剩下的是全局。这种统一寻址空间是支持C++的必需前提。
GT80/GT200的寻址空间都是32-bit的,最多搭配4GB GDDR3显存,而Fermi一举支持64-bit寻址,即使实际寻址只有40-bit,支持显存容量最多也可达惊人的1TB,实际配置最多6GB GDDR5——仍是Tesla。
下边对开发人员来说是非常酷的:NVIDIA宣布了一个名为“Nexus”的插件,可以在Visual Studio里执行CUDA代码的硬件调试,相当于把GPU当成CPU看待,难度大大降低。
Fermi的指令集架构大大扩充,支持DX11和OpenCL义不容辞,C++前边也已经说过,又多了Visual Studio,当然还有C、Fortran、OpenGL 3.1/3.2。
Fermi 1.0
GF100
2010年3月27日,nVIDIA发布了两款基于Fermi架构的DircetX 11桌面级显卡:GTX 480、GTX 470。GTX480在单卡单芯领域可以压制大多ATI/AMD产品。不过,差距不大。它在一些优势项目中性能直逼HD5970,向世人首次展示了Fermi架构的强大。不过,这位初代旗舰卡问题不是一般的多,同时,也是GF100核心的通病。
1、发热问题:公版的GTX 480是配发的是一个巨型的涡轮风扇散热器(虽然这类散热器性能卓越,同时也带来了巨大的噪音问题)。然而,即使是巨型的涡轮风扇散热器依然无法压制GTX 480炙热的心,Fumark拷机测试中轻松超过90℃的发热量让人咋舌。
2、核心问题:GTX 480除了是一个发热大户,同时也是业界第一个被阉割的旗舰产品。因为,台积电不成熟的40nm工艺,造成了桌面显卡史上第一个被阉割的旗舰。本来的512个CUDA核心被阉割成了480个。同时,从G80时代的MIMD设计虽然效率很高,却需要大量晶体管。因为以上原因GTX480变成了拥有32亿个晶体管的巨型GPU。由于工艺问题,核心的良品率和漏电问题一直困扰着nVIDIA的工程师们。
3、供电问题:公版的GTX 480在Fumark拷机测试中跑出466瓦的“强劲”数字。为了取保核心供电问题,公版设计上采用了6+2项供电模组和8pin+6pin外接供电口。
随后发布的GTX 465依然存在这些问题。这也是人们不禁开始怀疑这nVIDIA的Fermi的真实性能,会不会是一个高技术的幌子。
GF100的设计方式就是将满规格Fermi的4个GPC中得一个阉割掉一个SM就成了GTX 480
GF104
虽然旗舰们拥有强劲的性能。但是,功耗和发热问题一直困扰着GF100军团,面对早已展开防线的HD 5000系列,GF100还是有些力不从心。就在N卡用户陆续转投A卡阵营,独立显卡出货量历史性的出现N:49%,A:51%超于。
就在这个危机时刻,2011年7月12日,nVIDIA发布里一款确切说是两款基于GF104的GTX 460。由于,第一批GF100的Fermi架构GPU表现不尽人意,这个阉割版的GF100是个普遍不被看好这个阉割马甲版的产品。
但是,结果却在2年来没什么大动静的图形界引起了一场不小的地震。就测试结果来看,高端1GB 256bit版的GTX460不但能完全压制HD 5830,在
超频后拥有挑战HD 5850实力。而,缩水版的768MB 192bit版
又以接近HD5770价位完全压制后者并能超频后于HD 5830一战。一夜之间,网路上频繁出现“GTX460秒杀A卡全家的言论”。Q3的
独立显卡出货量也是达到了惊人的N:V=7:3
GF104之所以能够在ATI/AMD产品早已完成阵线,旗舰产品不给力的情况下完成这个大逆转。是因为,GF104精简掉了对3D游戏能力帮助不大的L2缓存和取消部分
并行计算单元,在GF100的基础上进一步优化核心漏电问题。一举解决了,Fermi=烤炉的定律。一线厂商获得的高质量核心能够轻松超频900MHz甚至更高。
为了解决这个块硬骨头AMD方面加紧了Barts核心的研发进度,还将HD 5830的价格降至GTX 460的水平。足见GF 104的强劲实力。
完整的GF104的设计方式是将GF100的单个GPC的128个CUDA核心扩张成192个,再将两个扩张版的GPC的其中一个阉割掉1个SM。随水版本略有不同。
GF106
2010年9月13日,nVIDIA发布了基于GF106的GTS 450。这意味着,已经同A卡苦战长达近3年的G92终于能够荣归故里了。
基于的GF106架构产品共有2款一款是GTS 450海外 低频版,一款是GTS 450大陆特供的高频版。让大陆玩家首次体会到被照顾了。
GF106的设计方式就是将GF104的两GPC阉割成一个,其他不变。
GF108
第4梯队的GF108核心共有款产品:GT 440和GT 430。但是,GT 440并没有重现GT 240的辉煌。这主要和这两款产品定位有关系。GF108主要重点是给用户提供通用计算和音视频解码,而不是单纯的游戏性能。
GF108的设计方式是将GF106的规格减半。