CUDA-GPU-入门介绍_第1页
CUDA-GPU-入门介绍_第2页
CUDA-GPU-入门介绍_第3页
CUDA-GPU-入门介绍_第4页
CUDA-GPU-入门介绍_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、-An introduction to beginnersGPU & CUDA内容n 1 GPU高性能计算n 2 CUDA架构n 3 CUDA环境搭建n 4 CUDA简单例子1. GPU高性能计算n GPU: 从图形处理到通用计算n GPU: Graphic Processing Unitn GPU为高度并行的实时3D渲染计算而设计, 高GFLOPS , 高带宽n 3D渲染技术及3D API的发展, 促进GPU向通用计算处理器发展n NVIDIA GPU为通用计算专门优化设计, 于2007年推出CUDAGPU多”核”:SM真正意义的变革通用计算重要突破GPU通用计算开始出现GeForce 88

2、00GeForce 6800GeForce 3GeForce 256世界上第一个GPU1. GPU高性能计算n GPU VS CPU: 计算能力8x double precisionECCL1, L2 Caches1 TF Single Precision4GB MemoryNVIDIA GPUX86 CPU1. GPU高性能计算n GPU VS CPU: 硬件体系n 目标: 最小的指令延迟n 巨大的缓存n 复杂的控制逻辑n 目标: 最大吞吐量n 更多寄存器、高带宽n 通过线程轮换隐藏延迟n 多个线程共享控制逻辑1. GPU高性能计算n GPU应用领域n 用同一计算方法对很大量的数据进行并行计

3、算n 数据相关度低n 计算密度大,计算所花的时间比数据存储的时间大得多1. GPU高性能计算n GPU关键概念n SM: Stream Multiprocessorn SP: Stream Processorn 每个SM包含8个SP, 由SM取指, 解码, 发射到各个SP, n GPU可看作是一组SMn SMEM: shared memory, GPU片内每个SM所占有的高速存储器n Global memory: GPU板载显存2. CUDA架构n CUDA Compute Unified Device Architecturen 由NVIDIA 2007年推出的通用并行计算架构n 第一种不需

4、要借助图形学API就可以使用类C语言极性通用计算的开发环境和软件体系n 在采用了统一架构的GPU上运行n NVIDIA提供完全免费的CUDA开发工具包和SDKn 对标准C语言的简单扩展, 以最小的扩展集实现CUDA架构2. CUDA架构n 存储器模型n Thread私有register (RW)n Thread私有local memory (RW)n Block的shared memory (RW)n Grid的global memory (RW)n Grid的constant memory (RO)n Grid的texture memory (RO)n Host可以通过API完成显存与主存交

5、互2. CUDA架构n 线程组织模型n 每个内核程序 (Kernel) 包含非常多的线程n 所有线程执行相同的顺序程序n 层次结构:Grid Block Threadn 线程被划分成线程块 (Block)n 同一线程块内的线程可以通过共享SM资源相互协作n 每个线程和线程块拥有唯一IDn 通过内建变量读取2. CUDA架构n 线程映射n Thread SPn Block SMn Grid GPUn 把GPU看作一个包含很多个核心的多核处理器n 有自己的本地存储器n 大量的线程并行执行n 每个线程拥有私有变量/存储区域n 线程之间拥有共享的存储区域n 与CPU的差别: GPU的线程是轻量级的(代

6、码少,硬件轮换,资源负担小);需要很大量的线程才能使GPU满载2. CUDA架构n CPU/GPU异构并行模型n 由CPU端 (主机端) 传送参数及配置Kernel的执行 (Block, Thread数量, 尺寸等)n Kernel在GPU (设备端) 上执行n 显存分配, 显存与PC主存间的交互通过API完成2. CUDA架构n CUDA C扩展: 编译器nvccn CUDA源程序 - CU文件n 编译器驱动n 分离主机端源代码和设备端源代码n 编译设备端源代码到GPU汇编代码(PTX)或GPU二进制代码(CUBIN)n 把最终GPU代码包裹在主机端源代码中n CUDA C扩展: APIn

7、Driver API 调用Kernel较繁琐n Runtime API 较方便2. CUDA架构n CUDA C扩展: 函数限定符n _global_ GPU Kernel代码, 由CPU发起, 返回void, 不能由其它Kernel调用n _device_ 由GPU Kernel调用的函数, 不能由CPU发起n _host_ 在CPU上执行的函数n CUDA C扩展: 变量限定符n _constant_ 变量位于常数存储器n _shared_ 变量位于共享存储器2. CUDA架构n CUDA C扩展: 内建变量n 无需定义/声明, 直接在kernel中调用n dim3 gridDim; /

