假設我有n進程,並且它們每個都擁有一塊本地數據,比如int。爲什麼MPI_Sendrecv塊?
現在我想重新實現MPI_Allreduce()功能,即計算所有這些整數的全球總和再播相加結果返回的過程。
我想這樣做像在下面的代碼:
int temp;
int my_sum = temp = my_data;
for (int i = 1; i < size; ++i) {
int partner = (my_rank + 1) % size;
MPI_Sendrecv_replace(&temp, 1, MPI_INT,
partner, 0,
my_rank, 0,
MPI_COMM_WORLD, MPI_STATUS_IGNORE);
my_sum += temp;
}
,使得過程中的環FAHION通信,但它的阻止。爲什麼?如何更改代碼以使其正常工作?
注:請,不建議選擇(更好的)解決方案的問題(明確,其中之一是使用MPI_Allreduce()功能)。我的目標是理解爲什麼這段代碼不起作用,因爲我認爲它應該。