sandbox/bugs/MGmpiboundary.c
Call to boundary()
with 8 threads causes a crash when running Multigrid MPI
The following code crashes for some levels of refinement when using 8 threads and 9 levels of refinement.
#include "grid/multigrid3D.h"
scalar m[];
int maxlevel = 5;
int main(int argc,char ** argv){
if (argc>1)
maxlevel=atoi(argv[1]);
init_grid(1<<maxlevel);
printf("thread #%d was here\n",pid());
boundary({m});
printf("thread #%d is done\n",pid());
}
How to crash?
Compile and run the code following like so;
:~$ CC99='mpicc -std=c99' qcc -O2 -Wall -D_MPI=1 MGmpiboundary.c -o maybebug -lm
:~$ mpirun -np 8 ./maybebug
There are no issues for this case. However when running with nine levels of refinement;
:~$ mpirun -np 8 ./maybebug 9
An error is raised: segmentation fault
that seems to correspond with the call the boundary()
function as one may get this:
thread #1 was here
thread #6 was here
thread #3 was here
thread #0 was here
thread #4 was here
thread #2 was here
thread #5 was here
thread #7 was here
--------------------------------------------------------------------------
mpirun noticed that process rank 6 with PID 14254 on node antoon-XPS-15-9550 exited on signal 11 (Segmentation fault).
--------------------------------------------------------------------------
The bug appears on a test laptop and also on a bigger system (a workstation) that allowed testing with 10 levels of refinement. Here some manupulation of the data associated with the m[]
field worked fine, untill the call to boundary()
was made.
Note that running the executable using a single or 64 threads does not display this issue, i.e. for 9 levels of refinement.