【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
核函数被调用时通过<<<grid, block>>>进行设置和函数并行执行的线程个数,grid和block可以时三维的xyz,通过dim3进行定义。
如:
dim3 grid=dim3(5,3);
下图所示:
上图中grid为dim3(2, 3), block为dim3(3,5),注意排列时从上到下再从左到右。
grid对应的 gridDim.x = 2 gridDim.y = 3 gridDim.z = 1
block对应的 blockDim.x = 3 blockDim.y = 5 blockDim.z = 1
假设我们要计算Block(1,1)所在的Thread(3,2)随对于的id号,可以通过下面的公式:
#define get_tid() ((gridDim.x*blockIdx.y + blockIdx.x)*blockDim.x + threadIdx.x)
对于Block(1,1)-Thread(3,2)而言,blockIdx.x=1 blockIdx.y=1 threadIdx.x=3, threadIdx.y=2
因此get_tid()的值为: (2*1 + 1)*3 + 3 = 12
来源:oschina
链接:https://my.oschina.net/u/4228078/blog/3154989