关于cudaDeviceProp属性小问题

测试了一些cudaDeviceProp属性
暂时有两个不太明白
文档中说maxThreadsDim[3]是网格的每个维度的大小
maxGridSize[3]是块的每个维度大大小
我还是没明白他俩到底是什么个意思,所以我做了如下循环
for (size_t i = 0; i < 10; i++)
{
printf(“gridsize=%d blocksize=%d\n”, deviceProp.maxGridSize[i], deviceProp.maxThreadsDim[i]);
}

得到了下面的结果
gridsize=2147483647 blocksize=1024
gridsize=65535 blocksize=1024
gridsize=65535 blocksize=64
gridsize=1019500 blocksize=2147483647
gridsize=65536 blocksize=65535
gridsize=0 blocksize=65535
gridsize=5 blocksize=1019500
gridsize=0 blocksize=65536
gridsize=512 blocksize=0
gridsize=0 blocksize=5

然后我就蒙圈了,grid和block不是都只是有三个维度吗,这输出的结果是什么个意思

是我这个问题太简单了,还是没人关心过这个问题
那么大家运行核函数的时候怎么确定block和thread的大小的

文档中已经指出grid和block是三维,为什么要访问10个呢?

可是我看grid[0]的值是我显卡内存的大小啊,然后我就不确定grid[1]和grid[2]表示什么了,但是grid[3]还有值,那么grid[3]、grid[4]…等等表示的是个什么情况

其他的内容其实是当你访问超过如grid或block维数时,输出的是deviceProp的其他属性,你可以再次查看输出结果,实际上 blocksize[3]=gridsize[0],blocksize[4]=gridsize[1]。可以认为是数组越界错误,只是输出的是具有某种含义的值

实际上grid[0]表示的是我的显卡的内存大小,当我grid和block仅使用一维的时候,测试可以打开grid[1]*block[0]个线程,然后再多开一个cuda就报错了,那么我是不是可以认为当grid和block仅使用一维的时候,最多开grid[1]*block[0]个线程。假入我上面的描述是合理的,那么grid[0]、grid[1]、grid[2]又都是表示什么呢,是不是还是表示三维情况下能grid数量呢,如果是的话,测试发现,grid[0]表示的是我的显卡的内存大小,那么就应该是少了一维,如果不是,那么又代表了什么呢

grid[0]并不是指你的显存大小,只是grid一维的最大值这个值在你的设备上是2^31-1。可能只是恰好与你的显存大小一直。至于线程数量不是太明白

那么是不是一维情况下thread的数量应该等于grid的数量*block的数量呢

准确一点应该是grid内的block数量乘以block的thread数量

虽然和我理解的还是不太一样,但还是谢谢版主的回复了,这么来回的聊太费劲了