cuda初学-02(大部分转载,小部分总结)
来源:互联网 发布:怎样加入淘宝网全球购 编辑:程序博客网 时间:2024/06/05 14:49
线程格(grid)、线程块(block)以及线程(thread)之间的关系
内核函数的调用可以简化为kernel<<<A,B>>>(parameters),在尖括号中,A代表线程格(grid)的尺寸,它可以是三维的,用类型dim3表示,也可以是一维的,用int类型表示。B代表线程块(block)的尺寸,它与A类似,也可分别用dim3或int类型表示。
在GPU上CUDA线程可以访问到的存储资源有很多,每个CUDA线程拥有独立的本地内存(local Memory);每一个线程块(block)都有其独立的共享内存(shared memory),共享内存对于线程块中的每个线程都是可见的,它与线程块具有相同的生存时间;同时,还有一片称为全局内存(global memory)的区域对所有的CUDA线程都是可访问的。
除了上述三种存储资源以外,CUDA还提供了两种只读内存空间:常量内存(constant memory)和纹理内存(texture memory),同全局内存类似,所有的CUDA线程都可以访问它们。对于一些特殊格式的数据,纹理内存提供多种寻址模式以及数据过滤方法来操作内存。这两类存储资源主要用于一些特殊的内存使用场合。
函数修饰符__global__:告诉编译器,函数应该编译为在设备上运行。从主机上调用并在设备上运行。
__device__:代码在GPU运行。被声明为__device__的函数,只能从其他__device__函数或者__global__函数中调用他们。
内置变量 ,注意i大写;
threadIdx,CUDA的每一个线程都有其线程ID,线程的ID信息由变量threadIdx给出。通常它用一个三维数组来表示
threadIdx.x;threadIdx.y;threadId.z;
blockIdx.x,变量中包含的值就是当前执行设备代码的线程块的索引。
如果线程块是一维的,则线程Id=threadIdx.x;
如果线程块是二维的,则线程Id=threadIdx.x+threadIdx.y*blockDim.x;
如果线程块是三维的,则线程Id=threadIdx.x+threadIdx.y*blockDim.x+threadIdx.z*blockDim.x*blockDim.y;(blockDim.x代表线程块中x轴的线程数量)
需要注意的是,在启动线程块数组的时候,数组每一维的最大数量都不不能超过65536; dim3 grid(DIM,DIM);kernel<<<grid,1>>>();类型dim3表示一个三维数组,可以用于指定启动的线程块的数量。三维数组的最后一维的大小为1,(目前并不支持三维数组);
- cuda初学-02(大部分转载,小部分总结)
- string 小部分用法归类(初学)
- 小部分
- cuda总结(转)
- android的重启(大部分是转载)
- cuda中各种类型的变量的总结(有转载的,有添加的)
- 标签库(小部分,未完待续)
- cuda 初学大全
- cuda 初学大全
- cuda初学-01
- cuda初学03
- CUDA初学整理
- cuda 初学大全
- JSP初学心得(转载)
- Python初学笔记(转载)
- Github初学使用笔记(本文大部分内容翻译于官网)
- CUDA从入门到精通(转载)
- cuda总结
- Django学习笔记(1):初会Django
- 字节码资料2:
- hadoop——配置eclipse下的map-reduce运行环境
- 关于startActivityForResult()
- 问题提出:Java为什么可以跨平台???
- cuda初学-02(大部分转载,小部分总结)
- 黑马程序员-----------JAVA基础-------异常机制
- hadoop——在命令行下编译并运行map-reduce程序
- RequireJS进阶(一)
- Vector的用法和操作
- javascript设计模式理论和示例深入分析(上)
- RequireJS进阶(二)
- hadoop-初学者写map-reduce程序中容易出现的问题
- 字节码的资料3: