cuda编程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.CUDA6.5 + VS2013下的c/c++
9. 如需要对.cu文件进行手动编译,利用工具nvcc; 利用命令: nvcc –cuda test.cu –keep 详见 或 官方nvcc guide
另:附上 cuda document 该文档给出了各类Samples、API、Guide.
CUDA6.5 + Matlab2014a
软件篇——环境测试
• 硬件测试
•加速卡安装 •驱动 •CUDA环境
nvidia-smi
in cmd
软件篇——环境测试
• 编译测试
•编译环境 •CUDA环境
nvcc -V
in cmd
软件篇——重要工具及文档
• nvidia-smi 路径:C:\Program Files\NVIDIA Corporation\NVSMI
1.CUDA6.5 + VS2013下的c/c++
5. 右键.cu文件,项类型选择CUDA c/c++ 6.项目名--右键--属性--链接器--输入—附加依赖库,添加cudart.lib;
1.CUDA6.5 + VS2013下的c/c++
7. 在.cu文件中编写代码即可 导入头文件 :stdio.h或iostream 等 + cuda_runtime.h等; 8.在VS下直接 生成--运行 ;
• 1、如果线程块(block)是一维的,则线程ID = x • 2、如果线程块是二维的,块尺寸为(Dx,Dy),则线程ID = x + y * Dx • 3、如果线程块是三维的,其尺寸为(Dx,Dy,Dz),那么线程ID = x + y * Dx + z * Dx * Dy
GPU内的线程层次
• 在内核函数内部,CUDA为我们内建了一些变量用于访问线程格、 线程块的尺寸和索引等信息可以用一维,二维,三维量表示
GPU内的线程层次
•线程格(Grid) •线程块(Block) •线程(Thread)
GPU内的线程层次
• 每一个线程都有其线程ID,线程的ID信息由变量threadIdx给出 • 可以用一维,二维,三维量表示 • 线程的索引与线程ID之间存在着直接的换算关系,对于一个索引 为(x, y, z)
• 1. gridDim:代表线程格(grid)的尺寸,gridDim.x为x轴尺寸
如上图:gridDim.x = 3,gridDim.y = 2,gridDim.z = 1
• 2. blockIdx:代表线程块(block)在线程格(grid)中的索引值
如上图:blockIdx.x = 1,blockIdx.y = 1
软件篇——直接运行Samples
• 在文件夹内的空白处,按住shift+右键
• 选择“在此处打开命令窗口”
• 直接输入程序名,如deviceQuery
软件篇——直接运行Samples
• deviceQuery的运行结果
软件篇——TCC与WDDM
• WDDM :Windows Display Driver Model
软件篇——环境搭建需要
• 一个GPU • 一个Windows操作系统 • 一个Visual Studio
+
• NVIDIA CUDA Toolkit
参考地址
• 官方指南 • 下载CUDA
软件篇——CUDA简介
•Compute Unified Device Architecture
cpu+gpu parallel
命令步骤
5. 将该文件夹设为Matlab当前工作目录 6. 使用两步进行编译:(以Szeta.cu文件为例) (1)nvmex -c –f nvmexopts.bat Szeta.cu -IC:/cuda/include LC:/cuda/lib -lcudart –lcufft 该步将产生一个对应于.cu文件的.obj文件。 (2)mex Szeta.obj -IC:/cuda/include -LC:/cuda/lib -lcufft –lcudart 该步生成最终的.mexw32文件。 7.Done
• Parallel Computing Platform friend of GPU hundreds of cores thousands of computing threads
软件篇——cuda toolkit安装路径分解(1)
•CUDA Toolkit 路径:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5 •子目录: Bin\ the compiler executables and runtime libraries Include\ the header files needed to compile CUDA programs Lib\ the library files needed to link CUDA programs
• 共享内存(shared memory)
属于一个block
• 全局内存(global memory)
属于所有thread
核函数 内存申请 传参方法 运行时间
运行结果
200个线程
512个线程
增加进程数目到1024
增加进程数目到2048
线程数1024+1
2015-3-3
继续改进——加入block
一旦使用TCC模式,GPU就不能用作display device GeFource系列显卡不支持TCC
三.CUDA编程篇
目录
•Visual Studio下的CUDA工程
•Matlab 下的CUDA工程 •程序分析 •可用库
CUDA6.5 + VS2013下的c/c++
1.CUDA6.5 + VS2013下的c/c++
•The WDDM driver model is used for display devices
• WDM:Windows Driver Model
•The Tesla Compute Cluster (TCC) mode of the NVIDIA Driver is available for non-display devices such as NVIDIA Tesla GPUs; it uses the Windows WDM driver model.
软件篇——cuda toolkit安装路径分解(2)
CUDA Samples路径 C:\ProgramData\NVIDIA Corporation\CUDA Samples\v6.5 不同类型的例子分别在: 0_Simple, 1_Utilities,2_Graphics,3_Imaging, 4_Finance, 5_Simulations, 6_Advanced, 7_CUDALibraries
作用原理
Matlab程 序 nvmex .cu vs .o
Matlab 函数
命令步骤
1. 编写基于CUDA的.cu程序; 2. 下载nvmex_tool压缩包下载 ,解压缩; 3. 将解压缩后的nvmex.pl文件复制至Matlab安装文件夹下的Bin文件 夹内,X:/Matlab/R2009a/Bin/; 4. 将压缩后的nvmex_tool文件夹内的nvmex.m文件、 nvmex_helper.m文件以及nvmexopts.bat文件放至你的.cu文件,使 他们位于同一文件夹内。
20个块改进结果
继续改进——shared memory
Shared memory结果
多维块的使用
kernel
main
优化过程
• 1、分析(Assess)——分析可优化项; • 2、并行化(Parallelize)——使用CUDA对原有C/C++程序进行初步 改写(利用库cuBLAS、cuFFT以及Thrust); • 3、优化(Optimize)——优化是对并行化后的程序重复进行APOD 的过程; • 4、部署(Deploy)——比较改写后与改写前程序运算的结果,以 验证改写的正确性。
1.新建win32控制台项目; 2.在向导的应用程序设置中选择空项目复选框;
1.CUDA6.5 + VS2013下的c/c++
3.向项目添加.cpp文件,写名称时可直接将.cpp改为.cu文件,也可 之后重命名; 4.项目名--右键--生成依赖项--生成自定义,在打开的对话框中选择 CUDA6.5;
软件篇——cuda toolkit安装路径分解(1)
Doc\ the CUDA documentation, including: • CUDA C Programming Guide • CUDA C Best Practices Guide • documentation for the CUDA libraries • other CUDA Toolkit-related documentation
2015-3-3
循环的优化过程
2015-3-3
系统学习CUDA编程
可用的CUDA库
1.NPP
• NVIDIA Performance Primitives
• 不需要cpu与gpu之间进行传参操作 • 基本运算 • 统计算法
• Mean_StdDev, NormDiff, Sum, MinMax, HistogramEven, RectStdDev
•GPU的控制台: 状态监测、模式切换 •nvidia-smi -h查看命令帮助,在其目录下有nvidia-smi.pdf使用文档 •重要命令:nvidiaห้องสมุดไป่ตู้smi -dm 1/0 更改显卡的驱动模式 1:TCC / 0:WDDM
• nvcc 路径:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\bin
一个CUDA程序
编程之前
为什么快?
CPU(主机Host)与GPU(设备Device)区别—— 1.线程资源 CPU所支持的同时运行的线程数是极其有限。例如,4个6核 心处理器的服务器处理器在同一时刻只能同时运行24个线程。 GPU则可以支持同一时刻数千个活动线程同时运行。
为什么快?
CPU(主机Host)与GPU(设备Device)区别—— 2.线程切换代价 在CPU中线程切换由于涉及到上下文(Context)的改变,代 价很大。 GPU中的线程则非常轻巧,切换几乎没有代价。
•Nvidia CUDA世界的编译器
关于NVCC
软件篇——注意事项
•Note0 :必须保证系统当前的驱动环境在TCC模式下; •Note1 :许多工具都是通过cmd打开,并在命令行下工作 如果命令提示“不是系统命令”,把该命令所在的路径添加到环境变量path中; •Note2:如果直接双击.exe文件,会闪退看不到结果,需要在cmd运行; •Note3:运行samples时,可以在C:\ProgramData\NVIDIA Corporation\CUDA Samples\v6.5\bin\win64\Release找到所有.exe文件。
硬件篇——Note
•无显示输出 ——台式机集显独显切换问题 •TCC驱动模式 ——for non-display device 目前解决方案:远程登陆 未实践的解决方案: 1.安装普通独立显卡 2.BIOS中切换
软件篇
软件篇——当前软件环境
•实验室软件环境介绍 • 操作系统:win8 64bit • vs版本: 2013 • 远程登录信息: LAN地址:192.168.1.222 user:Administrator pwd:1111
• 3. blockDim:代表线程块(block)的尺寸,blockDIm.x为x轴尺寸
如上图:blockDim.x = 4, blockDim.y = 3
• 4. threadIdx:线程索引
指的是一个block中的索引号
GPU的内存层次
• 本地内存(local Memory)
属于一个thread
Tesla K40c 加速卡的安装及使 用
目录
• 硬件设备安装 • 软件环境搭建 • CDUA编程简介
硬件篇
硬件篇——设备
• NVIDIA Tesla k40c计算卡一块 • 带有至少一个PCI-ex 16x的主板 • 800w以上电源一个 • CPU,内存,硬盘等 取高配
硬件篇——安装
•组装主板 •PCI插槽插入加速卡 •电源接线 •开机