学习目标:
cuda入门学习
记录一下看到的比较好的文章(个人记录用)
学习内容:
一些比较好的文章链接
例如:
- Cuda入门 Cuda入门
- CUDA实现矩阵加法 CUDA实现矩阵加法
- 【CUDA编程】CPU计时与GPU计时 【CUDA编程】CPU计时与GPU计时
- CUDA学习笔记(使用 CPU和GPU 计时器) CUDA学习笔记(使用 CPU和GPU 计时器)
- AI部署篇 | CUDA学习笔记1:向量相加与GPU优化(附CUDA C代码) AI部署篇 | CUDA学习笔记1:向量相加与GPU优化(附CUDA C代码)
- CUDA异步并发之CUDA流详解CUDA异步并发之CUDA流详解
- GPU&VS2012&CUDA&matlab&Arrayfire杂记(三)——cuda GPU&VS2012&CUDA&matlab&Arrayfire杂记(三)——cuda
- 【遇见CUDA】要更快,请提高数据传输效率! 【遇见CUDA】要更快,请提高数据传输效率!
- CUDA学习(十)使用texture 进行图像处理CUDA学习(十)使用texture 进行图像处理
- CUDA:Texture所需参数详解 CUDA:Texture所需参数详解
- CUDA Texture纹理内存 图片平滑模糊化 CUDA Texture纹理内存 图片平滑模糊化
- CUDA 学习——纹理内存(CUDA实战 第七章)CUDA 学习——纹理内存(CUDA实战 第七章)
- NVIDIA CUDA 学习 (5) TEXTURE MEMORY NVIDIA CUDA 学习 (5) TEXTURE MEMORY
- CUDA:Texture 图像应用详解CUDA:Texture 图像应用详解
- mex矩阵数据传输
- 如何利用GPU(CUDA)加速Matlab程序? 如何利用GPU(CUDA)加速Matlab程序?
- 关于MATLAB中的mex在VS 2019中调试C++代码 关于MATLAB中的mex在VS 2019中调试C++代码
- 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++代码
- 打开MATLAB,切换到要调试的文件夹
- 使用mex -g xxxx.cpp 命令编译
- 打开VS2019,以无代码模式启动(不用新建工程文件或文件),打开刚刚编译的文件
- 调试->添加进程->找到MATLAB.exe,注意这个时候没有打开任何MATLAB窗口,MATLAB.exe的标题就是MATLAB
- 在VS中打断点
- 调试->窗口->exception setting,先选中win32,然后再取消,这样子能把win32里面包含的选项框都取消掉
- 执行.m 文件,即会跳转到debug界面
基本的CUDA MEX文件包括以下几部分内容:
- 在GPU上分配内存。
- 将数据从主存移到GPU。注意MATLAB中的双精度浮点数会被转换成GPU中的单精度浮点数。
- 用CUDA代码处理数据。
- 将数据从GPU移回主机。
- 回收GPU中的内存。
- 编译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\" '