cuda程序设计实例.pptVIP

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

CUDA程序设计 主要内容 GPGPU及CUDA介绍 CUDA编程模型 多线程及存储器硬件 GPGPU及CUDA介绍 多核时代 多个适当复杂度、相对低功耗内核并行工作 配置并行硬件资源提高处理能力 核心时钟频率基本不变 GPU与CPU硬件架构的对比 CPU:更多资源用于缓存及流控制 GPU:更多资源用于数据计算 适合具备可预测、针对数组的计算模式 应用范围 CPU: control processor 不规则数据结构 不可预测存取模式 递归算法 分支密集型算法 单线程程序 GPGPU 核心思想 用图形语言描述通用计算问题 把数据映射到vertex或者fragment处理器 缺点 硬件资源使用不充分 存储器访问方式严重受限 难以调试和查错 高度图形处理和编程技巧 CUDA (Compute Unified Device Architecture) CUDA有效结合CPU+GPU编程 串行部分在CPU上运行 并行部分在GPU上运行 CUDA极大提高了现有应用的效果 性能提升情况 计算结果对比 CUDA成功案例 CUDA编程模型 CUDA设备与线程 计算设备(device) 作为CPU(host)的协处理器 有独立的存储设备(device memory) 同时启动大量线程 计算密集部分使用大量线程并行的kernel GPU与CPU线程的区别 GPU的线程非常轻量,线程切换~1 cycle,而CPU需要~1000 cycle GPU上的线程数1000时才能有效利用GPU的计算能力 Streaming Processor(SP) A fully pipelined, single-issue, inorder microprocessor 2 ALUs and a FPU Register file 32-bit scalar processing No instruction fetch and scheduling No cache Streaming Multiprocessor(SM) An array of SPs 8 streaming processor 2 Special Function Units (SFU) A 16KB read/write shared memory Not a cache But a software-managed data store Multithreading issuing unit Instruction and constant cache CUDA 程序基本结构 串行部分在CPU上运行(host) 并行部分在GPU上运行(device) C扩展 CUDA程序的编译 使用nvcc编译工具 nvcc filename.cu [-o excutable] 调试选项:-g(debug)、-deviceemu(CPU模拟GPU) 并行线程组织 并行性的维度 一维 y = a + b 二维 P = M ? N 三维 CT or MRI 并行线程组织结构 Thread: 并行的基本单位 Thread block: 互相合作的线程组 Cooperative Thread Array (CTA) 允许彼此同步 通过快速共享内存交换数据 以1维、2维或3维组织 最多包含512个线程 Grid: 一组thread block 以1维、2维或3维组织 共享全局内存 Kernel: 在GPU上执行的核心程序 One kernel ? one grid 线程层次 Block and Thread IDs Blocks 和 Threads 具有IDs threadIdx, blockIdx Block ID: 1D or 2D Thread ID: 1D, 2D or 3D 由此决定相应处理数据 CUDA线程组织 CUDA kernel函数由一系列线程组成 单指令多数据流(SPMD) 通过IDs确定处理的数据 线程可划分为不同的Block 在同一个block中,可以通过share memory、atomic operation和barrier synchronization进行协同 一个简单的例子——Increment Array Elements //CPU program void inc_cpu(float *a, float b, int N) { for (intidx = 0; idxN; idx++) a[idx] = a[idx] + b; } void main() { … inc_cpu(a, b, N); } CUDA线程的同步 void __syncthreads(); Barrier synchronization 同步thread

文档评论(0)

wangsux + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档