GPU计算CUDA基本介绍.ppt

上传人:wuy****n92 文档编号:53622613 上传时间:2022-10-26 格式:PPT 页数:73 大小:764.50KB
返回 下载 相关 举报
GPU计算CUDA基本介绍.ppt_第1页
第1页 / 共73页
GPU计算CUDA基本介绍.ppt_第2页
第2页 / 共73页
点击查看更多>>
资源描述

《GPU计算CUDA基本介绍.ppt》由会员分享,可在线阅读,更多相关《GPU计算CUDA基本介绍.ppt(73页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、CUDA基本介绍基本介绍基于Nvidia GPU的通用计算开发张舒l电子科技大学 电子工程学院 06级硕士研究生l信号探测与获取技术专业l研究方向:合成孔径雷达成像与雷达目标像识别l信号处理与模式识别的算法与硬件实现研究GPU的优势的优势l强大的处理能力 GPU接近1Tflops/sl高带宽 140GB/sl低成本 Gflop/$和Gflops/w高于CPUl当前世界超级计算机五百强的入门门槛为12Tflops/sl一个三节点,每节点4GPU的集群,总处理能力就超过12Tflops/s,如果使用GTX280只需10万元左右,使用专用的Tesla也只需20万左右GPU/CPU计算能力比较计算能力

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

3、述技术占用了芯片上的绝大多数晶体管和面积,目的却只是让极少数的执行单元能够满负荷工作GPU能够更好的利用摩尔定律提供的能够更好的利用摩尔定律提供的晶体管晶体管l图形渲染过程高度并行,因此硬件也是高度并行的l少量的控制单元,大量的执行单元l显存被固化在了PCB上,拥有更好的EMI性能,因此运行频率高于内存 通过更大的位宽实现了高带宽当前的单核并行计算产品当前的单核并行计算产品lIBM Cell 应用主要见于PS3lSUN Niarraga NPUlNV/ATI GPU 大规模应用lGPU最为常见,受市场牵引发展最快,性价比最高架构比较架构比较硬件硬件CPUCPUGPUGPUFPGAFPGAAES

4、-128AES-128解解密实测速度密实测速度(GByte/sGByte/s)0.1190.119(Core2E6700Core2E6700中单核)中单核)1.781.78(FX9800GTX+FX9800GTX+)1.021.02(互联网资料中单片互联网资料中单片FPGAFPGA最大最大值值)开发难度开发难度小小较小较小大大增加功能增加功能容易容易容易容易难难硬件升级硬件升级无需修改代码无需修改代码无需修改代码无需修改代码需要修改代码需要修改代码与主控端通信与主控端通信不需要不需要通过通过PCI-EPCI-E,实际速度一,实际速度一般为般为3G3G左右,通过左右,通过APIAPI实实现,较简

5、单现,较简单需要为需要为FPGAFPGA编写额外的驱动编写额外的驱动程序,实现通信协议需要额程序,实现通信协议需要额外的硬件资源外的硬件资源性能性能/成本成本高高低低高高片外存储器片外存储器内存,容量大,速度低内存,容量大,速度低显存,容量较大,速度显存,容量较大,速度高高FPGAFPGA板上内存,一般为板上内存,一般为DDRII,DDRII,速度低速度低开发周期开发周期短短短短长长CPU GPU FPGA实现比较实现比较当前的当前的GPU开发环境开发环境lCg:优秀的图形学开发环境,但不适合GPU通用计算开发lATI stream:硬件上已经有了基础,但只有低层次汇编能够使用所有资源。高层次

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

7、hared memory和同步机制,实现线程间通信l以通用的处理器矩阵为主,辅以专用图形单元GTX280性能性能l933 Gflops(MAD)单精度 116 Gflops双精度(MAD)l512bit位宽ddr3显存,提供了140GB/s的带宽l1G的显存GT200框图框图TPC3 SMInstruction and constant cacheTextureLoad/storeSMROPROPl对DRAM进行访问lTEXTURE机制l对global的atomic操作微架构比较微架构比较执行流水线执行流水线工作在通用计算模式下的工作在通用计算模式下的GT200SM架构架构DUAL-Issue

