성공적으로 실행되는 단순한 MPI 코드가 있습니다 만 종료하기 직전에 다음과 같은 오류가 표시됩니다.MPI - 분할 오류 종료 코드 : 139
===
= BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
= EXIT CODE: 139
= CLEANING UP REMAINING PROCESSES
= YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
===================================================================================
YOUR APPLICATION TERMINATED WITH THE EXIT STRING: Segmentation fault (signal 11)
This typically refers to a problem with your application.
아래는 내 소스 코드입니다. 나는 코드의 나머지 부분에 대해 너무 확실하지 않다
/*
AUTHOR ::: KHAYAM ANJAM
*/
#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
int main (int argc, char *argv[])
{
int rank, size, ball_value, ball_present;
MPI_Init (&argc, &argv);
MPI_Comm_rank (MPI_COMM_WORLD, &rank);
MPI_Comm_size (MPI_COMM_WORLD, &size);
srandom(rank);
int delta = rand() % 13;
int random = rand() % 5;
if (random == 0) delta = -1*delta;
if (rank == 0) {
ball_present = 1;
ball_value = 0;
}
else ball_present = 0;
while (1) {
if(ball_present == 0)
MPI_Recv(&ball_value, 30, MPI_INT, MPI_ANY_SOURCE, 10, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
ball_present = 1;
printf("Task %d has Ball with value %d\n", rank, ball_value);
if (ball_value == 1000) break;
if (abs(ball_value) > 100) {
int send_1000 = 1000;
int i;
for (i = 0; i < size; i++)
if (i != rank) MPI_Send(&send_1000, 30, MPI_INT, i, 10, MPI_COMM_WORLD); //Broadcast to all others
break;
}
ball_value += delta;
int next_to_send = rand() % size;
if (next_to_send != rank) {
printf("Sending ball to %d\n", next_to_send);
MPI_Send(&ball_value, 30, MPI_INT, next_to_send, 10, MPI_COMM_WORLD);
ball_present = 0;
}
}
MPI_Finalize();
return 0;
}
나는 MPI 사용자가 아니지만, 귀하의 이익을 위해 제공되는'MPI_xxx()'함수의 * any *에서 반환 값을 확인하지 않음을 확인합니다. 이상하게도 어쩌면 내가 검색 한 몇몇 웹 페이지 중 아마도 [MS 페이지] (https://msdn.microsoft.com/en-us/library/dn473277(v=vs.85) .aspx) 만 반환 값을 구체적으로 언급합니다. . 다른 모든 사람들은 다른 사람들이 작성한 것을 표절하는 것처럼 보입니다. –