that really looks like a bug if you rewrite your program with
MPI_Sendrecv(&l, 1, MPI_INT, rank_next, tag, &l_prev, 1, MPI_INT, rank_prev, tag, MPI_COMM_WORLD, &status); or even MPI_Irecv(&l_prev, 1, MPI_INT, rank_prev, tag, MPI_COMM_WORLD, &req); MPI_Send(&l, 1, MPI_INT, rank_next, tag, MPI_COMM_WORLD); MPI_Wait(&req, &status); then there is no more valgrind warning iirc, Open MPI marks the receive buffer as invalid memory, so it can check only MPI subroutine updates it. it looks like a step is missing in the case of MPI_Recv() Cheers, Gilles On Sat, Nov 5, 2016 at 9:48 PM, Gilles Gouaillardet <gilles.gouaillar...@gmail.com> wrote: > Hi, > > note your printf line is missing. > if you printf l_prev, then the valgrind error occurs in all variants > > at first glance, it looks like a false positive, and i will investigate it > > > Cheers, > > Gilles > > On Sat, Nov 5, 2016 at 7:59 PM, Yvan Fournier <yvan.fourn...@free.fr> wrote: >> Hello, >> >> I have observed what seems to be false positives running under Valgrind when >> Open MPI is build with --enable-memchecker >> (at least with versions 1.10.4 and 2.0.1). >> >> Attached is a simple test case (extracted from larger code) that sends one >> int to rank r+1, and receives from rank r-1 >> (using MPI_COMM_NULL to handle ranks below 0 or above comm size). >> >> Using: >> >> ~/opt/openmpi-2.0/bin/mpicc -DVARIANT_1 vg_mpi.c >> ~/opt/openmpi-2.0/bin/mpiexec -output-filename vg_log -n 2 valgrind ./a.out >> >> I get the following Valgrind error for rank 1: >> >> ==8382== Invalid read of size 4 >> ==8382== at 0x400A00: main (in /home/yvan/test/a.out) >> ==8382== Address 0xffefffe70 is on thread 1's stack >> ==8382== in frame #0, created by main (???:) >> >> >> Using: >> >> ~/opt/openmpi-2.0/bin/mpicc -DVARIANT_2 vg_mpi.c >> ~/opt/openmpi-2.0/bin/mpiexec -output-filename vg_log -n 2 valgrind ./a.out >> >> I get the following Valgrind error for rank 1: >> >> ==8322== Invalid read of size 4 >> ==8322== at 0x400A6C: main (in /home/yvan/test/a.out) >> ==8322== Address 0xcb6f9a0 is 0 bytes inside a block of size 4 alloc'd >> ==8322== at 0x4C29BBE: malloc (in >> /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) >> ==8322== by 0x400998: main (in /home/yvan/test/a.out) >> >> I get no error for the default variant (no -D_VARIANT...) with either Open >> MPI 2.0.1, or 1.10.4, >> but de get an error similar to variant 1 on the parent code from which the >> example was extracted... >> >> is given below. Running under Valgrind's gdb server, for the parent code of >> variant 1, >> it even seems the value received on rank 1 is uninitialized, then Valgrind >> complains >> with the given message. >> >> The code fails to work as intended when run under Valgrind when OpenMPI is >> built with --enable-memchecker, >> while it works fine when run with the same build but not under Valgrind, >> or when run under Valgrind with Open MPI built without memchecker. >> >> I'm running under Arch Linux (whosed packaged Open MPI 1.10.4 is built with >> memchecker enabled, >> rendering it unusable under Valgrind). >> >> Did anybody else encounter this type of issue, or I does my code contain an >> obvious mistake that I am missing ? >> I initially though of possible alignment issues, but saw nothing in the >> standard that requires that, >> and the "malloc"-base variant exhibits the same behavior,while I assume >> alignment to 64-bits for allocated arrays is the default. >> >> Best regards, >> >> Yvan Fournier >> _______________________________________________ >> users mailing list >> users@lists.open-mpi.org >> https://rfd.newmexicoconsortium.org/mailman/listinfo/users _______________________________________________ users mailing list users@lists.open-mpi.org https://rfd.newmexicoconsortium.org/mailman/listinfo/users