admin管理员组

文章数量:819694

cuda入门——记录

学习目标:

cuda入门学习

记录一下看到的比较好的文章(个人记录用)


学习内容:

一些比较好的文章链接

例如:

  1. Cuda入门 Cuda入门
  2. CUDA实现矩阵加法 CUDA实现矩阵加法
  3. 【CUDA编程】CPU计时与GPU计时 【CUDA编程】CPU计时与GPU计时
  4. CUDA学习笔记(使用 CPU和GPU 计时器) CUDA学习笔记(使用 CPU和GPU 计时器)
  5. AI部署篇 | CUDA学习笔记1:向量相加与GPU优化(附CUDA C代码) AI部署篇 | CUDA学习笔记1:向量相加与GPU优化(附CUDA C代码)
  6. CUDA异步并发之CUDA流详解CUDA异步并发之CUDA流详解
  7. GPU&VS2012&CUDA&matlab&Arrayfire杂记(三)——cuda GPU&VS2012&CUDA&matlab&Arrayfire杂记(三)——cuda
  8. 【遇见CUDA】要更快,请提高数据传输效率! 【遇见CUDA】要更快,请提高数据传输效率!
  9. CUDA学习(十)使用texture 进行图像处理CUDA学习(十)使用texture 进行图像处理
  10. CUDA:Texture所需参数详解 CUDA:Texture所需参数详解
  11. CUDA Texture纹理内存 图片平滑模糊化 CUDA Texture纹理内存 图片平滑模糊化
  12. CUDA 学习——纹理内存(CUDA实战 第七章)CUDA 学习——纹理内存(CUDA实战 第七章)
  13. NVIDIA CUDA 学习 (5) TEXTURE MEMORY NVIDIA CUDA 学习 (5) TEXTURE MEMORY
  14. CUDA:Texture 图像应用详解CUDA:Texture 图像应用详解
  15. mex矩阵数据传输
  16. 如何利用GPU(CUDA)加速Matlab程序? 如何利用GPU(CUDA)加速Matlab程序?
  17. 关于MATLAB中的mex在VS 2019中调试C++代码 关于MATLAB中的mex在VS 2019中调试C++代码
  18. VS2019与matlab 2019a混合编程实例 VS2019与matlab 2019a混合编程实例

对于一个一维的块,线程的threadIdx就是threadIdx.x;

对于一个二维的大小为(Dx,Dy)的块,线程的threadIdx就是(threadIdx.xthreadIdx.y * Dx);

对于一个三维的大小为(Dx,Dy,Dz)的块,线程的threadIdx是(threadIdx.xthreadIdx.y * Dx threadIdx.z * Dx * Dy)。

 一个block中的线程数量不能超过512个。

在同一个block中的线程可以进行数据通信。CUDA中实现block内通信的方法是:在同一个block中的线程通过共享存储器(sharedmemory)交换数据,并通过栅栏同步保证线程间能够正确地共享数据。具体来说,可以在kernel函数中需要同步的位置调用__syncthreads()函数。

所有C/C++MEX 文件必须包含4项内容:

#include mex.h (for C and C++ MEX-fles)

每个MEX文件的入口程序称为mexFunction,这是MATLAB访问DLL等的入口点,在C/C++中,通常定义为:

mexFunction(int nlhs, mxArray *plhs[ ],int nrhs, const mxArray *prhs[ ]) { . }

这里,

nlhs = 预计的 mxArrays 数(左手边)plhs = 预计的输出指针数组nrhs = 输入数 (右手边)prhs = 输入数据的指针数组,输入数据只读mxArray: 这是一个包含MATLAB数据的特殊结构,它是MATLAB数组的C表示。所有类型的MATLAB数组(scalars, vectors, matrices, strings, cell arrays 等)都是mxArray。API函数(如内存分配和释放)。

关于MATLAB中的mex在VS 2019中调试C++代码

  1. 打开MATLAB,切换到要调试的文件夹
  2. 使用mex -g xxxx.cpp 命令编译
  3. 打开VS2019,以无代码模式启动(不用新建工程文件或文件),打开刚刚编译的文件
  4. 调试->添加进程->找到MATLAB.exe,注意这个时候没有打开任何MATLAB窗口,MATLAB.exe的标题就是MATLAB
  5. 在VS中打断点
  6. 调试->窗口->exception setting,先选中win32,然后再取消,这样子能把win32里面包含的选项框都取消掉
  7. 执行.m 文件,即会跳转到debug界面

基本的CUDA MEX文件包括以下几部分内容:

  1. 在GPU上分配内存。
  2. 将数据从主存移到GPU。注意MATLAB中的双精度浮点数会被转换成GPU中的单精度浮点数。
  3. 用CUDA代码处理数据。
  4. 将数据从GPU移回主机。
  5. 回收GPU中的内存。
  6. 编译MEX文件,调用C/C++程序

假设C代码的MEX文件名为cmex.c,则可从MATLAB提示行中执行mex命令编绎MEX文件:
>> mex cmex.c

该命令会生成一个编译了的MEX文件,其后缀取决于操作系统。

然后就可以在MATLAB中直接调用MEX文件中的函数了。注意,为了使MATLAB能运行C或C++函数,必须将编绎了的MES文件放在MATLAB路径的一个目录中,或是放在当前的工作目录。

编译基于CUDA的MEX文件

NVIDIA提供了nvmex工具和一个配置选项文件,可用于编绎基于CUDA的MEX文件(扩展名是.cu)。从MATLAB中编绎.cu文件的命令是:

nvmex -f nvmexopts.bat filename.cu-IC:\cuda\include -LC:\cuda\lib –lcudart

使用texture的通常步骤:

1.定义纹理参考Texture Reference
2.声明CUDA数组
3.拷贝主机内存到CUDA数组
4.设置纹理参数(模式)
5.绑定纹理
6.Kernel中取像素值改成Texture fetch
7.解除绑定
8.释放CUDA数组

Texture Memory简介

Texture Memory 应用:热传导模型

更改Matlab 中调用cuda算力
'-gencode=arch=compute_52,code=\"sm_52,compute_52\" '

本文标签: cuda入门记录