(Cuda)基礎知識(一)

本文地址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 內建類型

  1. 基本類型:char, short, int, long, longlong, float, double
  2. 向量類型:基於基本類型,如int1,int2,int3,int4,uint4等等,每一維分別由x,y,z,w訪問
  3. 維度類型: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 存儲器層次

這裏寫圖片描述

  • 常量、紋理存儲器爲只讀

6 軟件棧

這裏寫圖片描述

[1].CUDA_C_Programming_Guide.pdf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章