Я новичок в MPI, и я пытаюсь написать программу, которая использует MPI_scatter. У меня 4 узла (0, 1, 2, 3). Node0 является мастером, другие - подчиненными. Мастер запрашивает у пользователя количество элементов массива для отправки ведомым. Затем он создает массив из числа элементов * 4. Затем каждый узел печатает его результаты.MPI_scatter из массива 1D
#include <mpi.h>
#include <stdio.h>
#include <stdlib.h>
#define MASTER 0
int main(int argc, char **argv) {
int id, nproc, len, numberE, i, sizeArray;
int *arrayN=NULL;
int arrayNlocal[sizeArray];
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if (id == MASTER){
printf("Enter number of elements: ");
scanf("%d", &numberE);
sizeArray = numberE * 4;
arrayN = malloc(numberE * sizeof(int));
for (i = 0; i < sizeArray; i++){
arrayN[i] = i + 1;
}
}
MPI_Scatter(arrayN, numberE, MPI_INT, &arrayNlocal, numberE,MPI_INT, MPI_COMM_WORLD);
printf("Node %d has: ", id);
for (i = 0; i < numberE; i++){
printf("%d ",arrayNlocal[i]);
}
MPI_Finalize();
return 0;
}
И как ошибки я получаю:
BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
PID 9278 RUNNING AT 192.168.100.100
EXIT CODE: 139
CLEANING UP REMAINING PROCESSES
YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
'arrayN' должен быть' int * 'вместо' int' и 'arrayN = i + 1;' должен быть 'arrayN [i] = i + 1;'. – mch
На самом деле у меня это так, я просто ошибся при переписывании кода, потому что у меня есть мои узлы как vm. Я думаю, что проблема связана с numberE, потому что если я изменяю числоE на 2, и если ввод равен 2, то работает код – cirval