我已经使用 MPI+CUDA 在多个 GPU 上实现计算。使用的 GPU 集群有 12 个节点,每个节点有 6 个 K40 GPU。当我使用 6 个 GPU 时,它们来自同一个计算节点。但是,如果我通过更改 GPU 数量来测量执行时间,当我使用 4 个 GPU 而不是 2 个或 6 个而不是 2 个 GPU 时,我几乎没有得到加速。下面是两个不同 GPU 上的执行时间图表输入尺寸。奇怪的是,该应用程序在进一步增加系统中的 GPU 数量时实现了加速。不过,最初的平坦部分无法解释。
我还通过 nvprof 测量了通信时间。在添加 GPU 时,对 cudaMemcpy 的调用次数按预期增加。然而,令人惊讶的是,完成 cudaMemcpy 调用的平均时间会随着 GPU 的增加而减少。这不应该发生,因为每次数据传输的大小保持不变,只是数据传输的数量增加了。
所以主要有两个问题:1)有人对图中的初始平坦部分有一些可能的解释吗?2) 向系统添加更多 GPU 时 cudaMemCpy 时间如何减少?
任何帮助将不胜感激。