Witam, napisałem programik w MPI, który pobrał z pliku tablice w wymiarze [n][2] (na samym gorze pliku liczba kolumn) i chciałem ją podzieloną rozesłać do węzłów jednak nie mogę dojść czemu ciągle wywala taki błąd :
BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
po usunięciu funkcji MPI_Scatter błąd znika ale nie mam pojęcia co robię tam źle...
Fatal error in PMPI_Scatter: Message truncated, error stack:
PMPI_Scatter(804)......: MPI_Scatter(sbuf=0x7ffc9cc62080, scount=8, MPI_DOUBLE, rbuf=0x128c350, rcount=4, MPI_DOUBLE, root=1, MPI_COMM_WORLD) failed
MPIR_Scatter_impl(624).:
MPIR_Scatter(585)......:
MPIR_Scatter_intra(266):
MPIR_Localcopy(74).....: Message truncated; 64 bytes received but buffer size is 32
Fatal error in PMPI_Scatter: Message truncated, error stack:
PMPI_Scatter(804).................: MPI_Scatter(sbuf=0x7ffc34fd87e0, scount=8, MPI_DOUBLE, rbuf=0x1000350, rcount=4, MPI_DOUBLE, root=1, MPI_COMM_WORLD) failed
MPIR_Scatter_impl(624)............:
MPIR_Scatter(585).................:
MPIR_Scatter_intra(200)...........:
MPIDI_CH3U_Receive_data_found(131): Message from rank 1 and tag 5 truncated; 128 bytes received but buffer size is 64
MPIR_Scatter_intra(247)...........:
MPIC_Send(284)....................: Negative count, value is -32
Fatal error in PMPI_Scatter: Message truncated, error stack:
PMPI_Scatter(804).................: MPI_Scatter(sbuf=0x7ffffb39f0c0, scount=8, MPI_DOUBLE, rbuf=0x258b350, rcount=4, MPI_DOUBLE, root=1, MPI_COMM_WORLD) failed
MPIR_Scatter_impl(624)............:
MPIR_Scatter(585).................:
MPIR_Scatter_intra(190)...........:
MPIDI_CH3U_Receive_data_found(131): Message from rank 1 and tag 5 truncated; 64 bytes received but buffer size is 32
#include "mpi.h"
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[]){
MPI_Init(&argc,&argv);
int rank, num_procs;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &num_procs);
int i, j;
int tab_size;
double **tab;
double **recv_tab;
if(rank == 0){
FILE *fp;
double a, b;
fp = fopen("dane.txt", "r");
fscanf(fp, "%d", &tab_size);
tab = malloc(tab_size * sizeof(double*));
for(i = 0; i < tab_size; ++i){
tab[i] = malloc(2 * sizeof(double));
fscanf(fp ,"%lf %lf", &a, &b);
tab[i][0] = a;
tab[i][1] = b;
}
close(fp);
}
MPI_Bcast(&tab_size, 1, MPI_INT, 0, MPI_COMM_WORLD);
recv_tab = malloc((tab_size/num_procs) * sizeof(double*));
for(i = 0; i < tab_size/num_procs; ++i){
recv_tab[i] = malloc(2 * sizeof(double));
}
MPI_Barrier(MPI_COMM_WORLD);
int x = tab_size/num_procs;
MPI_Scatter(&tab, x, MPI_DOUBLE, recv_tab, x, MPI_DOUBLE, 1, MPI_COMM_WORLD);
printf("%f", recv_tab[1][1]);
//MPI_Barrier(MPI_COMM_WORLD);
MPI_Finalize();
return 0;
}