论坛   IT娱乐新视界   [显卡技术]NVIDIA Fermi GPU架构简单解析
返回列表
查看: 800|回复: 0
收起左侧

[显卡技术]NVIDIA Fermi GPU架构简单解析

[复制链接]

3万

回帖

225

好友

9万

经验

超级版主

Vampire

威望
506

摄影爱好者论坛顶梁柱传说只有读到博士后的人才可拥有这枚勋章

发表于 2009-11-10 12:27:21 | 显示全部楼层 |阅读模式
在过去的几年中,GPU的发展产生了较大的变化,GPU强大的性能被局限于处理图形渲染的任务,无疑是对计算资源的浪费,随着GPU可
编程能力不断提高,通用计算(GPGPU: General-purpose computing on graphics
processing units)应运而生,目前已经取得部分显著成效,部分应用带来的性能提升也是非常可观.



在DirectX 10规范之前的GPGPU计算中,可编程的单元主要是顶点着色器和像素着色器,两者在物理上是分离的,数量也是固定的,一个程序要想发挥其最大性能有较大
的编程难度。



最早的GPGPU的开发直接使用了图形学的API,将任务映射成纹理的渲染过程,使用汇编或者高级着色器语言Cg,HLSL等等)编写程序,然后通过图形学API执行(Direct3D和OpenGL),这样的开发不仅难度较大,程序优化也有很大难度,对开发人
员的入门要求也是较高,因此,传统的GPGPU没有被广泛应用.



2007年6月,NVIDIA公司推出了CUDA,CUDA不
需要借助图形学API,而是采用了类C语言进行开
发。同时,CUDA的GPU采用了统一处理架构,以
及引入了片内共享存储器,这大大降低了基于GPU的并行计算程式的开发难度。当然,开发人员仍然需要掌
握并行算法和GPU架构相关的知识.



G80和GT200
GPU架构回顾:




最早推出的G80架构中,采用了128个SP(流处理单元Streaming Processor),每8个SP组成一个SM(多流处理器Streaming Multiprocessors),每3个SM再组成一个TPC(ThreadProcessing
Cluster,线程处理器群).



注:在G80架构中,是两个SM组成一个TPC,而GT200中,
是三个SM组成一个TPC.



G80里面有8个TPC,而GT200增加到了10个,
其中,每个TPC内部还有一个纹理流水线.



而在AMD的RV770中,具有10个SIMD engine,每个SIMD engine中有16个SIMD Core,每个SIMD Core相当于一个5D ALU,RV770则共有160个,GT200中
有240个1D ALU.




许多DIY爱好者称之SP为类似于CPU多核的”流
处理器”,这个称呼严格的看起来存在不妥,把SM与CPU的核相比更加合适。和现在的CPU的核一样,SM也拥有独立的取指和调度单元构成的完整前端。SP 并不能算作独立的处理器核,
它们具有独立的寄存器和指令指针,但是并没有取指和调度单元来构成完整前端.









CUDA 编程模型简述:



在 CUDA 的架构下,程式分为两个部份:host
和 device 。Host 是指在 CPU 上执行的部份,而 device 端则是在GPU上执行的部份。

Device 端的部分称之为"kernel"。通常
host 端程序会将数据准备好后,复制到显存中,再由GPU执
行 device 端程序,完成后再由 host 端
程序将结果从GPU中取回。



在CUDA架构下,线程的最小单元是thread,多个thread组成一个block,多个block再组成一个grid,不同block之前的thread不能读写同一shared memory共享内存,因此,block里面的thread之间的通信和同步所带来的开销是比较大的。



SM 以 32 个 Thread 为一组的 Warp 来执行 Thread。Warp内的线程是静态的,即在属于同一个warp内的thread之间进行通信,不需要进行栅栏同步(barrier)。



GT200中每个SM中有16KB的sharedmemory供8个SP共享,这也是GT200中线程中进行低延迟数据通信的唯一方法,因此地位至关
重要。



但是16KB的shared memory可能对于某些程式来说偏小,所以Fermi在此作出了重大的改变。



简单解析Fermi:



Fermi的设计根据G80和GT200的架构作出的很多缺陷来改变。



在Fermi中,每个SM中的数量不再是GT200的8个SP,而是变成了32个SP,NVIDIA现在又称之为CUDA Core,总共具有16个SM,所以总共有512个SP。而在GT200中,是30个SM,240个SP。



