本文從CSDN上轉移過來:
http://blog.csdn.net/mounty_fsc/article/details/51092920
本部分內(nèi)容為[1]CUDA_C_Programming_Guide.pdf中筆記
1 限定符
1.1 函數(shù)限定符
限定符 | 執(zhí)行 | 調(diào)用 |
---|---|---|
__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 | 塊內(nèi)線程 | 不可訪問 | block |
- 注:
__device__
可以與__constant__
或__shared__
配合使用
2 內(nèi)建類型變量
2.1 內(nèi)建類型
- 基本類型:char, short, int, long, longlong, float, double
- 向量類型:基于基本類型,如int1,int2,int3,int4,uint4等等,每一維分別由x,y,z,w訪問
- 維度類型:dim3,基于unit3,未初始化的維度賦值為1
2.2 內(nèi)建變量
變量 | 類型 | 說明 |
---|---|---|
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上調(diào)用,在GPU上執(zhí)行的函數(shù)岳枷。該函數(shù)由GPU上的線程執(zhí)行N次罚斗。
定義方式為:
__global__ void Func(float* parameter);
調(diào)用方式為:
Func<<< Dg, Db, Ns, S >>>(parameter);
其中:
- Dg規(guī)定了Grid包含Block的維度(尺寸)跺株,類型為dim3
- Db規(guī)定了Block包含Thread的維度(尺寸),類型為dim3
- Ns規(guī)定了每個Block中動態(tài)分配的共享存儲器(shared memory)大写尽(可選幻妓,默認為0)
- S為流(可選,默認流為0)
4 線程層次
4.1 線程層次
為 一個Grid -> 多個Block -> 多個Thread
這里寫圖片描述
4.2 線程索引
- 列優(yōu)先
- 一維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 存儲器層次
這里寫圖片描述
- 常量劫拢、紋理存儲器為只讀
6 軟件棧
這里寫圖片描述