Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cuda线程索引用于计算threadIdx和ThreadIdy_Cuda - Fatal编程技术网

Cuda线程索引用于计算threadIdx和ThreadIdy

Cuda线程索引用于计算threadIdx和ThreadIdy,cuda,Cuda,我有一个非常基本的疑问,假设我有一个二维网格和二维块,我想计算块中特定线程的threadIdx和threadIdy。 我知道blockId=blockIdx.y*gridDim.x*gridDim.y+blockIdx.x 因此threadIdx=threadIdx.x 和threadIdy=blockId*blockDim.x*blockDim.y+threadIdx.y*blockDim.x 这是正确的吗? 实际上,我想使用2D网格和2D块进行矩阵乘法,这就是为什么我需要2D线程块的2D网格

我有一个非常基本的疑问,假设我有一个二维网格和二维块,我想计算块中特定线程的threadIdx和threadIdy。 我知道
blockId=blockIdx.y*gridDim.x*gridDim.y+blockIdx.x
因此
threadIdx=threadIdx.x
threadIdy=blockId*blockDim.x*blockDim.y+threadIdx.y*blockDim.x
这是正确的吗?
实际上,我想使用2D网格和2D块进行矩阵乘法,这就是为什么我需要2D线程块的2D网格的x索引和y索引的原因,在2D网格中,每个线程需要唯一的(x,y)索引组合,这非常简单:

int idx = threadIdx.x+blockDim.x*blockIdx.x;
int idy = threadIdx.y+blockDim.y*blockIdx.y;

如何为任意网格配置中的每个线程获取唯一的线性索引?通用的全局唯一索引可以是:
size\u t id=(threadIdx.z+blockDim.z*blockIdx.z)*(gridDim.x*blockDim.x*gridDim.y*blockDim.y)+(threadIdx.y+blockDim.y*blockIdx.y)*(gridDim.x*blockDim.x)+(threadIdx+blockDim.x*blockIdx.x)这是z索引乘以x-y切片的大小,加上y索引乘以x中一行的大小,再加上x索引。