我是一名数学家,使用CUDA进行数字积分。据我理解,每个Nvidia流多处理器具有8个CUDA核心。因此,在我的看来,每个块中使用超过8个线程是没有任何好处的。然而,当我运行代码时,使用每个块32个线程与每个块8个线程相比,可以获得巨大的性能提升。
另外,我注意到即使我的显卡只有12个流多处理器,使用超过12个块也可以获得很大的性能提升。
这是为什么呢?
另外,我注意到即使我的显卡只有12个流多处理器,使用超过12个块也可以获得很大的性能提升。
这是为什么呢?
在GPU中,基本上有两种隐藏内存延迟的方法:
考虑以下计算大量元素的计算机指令序列。
a = b + c;
d = a + c;
第二条指令会停顿,因为它在等待第一条指令的结果完成。
当您只使用8个线程时,这些线程正在等待,GPU内核处于空闲状态。 然而,如果您有更多的线程,GPU能够安排其他元素的计算在当前warp等待时进行计算。这就是为什么增加线程数会使性能更好的原因。它更有效地利用了CPU内核=)
希望这可以帮助您~