我想以这种方式启动内核:
kernel_code<<<NUMBER_BLOCKS, NUMBER_THREADS_PER_BLOCK>>> (param1, param2, param3, param4);
因此,仅使用网格的x维度。我想用尽可能多的块来调用内核。我认为最大。一个网格中网格的块数为65535。
然而,我探索了常数CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X
,这听起来与我想要找到的数字完全相同。但是,这个常数在我的GeForce 210(CUDA 1.2)上返回1899336。我错了什么?
答案 0 :(得分:2)
参考cuDeviceGetAttribute的驱动程序API文档,给出网格x方向上最大块数的参数是:
•CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X:网格的最大x维;
正如您所推测的,您指定的参数给出了块中的最大线程数(x维):
•CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X:块的最大x维度;
在GeForce 210上,MAX_GRID_DIM_X
参数应为65535.(True for all cc 1.x devices.)
如果您获得了其他一些号码,您使用的代码可能会出现问题(您尚未显示),或者您的机器设置有问题。
尝试运行并检查CUDA驱动程序API deviceQuery sample的代码。