-2

我想詢問有關回答以下問題最好的情況

對於通過使每個進程發送一個 值執行通信此MPI程序段,正,以環形模式轉到其旁邊的過程。也就是說,如果有N個進程,則進程0 將發送值爲1,進程1將發送到2,依此類推。最後一個進程將其值 發送到0.這些消息將全部並行發生。

if (my_rank%2 == 0) { MPI_SEND(msg,size,MPI_INT,(my_rank+1)%comm_sz,0,comm); 

    MPI_RECV(new_msg,size,MPI_INT,(my_rank+comm_sz-1)%comm_sz,0,comm,MPI_STATUS_IGNORE); } 

else { 

    MPI_RECV(new_msg,size,MPI_INT,(my_rank+comm_sz-1)%comm_sz,0,comm,MPI_STATUS_IGNORE); 

    MPI_SEND(msg,size,MPI_INT,(my_rank+1)%comm_sz,0,comm); } 

假設發送消息的時間是一個時間單元,時間以接收 消息是一個時間單元。只包括消息傳遞的費用(忽略任何啓動 費用等),並在最佳情況下計算完成代碼 需要多少時間單位。你應該陳述你明確提出的任何假設。

我認爲它會是4,在最好的情況下,如果所有的偶數同時發送n和所有在這裏同時收到的可能性是2並且奇數發送相同,那麼另一個2所以它會是4但我不知道我是否正確

回答

1

你寧願使用MPI_Sendrecv() 這樣可以避免你不得不處理奇數和偶數行列。

請記住,一般來說,MPI_Send()在發送小消息時會立即返回,而如果消息很大,則會一直髮送匹配的MPI_Recv()。正確的MPI程序應該始終阻止MPI_Send(),直到發佈匹配的MPI_Recv()

+0

謝謝我會照顧那個,但是對於這個問題和這個代碼,因爲他們是給予的是我想到的時間成本是否正確? 再次感謝。 –

相關問題