2014-11-06 64 views
0

我有两个代码块,其消耗的每个, 2秒在它们按顺序运行的经典结构,在4秒MPI并行时间消耗

在MPI格式,它应该消耗2秒但它需要5秒

为什么?

int main (int argc, char *argv[]) 
{ 
    MPI_Init(&argc, &argv); 
    MPI_Comm_size(MPI_COMM_WORLD,&p); 
    MPI_Comm_rank(MPI_COMM_WORLD,&id); 

    if(id==0) 
    { 
     // 2 seconds Block 
    } 
    if(id==1) 
    { 
     // 2 seconds Block 
    } 
    MPI_Finalize(); 
} 
+0

你测量了不同的块吗?你是否也测量了MPI的初始化和最终化? MPI不是无价的,特别是初始化需要“一些”时间,这对每台机器和每个MPI实现都不相同。 – PVitt 2014-11-06 10:16:34

+2

欢迎使用Stack Overflow;请提供一个[很好的例子](http://stackoverflow.com/help/mcve)。这个问题中没有足够的信息可以帮助我们。例如,如果你用'sleep(2)'作为块运行你的程序,你会发现程序的运行时间只有几十毫秒,比2s长。 – 2014-11-06 19:25:28

回答

0

需要5秒钟的时间? 如果您已经测量了整个程序的时间,问题是MPI_Init()MPI_Finalize()非常耗时。 为了看到加速,你可以增加你的“块”。

+0

是的,你是对的,但是当我把一个4的方块分成两个2的方块。我期望在2秒内运行,但它运行在5 – Hesam 2014-11-06 12:02:06

+0

在这种情况下,您需要发布“块”的代码。你的“块”(2秒)如何在一个核心上运行?你有足够的处理器吗?他们是否被别的东西占据了? – jonie83 2014-11-06 14:28:20