Hello,
I am currently learning MPI and there's this problem that I have been
dealing with very long now. I am trying to receive a struct, and in some
very specific cases (when I run with 2/3/4 instances and only
calculating exactly the same number of data). For some weird reason it
seems to work as soon as I have a lot of data to calculate (starting
with N=5, I cannot reproduce the problem).
--- snip ---
data p;
p.collection = malloc(sizeof(int)*N);
printf("[%d] before receiving, data id %d at %d with direction
%d\n",me,p.id,p.position,p.direction);
MPI_Status data_status;
MPI_Recv(&p,1,MPI_data,MPI_ANY_SOURCE,99,MPI_COMM_WORLD,&data_status);
if(data_status.MPI_ERROR != MPI_SUCCESS) {
printf("[%d] ERROR %d",me,data_status.MPI_ERROR);
return -1;
}
printf("[%d] received status %d\n",data_status.MPI_ERROR);
received++;
printf("[%0d] received data %d (%d/%d) at position %d with direction
%d\n",me,p.id,received,expected,p.position,p.direction);
--- snip ---
I get this output:
[1] before receiving, data id -1665002272 at 0 with direction 0
[0] received status 0
[1] received data -1665002272 (1/2) at position 0 with direction 0
I am wondering if you had any hint for me, why data is still not having
the correct data but just the old, uninitialized values, and why I don't
get any error. Also I really have no idea, why instance 0 is printing
this status information, as it does not enter this section at all. Is
this some kind of optimazation that I have to turn off?
Thanks for all hints,
Patrick