2011-05-30 51 views
11

如果我開始了我的內核線程網格(僅1例如塊):CUDA線程如何分成經線?

dim3 threads(16,16); 

這是怎麼網格現在分成經線?這個網格的前兩行是一個經線,還是前兩列,還是這個任意排序?假定爲2.0的GPU計算能力和32.

回答

23

線程的翹曲大小的塊內編號,以便使得threadIdx.x變化最快,然後threadIdx.y第二快改變,和threadIdx.z最慢地變化。這在功能上與多維數組中的列主要排序相同。經線按此順序依次構造。因此,2d塊的計算是

unsigned int tid = threadIdx.x + threadIdx.y * blockDim.x; 
unsigned int warpid = tid/warpSize; 

這在編程指南和PTX指南中均有介紹。

+6

注意「列主要順序」假定dim3是一個數組,而不是一個結構。更精確的描述是'.x'是尺寸中變化最快的,'.y'是第二快的變化,而'.z'變化最慢。您如何將'.x','.y'和'.z'與行,列,片,偏移量,樹級別或內存中的任何其他地址相關聯取決於您。 – harrism 2012-09-24 23:18:24