cuda基本程式設計流程
Cuda程式的執行模型
Cuda中執行緒的組織方式
l blockDim: 執行緒塊的組織和大小,如
l gridDim: 執行緒網格的組織形式,包含多少個執行緒塊,如
l threadIdx: 執行緒塊中的位置 。其中
l blockIdx: 執行緒塊線上程網格中的位置 ,其中
比如int x=blockIdx.x*blockDim.x+threadIdx.x;
int y=blockIdx.y*blockDim.x+threadIdx.y;
int z=blockIdx.z*blockDim.z+threadIdx.z;
對於一個Kenerl形式 foo<<<網格形式,執行緒塊形式>>>
如dim3 block(3,2), 定義了3*2的網格
Foo<<<4,25>>形式
對於int x=blockIdx.x*blockDim.x+threadIdx.x;而言,
為25,即blockDim.x=24, 為4,blockIdx範圍在[0,3],這樣,對於x的取值範圍就在[0,99]了
l
Cuda程式設計7步曲:
l cudaSetDeivec(i) 獲取裝置
l cudaMalloc((void**)&d_a,sizeof(float)*n) 分配視訊記憶體
l cudaMemcpy(裝置指標,主機指標,傳輸大小,cudaMemcpyHostToDevice) 由主機將資料傳到裝置
l gpu_kernel<<<blocks,threads>>>(引數列表); kernel函式,並行部分
l cudaMemcpy(主機指標,裝置指標,傳輸大小,cudaMemcpyHDeviceToHost) 由裝置將資料傳到主機
l cudaFree(d_a) 釋放視訊記憶體
l cudaDeviceReset() 重置裝置,可以省略