单个CUDA内核中可启动的最大线程数

单个CUDA内核中可启动的最大线程数,cuda,gpu,thrust,Cuda,Gpu,Thrust,我对费米GPU中可以启动的最大线程数感到困惑 我的GTX 570设备查询说明如下 Maximum number of threads per block: 1024 Maximum sizes of each dimension of a block: 1024 x 1024 x 64 Maximum sizes of each dimension of a grid: 65535 x 65535 x 65535 根据我的理解,我将上述声明理解为:

我对费米GPU中可以启动的最大线程数感到困惑

我的GTX 570设备查询说明如下

  Maximum number of threads per block:           1024
  Maximum sizes of each dimension of a block:    1024 x 1024 x 64
  Maximum sizes of each dimension of a grid:     65535 x 65535 x 65535
根据我的理解,我将上述声明理解为:

对于CUDA内核,我们最多可以启动65536个块。每个启动的块最多可包含 1024个线程。因此,原则上,我最多可以启动65536*1024(=67108864)个线程。

这是正确的吗?如果我的线程使用了很多寄存器怎么办?我们仍然能够达到线程数量的理论最大值吗

在编写并启动CUDA内核之后,我如何知道我启动的线程和块的数量已经被实例化了呢。我的意思是我不希望GPU计算一些垃圾,或者行为怪异,如果我偶然实例化了比特定内核可能实例化的线程更多的线程

对于CUDA内核,我们最多可以启动65536个块。每次发射 块最多可以包含1024个线程。因此,原则上,我可以启动 最多65536*1024(=67108864)个螺纹

不,这是不对的。您可以启动最多包含65535 x 65535 x 65535个块的网格,每个块的每个块最多有1024个线程,尽管每个线程资源限制可能会将每个块的线程总数限制为小于此最大值

如果我的线程使用了很多寄存器怎么办?我们还能到达吗 这个理论上的最大线程数是多少

不,在这种情况下,您将无法达到每个块的最大线程数。英伟达CUDA工具包的每一次发布都包含一个占用计算器电子表格,你可以用来查看登记压力对限制块大小的影响。 另外,在编写并启动CUDA内核之后,我怎么知道呢 我已经启动的线程和块的数量确实已经减少了 实例化。我的意思是我不希望GPU计算一些垃圾,或者 奇怪的是,如果我碰巧实例化了比现在更多的线程 对于那个特定的内核是可能的

如果选择非法的执行配置(因此块大小或网格大小不正确),内核将不会启动,运行时将发出
cudaErrorInvalidConfiguration
错误消息。您可以使用标准的
cudaPeekAtLastError()
cudaGetLastError()
来检查任何内核启动的状态。

这可能会帮助您: