【问题标题】:The number of active threads in unfull warp?unfull warp 中的活动线程数?
【发布时间】:2014-02-26 04:27:48
【问题描述】:

我正在测试 CUDA 占用设备,我故意尝试了一个具有一个线程的块。电子表格给了我

Active Threads per Multiprocessor:32
Active Warps per Multiprocessor:1

我理解为什么 warps 的数量为 1,但预计 1 作为活动 threads 的数量每 SM。这是否意味着,将生成一个扭曲,其中 31 个结果不会未提交。我怀疑是这样,但想确认一下。

干杯

【问题讨论】:

    标签: cuda nvidia


    【解决方案1】:

    当今 GPU 中调度的基本单位是 warp,而不是线程。因此,无论您只指定一个线程还是全部 32 个线程都没有关系,warp 以相同的方式用于调度目的。

    在这种情况下,我会说“活动线程”是指与活动扭曲关联的所有线程。根据您的块配置和/或实际线程代码,其中一些线程可能什么都不做,但这些线程仍然参与计划的 warp。

    是的,如果你想只运行一个线程,它需要一个完整的warp。

    这就是为什么在任一位置都有 1 的网格配置的一个原因:

    my_kernel<<<N, 1>>>();
    

    my_kernel<<<1,N>>>(); 
    

    他们使用 GPU 资源的效率会很低。

    【讨论】:

      【解决方案2】:

      我创建了一个简单的测试程序,我在其中声明了 32 个字长的数组。内核代码很简单 d_a[tid]=2*[d_tid];我只在线程上启动了内核。在显示结果时,我只正确缩放了 d_a[0]……访问我的数组的其他元素时显示错误。这告诉我确实安排了一个经线,但它只有一个线程处于活动状态而不是 32 因此我的问题和我的困惑

      【讨论】:

        猜你喜欢
        • 2011-07-11
        • 2022-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-09
        相关资源
        最近更新 更多