MPI使用更多cpus花费更多时间

时间:2012-03-20 18:55:54

标签: c++ time mpi performance-testing

我的并行程序是使用c ++和OpenMPI实现的。当我测试它时,我发现如果我使用更多cpus它会花费更多时间。怎么会发生这种情况?

我的代码结构如下:

BEGIN

MPI::Init

if (rank == 0)
{ Read files } 

MPI::Bcast
MPI::Scatter

for (i=0; i<N;i++)
{  
   do something here
   MPI::Gather
   if(rank ==0)
   { save result}
}

MPI::Finallize()

END

我对此感到困惑。

3 个答案:

答案 0 :(得分:2)

扩展评论,而非回答:

@ 111111评论说,除非工作量足够大,否则并行化实际上会减慢计算速度,这是正确的。由于您只发布了代码大纲,我们无法明确地将其诊断为您问题的根源,但跳转到这不是一个不合理的结论。

通常,在任何情况下都不能指望串行程序的并行版本更快。并行化有成本(有时称为并行开销&#39;)。例如,在您的代码中,广播和分散操作会导致这种开销,您只能在并行代码中执行它们,如果它们耗费时间,它们可以抵消(或更糟)在多个CPU上更快计算的好处。

我会继续猜测你对并行编程相对较新,并建议你应该研究关于代码和问题的这个问题,即并行化的成本和收益。 。你绝对应该致力于开发一个良好的理解,一个由实验数据支持的理解,当你增加工作规模和增加处理器数量时,你的程序性能如何扩展。

修改

还有一个小问题:确保使用正确的例程来计划程序。我建议你使用mph_wtime()。我见过天真的程序员使用对utime之类的东西的调用,并最终将所有N个处理器使用的时间加在一起;您应该感兴趣的是从开始到结束(或2个兴趣点之间)的挂钟时间。

答案 1 :(得分:1)

如果没有关于环境和正在运行的实际代码的更多信息,很难知道,但请注意MPI::Gather()MPI::Bcast()是阻止调用。该过程必须等待所有进程达到这一点。

如果一个CPU速度极慢 - 等待它到达Bcast(),将减慢总时间。

答案 2 :(得分:1)

对于您的程序,并行运行的代码声明性能http://en.wikipedia.org/wiki/Amdahl's_law。许多其他参数会影响性能,例如您的计算机体系结构,例如,如果您使用共享内存系统,则内存很重要,你的代码如果文件很大就会降低性能,在这种情况下你必须使用派生数据类型进行通信,网络速度对于分布式系统来说很重要,....