저는 MPI가 새롭고 15 개의 요소로 된 2 개의 배열 A와 B가 있고 16 개의 프로세스가 있고 각 프로세스는 배열의 요소를 나타냅니다. (프로세스 0을 사용하지 않습니다.). 배열 A는 8 ... 15 위치의 입력 데이터를 저장합니다.이 위치는 트리의 리프를 reprezent하고 첫 번째 단계에서는 나뭇잎에서 부모에게 숫자를 보내고 부모는 모두로부터 받는다. 아들들과 그 숫자들을 더하여 아버지에게 보내라. 그리고 배열 A는 배열의 모든 원소의 합계가 1 인 곳에서 처리됩니다. 그리고 두 번째 단계에서 나는 접두사 계산을합니다. 여기서 접두사 계산은 0 번 프로세스에서 시작하여 잎을 마칩니다. 그리고 배열 B를 계산하기 위해 다른 모든 프로세스는 프로세스 1을 끝내기 위해 기다려야하고 MPI_Barrier를 사용하기 위해서는 코드를 exec 할 때 오류가 발생합니다.MPI : 다음 예제에서 MPI_Barrier를 사용할 때 오류가 발생하는 이유는 무엇입니까?
int m = 3;
int n = (int)pow(2, m);
int *A = (int*)malloc(2 * n * sizeof(int));
int *B = (int*)malloc(2 * n * sizeof(int));
int id;
MPI_Status status;
A[8] = 4; A[9] = 8; A[10] = 5; A[11] = 2;
A[12] = 10; A[13] = 6; A[14] = 9; A[15] = 11;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &id);
if (id == 1)
{
int nr;
int suma = 0;
MPI_Recv(&nr, 1, MPI_INT, 2 * id, 99, MPI_COMM_WORLD, &status);
suma += nr;
MPI_Recv(&nr, 1, MPI_INT, 2 * id + 1, 99, MPI_COMM_WORLD, &status);
suma += nr;
A[id] = suma;
printf("A[%d]=%d\n", id, A[id]);
B[id] = A[id];
printf("B[%d]=%d\n", id, B[id]);
MPI_Barrier(MPI_COMM_WORLD);
}
else
{
if (id != 0)
{
if(id >= 8)
{
MPI_Send(&A[id], 1, MPI_INT, id/2, 99, MPI_COMM_WORLD);
printf("%d a trimis %d catre %d\n", id, A[id], id/2);
MPI_Barrier(MPI_COMM_WORLD);
}
else
{
int nr;
int suma = 0;
MPI_Recv(&nr, 1, MPI_INT, 2 * id, 99, MPI_COMM_WORLD, &status);
suma += nr;
MPI_Recv(&nr, 1, MPI_INT, 2 * id + 1, 99, MPI_COMM_WORLD, &status);
suma += nr;
A[id] = suma;
MPI_Send(&A[id], 1, MPI_INT, id/2, 99, MPI_COMM_WORLD);
printf("%d a trimis %d catre %d\n", id, A[id], id/2);
MPI_Barrier(MPI_COMM_WORLD);
}
if (id % 2 == 1)
{
B[id] = B[(id - 1)/2];
printf("B[%d]=%d\n", id, B[id]);
}
else
{
B[id] = B[id/2] - A[id + 1];
printf("B[%d]=%d\n", id, B[id]);
}
}
MPI_Finalize();
free(A);
return 0;
그리고 난 다음 오류가 나타납니다 나는 프로그램 작업을 할 수있는 방법
[15]fatal error
Fatal error in MPI_Barrier:Other MPI error, error stack:
MPI_Barrier(MPI_COMM_WORLD) failed
failed to attach to a bootstrap queue - 5064:344
를?
시스템에서보다 기본적인 Init/Barrier/Finalize 작업을 수행합니까? – Zulan