【cuda】- 01

夢醒時分1218發表於2020-10-17

1. 基本概念

  • host :指代 cpu 及其記憶體
  • device :指代 gpu 及其記憶體
  • cuda 程式 包括 host 程式和 device 程式,分別在 cpu 和 gpu 上執行
  • host 和 device 之間可以通訊,進行資料拷貝

2. cuda 程式執行流程

  1. 分配 host 記憶體,資料初始化
  2. 分配 device 記憶體,並從 host 將資料拷貝到 device 上
  3. 呼叫 cuda 核函式在 device 上完成運算
  4. 將 device 的運算結果拷貝到 host 上
  5. 釋放 device 和 host 上分配的記憶體

核函式 :

  1. 需要用 _ _ global_ _ 符號宣告
  2. 呼叫時需要用 <<<grid, block>>> 來指定 kernel 要執行的執行緒數量
  • cuda 中每一個執行緒都要執行核函式,並且每個執行緒都會分配一個唯一的執行緒號 thread ID,這個 ID 值可以通過核函式的內建變數 threadidx 獲得

cuda 核函式

kernel_function<<<num_blocks, num_threads>>>(param1, param2, ...)

num_blocks : 執行緒塊的數量
num_threads : 執行核心函式的執行緒數量

舉個例子:

some_kernel_func<<<2, 64>>>(a, b, c)

這將會呼叫 some_kernel_func 這個 gp× 64 次

然後具體核函式:

__global__ void some_kernel_func(int * const a, const int * const b,const int * constc)
{	
	const unsigned int thread_idx = (blockIdx.x * blockDim.x) + threadIdx.x;
	a[thread_idx] = b[thread_idx] * c[thread_idx];
}

相關文章