更新时间:2023-12-09 16:01
基于Fermi构架的GF100是自最初G80以来GPU架构史上最重大的飞跃。 G80是对统一图形与计算处理器应有面貌的最初愿景。 随后的GT200扩展了G80的性能与功能。 而GF100,这是一个专为下一代游戏与通用计算应用程序而优化的全新架构的GPU。
详细规格参数
每个GF100 GPU包含1个Host接口,1个Giga Thread Engine,4个GPC,6个64Bit的显存控制器,6个光栅化阵列,1块768KB的L2 Cache。
GPC囊括了所有主要的图形处理单元,可以被看作是一个自给自足的GPU,而一颗GF100拥有四个GPC,每个GPC中包含1个Raster引擎,4个SM。
每个SM主要包含2个Warp调度器,2个指令分派单元,32个CUDA核心,16个LD/ST单元,4个SFU,64K Shared Memory + L1 Cache(按需配置大小),4个纹理单元,1个多边形引擎。
每个光栅化阵列包含8个ROP。每个GF100含有6个光栅化阵列。
每个完整的GF100包含:512个CUDA核心(SP),64个纹理单元,16个多边形引擎,1024KB L1 Cache,768KB L2 Cache,48个ROP,384Bit的GDDR5显存控制器。
改进的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(StreamingMultiprocessor),Fermi增加到了32个,最多16组,少于GT200的30组,但流处理器总量从240个增至512个,是G80的整整四倍。
除了流处理器,每组SM还有4个特殊功能单元(Special Function UnitSFU),用于执行抽象数学和插值计算,G80/GT200均为2个。同时MUL已被删掉,所以不会再有单/双指令执行计算率了。
至于SM之上的纹理处理器群(Texture Processor Cluster/TPC),NVIDIA暂时没有披露具体组成方式,而且ROP单元、纹理/像素填充率等其它图形指标也未公布。
全新的Tessellation引擎
传统的GPU设计采用单一几何图形引擎来执行Tessellation(曲面细分)运算。Fermi GPU最多拥有15个并行Tessellation(曲面细分)单元,每一个单元均具备自己专用的着色资源。 4个并行Raster Engine(光栅引擎)能够将刚刚经过曲面细分的三角形转化为非常细致的像素流以进行着色。 Tessellation(曲面细分)、着色以及光栅单元的紧密结合可提供巨大的片上带宽以及极高的执行效率。 如此一来,便实现了Tessellation(曲面细分)的性能突破,使其超过每秒16亿个三角形。
Tessellation(曲面细分)的使用从根本上改变了GPU图形负荷的平衡。凭借Tessellation(曲面细分),特定帧中的三角形密度能够增加数十倍,但这给设置于光栅化单元等串行工作的资源带来了巨大压力。为了保持较高的Tessellation(曲面细分)性能,有必要重新平衡图形计算流水线。
全新的Raster引擎
在PolyMorph引擎处理完基元之后,它们就被被发送至光栅(Raster)引擎。为了实现较高的三角形吞吐量,GF100采用四个Raster引擎并行工作的方式。
Raster引擎由三个流水线阶段组成。在边缘设置阶段中,可提取顶点位置、计算三角形边缘方程。没有朝向屏幕方向的三角形都通过背面剔除而删掉了。每一个边缘设置单元在一个时钟周期中最多都能够处理一个点、线或三角形。
光栅器(Rasterizer)为每一个基元而运行边缘方程并计算像素的覆盖。如果开启了抗锯齿功能,那么就会为每一个多采样以及覆盖采样执行覆盖操作。每一个光栅器在每个时钟周期内均可输出8个像素,整个芯片每个时钟周期内总共可输出32个光栅化的像素。
光栅器所生成的像素将被发送至Z坐标压缩(Z-cull)单元。Z坐标压缩单元获取像素图块(Pixel Tile)并将图块中像素的深度与显存中的现有像素进行比较。完全处于显存像素后面的像素图块将从流水线中剔除,从而就不再需要进一步的像素着色工作了。
PolyMorph引擎与Raster引擎对GPC的意义
PolyMorph引擎与Raster引擎的加入让GPC架构在平衡图形流水线方面实现了巨大突破。Tessellation(曲面细分)需要全新级别的三角形与光栅化性能。PolyMorph引擎为三角形、Tessellation(曲面细分)以及流出(Stream Out)等方面实现了大幅性能提升。四个并行Raster引擎在三角形设置与光栅化方面能够提供持久的高吞吐量。通过为每一个SM配备一个专用的Tessellator、为每一个GPC配备一个Raster引擎,GF100所能够实现的几何性能可达GT200的8倍。
全新的缓存构架
GT200的每组SM都有16KB共享内存,由其中8个SP使用。注意它们不是缓存(Cache),而是软件管理的内存(Memory),可以写入、读取数据。为了满足应用程序和通用计算的需要,Fermi引入了真正的缓存,每组SM拥有64KB可配置内存(合计1MB),可分成16KB共享内存加48KB一级缓存,或者48KB共享内存加16KB一级缓存,可灵活满足不同类型程序的需要。
GT200的每组TPC还有一个一级纹理缓存,不过当GPU出于计算模式的时候就没什么用了,故而Fermi并未在这方面进行增强。
整个芯片拥有一个容量768KB的共享二级缓存,执行原子内存操作(AMO)的时候比GT200快5-20倍。
改进的渲染输出单元
Fermi的渲染输出 (ROP) 子系统能够实现更大吞吐量以及更高效率。 一个Fermi ROP分区包含8个ROP单元,是GT200架构的2倍,并改进了单个ROP的性能。 8倍抗锯齿这一操作在上一代GPU上运行起来非常吃力,而Fermi构架的性能损失则小得多。
此外,Fermi还支持32倍覆盖采样抗锯齿 (CSAA),这种抗锯齿模式的计算负荷高于任何其它GPU上的采样抗锯齿模式,能呈现出更加平滑的几何图形边缘。
改进的效率
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个。
并行内核
在GPU编程术语中,内核是运行在GPU硬件上的一个功能或小程序。G80/GT200整个芯片每次只能执行一个内核,容易造成SM单元闲置。这在图形运算中不是问题,通用计算上就不行了。
Fermi的全局分配逻辑则可以向整个系统发送多个并行内核,不然SP数量翻一番还多,更容易浪费。
应用程序在GPU和CUDA模式之间的切换时间也快得多了,NVIDIA宣称是GT200的10倍。外部连接亦有改进,Fermi支持和CPU之间的并行传输,而之前都是串行的。
全新的ECC支持
AMD Cypress可以检测内存总线上的错误,却不能修正,而NVIDIAFermi的寄存器文件、一级缓存、二级缓存、DRAM全部完整支持ECC错误校验,这同样是为Tesla准备的,之前我们也提到过。
很多客户此前就是因为Tesla没有ECC才拒绝采纳,因为他们的安装量非常庞大,必须有ECC。
全新的统一64bit内存寻址
以前的架构里多种不同载入指令,取决于内存类型:本地(每线程)、共享(每组线程)、全局(每内核)。这就和指针造成了麻烦,程序员不得不费劲清理。
Fermi统一了寻址空间,简化为一种指令,内存地址取决于存储位置:最低位是本地,然后是共享,剩下的是全局。这种统一寻址空间是支持C++的必需前提。
GT80/GT200的寻址空间都是32-bit的,最多搭配4GBGDDR3显存,而Fermi一举支持64-bit寻址,即使实际寻址只有40-bit,支持显存容量最多也可达惊人的1TB,实际配置最多6GB GDDR5——仍是Tesla。
全新的指令集架构
下边对开发人员来说是非常酷的:NVIDIA宣布了一个名为“Nexus”的插件,可以在Visual Studio里执行CUDA代码的硬件调试,相当于把GPU当成CPU看待,难度大大降低。
Fermi的指令集架构大大扩充,支持DX11和OpenCL义不容辞,C++前边也已经说过,又多了VisualStudio,当然还有C、Fortran、OpenGL 3.1/3.2。
综合性能介于GeForce GTX 570和GeForce GTX 580之间。得益于1.5G的显存容量,在一些高负载且高分辨率高AA的游戏以及画质设定下,较GeForce GTX 570 1.2G的显存容量,GeForce GTX 480更不容易出现因显存不够导致的FPS急速下降的情况。
综合性能强于AMD Radeon HD6950 2GB,与AMD Radeon HD 6970 2GB伯仲之间。
支持蓝光3D
通过HDMI 1.4接口,在所有兼容的3D播放系统上均无缝支持1080p蓝光3D光盘,让用户在家中即可欣赏影院级画质的3D电影。兼容的3D观看系统包含主动快门式眼镜以及被动偏光显示器。
硬件视频解码加速
本技术集高清视频解码加速与后期处理于一身,能够在播放电影和视频时实现前所未有的画面清晰度、流畅的视频、准确的颜色以及精确的图像缩放。
支持TrueHD和DTS-HD音频比特流
完全支持TrueHD与DTS-HD高级无损多声道高清音频编解码器。
HDMI输出
支持HDMI 1.4输出接口,让显卡只用一根电缆即可将高清视频与音频信号都发送至高清电视。
支持双链路DVI
因TSMC的40nm工艺问题,以及GF100的庞大规模造成的低下良品率,使得nVIDIA不得不通过屏蔽一组SM来保证产量,造成了GF100首发规格的不完整:只有480SP,而不是设计之初的512SP。另一种说法是nVIDIA因GF100过高的发热和功耗问题而不得不通过屏蔽一组SM来缓解这些问题。
而最直接的,对于采用量产版GF100核心的GeForce GTX 480来说,在屏蔽一组SM后,就丢失了32SP,4个纹理单元和一个Tessellation引擎。