-1
我有一個動態分配的數組,使用MPI_Send() 由等級0發送給其他等級在接收端,動態數組使用malloc()分配內存() MPI_Recv()發生其他隊伍。在這個接收函數中,我得到無效的緩衝區指針錯誤。MPI_Recv()無效的緩衝區指針
代碼在概念上類似於此:
struct graph{
int count;
int * array;
} a_graph;
int x = 10;
MPI_Status status;
//ONLY 2 RANKS ARE PRESENT. RANK 0 SENDS MSG TO RANK 1
if (rank == 0){
a_graph * my_graph = malloc(sizeof(my_graph))
my_graph->count = x;
my_graph->array = malloc(sizeof(int)*my_graph->count);
for(int i =0; i < my_graph->count; i++)
my_graph->array[i] = i;
MPI_Send(my_graph->array,my_graph->count,int,1,0,MPI_COMM_WORLD);
free(my_graph->array);
free(my_graph);
}
else if (rank == 1){
a_graph * my_graph = malloc(sizeof(my_graph))
my_graph->count = x;
my_graph->array = malloc(sizeof(int)*my_graph->count);
MPI_Recv(my_graph->array,my_graph->count,int,0,0,MPI_COMM_WORLD,&status) // MPI INVALID BUFFER POINTER ERROR HAPPENS AT THIS RECV
}
我不明白爲什麼會這樣,因爲存儲在發送者分配和接收器行列
請提供[mcve]和您得到的具體錯誤消息。它也有助於包含MPI的實現和版本。 – Zulan
我已根據您的建議編輯了該問題。使用gcc的編譯器(MPICC)版本5.4.0 –
該示例既不完整也不可驗證。代碼甚至無法遠程編譯。請仔細閱讀該頁面。還提供了具體的錯誤。 GCC不是MPI實施。 – Zulan