我编写了一个简单的 CUDA 内核来对两个大小为 2^18 的列向量执行 SAXPY。
我发现我的 GPU 是 Tesla C2070,每个块最多可以运行 1024 个线程。因此,我使我的块大小 X = 1024,Y = 1,Z = 1。我还使我的网格大小 X = 2^18 / 1024,Y = 1,Z = 1。我这样做是因为我想确保每个块的每个线程都在使用。
但是,我发现以 X = 512 和 X = 128 的块大小运行内核始终比以 X = 1024 的块大小运行内核更快。
这是为什么?如果我的块大小小于 1024,我不是在浪费线程吗?