CUDA编程学习笔记 英伟达入门课程 p1-p2/13
介绍,cuda编程是基于cpp和c基础上,扩展了对gpu编程,使用gpu完成大量重复的小计算来做的编程框架,具体英伟达做的,然后入门课程大概13节,其中前4节是基础内容。
代码知识
1.下载CUDA toolkit
2.nvcc编译工具,在cpp里我们用的是gcc、g++,在这里就是nvcc,文件的后缀是.cu
3.cu代码可以兼容之前的cpp的代码,那怎样体现是gpu上运行的呢?
使用__global__关键字在函数前面,即就是gpu函数,也就是设备代码,我们平时用的 cpu代码我们称之为主机代码。
代码运行的流程大致是:分配内存、传输数据,从cpu到gpu、gpu运算、传输数据,从gpu到cpu、释放内存
4.API
函数都是用cuda开始的,比如c里有malloc,cuda里有cudaMalloc,c里有memcpy,cuda里有cudaMemcpy,都是这样对应的。
这里gpu因为和cpu是不同的设备,不同的硬件,所以有不同的内存,通过pci来传输数据,因为设备的存储不同,所以不能用一个指针作为两者共同的内存区域,必须独自申请。
cudaMemcpy的四个参数,目标指针、源指针、需要复制的字节数、方向
这里的方向有cpu到cpu、cpu到gpu、gpu到gpu、gpu到cpu,这里是使用枚举类型。
内存模型
5.cuda编程的特点
cuda的gpu上比cpu有更多的线程,事实上多的多,然后每个线程更加小。cuda不需要使用for来循环处理,因为它会启动多个线程同时处理。
在实际调用gpu函数的时候,也就是调用我们称之为kernel的东西的时候,使用三重<>,即<<<>>>调用,这里会有两个参数。两个乘积就是我们启动的线程数目。
gpu的组织像网格一样,由块组成,而块由线程组成,第一个参数就是块的数量,第二个参数就是线程的数量。
每个线程处理一定量的东西,为什么组织成二维结构,一定是每个块和其他块有某种关系,或者块内有某种关系,这就引出了称之为共享内存的东西。
6.内存模型
就像我们计算机是层层缓存构成,内存是磁盘的缓存,还有l1、l2、寄存器等等,线程块可以使用共享内存加速访问速度,比全局的,cpu里的内存访问速度更快,除此之外,共享内存因为其一个写其他读的性质,可以作为块内进程通信的一种方式。
总结
主要是了解cuda代码运行流程其他就容易。
更多推荐

所有评论(0)