因此,我幾乎在問完問題後才找到解決方案。爲了儘可能詳盡,我將代碼推送到github。請記住,這是一個學校項目,並沒有完全完成和正確。此外,評論可能有點奇怪:我不是以英語爲母語的人。 My code on github
Nobilis有答案:MPI_Bcast不只是一個函數發送數據,但也接收一些。應由接收數據的每個進程和發送方調用MPI_Bcast。 這就是如果我寫。
int* int_array = malloc(10*sizeof(int));
int root = 0;
if(my_rank == 0)
{
for(int i=0; i<10; ++i)
int_array[i] = i;
}
MPI_Bcast(int_array, 10, MPI_INT, root, MPI_COMM_WORLD);
此代碼表示:對於每個由MPI啓動的processus分配10個int。然後,僅對於0級的processus,將一些有效數據放入先前分配的數組中。 然後每個進程都調用MPI_Bcast使用相同的參數:應該寫入數據的內存(或者在my_rank == 0的情況下應該從何處發送),數據的大小和類型(是數組還是隻有一個int?),您可以定義將數據發送到MPI_COMM_WORLD中的每個進程的根。
這就是爲什麼我們不關心int_array是否在大多數進程中沒有被初始化(除了my_rank == root的進程)。
請注意,您可以使用MPI_Datatype以特定佈局發送數據。 如果是這樣,你應該瞭解:
- MPI_Type_create_subarray
- MPI_Type_create_resized
- MPI_Type_commit
希望能幫助別人。
非常感謝。 將嘗試使其工作。如果我成功了(我懷疑:P),我會發布幫助我的東西。 –
高興地幫助,是的,當你得到一些工作時請張貼一些代碼,如果我不能幫助其他人會超過:) – Nobilis