簡體   English   中英

向MPI中的多個進程發送Recv的最佳方式

[英]Optimal Way to Send Recv to multiple processes in MPI

我的具體問題如下:假設我有4個工人和1個主過程。 我想從每個工作人員向所有其他工作人員發送消息。 (從工作人員1到2,3,4;從流程2到1,3,4,依此類推)

我不在乎消息發送的順序,但是我在乎性能。 我發送的數據非常大,可能以GB為單位。

我目前正在使用Isend和Recv,但一直出現分段錯誤。 我嘗試使用Sendrecv,但似乎由於死鎖而掛在中間。 因此,我想知道在多個進程之間進行發送和接收的最佳方法是什么。

這是我當前的代碼:

for(int id  = 1; id < num_processes; id++) { 
    // Some computation with the vector vec //
    MPI_Request request;
    if(id != myId)
        MPI_Isend(&vec.front(), vec.size(), mpi_bid, id, 1, MPI_COMM_WORLD, &request);
}

然后接收。

for(int id = 1; id < num_processes; id++) {
    MPI_Request request2;
    if(id != myID)
        MPI_Recv(&recvVec.front(), some_large_value, mpi_bid, MPI_ANY_SOURCE, 1, MPI_COMM_WORLD, &request2);
}

任何幫助表示贊賞!

如果遇到段錯誤,則發出的問題可能不是最佳地進行數據傳輸。 您可能在其他地方也遇到了問題。 您可能想嘗試調試器以了解發生了什么。 您可以在此處看到有關MPI調試的重要文章( 如何調試MPI程序? )。 如果您特別想要一個免費的調試器,則可以始終使用GDB(如果您不知道該怎么做,請參見此答案 )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM