cuda教程
来源:互联网 发布:网站源码上传教程 编辑:程序博客网 时间:2024/06/05 14:49
研究CUDA已经有段时间了,但是只是皮毛罢了,糊弄糊弄外行人还可以,但真是情况是。。。此处省略几个字,遂回头整理重温一下,所谓温故而知新。
在内核函数内部,CUDA为我们内建了一些变量用于访问线程格、线程块的尺寸和索引等信息,它们是:
它的gridDim.x = 3,gridDim.y = 2,gridDim.z = 1;
每个CUDA线程拥有独立的本地内存(local Memory);每一个线程块(block)都有其独立的共享内存(shared memory),共享内存对于线程块中的每个线程都是可见的,它与线程块具有相同的生存时间;同时,还有一片称为全局内存(global memory)的区域对所有的CUDA线程都是可访问的。
除了上述三种存储资源以外,CUDA还提供了两种只读内存空间:常量内存(constant memory)和纹理内存(texture memory),同全局内存类似,所有的CUDA线程都可以访问它们。对于一些特殊格式的数据,纹理内存提供多种寻址模式以及数据过滤方法来操作内存。这两类存储资源主要用于一些特殊的内存使用场合。
block是有维度的,一维、二维、三维。
对于一维的block,tid = threadIdx.x
当block和grid都是一维的时候,tid=threadIdx.x+bolckDim.x*blockIdx.x;
对于(Dx,Dy)二维的block,tid = threadIdx.x + blockIdx.x*blockDim.x //(blockDim.x线程块的大小即线程的数量,blockIdx.x为线程块的索引)
我们将具体点的,在主机函数中如果我们分配的是这样的一个东西:
dim3 blocks(32,32);
dim3 threads(16,16);(与dim3 threads(16,16,1)等价)
dim3是神马?dim3是一个内置的结构体,dim3结构变量有x,y,z,表示3维的维度,如果只需要二维,定义时只需将第三元缺省或置为1。
kernelfun<<<blocks, threads>>>();
我们调用kernelfun这个内核函数,将blocks和threads传到<<<,>>>里去,这句话可牛逼大了——相当于发号施令,命令那些线程去干活。这里使用了32*32 * 16*16个线程来干活。你看明白了吗?blocks表示Gird里有二维的32*32个block,而每个block中又用了16*16的二维的thread组。好吧,我们这个施令动用了262144个线程!
tips:如果矩阵的尺寸不能背block的尺寸整除,则grid的尺寸应该为dim3 sizeofGrid(NUM_X / blocks_x+1,NUM_Y / blocks_y+1);NUM为矩阵的尺寸.
_syncthreads()
,可以在内核中调用__syncthreads()内置函数指明同步点;__syncthreads()起栅栏的作用,在其调用点,块内线程必须等待,直到所以线程都到达此点才能向前执行
- CUDA教程
- cuda教程
- CUDA中文教程
- 经典CUDA教程
- cuda教程整理
- CUDA学习教程
- Cuda 学习教程三:CUDA硬件架构
- Cuda 学习教程:Cuda 程序初始化
- Ubantu安装cuda驱动教程
- Cuda 学习教程(四):Cuda程序的优化
- Cuda 学习教程四:GPU和Cuda逻辑关系
- CUDA中文教程01之心得体会
- CUDA中文教程02之心得体会
- CUDA中文教程03之心得体会
- 风辰的CUDA入门系列教程
- CUDA远程调用—完整教程
- 这个cuda教程不错,一个链接
- CUDA 7/cuDNN/caffe/DIGITS实战教程
- 用项目管理的思维过生活-【不懂项目管理,还敢拼职场】书评
- hibernate的load()和get()的区别
- http:get&post方法
- iOS--学习博客
- [经典排序算法][集锦]
- cuda教程
- 谷歌官方建议笔记——ANR、JNI
- BMI指数
- Bahosain and Digits
- android library使用方法
- ios 动画
- 【C++】运算符重载
- C语言07 -- 结构体
- Linux时间编程