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