8、 并发并发l每二周期可以发射 一次指令lFPU和SFU指令延迟 是四周期l某些情况下可以让FPU和SFU并发执行,实现超标量l理论处理能力峰值没有计算dual-issuel双精度浮点计算不能dual-issueCUDA架构架构GPU硬件特点硬件特点l硬件资源模块化,根据市场定位裁减l高度并行 存在TPC SM 两层 每个SM又有8SPlSM内存在高速的shared memory和同步机制l原子操作有利于实现通用计算中的数据顺序一致性lshared memory Texture cache constant cache等高速片内存储器有助于提高数据访问速度,节省带宽如何选购硬件如何选购硬件l目前

9、(2008.12)只有CUDA能够完全发挥新一代GPU的全部计算能力。Nvidia的G80以上的GPU能够支持CUDA。lGT200系列不仅性能更强,而且具有很多实用的新特性lTesla专用流处理器拥有更大的显存和更高的核心频率,通过降低显存频率,屏蔽不需要的图形单元和改善散热获得了更好的稳定性,适合服务器或者集群使用适合的应用适合的应用lGPU只有在计算高度数据并行任务时才能发挥作用。在这类任务中,需要处理大量的数据,数据的储存形式类似于规则的网格,而对这写数据的进行的处理则基本相同。这类数据并行问题的经典例子有:图像处理,物理模型模拟(如计算流体力学),工程和金融模拟与分析,搜索,排序。l

10、在很多应用中取得了1-2个数量级的加速不适合的应用不适合的应用l需要复杂数据结构的计算如树,相关矩阵,链表,空间细分结构等,则不适用于使用GPU进行计算。l串行和事务性处理较多的程序l并行规模很小的应用,如只有数个并行线程l需要ms量级实时性的程序l需要重新设计算法和数据结构或者打包处理CUDA 执行模型执行模型 l重点是将CPU做为终端(Host),而GPU做为服务器(Server)或协处理器(Coprocessor),或者设备(Device),从而让GPU来运行一些能够被高度线程化的程序。lCUDA的基本思想是尽量得开发线程级并行(Thread Level Parallel),这些线程能够

11、在硬件中被动态的调度和执行。CUDA执行模型执行模型l调用核程序时CPU调用API将显卡端程序的二进 制代码传到GPUlgrid运行在SPA上lblock运行在SM上lthread运行在SP上grid block threadlKernel不是一个完整的程序,而只是其中的一个关键并行计算步lKernel以一个网格(Grid)的形式执行,每个网格由若干个线程块(block)组成,每一个线程块又由最多512个线程(thread)组成。grid block threadl一个grid最多可以有65535*65535个blockl一个block总共最多可以有512个thread,在三个维度上的最大值分

12、别为512,512和64grid block threadlgrid之间通过global memory交换数据lblock之间不能相互通信,只能通过global memory共享数据,不要让多个block写同一区段内容(不保证数据一致性和顺序一致性)l同一block内的thread可以通过shared memory和同步实现通信lblock间粗粒度并行,block内thread细粒度并行warplWarp是硬件特性带来的概念,在CUDA C语言中是透明的(除vote函数),但应用中不能忽略l一个warp中有32个线程,这是因为SM中有8个SP,执行一条指令的延迟是4个周期,使用了流水线技术l一

13、个half warp中有16个线程,这是因为执行单元的频率是其他单元的两倍,每两个周期才进行一次数据传输SIMT编程模型编程模型lSIMT是对SIMD(Single Instruction,Multiple Data,单指令多数据)的一种变形。l两者的区别在于:SIMD的向量宽度是显式的,固定的,数据必须打包成向量才能进行处理;而SIMT中,执行宽度则完全由硬件自动处理了。(每个block中的thread数量不一定是32)l而SIMT中的warp中的每个线程的寄存器都是私有的,它们只能通过shared memory来进行通信。分支性能分支性能l与现代的微处理器不同,Nvidia的SM没有预测执

