决战性能之巅!NV双芯旗舰GTX590评测
讲完了GPC(内含光栅引擎)和SM(内含多形体引擎)之后,就轮到了GF100的最小单元——流处理器,现在NVIDIA将它称为CUDA核心。
9.4 GF100图形架构:第三代流处理器的诸多改进
论单个CUDA核心,GF100与GT200/G80的基本功能是相同的,沿用了之前的1D标量流处理器设计,无论程序要求什么类型的指令,都可以通过线程分配器打散之后交给CUDA核心处理,从而保证任何指令都能获得100%的执行效率。
GF100的SM与CUDA结构
虽说像素和顶点等4D指令依然是主力,但在进入DX10时代后Z缓冲区(1D)或纹理存取(2D)等非4D指令所占比重越来越多,此时NVIDIA的标量流处理器架构处理起来依然如鱼得水。
● CUDA核心的改进:
每一个CUDA核心都拥有一个完全流水线化的整数算术逻辑单元(ALU)以及浮点运算单元(FPU)。GF100采用了最新的IEEE754-2008浮点标准,2008标准的主要改进就是支持多种类型的舍入算法。新标准可以只在最终获取数据时进行四舍五入,而以往的标准是每进行一步运算都要四舍五入一次,最后会产生较大的误差。
GF100能够为32bit单精度和64bit双精度运算提供FMA(Fused Multiply-Add,积和熔加)指令,而GT200只在64bit时才能提供。FMA不仅适用于高性能计算领域,事实上在渲染紧密重叠的三角形时,新的FMA算法能够最大限度的减少渲染误差。
● 16个载入/存储单元:
每一个SM都拥有16个载入/存储单元,从而在每个时钟周期内均可为16个线程运算源地址与目标地址。支持的单元能够将每个地址的数据载入和存储到高速缓存或显存中。
● 四个特殊功能单元:
GF100每个SM内部还拥有额外的四个SFU(Special Function Units,特殊功能单元),可用于执行抽象的指令,例如正弦、余弦、倒数和平方根,图形插值指令也在SFU上执行。每个SFU在一个时钟周期内针对每个线程均可执行一条指令,一个Warp(32个线程)的执行时间可超过八个时钟周期。SFU流水线从分派单元中分离出来,让分派单元能够在SFU处于占用状态时分发给其他执行单元。复杂的程序着色器在特殊功能专用硬件上的运行优势尤为明显。
● 双Warp调度器:
SM可对32个为一组的并行线程(又叫做Warp)进行调度。每个SM拥有两个Warp调度器以及两个指令分派单元。这样就能够同时发出和执行两个Warp。
GF100的双Warp调度器可选出两个Warp,从每个Warp发出一条指令到16个核心、16个载入/存储单元或4个特殊功能单元。因为Warp是独立执行的,所以GF100的调度器无需检查指令流内部的依存关系。通过利用这种优秀的双指令执行(Dual-issue)模式,GF100能够实现接近峰值的硬件性能。
大多数指令都能够实现双路执行,两条整数指令、两条浮点指令或者整数、浮点、载入、存储的混合指令以及SFU指令均可同时执行。但双精度指令不支持与其它指令同时分派。