Poniżej przedstawię kod. Kompilowałem komendą "mpicc -o suma suma.c" i wszystko przebiegło bez zastrzeżeń. Chciałem odpalić komendą "mpirun -n 8 ./suma" i jest informacja o błędzie segmentacji, ewentualnie nic się nie wyświetla. Powiem szczerze, nie widzę w nigdzie błędów, więc wie ktoś może jak pomóc z tą kompilacją? Pracuję na Linux Mint Cinnamon.
#include <mpi.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#define SIZE 6
// suma wierszów w tablicy, dekompozycja wierszowa
int main (int argc, char** argv)
{
double tab[SIZE]; // wektor wyników
double privRes[SIZE]; // wyniki wątków
double matrix [SIZE][SIZE]; // tablica
// wypełnianie tablicy i wektora danymi
int n = 1;
for (int i = 0; i < SIZE; i++)
{
for (int j = 0; i < SIZE; j++)
{
matrix[i][j] = n;
n++;
}
tab[i] = 0;
}
int rank, size = SIZE;
MPI_Init (&argc, &argv); // inicjalizacja mechanizmu MPI
MPI_Comm_rank (MPI_COMM_WORLD, &rank); // pobieranie id procesu
MPI_Comm_size (MPI_COMM_WORLD, &size); // pobranie liczby procesów
if (rank == 0) // jeśli proces jest zerowy
{
printf("Macierz: \n");
for (int i = 0; i < SIZE; i++)
for (int j = 0; j < SIZE; j++)
printf("%f ", matrix[i][j]);
printf("\n");
}
MPI_Barrier(MPI_COMM_WORLD);
printf("\nZgłasza się proces nr: %d \n", rank);
double row[SIZE]; // wiersze
// wprowadzanie wiersza macierzy do wiersza w "row" zgodnie z id procesu
MPI_Scatter(matrix, size, MPI_DOUBLE, row, size, MPI_DOUBLE, 0, MPI_COMM_WORLD);
MPI_Reduce(&privRes, &tab, size, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);
MPI_Barrier(MPI_COMM_WORLD);
if (rank == 0)
{
printf("\nResults in rows:\n");
for (int i = 0; i < SIZE; i++)
printf("%f ", tab[i]);
}
MPI_Finalize(); // zakończenie procedur MPI
return (0);
}