8、Grid尺寸n dim3 blockDim; / Block尺寸n dim3 blockIdx; / Block IDn dim3 threadIdx; / Thread 点n CUDA C扩展: 执行配置n 调用: my_kernel (.);n 实际是为gridDim和blockDim赋值n 决定当前线程需要处理的数据和结果存储的位置2. CUDA架构n CUDA存储器管理n GPU与CPU独立编址n GPU与CPU数据交互通过PCIe总线n 在主机端通过API去分配/复制/销毁GPU上的存储器空间n GPU存储器操作API (详见CUDA参考手册)n 存储空间开辟: cudaMalloc

9、等n 存储空间初始化: cudaMemset等 n 存储空间: cudaFree等n 存储空间拷贝cudaMemcpy等2. CUDA架构n CUDA程序结构内存/显存开辟主机端准备数据数据导入GPU调用kernel函数计算取回计算结果主机端后期处理主机端代码(串行)设备端代码(并行)主机设备通信3. CUDA环境搭建n 所需组件n CUDA完全免费, 各种操作系统下的CUDA安装包均可以在http:/ CUDA环境搭建n 1. Windowsn 环境要求: Microsoft Visual Stadio 2005 及其以后版本n (1) 依次安装: 显卡驱动ToolkitSDKn (2) 语

10、法高亮n 到SDK安装目录下, doc syntax_highlighting visual_studio_8, 将其中的usertype.dat文件复制到Microsoft Visual Studio 8Common7IDE下.n 启动VS2005, 工具选项文本编辑器文件扩展名. 在右边的“扩展名”对应的栏里输入“cu”; “编辑器”选择 “Microsoft Visual C+”, “添加” “确定” 重启VS2005n (3) 设置VS2005环境n 打开VS2005,工具选项项目和解决方案VC+ 目录 “显示以下内容的目录” n “包含文件”: 分别添加Toolkit和SDK的文件包

11、含目录n “库文件”: 分别添加Toolkit和SDK的库目录n “源文件”: 添加SDK源文件目录3. CUDA环境搭建n 1. Windowsn (4) 编译定义n 工程源文件 属性 常规 工具 自定义生产工具, 在以下项添加相应内容:n “命令行”: $(CUDA_BIN_PATH)nvcc.exe -ccbin $(VCInstallDir)bin -c -D_DEBUG -DWIN32 -D_CONSOLE -D_MBCS -Xcompiler /EHsc,/W3,/nologo,/Wp64,/Od,/Zi,/RTC1,/MTd -I$(CUDA_INC_PATH) -o $(Con

12、figurationName)$(InputName).obj $(InputFileName)n “输出”: $(ConfigurationName)$(InputName).objn “附加依赖项”: $(InputName)_kernel.cun 右键工程名 属性, 打开链接器, 在以下项做相应修改n “启用增量链接” : 否(/INCREMENTAL:NO)n “附加库目录” :改为 “$(CUDA_LIB_PATH)”n “链接器” 子项 “输入”: “附加依赖项” 中输入cudart.lib3. CUDA环境搭建n 2. Linux (Fedora, Redhat, Ubuntu)

13、n 环境要求: gcc编译器n (1) 进入Linux文本界面n (2) 安装三个组件(具体版本具体输入)n sh NVIDIA-Linux-x86_64-180.22-pkg2.runn sh cudatoolkit_2.1_linux64_rhel5.2.runn sh cuda-sdk-linux-2.10.1215.2015-3233425.runn (3) 在.bash_profile中添加:n PATH=$PATH:/binn LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib64n export PATH n export LD_LIBRARY_PATH

14、n 其中: 为实际安装路径4. 例子GPU并行矢量求和n 算法描述n 将两个N维矢量相加, 即对应元素相加: ci=ai+bi i0, N)n 并行算法设计n 每个GPU线程负责一个维度的相加n GPU线程数目 M Na0b0c0Th0aN-1bN-1cN-1ThN-1a1b1c1Th1a2b2c2Th0abcThThThMabc4. 例子GPU并行矢量求和n 预处理部分n cuda_runtime.h: CUDA运行时库4. 例子GPU并行矢量求和n 内核函数n 返回值类型必须包括 _global_ voidn 内核函数定义的是每一个线程的行为, 所有线程并发执行n 操作目标通过当前线程在线程结构中的位置而确定n 该问题中所有线程均只执行一次加法, 总计算时间为执行6770行代码一次所需时间4. 例子GPU并行矢量求和n 主函数(part-1)使用线程结构的x维度, 88一共64个线程h_前缀表示变量位于Host端存储器d_前缀表示变量位于Device端存储器还有多种其他开辟方式4. 例子GPU并行

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论