I am trying to evaluate a grid function at a specific mesh point, but it failed for the MPI version with the following snippet…
if mesh.Contains(0,0):
gfu(mesh(0,0))
I am trying to evaluate a grid function at a specific mesh point, but it failed for the MPI version with the following snippet…
if mesh.Contains(0,0):
gfu(mesh(0,0))
It looks like empty meshes (rank 0 has no elements) are not handled correctly.
As a workaround:
if mesh.comm.rank!=0 and mesh.Contains(0,0):
gfu(mesh(0,0))
Should be fixed shortly.
Thanks!
Say, do you have any suggestions on code debugging in MPI?
It would be a good exercise for me to trace a bug and try to fix it myself first before asking these small questions…
I have not found a solution I am really satisfied with myself, but I can tell you what I usually do.
Just keep in mind that this is all just cobbled together.
For small jobs, you can run each MPI process in a seperate xterm-window and attach gdb to each of them.
mpirun -np 1 gdb -ex run --args python3 PYTHON_SCRIPT : \
-np X xterm -hold -e gdb -ex run --args python3 PYTHON_SCRIPT
You can also pipe the output of each process to a seperate file, for example, with OpenMPI you could write
a small script like this:
#!/bin/sh
$@ 1>out_p$OMPI_COMM_WORLD_RANK 2>err_p$OMPI_COMM_WORLD_RANK
Then you can use gdb on each process, and tell it to print the back-trace when it encounters a problem
mpirun -np X bash WRAP_SCRIPT gdb -batch -ex "run" -ex bt --args python3 PYTHON_SCRIPT
This way you can do bigger jobs, but you cannot use gdb interactively.
This also works with valgrind instead of gdb.