-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
}
I 메모리가 모두 보낸 사람에 할당되고 수신기가 아래
[mcve]와 구체적인 오류 메시지를 제공해주십시오. 또한 MPI 구현 및 버전을 포함하는 데 도움이됩니다. – Zulan
귀하의 제안에 따라 질문을 편집했습니다. gcc의 컴파일러 (MPICC) 버전 5.4.0 사용 –
이 예제는 완전하거나 검증 할 수 없습니다. 코드는 원격으로 컴파일 할 수 없습니다. 페이지를 다시 읽으십시오. 또한 특정 오류를 제공하십시오. GCC는 MPI 구현이 아닙니다. – Zulan