[GPU计算]CUDA基本介绍

上传人:油条 文档编号:2726277 上传时间:2017-07-26 格式:PPT 页数:72 大小:4.03MB
返回 下载 相关 举报
[GPU计算]CUDA基本介绍_第1页
第1页 / 共72页
[GPU计算]CUDA基本介绍_第2页
第2页 / 共72页
[GPU计算]CUDA基本介绍_第3页
第3页 / 共72页
[GPU计算]CUDA基本介绍_第4页
第4页 / 共72页
[GPU计算]CUDA基本介绍_第5页
第5页 / 共72页
点击查看更多>>
资源描述

《[GPU计算]CUDA基本介绍》由会员分享,可在线阅读,更多相关《[GPU计算]CUDA基本介绍(72页珍藏版)》请在金锄头文库上搜索。

1、CUDA基本介绍,基于Nvidia GPU的通用计算开发,GPU的优势,强大的处理能力 GPU接近1Tflops/s高带宽 140GB/s低成本 Gflop/$和Gflops/w高于CPU当前世界超级计算机五百强的入门门槛为12Tflops/s一个三节点,每节点4GPU的集群,总处理能力就超过12Tflops/s,如果使用GTX280只需10万元左右,使用专用的Tesla也只需20万左右,1. GPU高性能计算,GPU VS CPU: 计算能力,8x double precisionECCL1, L2 Caches,1 TF Single Precision4GB Memory,GPU/CPU

2、架构比较,延迟与吞吐量,CPU: 通过大的缓存保证线程访问内存的低延迟,但内存带宽小,执行单元太少,数据吞吐量小 需要硬件机制保证缓存命中率和数据一致性GPU: 高显存带宽和很强的处理能力提供了很大的数据吞吐量 缓存不检查数据一致性 直接访问显存延时可达数百乃至上千时钟周期,单核CPU已经走到了尽头,频率提高遇到了瓶颈 从p4时代至今主流处理器频率一直在2GHz-3GHz左右架构上已无潜力可挖。超线程 多流水线 复杂的分支预测 大缓存等技术已经将性能发挥到了极致,但是通用计算中的指令级并行仍然偏低上述技术占用了芯片上的绝大多数晶体管和面积,目的却只是让极少数的执行单元能够满负荷工作,GPU能够

3、更好的利用摩尔定律提供的晶体管,图形渲染过程高度并行,因此硬件也是高度并行的少量的控制单元,大量的执行单元显存被固化在了PCB上,拥有更好的EMI性能,因此运行频率高于内存 通过更大的位宽实现了高带宽,当前的单核并行计算产品,IBM Cell 应用主要见于PS3SUN Niarraga NPUNV/ATI GPU 大规模应用GPU最为常见,受市场牵引发展最快,性价比最高,架构比较,CPU GPU FPGA实现比较,CPU GPU FPGA实现比较,当前的GPU开发环境,Cg:优秀的图形学开发环境,但不适合GPU通用计算开发ATI stream:硬件上已经有了基础,但只有低层次汇编能够使用所有资

4、源。高层次抽象Brook本质上是基于上一代GPU的,缺乏良好的编程模型OpenCL:联合制定的标准,抽象层次较低,对硬件直接操作更多,代码需要根据不同硬件优化CUDA:目前最佳选择,未来的发展趋势,GPU通用计算进一步发展:更高版本的CUDA, OpenCL新产品涌现:Nvidia和AMD的下一代产品,Intel的LarraBeeCPU+GPU产品:减少了CPU-GPU通信成本,但存储器带宽和功耗面积等可能将制约集成度。在较低端的应用中将有用武之地。,CUDA的硬件架构适合通用计算,G8x系G9x系GT200系列标量机架构提高了处理效率,更加适合通用计算增加了shared memory和同步机

