与每 block 线程相关的 CUDA 性能

标签 cuda

出于兴趣,我正在尝试 CUDA。在其中一个实验中,我有一个小内核,它只在 for 循环中运行了 1000 万次。我发送 1 个 block ,然后将每个 block 的线程数从 1 增加到 1024。然后我绘制了执行情况,看看它有何变化。结果是,在每 block 350 个线程左右出现急剧上升,然后在逐渐的时刻出现急剧上升。每 block 有 1024 个线程时,执行时间变为 2 倍,这表明至少有一个线程已被阻塞。实际的图表就像一个递增的梯子。我想了解的是这些上升的原因和数字取决于什么。我试图理解 SM、cuda 核心数量等。

我使用的是配备 8SM 的 GeForce 560 Ti,每个 SM 48 个核心,每个 SM 2 个 warp 调度程序。

最佳答案

每 block 线程数急剧增加到 350 个的一个可能原因是该 block 消耗了太多资源,以至于 SM 无法一次处理多个 block 。您可以使用 CUDA 占用计算器根据内核的资源使用情况查看一个 SM 一次将处理多少个 block 。

关于与每 block 线程相关的 CUDA 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11583230/

相关文章:

linux - 收到错误消息 : A single input file is required for a non-link phase when an outputfile is specified

cuda - NSight 分析 - 如何解决 "Pipe Busy"停顿问题?

linux - 如何设置一个 NVIDIA 显卡用于显示而另一个用于计算(在 Linux 中)?

CUDA 点积

c++ - 在下面的例子中如何避免代码复制? C++/库达

Numpy、BLAS 和 CUBLAS

c++ - 将 C++ 异步函数转换为 GPU 计算

cuda - 内核参数数据存放在哪里?

matrix - CUDA 添加矩阵的行

cuda - GPU Kepler CC3.0 处理器不仅是流水线架构,还是超标量?