怎么可以设计更多的线程cuda

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么可以设计更多的线程cuda相关的知识,希望对你有一定的参考价值。

参考技术A 你说的threadIdx.x???应该是threadIdx.x=0,blockIdx.x=0;

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

【中文标题】单个 CUDA 内核可以启动的最大线程数【英文标题】:Max number of threads which can be initiated in a single CUDA kernel 【发布时间】:2012-08-18 04:03:36 【问题描述】:

我对在 Fermi 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 计算一些垃圾,或者行为怪异,如果我偶然实例化了比该特定内核可能的更多线程。

【问题讨论】:

这可能对你有帮助:***.com/questions/2392250/… 【参考方案1】:

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

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

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

不,在这种情况下,您将无法达到每个块的最大线程数。 NVIDIA CUDA 工具包的每个版本都包含一个占用计算器电子表格,您可以使用它来查看寄存器压力对限制块大小的影响。

另外,在编写并启动 CUDA 内核之后,我怎么知道 我启动的线程和块的数量确实是 实例化。我的意思是我不希望 GPU 计算一些垃圾,或者 行为怪异,如果我偶然实例化了比实际更多的线程 可能适用于该特定内核。

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

【讨论】:

以上是关于怎么可以设计更多的线程cuda的主要内容,如果未能解决你的问题,请参考以下文章

CUDA:停止所有其他线程

Cuda 块或线程首选项

CUDA 学习(十九)优化策略4:线程使用计算和分支

CUDA 学习(十九)优化策略4:线程使用计算和分支

如何设计一个仅在其中一个部分使用 CUDA 的库,以便其他部分在没有安装 CUDA 的情况下也可以工作?

Cuda程序的设计-2