- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
作者:玉清.在过去的几年中,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‐1985的单精度浮点标准。尤其是G80以及G92等GPU,是不支持双精度的,GT200尽管支持双精度
文档评论(0)