5、制,实现线程间通信以通用的处理器矩阵为主,辅以专用图形单元,GTX280性能,933 Gflops(MAD)单精度 116 Gflops双精度(MAD )512bit位宽ddr3显存,提供了140GB/s的带宽1G的显存,GT200框图,TPC,3 SMInstruction and constant cacheTextureLoad/store,SM,ROP,ROP,对DRAM进行访问TEXTURE机制对global的atomic操作,微架构比较,执行流水线,工作在通用计算模式下的GT200,SM架构,DUAL-Issue 并发,每二周期可以发射 一次指令FPU和SFU指令延迟 是四周期,某

6、些情况下可以让FPU和SFU并发执行,实现超标量理论处理能力峰值没有计算dual-issue双精度浮点计算不能dual-issue,CUDA架构GPU硬件特点,硬件资源模块化,根据市场定位裁减高度并行 存在TPC SM 两层 每个SM又有8SPSM内存在高速的shared memory和同步机制原子操作有利于实现通用计算中的数据顺序一致性shared memory Texture cache constant cache等高速片内存储器有助于提高数据访问速度,节省带宽,如何选购硬件,目前(2008. 12)只有CUDA能够完全发挥新一代GPU的全部计算能力。Nvidia的G80以上的GPU能够

7、支持CUDA。GT200系列不仅性能更强,而且具有很多实用的新特性Tesla专用流处理器拥有更大的显存和更高的核心频率,通过降低显存频率,屏蔽不需要的图形单元和改善散热获得了更好的稳定性,适合服务器或者集群使用,适合的应用,GPU只有在计算高度数据并行任务时才能发挥作用。在这类任务中,需要处理大量的数据,数据的储存形式类似于规则的网格,而对这写数据的进行的处理则基本相同。这类数据并行问题的经典例子有:图像处理,物理模型模拟(如计算流体力学),工程和金融模拟与分析,搜索,排序。 在很多应用中取得了1-2个数量级的加速,不适合的应用,需要复杂数据结构的计算如树,相关矩阵,链表,空间细分结构等,则不

8、适用于使用GPU进行计算。串行和事务性处理较多的程序并行规模很小的应用,如只有数个并行线程需要ms量级实时性的程序需要重新设计算法和数据结构或者打包处理,CUDA 执行模型,重点是将CPU做为终端(Host),而GPU做为服务器(Server)或协处理器(Coprocessor),或者设备(Device),从而让GPU来运行一些能够被高度线程化的程序。CUDA的基本思想是尽量得开发线程级并行(Thread Level Parallel),这些线程能够在硬件中被动态的调度和执行。,CUDA执行模型,调用核程序时CPU调用API将显卡端程序的二进 制代码传到GPUgrid运行在SPA上block运

9、行在SM上thread运行在SP上,grid block thread,Kernel不是一个完整的程序,而只是其中的一个关键并行计算步Kernel以一个网格(Grid)的形式执行,每个网格由若干个线程块(block)组成,每一个线程块又由最多512个线程(thread)组成。,grid block thread,一个grid最多可以有65535 * 65535个block一个block总共最多可以有512个thread,在三个维度上的最大值分别为512, 512和64,grid block thread,grid之间通过global memory交换数据block之间不能相互通信,只能通过gl

10、obal memory共享数据,不要让多个block写同一区段内容(不保证数据一致性和顺序一致性)同一block内的thread可以通过shared memory和同步实现通信block间粗粒度并行,block内thread细粒度并行,warp,Warp是硬件特性带来的概念,在CUDA C语言中是透明的(除vote函数),但应用中不能忽略一个warp中有32个线程,这是因为SM中有8个SP,执行一条指令的延迟是4个周期,使用了流水线技术一个half warp中有16个线程,这是因为执行单元的频率是其他单元的两倍,每两个周期才进行一次数据传输,SIMT编程模型,SIMT是对SIMD(Single

11、 Instruction, Multiple Data,单指令多数据)的一种变形。 两者的区别在于:SIMD的向量宽度是显式的,固定的,数据必须打包成向量才能进行处理;而SIMT中,执行宽度则完全由硬件自动处理了。 (每个block中的thread数量不一定是32)而SIMT中的warp中的每个线程的寄存器都是私有的,它们只能通过shared memory来进行通信。,分支性能,与现代的微处理器不同,Nvidia的SM没有预测执行机制-没有分支预测单元(Branch Predicator)。 在需要分支时,只有当warp中所有的线程都计算出各自的分支的地址,并且完成取指以后,warp才能继续往

