Cuda GTX TITAN上的最大块数

Cuda GTX TITAN上的最大块数,cuda,nvidia,Cuda,Nvidia,我试图在nvidia GTX TITAN图形卡上使用CUDA计算傅里叶变换。当我的卡到达一定数量的区块时,我有一个问题 以下是我的卡在使用CUDAGetDeviceProperty时告诉我的内容: maxThreadsPerBlock:1024 maxThreadsDim:1024 x 1024 x 64 maxGridSize:2147483647 x 65535 x 65535 下面是我用来调用内核函数的代码: cudaDeviceProp prop; cudaGetDeviceProper

我试图在nvidia GTX TITAN图形卡上使用CUDA计算傅里叶变换。当我的卡到达一定数量的区块时,我有一个问题

以下是我的卡在使用CUDAGetDeviceProperty时告诉我的内容:

maxThreadsPerBlock:1024 maxThreadsDim:1024 x 1024 x 64 maxGridSize:2147483647 x 65535 x 65535 下面是我用来调用内核函数的代码:

cudaDeviceProp prop;
cudaGetDeviceProperties(&prop, 0);

unsigned int threads = prop.maxThreadsPerBlock;
unsigned int max_blocks = prop.maxGridSize[0];
unsigned int blocks = (pixel_size + threads - 1) / threads;

// Hardware limit
if (blocks > max_blocks)
  blocks = max_blocks;

kernel_function <<<blocks, threads>>>(pixel_size);
以及内核代码:

__global__ void kernel_function(unsigned int pixel_size)
{
  unsigned int index = blockIdx.x * blockDim.x + threadIdx.x;

  while (index < pixel_size)
  {
    // Treatment here
    index += blockDim.x * gridDim.x;
  }
}
其中pixel_size是我要对其进行变换的图像块的大小(以像素为单位)

所以线程总是等于1024,这就是我想要的。无论何时块低于或等于65535,我的代码都可以正常工作。但当块达到65535以上的值时,我得到的结果是毫无意义的,完全随机的。那么,在一维问题中,我能拥有的最大块数是多少?我在前面的代码中假设它是2147483647?我做错了什么

我觉得我对块的数量使用了错误的硬件限制,因为当我将其设置为65535时,该代码工作正常


提前感谢您的回答。

问题解决了,我使用2.x体系结构的标志而不是3.5进行编译,因此2.x限制适用于x维度上的最大块数为65535。在使用compute_35、sm_35编译之后,它工作了


谢谢@Talonmes。

问题解决了,我使用2.x体系结构的标志而不是3.5进行编译,因此2.x限制适用于x维度上的最大65535个块。在使用compute_35、sm_35编译之后,它工作了


谢谢@Talonmes。

您做了什么来检查内核是否成功执行了吗?你能详细说明一个可玩的例子吗?你是为正确的架构而编译的吗?这实际上是个问题。。。非常感谢。编译选项是compute_35,sm_35,而不是compute_20,sm_20。@Talonmes您的评论很简单,但答案是肯定的。您是应该将其添加为答案,还是应该删除该问题?我无意冒犯Jeffrey,但是你在这个问题上没有表现出太多的努力,可能是在使用head之前被问到的:作为一个内务管理的问题,我希望看到这个问题的答案。我不管是谁干的。我希望我不是在强加给@Talonmes,我恭敬地说,他也不会在意是谁干的。我建议Jeffrey提供一个答案,说明对compile命令进行更改是必要的。这个问题对未来的读者有一定的价值。如果几天后我没有看到答案,并且我被提醒了,我可能会回来发布答案。你做了什么来看看内核是否成功执行了吗?你能详细说明一个可玩的例子吗?你是为正确的架构而编译的吗?这实际上是个问题。。。非常感谢。编译选项是compute_35,sm_35,而不是compute_20,sm_20。@Talonmes您的评论很简单,但答案是肯定的。您是应该将其添加为答案,还是应该删除该问题?我无意冒犯Jeffrey,但是你在这个问题上没有表现出太多的努力,可能是在使用head之前被问到的:作为一个内务管理的问题,我希望看到这个问题的答案。我不管是谁干的。我希望我不是在强加给@Talonmes,我恭敬地说,他也不会在意是谁干的。我建议Jeffrey提供一个答案,说明对compile命令进行更改是必要的。这个问题对未来的读者有一定的价值。如果几天后我没有看到答案,并且我想起了它,我可能会回来发布答案。