至于Fermi为什么要做出一个SM内设计成32个SP,减少SM总数的这样的设计,目前还不明白是为什么,不过这样设计或许可以减少控制逻辑控制单元。



Fermi支持每一个block里面启动1536个线程。而在GT200,这一数量是512个。



同时,在GT200和G80中,都是用IEEE 754?985的单精度浮点标准。尤其是G80以及G92等GPU,是不支持双精度的,GT200尽管支持
双精度,但是所带来的时间开销也是比较大的。



Fermi采用的是IEEE 754?008的单精度浮点标准,单精度和双精度都同时支持FMA功能FMA是通过MAD来完成乘法和加法操作,同时保证没有精度的损失。双精度的浮点计算在高性能计算中有着核心的重要位置。 Fermi架构为支持双精度浮点运算进行了特别设计每一个SM在一个时钟周期内可以完成16个双精度浮点数的FMA操作。这是在GT200架构以后又一激动人心的设计。

Fermi拥有32位整数单元,很多常用整数运算的指令吞吐量都有了几倍的提升。Fermi双精度单元的提升也极为明显。由于local memory速度提高,因此高精度的超越函数的吞吐量也会有一个数量级的提升。

Fermi存储器改变:



刚才提到,G80和GT200中每个
SM中有16KB的shared memory,这在Fermi已经做出了极大的改观。

有些程式根本就不会用到shared memory,它们需要的是
缓冲来提高性能,而有的程式对16KB的shared memory实在难以满足,因此Fermi对此作出了改变。

Fermi具有64KB的共享存储器,这64KB的存储器可以作为48 KB的共享内存和16 KB的L1缓存,或者成为16 KB的共享内存和48 KB的L1缓存。



同时,Fermi也首次增加了768KB大小的L2缓存,可以提供所有的存储和纹理操作,L2缓存是和所有SM相通的。



Fermi增加了ECC功能

,在大型集群和高可靠性领域中,ECC是一个重要的特性。这是业界第一款支持ECC校验的GPU。Fermi的寄存器,共享内存,L1和L2缓存以及显存DRAM都支持ECC校验,这增加了系统的可靠性。



同时,Fermi的原子操作能力大为提升,原子操作
对于并行计算来说至关重要,Fermi增加了众多的原子操控单元,以及使用了L2 缓存,使得Fermi的原子操控大大提升。



多个Kernel并
发执行和支持C++:



Fermi支持同一个程式中的多个Kernel同时执行在一个Ferimi架构的GPU上面,这提高了GPU的利用率。



像CPU一样,GPU也可以利用context的切换来管理多任务的切换,Fermi的pipeline经过优化设计,把context切换时间开销降低到了10-20ms,性
能得到极大的提高,这大大的优化了Kernel-to-Kernel的程式.



对于C++的支持毫无疑问是一个让人激动的设计,Fermi和PTX2.0
ISA实现了统一寻址空间,可以统
一寻址3种不同的内存地址(线程私有变量,block的共享内存和全局内存)来进行存/取操作。



统一地址空间的实现,让Fermi完全支持C++编程。在C++中,所有的变量和函数都在一个object中,通过指针访问。PTX2.0可以通过统一指针管理找到内存上的object,Fermi提供的硬件寻址方式可以自动的把指针对应到相应的物理地址。同
时,Fermi同样提供C++虚函数(virtual
function),函式指针(function pointer),new,delete,try,catch等等支持。







参考文献:



Whitepaper NVIDIA’s Next Generation CUDACompute Architecture: Fermi
---NVIDIA Corporation.

Fermi 白皮书中文翻译 v0.1版本 --
NVIDIA Corporation/翻译:赵开勇

深入浅出谈CUDA. --作者:Hotball

NVIDIA's GT200--- Inside a ParallelProcessor  --Dr.David Kanter

NVIDIA Fermi 体系架构技术预览 ---Edison Chen

GPU高性能运算之CUDA --张舒 褚艳利 赵开勇 张钰勃/
中国水利水电出版社
当一扇幸福之门关闭时,另一扇就会打开。
您需要登录后才可以回帖 登录 | 立即注册

收藏:1 | 帖子:5190

有图有真相