12、下执行。 如果一个warp内需要执行N个分支,那么SM就需要把每一个分支的指令发射到每一个SP上,再由SP根据线程的逻辑决定需不需要执行。这是一个串行过程,此时SIMT完成分支的时间是多个分支时间之和。,存储器模型,RegisterLocalsharedGlobalConstantTextureHost memoryPinned host memory,寄存器与local memory,对每个线程来说,寄存器都是线程私有的-这与CPU中一样。如果寄存器被消耗完,数据将被存储在本地存储器(local memory)。Local memory对每个线程也是私有的,但是local memory中的数

13、据是被保存在显存中,而不是片内的寄存器或者缓存中,速度很慢。线程的输入和中间输出变量将被保存在寄存器或者本地存储器中。,Shared memory,用于线程间通信的共享存储器。共享存储器是一块可以被同一block中的所有thread访问的可读写存储器。访问共享存储器几乎和访问寄存器一样快,是实现线程间通信的延迟最小的方法。共享存储器可以实现许多不同的功能,如用于保存共用的计数器(例如计算循环次数)或者block的公用结果(例如计算512个数的平均值,并用于以后的计算)。,constant memory, texture memory,利用GPU用于图形计算的专用单元发展而来的高速只读缓存速度与

14、命中率有关,不命中时将进行对显存的访问常数存储器空间较小(只有64k),支持随机访问。从host端只写,从device端只读 纹理存储器尺寸则大得多,并且支持二维寻址。(一个数据的“上下左右”的数据都能被读入缓存)适合实现图像处理算法和查找表,全局存储器,使用的是普通的显存,无缓存,可读写,速度慢整个网格中的任意线程都能读写全局存储器的任意位置,并且既可以从CPU访问,也可以从CPU访问。,各种存储器的延迟,register: 1 周期shared memory: 1 周期( 无bank conflict ) - 16 周期( 发生16路 bank conflict)texture memor

15、y: 1 ( 命中) - 数百周期(不命中)constant memory: 1 ( 命中) - 数百周期( 不命中)global local memory: 数百周期,各存储器大小,每个SM中有64K(GT200)或者32K(G8x, G9x)寄存器,寄存器的最小单位是32bit的register file每个SM中有16K shared memory一共可以声明64K的constant memory,但每个SM的cache序列只有8K可以声明很大的texture memory,但是实际上的texture cache序列为每SM 6-8K,使用存储器时可能出现的问题,致命问题:无法产生正确结

16、果多个block访问global同一块,以及block内thread间线程通信时的数据一致性问题Texture的工作模式设置错误效率问题:大大增加访存延迟Shared bank conflict问题Global 合并访问问题,Bank conflict,Shared memory被分为了16个bank,单位是32-bit,相邻数据在不同bank中,对16余数相同的数据在同一bankHalf warp中的16个线程访问shared memory时最好一一对应,如果多个thread同时访问属于同一bank的数据将发生bank conflict16个线程读同一数据时,会发生一次广播,只用一个cycle,没有bank conflict,合并访问,访问显存时要遵守严格的合并访问规则将half warp访问global的起始位置严格的对齐到16的整数倍在G8x, G9x硬件上thread访问显存的位置必须逐一递增GT200有了很大的改进,对齐和次序比较灵活好的合并访问可以将存储器访问次数减少十几倍,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号