cuda - CUDA 程序的速度如何随着 block 的数量而变化?

标签 cuda gpgpu gpu

我正在研究 Tesla C1060,它包含 240 个计算能力为 1.3 的处理器内核。知道每个 8 个内核都由一个多处理器控制,并且每个线程块都分配给一个多处理器,那么我预计启动 30 个块的网格应该与单个线程花费相同的执行时间堵塞。然而,事情并没有很好地扩展,即使每个块有 8 个线程,我也从来没有得到过这么好的扩展。转到另一个极端,每个块有 512 个线程,当网格包含最多 5 个块时,我得到的时间大约与一个块相同。当我将性能与在 8 核 CPU 机器上实现与 MPI 并行的相同任务进行比较时,这令人失望。
有人可以向我解释一下吗?

顺便说一句,计算机实际上包含两张特斯拉卡,那么它是自动在它们之间分配块,还是必须采取进一步措施以确保两者都被充分利用?

编辑:
关于我的最后一个问题,如果我在同一台计算机上启动两个独立的 MPI 进程,如何使每个进程在不同的显卡上工作?

EDIT2:根据 Pedro 的要求,这里有一个图表,描绘了垂直访问的总时间,归一化为 1 ,与并行块的数量。线程数/块数 = 512。这些数字很粗略,因为我观察到大量块的时间差异很大。

最佳答案

速度与块数不是简单的线性关系。这取决于一堆东西。例如,内存使用情况,一个块中执行的指令数等。

如果你想做多GPU计算,你需要修改你的代码,否则你只能使用一张GPU卡。

关于cuda - CUDA 程序的速度如何随着 block 的数量而变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12180576/

相关文章:

c++ - 使用 cudaHostAlloc 对我的情况有好处

c++ - 我使用统一内存运行内核函数后无法访问它

android - 用于 Linux/Ubuntu 的 adreno 分析器

CUDA:合并的全局内存访问是否比共享内存快?另外,分配大的共享内存阵列是否会降低程序速度?

c++ - 如何为 nvcc 添加预定义宏?

cuda - 在 CUDA NVRTC 代码中包含 C 标准头文件

c++ - CUDA 使用 CMake 在 x86 中卡住构建

c - CUDA和主机上的图像处理输出不同

c - 在mex文件matlab中使用magma_dysevd

gpu - Vulkan 管道 + 颜色附件