概述
#pragma region 检查网格和块的索引和维度
__global__ void checkIndex(void)
{
printf("threadIdx:(%d, %d, %d)n", threadIdx.x, threadIdx.y, threadIdx.z);
printf("blockIdx:(%d, %d, %d)n", blockIdx.x, blockIdx.y, blockIdx.z);
printf("blockDim:(%d, %d, %d)n", blockDim.x, blockDim.y, blockDim.z);
printf("gridDim:(%d, %d, %d)n", gridDim.x, gridDim.y, gridDim.z);
}
int checkDimension()
{
// define total data element
int nElem = 6;
// define grid and block structure
dim3 block(3);
dim3 grid((nElem + block.x - 1) / block.x);
// check grid and block dimension from host side
printf("grid.x %d grid.y %d grid.z %dn", grid.x, grid.y, grid.z);
printf("block.x %d block.y %d block.z %dn", block.x, block.y, block.z);
printf("-------------------------------------------------- n");
// check grid and block dimension from device side
checkIndex << <grid, block >> > ();
// reset device before you leave
//CHECK(cudaDeviceReset()); //hidden by zhengcheng 20200428
return(0);
}
#pragma endregion
要想理解Grid和Block这一小段程序运行一下就足够了。
下面是运行的结果:
从这个例子可以看到,grid大,block小,这里grid、block都是1维的,其实也可以看做都是3维的,只是其他的两个维度都是1不变。
再从核函数的内部来看,blockIdx反映的是grid内部,x方向上的数量变化。threadIdx反应的是block内部x方向上的数量变化。
最后
以上就是真实缘分为你收集整理的Cuda下检查网格和块的索引和维度的全部内容,希望文章能够帮你解决Cuda下检查网格和块的索引和维度所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复