当前位置: 代码迷 >> CUDA >> cuda中线程的单位
  详细解决方案

cuda中线程的单位

热度:917   发布时间:2016-04-29 10:45:26.0
cuda中线程的组织

设有 

dim3 blocks(bx,by);

dim3 threads(tx,ty);

ker<<<blocks,threads>>>()

则每个线程块有tx行ty列的线程,x=threadIdx.x,y=threadIdx.y代表第x行第y列的那个线程;

整个网格有bx行by列的线程块,blockIdx.x,blockIdx.y代表第x行第y列的那个线程块。

行数和列数都可以从0开始,所以threadIdx.x必然小于tx...因为每个线程块总共有tx行个线程,分别第0行,第1行,第2行...第tx-1行,最大就是第tx-1行。


线程的组织格式最好与我们的数据的组织格式能够吻合,或者一一对应,这有利于编程时的逻辑思考。


当然:以上只是一种看法,线程组织在网格里实际上是一维组织的,弄成多维的只是为了思考方便,所以把x,y看成坐标也是可以的。这里我们看成第x行第y列是为了和数组的组织统一起来,因为数组a[x][y],中的x和y也是第x行第y列的意思。所以只要我们思维清晰不要混乱就行,按自己的编程习惯认定一种。