




已阅读5页,还剩73页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
CUDA程序设计 主要内容 GPGPU及CUDA介绍CUDA编程模型多线程及存储器硬件 2 GPGPU及CUDA介绍 3 多核时代 多个适当复杂度 相对低功耗内核并行工作配置并行硬件资源提高处理能力核心时钟频率基本不变 nVidiaGT200 Quad coreOpteron IBMCellBroadbandEngine 4 GPU与CPU硬件架构的对比 CPU 更多资源用于缓存及流控制GPU 更多资源用于数据计算适合具备可预测 针对数组的计算模式 CPU GPU 5 应用范围 CPU controlprocessor不规则数据结构不可预测存取模式递归算法分支密集型算法单线程程序 GPU dataprocessor规则数据结构可预测存取模式油气勘探 金融分析 医疗成像 有限元 基因分析 地理信息系统 6 GPGPU GeneralPurposeComputingonGPU 7 GPGPU 核心思想用图形语言描述通用计算问题把数据映射到vertex或者fragment处理器缺点硬件资源使用不充分存储器访问方式严重受限难以调试和查错高度图形处理和编程技巧 8 CUDA ComputeUnifiedDeviceArchitecture CUDA有效结合CPU GPU编程串行部分在CPU上运行并行部分在GPU上运行 CPUSerialCode Grid0 GPUParallelKernelKernelA args Grid1 CPUSerialCode GPUParallelKernelKernelB args 9 CUDA极大提高了现有应用的效果 Gridding1 FFT CartesianScanData a b b IterativeReconstruction c SpiralScanData Spiralscandata Gridding FFTReconstructionrequireslittlecomputation BasedonFig1ofLustigetal FastSpiralFourierTransformforIterativeMRImageReconstruction IEEEInt lSymp onBiomedicalImaging 2004 MRIReconstruction 10 AdvancedMRIReconstruction FFT CartesianScanData a SpiralScanData IterativeReconstruction c Gridding b b Spiralscandata IterativereconReconstructionrequiresalotofcomputation 11 AdvancedMRIReconstruction ComputeQ AcquireData ComputeFHd Find Morethan99 5 oftime Q只和扫描参数有关FHd是数据相关的使用线性求解器计算 Haldar etal Anatomically constrainedreconstructionfromnoisydata MRinMedicine 12 Code for p 0 p numP p for d 0 d numD d exp 2 PI kx d x p ky d y p kz d z p cArg cos exp sArg sin exp rFhD p rRho d cArg iRho d sArg iFhD p iRho d cArg rRho d sArg global voidcmpFhD float gx gy gz grFhD giFhD intp blockIdx x THREADS PB threadIdx x registerallocateimage spaceinputs CPU GPU 13 性能提升情况 S S Stone etal AcceleratingAdvancedMRIReconstructionusingGPUs ACMComputingFrontierConference2008 Italy May2008 14 计算结果对比 15 CUDA成功案例 广泛应用于生命科学 机械 石油 金融 数学 天文和通信等行业 16 MRI 磁共振成像 GRAPPA自动校准加速网格化快速重建ComputedTomography CT GEDigisensSnapCT Stone UIUC Batenburg Sijbersetal 医疗成像 17 量子化学 KYasuda NagoyaU Japan 双电子积分 RI MP2correlationenergyinQ Chem3 1 LeslieVogt Harvard 18 现有的分子动力学软件NAMD VMD alpharelease GROMACS alpharelease HOOMDOpenMM 分子建模https simtk org home openmm 分子动力学 19 MonteCalo模拟投资组合优化期权及衍生品定价对冲基金风险分析 CUDA中的随机数发生器 SciFinance的MonteCalo定价模型SciCompCo 金融 20 序列对比蛋白质对接生物系统的随机仿真 SSA 人体视觉皮层的自组织计算模型分析基因表达的DNA微阵列工具 Schatzetal UMaryland 生物信息学和生命科学 21 3DLattice Boltzman解算器基于Lattice Boltzman的PDE解算器用于照明的LatticeBoltzmanNavier Stokes解算器等离子体湍流建模 ThibaultandSenocak TolkeandKrafczy 流体动力学 22 GPMAD 离子束动力学模拟FDTD法进行的光散射模拟Acceleware的解算器 FDTD加速Accelerware 电磁学和电磁力学 23 天气研究与预测模型 WRF 25 30 的性能提升海啸模拟 天气 大气 海洋科学与空间建模 24 加密编码 25 模式匹配 26 CUDA编程模型 27 CUDA设备与线程 计算设备 device 作为CPU host 的协处理器有独立的存储设备 devicememory 同时启动大量线程计算密集部分使用大量线程并行的kernelGPU与CPU线程的区别GPU的线程非常轻量 线程切换 1cycle 而CPU需要 1000cycleGPU上的线程数 1000时才能有效利用GPU的计算能力 28 StreamingProcessor SP Afullypipelined single issue inordermicroprocessor2ALUsandaFPURegisterfile32 bitscalarprocessingNoinstructionfetchandschedulingNocache 29 StreamingMultiprocessor SM AnarrayofSPs8streamingprocessor2SpecialFunctionUnits SFU A16KBread writesharedmemoryNotacacheButasoftware manageddatastoreMultithreadingissuingunitInstructionandconstantcache 30 CUDA程序基本结构 串行部分在CPU上运行 host 并行部分在GPU上运行 device CPUSerialCode host Grid0 GPUParallelKernel device KernelA args Grid1 CPUSerialCode host GPUParallelKernel device KernelB args 31 C扩展 Declspecsglobal device shared local constantKeywordsthreadIdx blockIdxIntrinsics syncthreadsRuntimeAPIMemory symbol executionmanagementFunctionlaunch device floatfilter N global voidconvolve float image shared floatregion M region threadIdx image i syncthreads image j result AllocateGPUmemoryvoid myimage cudaMalloc bytes 100blocks 10threadsperblockconvolve myimage 32 CUDA程序的编译 使用nvcc编译工具nvcc cu oexcutable 调试选项 g debug deviceemu CPU模拟GPU 33 并行线程组织 并行性的维度一维y a b二维P M N三维CTorMRI 34 并行线程组织结构 Thread 并行的基本单位Threadblock 互相合作的线程组CooperativeThreadArray CTA 允许彼此同步通过快速共享内存交换数据以1维 2维或3维组织最多包含512个线程Grid 一组threadblock以1维 2维或3维组织共享全局内存Kernel 在GPU上执行的核心程序Onekernel onegrid 35 线程层次 36 BlockandThreadIDs Blocks和Threads具有IDsthreadIdx blockIdxBlockID 1Dor2DThreadID 1D 2Dor3D由此决定相应处理数据 37 CUDA线程组织 CUDAkernel函数由一系列线程组成单指令多数据流 SPMD 通过IDs确定处理的数据线程可划分为不同的Block在同一个block中 可以通过sharememory atomicoperation和barriersynchronization进行协同 ThreadBlock0 ThreadBlock1 ThreadBlockN 1 38 2020 1 27 39 一个简单的例子 IncrementArrayElements CPUprogramvoidinc cpu float a floatb intN for intidx 0 idx N idx a idx a idx b voidmain inc cpu a b N CUDAprogram global voidinc gpu float a floatb intN intidx blockIdx x blockDim x threadIdx x if idx a b N 40 CUDA线程的同步 void syncthreads Barriersynchronization同步threadblock之内的所有线程避免访问共享内存时发生RAW WAR WAW冒险 shared floatscratch 256 scratch threadID begin threadID syncthreads intleft scratch threadID 1 在此等待 直至所有线程到达才开始执行下面的代码 41 存储器模型与内存分配 R Wper threadregisters1 cyclelatencyR Wper threadlocalmemorySlow registerspillingtoglobalmemoryR Wper blocksharedmemory1 cyclelatencyButbankconflictsmaydragdownR Wper gridglobalmemory 500 cyclelatencyButcoalescingaccessingcouldhidelatencyReadonlyper gridconstantandtexturememories 500 cyclelatencyButcached 42 GPUGlobalMemory分配 cudaMalloc 分配显存中的globalmemory两个参数对象数组指针数组尺寸cudaFree 释放显存中的globalmemory一个参数对象数组指针 43 代码实例分配64 64单精度浮点数组数组指针Md建议用 d 表示GPU显存数据结构 GPUGlobalMemory分配 intBLOCK SIZE 64 float Md intsize BLOCK SIZE BLOCK SIZE sizeof float cudaMalloc void 44 Host Device数据交换 cudaMemcpy 在存储器直接传输数据四个参数目的对象数组指针源对象数组指针数组尺寸传输方向Host到HostHost到DeviceDevice到HostDevice到Device 45 代码实例M elements CPU主存Md GPU显存符号常数 cudaMemcpyHostToDevice和cudaMemcpyDeviceToHost Host Device数据交换 cudaMemcpy Md M elements size cudaMemcpyHostToDevice cudaMemcpy M elements Md size cudaMemcpyDeviceToHost 46 CUDA变量与函数 CUDA引入的变量修饰词 device 储存于GPU上的globalmemory空间和应用程序具有相同的生命期 lifetime 可被grid中所有线程存取 CPU代码通过runtime函数存取 constant 储存于GPU上的constantmemory空间和应用程序具有相同的生命期 lifetime 可被grid中所有线程存取 CPU代码通过runtime函数存取 shared 储存于GPU上threadblock内的共享存储器和threadblock具有相同的生命期 lifetime 只能被threadblock内的线程存取无修饰 Local变量 储存于SM内的寄存器和localmemory和具有相同的生命期 lifetime Thread私有 47 Built indim3Type 定义grid和threadblock的组织dim3dimGrid 2 2 dim3dimBlock 4 2 2 kernelFunction 48 CUDA函数定义 global 定义kernel函数必须返回void device 和 host 可以组合使用则被定义的函数在CPU和GPU上都被编译 49 device 函数不能用 运算符取地址限制不支持递归调用不支持静态变量 staticvariable 不支持可变长度参数函数调用typeva list stdarg h doubleaverage intcount CUDA函数定义 50 Kernel函数调用 调用时必须给出线程配置方式 global voidKernelFunc dim3DimGrid 100 50 5000threadblocksdim3DimBlock 4 8 8 256threadsperblocksize tSharedMemBytes 64 64bytesofsharedmemoryKernelFunc 51 CUDA数学函数 pow sqrt cbrt hypot exp exp2 expm1 log log2 log10 log1p sin cos tan asin acos atan atan2 sinh cosh tanh asinh acosh atanh ceil floor trunc round etc 只支持标量运算许多函数有一个快速 较不精确的对应版本以 为前缀 如 sin 编译开关 use fast math强制生成该版本的目标码每个多处理器包含两个超越函数计算单元 52 CUDA程序设计实例 方阵相乘 P M N 长宽均为WIDTH 计算策略每个线程计算矩阵P中的一个元素 M N P WIDTH WIDTH WIDTH WIDTH 53 第一步 CPU实现 M N P WIDTH WIDTH WIDTH WIDTH i k k j Matrixmultiplicationonthe CPU hostindoubleprecisionvoidMatrixMulOnHost float M float N float P intWidth for inti 0 i Width i for intj 0 j Width j doublesum 0 for intk 0 k Width k doublea M i width k doubleb N k width j sum a b P i Width j sum 54 第二步 将矩阵数据传给显存 voidMatrixMulOnDevice float M float N float P intWidth intsize Width Width sizeof float float Md Nd Pd 1 AllocateandLoadM NtodevicememorycudaMalloc 55 第三步 将计算结果传回内存 2 Kernelinvocationcode tobeshownlater 3 ReadPfromthedevicecudaMemcpy P Pd size cudaMemcpyDeviceToHost FreedevicematricescudaFree Md cudaFree Nd cudaFree Pd 56 第四步 kernel函数 Matrixmultiplicationkernel perthreadcode global voidMatrixMulKernel float Md float Nd float Pd intWidth 2DThreadIDinttx threadIdx x intty threadIdx y Pvalueisusedtostoretheelementofthematrix thatiscomputedbythethreadfloatPvalue 0 57 Nd Md Pd WIDTH WIDTH WIDTH WIDTH ty tx ty tx k k for intk 0 k Width k floatMelement Md ty Width k floatNelement Nd k Width tx Pvalue Melement Nelement Pd ty Width tx Pvalue 第四步 kernel函数 续 58 第五步 调用kernel函数 2 Kernelinvocationcode Setuptheexecutionconfigurationdim3dimBlock Width Width dim3dimGrid 1 1 Launchthedevicecomputationthreads MatrixMulKernel Md Nd Pd 59 局限性 每个线程都需要读 Md矩阵的一行Nd矩阵的一列计算与访存比约为1 1矩阵规模受限于每个block允许的thread数目 60 参考资料 CUDASDK SDK中包含许多CUDA范例 61 多线程及存储器硬件 62 StreamingMultiprocessor执行ThreadBlocks 线程以block为单位分配到SM视资源需求 一个SM分配至多8个blockSMinG80可以接受768个线程256 threads block 3blocks128 threads block 6blocks etc线程并发运行SM分配并维护线程IDSM管理并调度线程 63 ThreadBlockSizeConsiderations 对于矩阵乘法 哪个threadblock尺寸最好 8X8 16X16或者32X32 8X8 64threads block 每个SM至多接受768threads 即12blocks 但是 SM至多接受8blocks 所以实际上仅有512threads16X16 256threads block 每个SM至多接受768threads 即3blocks 只要其它计算资源许可 可以满负荷工作32X32 1024threads block SM无法处理 64 线程调度和执行 Threadblock内部线程组织为32 threadwarpsAnimplementationdecision notpartofCUDAWarp是SM调度的基本单位Warp就是一条32路SIMD指令Half warp是warp的前一半或后一半访问存储器的基本单位 65 Warp调度和执行 下条指令中全部操作数就位的warps拥有执行资格Warp中全部线程执行同一指令同一warp内的分支语句可能执行不同的指令路径不同指令路径的线程只能顺序执行每次执行warp中一条可能的路径N条指令路径 1 Nthroughput应尽量避免在同一warp内出现分支 66 SM存储器资源 Registerandlocalmemory per thread线程私有编译器自行分配e g floata Sharedmemory per blockBlock内所有线程共享使数据尽量靠近处理器动态分配到blockse g shared floatregion M ConstantcacheTexturecache 67 寄存器阵列 G80中每个SM配置8192个寄存器当前设计选择 不属于CUDA寄存器动态分配到划归SM的blocks中一旦分配到某一block 不能被其它blocks访问同一block内部的线程只能使用分配给该线程的寄存器实例 假设每个block有16 16个thread每个thread使用10个寄存器 那么每个block需要使用2560个寄存器 因此每个SM能容纳3个block 也就是768个thread假如每个thread多使用1个寄存器 那么每个block需要使用2816个寄存器 SM就只能容纳2个block 造成并行度下降1 3应该综合考虑并行度与访存开销的影响 假如在上面的情况下多使用1个寄存器能够使访存次数减少一半 那么实际性能反而有所提高 68 存储器模型回顾R Wper blocksharedmemory1 cyclelatencyButbankconflictsmaydragdownR Wper gridglobalmemory 500 cyclelatencyButcoalescingaccessingcouldhidelatency性能优化思路SharedMemory比GlobalMemory快几百倍线程之间通过SharedMemory合作使用一个或少量线程装载和计算threadblock内全部线程共享的数据 利用SharedMemory提高性能 69 每个元素都需要被多个线程重复使用将元素存入sharedmemory供线程共享分块计算 实例 矩阵乘法性能优化 M N P WIDTH WIDTH WIDTH WIDTH ty t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 辅警工作培训课件
- 农业银行2025钦州市金融科技岗笔试题及答案
- 邮储银行2025遵义市秋招英文面试题库及高分回答
- 中国银行2025广安市秋招笔试综合模拟题库及答案
- 交通银行2025商洛市秋招结构化面试经典题及参考答案
- 2025年3D打印的智能制造技术
- 2025社会救助行业发展趋势报告
- 建设银行2025荆州市秋招无领导模拟题角色攻略
- 邮储银行2025七台河市笔试行测高频题及答案
- 工商银行2025黄南藏族自治州秋招笔试性格测试题专练及答案
- 《电机原理与应用》课件
- DB4403-T 56-2020 住宅小区电动汽车充电设施安全管理规范
- 展会安全风险评估报告
- 《学前教育法》知识考试题库100题(含答案)
- 专题十一-新航路到工业革命
- 桩基检测施工方案
- 刑法学课程课件教案绪论
- 混凝土搅拌站安全生产管理制度(2篇)
- 配电室改造施工方案
- 尿酸高患者的日常护理
- 人教部编版一年级语文上册识字1《天地人》精美课件
评论
0/150
提交评论