CUDA简介上海大学计算机学院沈文枫孙连强2014.6.19上海大学计算机学院主要框架CUDA编程环境2CUDA配置4CUDA总结5CUDA软件3GPU简介1上海大学计算机学院GPU简介用于个人计算机、工作站和游戏机的专用图像显示设备显示卡或主板集成nVidia和ATI(nowAMD)是主要制造商GraphicProcessingUnit(GPU)上海大学计算机学院GPU简介1.GPU诞生背景:超高计算能力要求1.CPU处理能力不断强大,但在进入3D时代后,人们发现庞大的3D图像处理数据计算使得CPU越来越不堪重荷,并且远远超出其计算能力;2.图形计算需求日益增多,作为计算机的显示芯片也飞速发展。图形,图像计算等计算的功能被脱离出来,单独设计为一块芯片——GPU(也就是显卡)。2.GPU的变革:G80的诞生1.流处理器的出现:图像渲染;强大的运算能力;2.CPU:串行的计算方式向并行计算发展,比如目前主流的双核、四核CPU;3.GPU:核心的一个流处理器相当于一个“核”,GPU的“核”数量已经不再停留在单位数,而是几十甚至是上百个。上海大学计算机学院GPU与CPU的比较CPU的内部结构:控制单元、逻辑单元和存储单元运算器:算术运算(如加减乘除)和逻辑运算(如逻辑加、逻辑乘和非运算)控制器:读取各种指令,并对指令进行分析,作出相应的控制。若干个寄存器:可直接参与运算并存放运算的中间结果。GPU采用了大量的执行单元,这些执行单元可以轻松的加载并行处理,而不像CPU那样的单线程处理。另外,现代的GPU也可以在每个指令周期执行更多的单一指令。上海大学计算机学院GPU的强大浮点运算能力GPU超强的浮点数运算能力同期IntelCore2Due的24GFLOPS(Floating-pointOperationsperSecond)浮点数处理能力和G80Chip的520GFLOPS相比,G80要快21.6倍,GPU浮点运算性能优势显而易见。虽然说NVIDIA与AMD单精度(FP32)运算能力都突破了1TFlops。目前CUDA支持双精度计算,目前支持的产品有GeForceGTX295,GeForceGTX285,GTX280,GeForceGTX260,TeslaS1070,TeslaC1060,QuadroPlex2200D2,QuadroFX5800,QuadroFX4800上海大学计算机学院传统GPU架构传统GPU的核心组成部分是Shader(着色器):PixelShader(像素单元)和VertexShader(顶点单元)。在图形处理中,像素是由RGB(红绿蓝)构成的,加上信息说明(Alpha),总共是4个通道。而顶点数据一般也是由XYZW四个坐标构成,这样也是4个通道。在3D图形进行渲染时,其实就是改变RGBA四个通道或者XYZW四个坐标的数值。这样的4D矢量运算单元在渲染3D图形时会有很高的效率,但在处理复杂指令时的效率会大打折扣,比如DX10新引入的几何着色、物理加速等,尤其在面对非图形渲染指令时优势全无。上海大学计算机学院GPU到CUDAGPU多“核”:SM真正意义的变革通用计算重要突破GPU通用计算开始出现世界上第一个GPUGeForce8800GeForce6800GeForce3GeForce256上海大学计算机学院CUDA概论—简介CUDA–ComputeUnifiedDeviceArchitecture(统一计算设备架构)特点:专门针对GPU的开发工具。需要Nvidia公司的GeForce80以上系列、Tesla系列和Quadro系列等硬件的支持。性能:程序效率能够得到大大提升。与采用图形API接口指挥GPU完成运算不同,CUDA可以自由地输入代码调用GPU的并行处理架构。优势:可以使用类C语言进行通用计算。CUDA的GPU编程语言基于标准的C语言,任何有C语言基础的用户都很容易地开发CUDA的应用程序。上海大学计算机学院CUDA–异构并行host+device异构并行C应用程序Host端串行C代码Device端SPMD并行化kernel(内核)C代码CPU串行代码(host)GPU并行内核(device)KernelAnBlk,nTid(args);CPU串行代码(host)GPU并行内核(device)KernelBnBlk,nTid(args);......并发执行上海大学计算机学院CUDADevicesandThreads计算设备(device)CPUorhost的协处理器(coprocessor)拥有独自的DRAM(devicememory)可以并行的运行很多Threads一般来说是GPU,也可以是其他并行处理器一个应用程序的数据并行部分能够用许多设备内核(devicekernel)线程表示GPU线程和CPU线程不同点GPU线程是轻量级线程•很少的创建开销(overhead)GPU要完全利用至少需要1000个线程•多核CPU则不需要上海大学计算机学院并行线程组织结构Thread:并行的基本单位Threadblock:互相合作的线程组CooperativeThreadArray(CTA)允许彼此同步通过快速共享内存交换数据以1维、2维或3维组织最多包含512个线程Grid:一组threadblock以1维、2维或3维组织共享全局内存Kernel:在GPU上执行的核心程序OnekernelOnegrid上海大学计算机学院CUDA—内存空间Eachthreadcan:Read/writeper-threadregistersRead/writeper-threadlocalmemoryRead/writeper-blocksharedmemoryRead/writeper-gridglobalmemoryRead/onlyper-gridconstantmemoryGridGlobalMemoryBlock(0,0)SharedMemoryThread(0,0)RegistersThread(1,0)RegistersBlock(1,0)SharedMemoryThread(0,0)RegistersThread(1,0)RegistersHostConstantMemory上海大学计算机学院CUDA处理器术语SPAStreamingProcessorArray(流处理器阵列,8inG80)TPCThreadProcessingCluster(线程处理集群,2SM+Texture,inG80,3SM+Texture,inGTX200)SMStreamingMultiprocessor(流多处理器,8SP’s)Multi-threadedprocessorcore(多线程处理器核)BasicprocessingunitforCUDAthreadblock(CUDA线程块的基本处理单元)SPStreamingProcessor(流处理器)ScalarprocessorforasingleCUDAthread(CUDA单一线程的标量处理器)上海大学计算机学院G80—GraphicModelL2FBSPSPL1TFThreadProcessorVtxThreadIssueSetup/Rstr/ZCullGeomThreadIssuePixelThreadIssueInputAssemblerHostSPSPL1TFSPSPL1TFSPSPL1TFSPSPL1TFSPSPL1TFSPSPL1TFSPSPL1TFL2FBL2FBL2FBL2FBL2FBStreamingMultiprocessor(SM)StreamingProcessor(SP)上海大学计算机学院G80—CUDAModelStreamingMultiprocessor(SM)StreamingProcessor(SP)Load/storeGlobalMemoryThreadExecutionManagerInputAssemblerHostTextureTextureTextureTextureTextureTextureTextureTextureTextureParallelDataCacheParallelDataCacheParallelDataCacheParallelDataCacheParallelDataCacheParallelDataCacheParallelDataCacheParallelDataCacheLoad/storeLoad/storeLoad/storeLoad/storeLoad/storeThreadProcessingCluster(TPC)ScalableStreamingProcessorArray(SPA)上海大学计算机学院GTX200—GraphicModel上海大学计算机学院GTX200—CUDAModel上海大学计算机学院G80:ExecutingThreadBlocks线程以线程块为单位分配到SM中去每个SM中最多8个BlockG80中每个SM最多768个线程•官方推荐每个Block中不少于64个线程•Block中线程数不大于512•64*8,96*8,128*6,192*4,256*3,384*1,512*1t0t1t2…tmBlocksSPSharedMemoryMTIUSPSharedMemoryMTIUt0t1t2…tmBlocksSM1SM0线程是并发的执行线程以Warp块发射到SM中一个Warp中包含32个线程每一个线程发射到SP中运行,一个Warp运行4个clockcycles上海大学计算机学院G80:ThreadScheduling每个Block以Warp为基本单位执行Warp不是CUDA的一部分,而是一个补充概念在SM中Warp是调度单元假如3个Block分配到一个SM中,每个Block包含256个Thread,那么SM中有多少Warp?每个Block划分为256/32=8Warps因此有8*3=24Warps任一时刻,24个Warp只能有一个在执行…t0t1t2…t31……t0t1t2…t31…Block1WarpsBlock2WarpsSPSPSPSPSFUSPSPSPSPSFUInstructionFetch/DispatchInstructionL1StreamingMultiprocessorSharedMemory上海大学计算机学院G80:ThreadSchedulingSM硬件实现0开销Warp调度Warps指令齐全的话,就已经准备好,则等待执行(ScoreBoard)合适的Warps选出来优先执行一个Warp内的所有线程执行相同的指令(instruction)执行一个Warp内的所有线程需要4个clockcycles假如没n个指令(instrucion)需要一次全局内存访问(oneglobalmemoryacess)至少要200/4n个WarpGlobalmemory:200-cyclememorylatencyTB1W1TB=ThreadBlock,W=WarpTB2W1TB3W1TB2W1TB1W1TB3W2TB1W2TB1W3TB3W2TimeTB1,W1stallTB3,W2stallTB2,W1stallInstruction:1234561212341278121234上海大学计算机学院G80SharedMemoryandThreading每个SM拥有16KB的sharedmemory动态资源:相同SM中Blocks分享16KB,但是不同的Blocks不能读取其他Blocks的数据.SMsize是根据实际情况来分配的!例如TILE_WIDTH=16,每个threadblock能够分配2*256*4B=2KB的sharedmemory.能否