저는 Chan 및 Dehne 정렬 알고리즘을 MPI 및 CGM 현실감있는 병렬 모델을 사용하여 구현하고 있습니다. 지금까지 각 프로세스는 원래 벡터에서 N/P 번호를받으며 각 프로세스는 빠른 정렬을 사용하여 순차적으로 번호를 정렬합니다. 각 프로세스는 로컬 벡터 (샘플은 크기 p를 가짐)로부터 샘플을 생성하고 각 프로세스는 샘플을 ~ P0; P0는 모든 프로세서의 데이터를 수용 할 수 있도록 크기가 더 큰 벡터 p * p의 모든 샘플을 수신해야합니다. 이것은 내가 꼼짝 못하는 부분입니다. 작동하는 것처럼 보입니다. 그러나 P0가 Signal : Segmentation fault (11)로 끝나는 모든 데이터를받은 후 어떤 이유로 인해 발생합니다. 고맙습니다.MPI_Recv를 사용하여 벡터를 수신하려고 시도했습니다.
// Step 2. Each process calculates it's local sample with size comm_sz
local_sample = create_local_sample(sub_vec, n_over_p, comm_sz);
// Step 3. Each process sends it's local sample to P0
if (my_rank == 0) {
global_sample_receiver = (int*)malloc(pow(comm_sz,2)*sizeof(int));
global_sample_receiver = local_sample;
for (i = 1; i < comm_sz; i++) {
MPI_Recv(global_sample_receiver+(i*comm_sz), comm_sz, MPI_INT,
i, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
}
} else {
MPI_Send(local_sample, comm_sz, MPI_INT, 0, 0, MPI_COMM_WORLD);
}
printf("P%d got here\n", my_rank);
MPI_Finalize();
무엇 재미 것은 모든 프로세스는 명령 printf("P%d got here\n", my_rank);
및 터미널에 그에 대한 인쇄를 reachs이다 :
여기에 코드의 관련 부분이다. 또한 global_sample_receiver
에는 끝에 포함될 것으로 예상되는 데이터가 들어 있지만 프로그램은 여전히 세그먼트 화 오류로 종료됩니다. 나는이 문제를 발견 local_sample도 malloc을 필요로 밝혀 :
P2 got here
P0 got here
P3 got here
P1 got here
[Krabbe-Ubuntu:05969] *** Process received signal ***
[Krabbe-Ubuntu:05969] Signal: Segmentation fault (11)
[Krabbe-Ubuntu:05969] Signal code: Address not mapped (1)
[Krabbe-Ubuntu:05969] Failing at address: 0x18000003e7
--------------------------------------------------------------------------
mpiexec noticed that process rank 0 with PID 5969 on node Krabbe-Ubuntu
exited on signal 11 (Segmentation fault).
--------------------------------------------------------------------------
편집 : 여기
이 출력됩니다.
는 당신이 [MCV (https://stackoverflow.com/help/mcve)을 게시 할 수 있습니다 : 여기
3 단계의 모습인가? – atru나는 집에 돌아가려고 노력할 것이다. –
왜 'malloc''global_sample_receiver'를 작성한 후 그 행을 덮어 씁니까? –