我正在研究 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/