0

如上一篇文章所述: 如何找到 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;
}

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

4

1 回答 1

3

您的示例运行不正确。它只是看起来运行正确,因为您没有在内核启动后检查 CUDA 错误状态。

我对您的其他问题的评论也适用于这里:

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

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

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

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

于 2012-09-24T20:26:14.700 回答