本文地址http://blog.csdn.net/mounty_fsc/article/details/51092920
本部分內容爲[1]CUDA_C_Programming_Guide.pdf中筆記
1 限定符
1.1 函數限定符
限定符 | 執行 | 調用 |
---|---|---|
__device__ |
device | device |
__global__ |
device | host(計算能力3.x可device ) |
__host__ |
host | host |
1.2 變量限定符
限定符 | 變量位置 | device訪問 | host訪問 | 生命週期 |
---|---|---|---|---|
__device__ |
device(global memory default) | 所有線程 | 通過運行時庫 | application |
__constant__ |
constant memory | 所有線程 | 通過運行時庫 | application |
__shared__ |
shared memory of a thread block | 塊內線程 | 不可訪問 | block |
- 注:
__device__
可以與__constant__
或__shared__
配合使用
2 內建類型變量
2.1 內建類型
- 基本類型:char, short, int, long, longlong, float, double
- 向量類型:基於基本類型,如int1,int2,int3,int4,uint4等等,每一維分別由x,y,z,w訪問
- 維度類型:dim3,基於unit3,未初始化的維度賦值爲1
2.2 內建變量
變量 | 類型 | 說明 |
---|---|---|
gridDim | dim3 | 一般用2維 |
blockDim | dim3 | 一般用2維 |
blockIdx | uint3 | 當前grid中block索引 |
threadIdx | uint3 | 當前block中thread索引 |
warpSize | int | warp size in threads(1.0:24,>1.0:32) |
- warp 線程束
3 Kernels
Kernels爲從CPU上調用,在GPU上執行的函數。該函數由GPU上的線程執行N次。
定義方式爲:
__global__ void Func(float* parameter);
調用方式爲:
Func<<< Dg, Db, Ns, S >>>(parameter);
其中:
- Dg規定了Grid包含Block的維度(尺寸),類型爲dim3
- Db規定了Block包含Thread的維度(尺寸),類型爲dim3
- Ns規定了每個Block中動態分配的共享存儲器(shared memory)大小(可選,默認爲0)
- S爲流(可選,默認流爲0)
4 線程層次
4.1 線程層次
爲 一個Grid -> 多個Block -> 多個Thread
4.2 線程索引
- 列優先
- 一維block:線程索引x與線程ID相等
- 二維block(Dx,Dy):索引index (x, y)的線程ID爲 (x + yDx)
- 三維block(Dx,Dy,Dz):索引index (x, y, z)的線程ID爲(x + yDx + zDxDy)
4.3 其它
- 當前一個block最多可以有1024個線程(老一點設備爲512)
5 存儲器層次
- 常量、紋理存儲器爲只讀