如何避免使用超过GPU允许的最大线程数?

时间:2012-09-24 17:18:26

标签: cuda

如上一篇文章所述: how to find the number of maximum available threads in CUDA? 我发现GPU卡上的最大线程数是21504.但是,当我为内核分配的数量超过这个数量时,一切运行顺利。

#include <stdio.h>
#include <cuda_runtime.h>

__global__ void dummy()
{
}

int main()
{
    //int N=21504;
    int N=21504*40;
    dummy<<<1,N>>>();
    return 0;
}

我不知道发生了什么,但我相信我们应该避免这种情况,不知道该怎么做。

1 个答案:

答案 0 :(得分:3)

您的示例未正确运行。它似乎只能正常运行,因为在内核启动后你没有检查CUDA错误状态。

我对你的另一个问题的评论也适用于此:

  

每个多处理器的最大线程数是同时“在飞行中”线程数的上限。其他限制因素通常会进一步限制数量。此值不会影响可以同时启动多少个线程,并且对于找出最佳性能所需的线程数量并不是非常有用。

您的卡是计算能力2.0设备。有关设备限制的详细信息,请参阅“CUDA编程指南”中的Features and Technical Specifications部分。特别是,您的设备在X,Y和Z尺寸的每个尺寸中限制为65535的网格尺寸。您尝试使用网格大小X = 21504 * 40,Y = 1,Z = 1启动。

您的设备每个块限制为1024个线程。因此,理论上,您可以启动多达65535 * 65535 * 65535个块,每个块同时具有1024个线程。

使用比设备支持的最大驻留线程数更多的线程启动内核没有性能损失。