【发布时间】:2021-09-12 00:43:43
【问题描述】:
Nvidia GTX 1050 4GB GPU 可以启动多少个线程? 例如: 内核>>(args);可以启动32个线程。 那么可能的最大线程数是多少? 我知道这个帖子how many threads does nvidia GTS 450 has
【问题讨论】:
Nvidia GTX 1050 4GB GPU 可以启动多少个线程? 例如: 内核>>(args);可以启动32个线程。 那么可能的最大线程数是多少? 我知道这个帖子how many threads does nvidia GTS 450 has
【问题讨论】:
这个问题可能经常源于对 GPU 执行行为的误解。但是根据您给出的提示限制:
例如:内核>>(args);可以启动 32 个线程。
最新 CUDA 工具包支持的 GPU(即计算能力为 3.0 到 8.6 的 GPU,包括您的 GTX 1050)不会有所不同。这些限制在the documentation 中以及通过运行时查询(如deviceQuery 示例代码所示)给出。
这些限制是一个线程块(第二个内核启动配置参数)被限制为 1024 个线程total,这是 3 个维度 x、y、z 以及每个维度的乘积尺寸有各自的限制:
x y z
threadblock 1024 1024 64
grid 2^31-1 65535 65535
同样,如上所述,网格(第一个内核启动配置参数)对每个维度都有单独的限制,但对产品没有限制。
因此,当前内核启动时可以指定的最大线程数是网格尺寸和线程块限制的乘积:
total = (2^31-1)*65535*65535*1024
那个产品是 9,444,444,733,164,249,676,800
请注意,在大多数 GPU 上,启动这么大的内核,即使是空内核,也需要很长时间才能完成。 (*)
documentation 涵盖线程层次结构以及如何指定多维网格和线程块。
(*) 为了娱乐,<<<dim3(1,65535,65535),1024>>> 的空内核启动在 GTX960 上需要大约 1 分钟的时间来处理。因此,在该 GPU 上,“最大”的空内核启动需要大约 2^31 分钟来处理(超过 4000 年)。
【讨论】: