POPPUR爱换

 找回密码
 注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

搜索
查看: 3148|回复: 26
打印 上一主题 下一主题

原创:NVIDIA Fermi GPU架构简单解析.

[复制链接]
跳转到指定楼层
1#
发表于 2009-10-30 18:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 玉清 于 2009-10-30 23:35 编辑

作者:玉清

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

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

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

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

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

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

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

而在AMDRV770中,具有10SIMD engine,每个SIMD engine中有16SIMD Core,每个SIMD Core相当于一个5D ALURV770则共有160个,GT200中有2401D ALU.

许多DIY爱好者称之SP为类似于CPU多核的流处理器,这个称呼严格的看起来存在不妥,把SMCPU的核相比更加合适。和现在的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 来执行 ThreadWarp内的线程是静态的,即在属于同一个warp内的thread之间进行通信,不需要进行栅栏同步(barrier)

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

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

简单解析Fermi

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

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

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

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

同时,在GT200G80中,都是用IEEE 754
2#
 楼主| 发表于 2009-10-30 18:01 | 只看该作者
本帖最后由 玉清 于 2009-10-30 23:36 编辑

Fermi存储器改变:

刚才提到,G80和GT200中每个SM中有16KB的
shared memory,这在Fermi已经做出了极大的改观。
有些程式根本就不会用到shared memory,它们需要的是缓冲来提高性能,而有的程式对16KBshared memory实在难以满足,因此Fermi对此作出了改变。
Fermi具有64KB的共享存储器,这64KB的存储器可以作为48 KB的共享内存和16 KBL1缓存,或者成为16 KB的共享内存和48 KBL1缓存。

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

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

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

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

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

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

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

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



参考文献:

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 --张舒 褚艳利 赵开勇 张钰勃
一些关于Fermi的集中问答--- hpctech.com 张舒
回复 支持 反对

使用道具 举报

3#
 楼主| 发表于 2009-10-30 18:02 | 只看该作者
本帖最后由 玉清 于 2009-10-30 23:37 编辑

本人小白,欢迎大家多多提出意见和建议,谢谢.
回复 支持 反对

使用道具 举报

4#
发表于 2009-10-30 18:06 | 只看该作者
支持,技术帖
回复 支持 反对

使用道具 举报

5#
发表于 2009-10-30 18:13 | 只看该作者
强力支持原创技术贴

顶后再看
回复 支持 反对

使用道具 举报

头像被屏蔽
6#
发表于 2009-10-30 18:16 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

7#
 楼主| 发表于 2009-10-30 18:17 | 只看该作者
6# 奶牛老仙

这是当然,我只是小白而已,比我强大那是肯定的.
回复 支持 反对

使用道具 举报

头像被屏蔽
8#
发表于 2009-10-30 18:18 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

9#
 楼主| 发表于 2009-10-30 18:18 | 只看该作者
额?楼上的要表达什么意思?
回复 支持 反对

使用道具 举报

10#
发表于 2009-10-30 18:18 | 只看该作者
看来,费米将会是相当不错的FAH平台

希望能把GPU多任务的资源分配问题解决好
回复 支持 反对

使用道具 举报

11#
发表于 2009-10-30 18:36 | 只看该作者
额?楼上的要表达什么意思?
玉清 发表于 2009-10-30 18:18

或许他对国内的学术腐败很悲观,恐怕认为参考文献都是那回事
回复 支持 反对

使用道具 举报

12#
发表于 2009-10-30 18:41 | 只看该作者
这个能算学术文章?

要能算的话,都是科学技术界的悲剧了c
Seraphlich 发表于 2009-10-30 18:39

我又没说这个是学术文章……

再说了,参考文献可以引用正式出版物、期刊文章甚至厂家的说明书,我初步感觉LZ的参考文献基本没有问题
回复 支持 反对

使用道具 举报

13#
 楼主| 发表于 2009-10-30 18:50 | 只看该作者
楼上的Seraphlich同学,我没空去JJYY饭A还是饭N的问题,市场的XX策略我也没心思和兴趣去关心。

我已经之前说过我只是小白而已,也没说过这算什么学术文章,假如是学术文章的话也犯不着在这里发了,假如对文章有任何意见和建议欢迎以礼貌的态度提出来,本人虚心接受。
回复 支持 反对

使用道具 举报

14#
 楼主| 发表于 2009-10-30 19:15 | 只看该作者
我是对yamhill 说的
Seraphlich 发表于 2009-10-30 19:13


呵呵,如有冒犯之处,请见谅。
回复 支持 反对

使用道具 举报

15#
发表于 2009-10-30 19:22 | 只看该作者
仔细看看,我并没有说谁什么啊?

一个说文献“哎”

一个问?

我说是人家大概对参考文献有疑问,

yamhill 说可能是对学术腐败导使人没信心了

我说这个不能算学术文章

仅这个意思而已,没有针对 ...
Seraphlich 发表于 2009-10-30 19:20

学术腐败,造成了氛围,现在你我都生活在这种氛围当中,出现某楼很正常

可是……我真没说玉清这文章是学术文章吖……他也说是小白文章

我个人认为,这个文章还是可以学学的
回复 支持 反对

使用道具 举报

16#
 楼主| 发表于 2009-10-30 19:28 | 只看该作者
额,对Seraphlich 同学和楼上的诸位同学感到抱歉,我自己一下子说话过了点,失礼,实在抱歉。

还请见谅。

感谢大家的理解和支持。
回复 支持 反对

使用道具 举报

17#
发表于 2009-10-30 19:33 | 只看该作者
消费级 关注的死性能与价格
回复 支持 反对

使用道具 举报

18#
发表于 2009-10-30 19:50 | 只看该作者
偶早不是同学啦~~~所以文章看了不少了
Seraphlich 发表于 2009-10-30 19:40

昵称嘛
回复 支持 反对

使用道具 举报

19#
发表于 2009-10-30 20:04 | 只看该作者
感觉可以到学术期刊上发表了
偶行外的看不懂
回复 支持 反对

使用道具 举报

20#
发表于 2009-10-30 20:36 | 只看该作者
自由人士。
Seraphlich 发表于 2009-10-30 20:35

一样
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

广告投放或合作|网站地图|处罚通告|

GMT+8, 2025-4-18 12:20

Powered by Discuz! X3.4

© 2001-2017 POPPUR.

快速回复 返回顶部 返回列表