簡體   English   中英

MPI多個循環發送和接收

[英]MPI multiple send and receive in loop

我的代碼甚至在概念上都有很大的問題。 我需要做的是在兩個不同的功能中完成工作。 一個函數只有一個實例及其主線程,第二個函數在許多其他節點上具有很多實例。

我的一個功能(功能A)正在將3部分數據發送到所有節點,而另一個功能B應該在每個節點上接收數據。 接下來,函數A應該等待結果。 當它們准備就緒時,每個節點中的功能B都應將一部分數據發送給功能A,然后全部重新開始。

它的工作方式應類似於以下示例代碼:

void prepareData() { //function A
  for(int i = 1 ; i < threads;i++) {
    MPI_Send(...); //first part of data
    MPI_Send(...); //second part of data
    MPI_Send(...); //third part of dat
  }
  //Here this function (A) should wait because second function (B) is computing data
  for(int i=1;i<threads;i++) {
    MPI_Recv(...); //receiving data from function B
  }
}

void computeData() { //function B
  while(isDone) {
    MPI_Recv(...); //first part of data
    MPI_Recv(...); //second part of data
    MPI_Recv(...); //third part of data
  //Here all this data are computed and then sending to main function
    MPI_Send(...); //sending data to function A
 }
}

有誰知道該怎么做以及應該使用哪個MPI函數以及如何使用?

那么,當您嘗試描述的方法時會發生什么?

您是否真的在這里使用線程,還是將線程編程與消息傳遞相結合? 慣用MPI更像

for(int i = 1 ; i < nprocs;i++) {
...
}

SEND可能會阻止,因此您可能應該使用ISEND並測試/等待完成。

暫無
暫無

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

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