我假設你在C++中工作,雖然你的問題沒有說。無論如何,讓我們看看MPI_Send的參數:
MPI_SEND(buf, count, datatype, dest, tag, comm)
第二個參數指定要發送多少個數據項。這個調用基本上意味着「buf
指向內存中的一個點,其中有count
個數值,它們全都是datatype
,一個接一個地發送它們:」。這使您可以發送內容的整個陣列的,就像這樣:
int values[10];
for (int i=0; i<10; i++)
values[i] = i;
MPI_Send(values, 10, MPI_INTEGER, 1, 0, MPI_COMM_WORLD);
這將開始在values
開始讀取內存,並保持閱讀,直到10 MPI_INTEGER
■找被讀取。
對於您的進程之間分配號碼時,這是你如何與MPI_SEND做到這一點:
int values[40];
for (int i=0; i<40; i++)
values[i] = i;
for (int i=1; i<4; i++) // start at rank 1: don't send to ourselves
MPI_Send(values+10*i, 10, MPI_INTEGER, i, 0, MPI_COMM_WORLD);
但是,這是在分佈式計算這樣一個共同的操作,MPI給予它自己的功能,MPI_Scatter 。 Scatter完全符合你的要求:它需要一個數組並將其平均分配給所有調用它的進程。這是一個collective communication調用,這是一個稍微高級的話題,所以如果你剛剛學習MPI(它聽起來像你),那麼可以跳過它,直到你適應MPI_Send和MPI_Recv。