一般的线程ID可以通过griddim,blockdim,blockidx这些内置变量确定。
但是看书却有2种不同的计算方法。
例如:2维block下有2维线程
一种计算式:
UniqueBlockIndex = blockIdx.y * gridDim.x + blockIdx.x;
UniqueThreadIndex =UniqueBlockIndex * blockDim.y * blockDim.x + threadIdx.y * blockDim.x + threadIdx.x;
但是在cuda by example里的计算式:
tx = blockIdx.xblockDim.x+threadIdx.x
ty = blockIdx.yblockDim.y+threadIdx.y
ThreadID = tx + ty * N
( N = blockDim.x * gridDim.x)
ThreadID = (blockIdx.xblockDim.x+threadIdx.x) + (blockIdx.yblockDim.y+threadIdx.y)* (blockDim.x * gridDim.x)
红色字部分不能理解。