14、行机制-没有分支预测单元(Branch Predicator)。l在需要分支时,只有当warp中所有的线程都计算出各自的分支的地址,并且完成取指以后,warp才能继续往下执行。l如果一个warp内需要执行N个分支,那么SM就需要把每一个分支的指令发射到每一个SP上,再由SP根据线程的逻辑决定需不需要执行。这是一个串行过程,此时SIMT完成分支的时间是多个分支时间之和。存储器模型存储器模型lRegisterlLocallsharedlGloballConstantlTexturelHost memorylPinned host memory寄存器与寄存器与local memoryl对每个线程来说

15、,寄存器都是线程私有的-这与CPU中一样。如果寄存器被消耗完,数据将被存 储 在 本 地 存 储 器(local memory)。Local memory对每个线程也是私有的,但是local memory中的数据是被保存在显存中,而不是片内的寄存器或者缓存中,速度很慢。线程的输入和中间输出变量将被保存在寄存器或者本地存储器中。Shared memoryl用于线程间通信的共享存储器。共享存储器是一块可以被同一block中的所有thread访问的可读写存储器。l访问共享存储器几乎和访问寄存器一样快,是实现线程间通信的延迟最小的方法。l共享存储器可以实现许多不同的功能,如用于保存共用的计数器(例如计

16、算循环次数)或者block的公用结果(例如计算512个数的平均值,并用于以后的计算)。constant memory,texture memory l利用GPU用于图形计算的专用单元发展而来的高速只读缓存l速度与命中率有关,不命中时将进行对显存的访问l常数存储器空间较小(只有64k),支持随机访问。从host端只写,从device端只读 l纹理存储器尺寸则大得多,并且支持二维寻址。(一个数据的“上下左右”的数据都能被读入缓存)适合实现图像处理算法和查找表全局存储器全局存储器 l使用的是普通的显存,无缓存,可读写,速度慢l整个网格中的任意线程都能读写全局存储器的任意位置,并且既可以从CPU访问,

17、也可以从CPU访问。各种存储器的延迟各种存储器的延迟lregister:1 周期lshared memory:1 周期(无bank conflict)-16 周期(发生16路 bank conflict)ltexture memory:1(命中)-数百周期(不命中)lconstant memory:1(命中)-数百周期(不命中)lglobal local memory:数百周期各存储器大小各存储器大小l每个SM中有64K(GT200)或者32K(G8x,G9x)寄存器,寄存器的最小单位是32bit的register filel每个SM中有16K shared memoryl一共可以声明64K的

18、constant memory,但每个SM的cache序列只有8Kl可以声明很大的texture memory,但是实际上的texture cache序列为每SM 6-8K使用存储器时可能出现的问题使用存储器时可能出现的问题l致命问题:无法产生正确结果l多个block访问global同一块,以及block内thread间线程通信时的数据一致性问题lTexture的工作模式设置错误l效率问题:大大增加访存延迟lShared bank conflict问题lGlobal 合并访问问题Bank conflictlShared memory被分为了16个bank,单位是32-bit,相邻数据在不同ba

19、nk中,对16余数相同的数据在同一banklHalf warp中的16个线程访问shared memory时最好一一对应,如果多个thread同时访问属于同一bank的数据将发生bank conflictl16个线程读同一数据时,会发生一次广播,只用一个cycle,没有bank conflict合并访问合并访问l访问显存时要遵守严格的合并访问规则l将half warp访问global的起始位置严格的对齐到16的整数倍l在G8x,G9x硬件上thread访问显存的位置必须逐一递增lGT200有了很大的改进,对齐和次序比较灵活l好的合并访问可以将存储器访问次数减少十几倍CUDA APICUDA C

20、语言语言 l由Nvidia的CUDA编译器(nvcc)编译 lCUDA C不是C语言,而是对C语言进行扩展形成的变种。CUDA对对C的扩展:函数限定符的扩展:函数限定符l对函数有了限定符,用来规定函数是在host还是在device上执行,以及这个函数是从host调用还是从device调用。这些限定符是:_device_,_host_和_global_。CUDA对对C的扩展:函数限定符的扩展:函数限定符l_device_函数在device端执行,并且也只能从device端调用,即作为device端的子函数来使用l_global_函数即kernel函数,它在设备上执行,但是要从host端调用l_h

