(二)cuda学习笔记之 cuda基本概念
2018-02-05 00:15
225 查看
Cuda编程基本概念
CUDA C基础
Cuda C是对c/c++语言进行拓展后形成的变种,兼容C/C++语法,文件类型为.cu文件,编译器使用的是nvcc。相比传统的C/C++,主要添加了一下几个方面:函数类型限定符(如__global__, __device__,__host__)
执行配置运算符
五个内置变量
变量类型限定符
其他的还有数学函数,原子函数,纹理函数,绑定函数等
函数限定符
用来确定某个函数是在CPU还是GPU上执行,以及这个函数是在从CPU调用还是从GPU调用。__device__ 表示从GPU上调用,在GPU上执行
__global__ 表示从CPU上调用,在GPU上执行,也称为kernel函数
__host__ 表示在CPU上调用,在CPU上执行
执行配置运算符
cuda核函数使用<<<>>>形式,用来传递内核函数的执行参数,格式如下:kernel<<<\gridDim,blockDim, memSize, stream>>>(para1, para2,…);
gridDim表示网格的大小,可以为1维,2维或者3维
blockDim表示块的大小,可以为1维,2维或者3维
memSize表示动态分配的共享存储器大小,默认为0
stream表示执行的流,默认位0
para1,para2等为核函数参数
5个内置变量
gridDim:包含三个元素x,y,z的结构体,表示Grid在三个方向上的尺寸,对应于执行配置中的第一个参数。blockDim:包含三个元素x,y,z的结构体,表示Block在三个方向上的尺寸,对应于执行配置中的第二个参数。
blockIdx: 包含三个元素x,y,z 的结构体,分别表示当前线程所在块在网格中x,y,z方向上的索引。
threadIdx:包含三个元素x,y,z的结构体,分别表示当前线程在其线程在其所在块中x,y,z方向上的索引。
warpSize:表示warp的大小。
如何确定线程索引?
1. 一维结构
首先从简单的一维结构来确认线程索引。如下图所示:grid在x,y,z方向上都有block, block在x,y,z三个方向都有thread。因此对于一维结构来说,x方向上thread索引为:
int tid = threadIdx.x + blockIdx.x * blockDim.x
2.二维结构
gpu中的线程的二维结构如图所示:计算如下:
//左边有x个线程
int x = threadIdx.x + blockIdx.x * blockDim.x
//上方有x个线程
int y = threadIdx.y + blockIdx.y * blockDim.y
//线程id
id = x + y * blockDim.x * gridDim.x
相关文章推荐
- CUDA学习笔记——一些基本概念
- cuda学习笔记一之GPU基本概念
- hbase 学习笔记一---基本概念
- UNIX环境编程学习笔记(17)——进程管理之进程的几个基本概念
- Flume 学习笔记(2) 基本概念
- javascript高级程序设计(第三版)-第二章 基本概念-学习笔记
- 孙鑫VC学习笔记:第十四讲 网络的基本概念
- java学习笔记00-java的基本概念
- Java TCP/IP协议学习笔记:基本概念
- 实验楼Linux学习笔记(一)之基本概念及操作
- Git版本控制管理学习笔记3-基本的Git概念
- 二叉树基本概念学习笔记
- java学习笔记(3)基本概念之抽象类和接口
- <Head First Java>学习笔记--第一章:基本概念
- 组播基本概念、IGMP、IGMP监听学习笔记
- 嵌入式开发之C基础学习笔记03--基本数据类型,操作符,修饰符等基本概念
- Druid学习笔记(1)Druid介绍与基本概念
- Oracle RAC学习笔记:基本概念及入门 02
- TensorFlow学习笔记之——些常用基本概念与函数(详细)
- Oracle RAC学习笔记:基本概念及入门