2014-11-06 81 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