【问题标题】:Maximum number of threads for a kernel内核的最大线程数
【发布时间】:2015-07-10 07:19:04
【问题描述】:

我是 cuda 编程的新手。我正在开发具有

的 Kepler GPU
3.2 compute_capability 
1024  max_threads_per_block 
1 Multiprocessor 
2048 max._threads per_Multiprocessor 
2147483647 grid size

这是否意味着我只能为内核分配 2048 ?那么这么大的网格怎么办呢?

我的应用程序包含大量的矩阵计算。

【问题讨论】:

    标签: cuda nvidia gpu kepler


    【解决方案1】:

    您需要了解有关 CUDA 编程的更多信息。

    内核(即网格)中可以有超过 1024 或 2048 个线程。

    1024 的限制是每个块的限制。如果您是初学者,则无需过多关注 2048 数字。

    在内核启动中:

    mykernel<<<A,B>>>(...);
    

    B 参数是每个块的线程数。限制为 1024。

    A 参数是每个网格的块数。它被限制为 2^31-1(对于 Kepler GPU 上的 x 维度)。因此,理论上您可以在 cc3.x 设备上在一维网格中启动 (2^31-1)*1024 个线程。

    【讨论】:

    • 谢谢你的回答。我想既然GPU只有一个SM,SM最多可以有2048个线程,一个内核的最大线程数是2048
    • 即使 GPU 只有 1 个 SM,您也可以启动包含许多块的内核,这些块将在空间和资源允许的情况下循环通过该 SM。 2048 数字让您了解 SM在任何给定时刻(即并发)可以处理多少线程(最大)。但是随着线程块完成它们的工作,它们将“退出” SM 并且新的线程块可以开始运行。
    • GPU 在 SIMT 上工作,并不意味着所有线程都必须同时占用 SM。再次感谢。
    • @user8462 - 这与 SIMT 无关。您真的需要阅读文档,否则这种误解将是您在 CUDA 编程中遇到的最小麻烦。
    猜你喜欢
    • 1970-01-01
    • 2013-03-31
    • 2012-08-18
    • 2022-01-23
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 2011-04-20
    相关资源
    最近更新 更多