21、ost_函数在host端执行,也只能从host端调用,与一般的C函数相同CUDA对对C的扩展:变量限定符的扩展:变量限定符l对变量类型的限定符,用来规定变量被存储在哪一种存储器上。l传统的在CPU上运行的程序中,编译器就能自动决定将变量存储在CPU的寄存器还是在计算机的内存中。l而在CUDA中,不仅要使用host端的内存,而且也要使用显卡上的显存和GPU上的几种寄存器和缓存。在CUDA编程模型中,一共抽象出来了多达8种不同的存储器!CUDA对对C的扩展:变量限定符的扩展:变量限定符l_device_l_device_限定符声明的变量存在于device端,其他的变量限定符声明的变量虽然存在于不同

22、的存储器里,但总体来说也都在device端。所以_device_限定符可以与其他的限定符联用。当单独使用_device_限定符修饰变量时,这个变量:l存在于global memory中;l变量生命周期与整个程序一样长;l可以被grid中所有的线程都可以访问,也可以从host端通过运行时库中的函数访问。CUDA对对C的扩展:变量限定符的扩展:变量限定符l_constant_l_constant_限 定 符,可 以 与 _device_联 用,即_device_ _constant_,此 时 等 同 于 单 独 使 用_constant_。使用_constant_限定符修饰的变量:l存在于cons

23、tant memory中,访问时速度一般比使用global memory略快;l变量生命周期与整个程序一样长;l可以被grid中所有的线程读,从host端通过运行时库中的函数写。CUDA对对C的扩展:变量限定符的扩展:变量限定符l_shared_l_shared_限定符,可以与_device_联用,即_device_ _shared_,此时等同于单独使用_shared_。使用_shared_限定符修饰的变量:l存在于block中的shared memory中;l变量生命周期与block相同;l只有同一block内的thread才能访问。CUDA对对C的扩展:的扩展:kernel执行参数执行参数

24、l运算符,用来传递一些kernel执行参数 lGrid的大小和维度lBlock的大小和维度l外部声明的shared memory大小lstream编号CUDA对对C的扩展:内建变量的扩展:内建变量lDim3 ThreadIdx(三维)lDim3 ThreadDim(三维)lDim3 BlockIdx(二维)lDim3 BlockDim(三维)执行参数与内建变量的作用执行参数与内建变量的作用l各个thread和block之间的唯一不同就是threadID和BlockID,通过内建变量控制各个线程处理的指令和数据lCPU运行核函数时的执行参数确定GPU在SPA上分配多少个block,在SM上分配多

25、少个threadCUDA APIlCUDA API需要CUDA driver API才能运行,新版本的Nvidia驱动已经包含了CUDA driver APIlCUDA runtime API是CUDA API的可选组件,它是一种动态编译器(JIT),能够直接访问实际中的底层硬件架构。CUDA API功能功能l设备管理(Device management)l上下文管理(Context management)l存储器管理(Memory management)l代码块管理(Code Module management)l执行控制(Excution Control)l纹理索引管理(Texture R

26、eference management)l与 OpenGL和 Direct3D的 互 操 作(Interoperity with OpenGL and Direct3D)NVCC 编译器编译器l生成三种不同的输出:PTX,CUDA二进制序列和标准C NVCC 编译器编译器 PTXlPTX(Parallel Thread eXecution)作用类似于汇编,是为动态编译器(包含在标准的Nvidia 驱动中)设计的输入指令序列。这样,不同的显卡使用不同的机器语言,而动态编译器却可以运行相同的PTX。这样做使PTX成为了一个稳定的接口,带来了很多好处:后向兼容性,更长的寿命,更好的可扩展性和更高的性

27、能,但在一定程度上也限制了工程上的自由发挥。这种技术保证了兼容型,但也使新一代的产品必须拥有上代产品的所有能力,这样才能让今天的PTX代码在未来的系统上仍然可以运行。NVCC 编译器编译器 CUBINl虽然PTX和JIT编译器提供了很高的性能,但也不是在所有的场合都适用。某些独立软件开发商倾向于牺牲性能,以获得更好的可确定性和可验证性。JIT编译器的输出随着目标硬件和一些其他因素会发生变化。对于需要能够确定的代码的独立软件开发商(比如很多财经软件开发商),它们可以将代码直接编译成CUDA二进制代码,这样就能避免JIT过程的不确定性。直接编译得到的CUDA二进制代码是与特定的硬件和驱动相关的。N

28、VCC 编译器编译器 ClNvcc的输出还包括标准C。由nvcc生成的C代码将被重定向到其他编译器进行编译,比如ICC,GCC或者其他合适的高性能编译器。CUDA中明确的表示了程序中的并行度没不仅在用于编写运行在Nvidia GPU上的代码时非常有效,而且为多核CPU生成高性能代码。在某些应用中,CUDA生成的代码比标准的x86编译器生成的代码的性能提高了4倍。CUDA API 库函数库函数lCUFFT GPU进行傅立叶变换的函数库,提供了与广泛使用的FFTW库相似的接口。lCUBLAS(CUDA Basic Linear Algorithm Subprogrammes)库是一个基本的矩阵与向

29、量的运算库,提供了与BLAS相似的接口,可以用于简单的矩阵计算,也可以作为基础构建更加复杂的函数包,如LAPACK等。lCUDPP(CUDA Data parallel primitives)库提供了很多基本的常用并行操作函数,如排序、搜索等,可以作为基本组件快速的搭建出并行计算程序。如何编写如何编写CUDA程序程序l硬件实现不完全透明,需要掌握硬件实现的原理l并行度高,适合CPU的小规模并行算法不一定适用,需要重新设计算法或者参考在集群上使用的并行算法如何编写如何编写CUDA程序?程序?l确定适合GPU的算法,找出算法中的并行部分l根据需要使用正确的存储器,减少对GPU片外的显存的读取,提高

30、计算密集度l编写调试,实现算法功能,验证结果的准确性l优化,提高执行单元利用率,隐藏访存延时l实现流操作,协调与CPU的操作,编写CPU调用接口,实现节点内多GPU并行和集群中多节点并行优化原则:优化原则:active blockl一个SM中可以有多个block等待处理,在一个warp需要访问存储器或者同步时,另外一个warp可以使用执行单元的资源l增加active block对提高SM利用率有好处l增加active block只是手段,不是最终的评价标准。最终目的是要隐藏延迟优化原则:优化原则:active blockl每个SM最多可以有768(G8x,G9x)或者1024(GT200)个a

31、ctive threadl这些active thread最多可以属于8个blockl还有受到SM中shared memory和register的制约l最后的active block数量是由以上四个条件中的“短板”决定优化原则:指令优化优化原则:指令优化l选用计算复杂度较小的算法,处理字长为32bitl并行度高,粗粒度并行多,细粒度并行有局部性l分支映射成固定运算,展开代码避免循环l在精度允许的前提下使用带有_前缀的快速算法,只在必要的部分使用双精度和64-bit intl使用移位运算代替整数除法和求余l使用vote,atomic,red等intrinsic函数实现算法l只在线程间通信前进行同步优化原则:存储器访问优化优化原则:存储器访问优化l对显存的I/O成本很高,提高两次对显存访问之间的计算量,通过同时计算与访存隐藏延时l把适合的数据放入纹理和常数缓存等缓解带宽压力,提高读取速度l避免bank conflict,非合并访问或cpu-gpu数据传输 使用数组的结构体,而不是结构体数组l使用对齐,类型转换等手段实现合并访问相关资源相关资源lCUDA toolkit文件夹下的doc目录提供了文档lCUDA SDK中提供了很多有益的例子lCUDA QQ讨论群l开勇的blog CSDN ldarkstorm2111203的blog CSDN

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 初中资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