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()  重置設備,可以省略

 

                                                          

 

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