Hello Gilles, Am Mittwoch, 2. März 2016, 23:36:56 CET schrieb Gilles Gouaillardet: > Florian, > > under the hood, strlen() can use vector instructions, and then read memory > above the end of the string. valgrind is extremely picky and does warn > about that. > iirc, there are some filter options not to issue these warnings, but I > forgot the details.
Ok, i'll try to research in that direction. > > can you try to send "Bonjour" instead of "Halo" and see if the warning > disappear ? They are still there. But, was this meant as a joke or didn't I understand? Best, Florian > Cheers, > > Gilles > > PS if it works, do not jump to the erroneous conclusion valgrind likes > French and dislikes German ;-) > > On Wednesday, March 2, 2016, Florian Lindner <mailingli...@xgm.de> wrote: > > > Hello, > > > > using OpenMPI 1.10.2 and valgrind 3.11.0 I try to use the code below to > > send a c++ string. > > > > It works fine, but running through valgrind gives a lot of memory errors, > > invalid read of size... > > > > What is going wrong there? > > > > Valgrind output, see below. > > > > Thanks! > > Florian > > > > > > // Compile with: mpicxx -std=c++11 -g -O0 -Wall -Wextra mpi.cpp > > #include <mpi.h> > > #include <iostream> > > #include <string> > > > > using namespace std; > > > > > > void receive() { > > int length = 0; > > MPI_Status status; > > MPI_Probe(MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &status); > > MPI_Get_count(&status, MPI_CHAR, &length); > > cout << "Stringlength = " << length << endl; > > char cstr[length]; > > MPI_Recv(cstr, > > length, > > MPI_CHAR, > > MPI_ANY_SOURCE, > > MPI_ANY_TAG, > > MPI_COMM_WORLD, > > MPI_STATUS_IGNORE); > > cout << cstr << endl; > > } > > > > void send(int rankReceiver) { > > std::string s = "Hallo"; > > MPI_Send(s.c_str(), > > s.size()+1, > > MPI_CHAR, > > rankReceiver, > > 0, > > MPI_COMM_WORLD); > > } > > > > int main(int argc, char* argv[]) > > { > > int rank; > > MPI_Init(&argc, &argv); > > > > MPI_Comm_rank(MPI_COMM_WORLD, &rank); > > if (rank == 0) > > send(1); > > else { > > receive(); > > } > > MPI_Finalize(); > > return 0; > > } > > > > > > VALGRIND OUTPUT > > > > % mpicxx -std=c++11 -g -O0 -Wall -Wextra mpi.cpp && mpirun -n 2 ./a.out > > Stringlength = 6 > > Hallo > > florian@asaru ~/scratch (git)-[master] % > > LD_PRELOAD=/usr/lib/valgrind/libmpiwrap-amd64-linux.so mpirun -n 2 valgrind > > ./a.out > > ==9290== Memcheck, a memory error detector > > ==9290== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al. > > ==9290== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info > > ==9290== Command: ./a.out > > ==9290== > > ==9291== Memcheck, a memory error detector > > ==9291== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al. > > ==9291== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info > > ==9291== Command: ./a.out > > ==9291== > > valgrind MPI wrappers 9290: Active for pid 9290 > > valgrind MPI wrappers 9291: Active for pid 9291 > > valgrind MPI wrappers 9290: Try MPIWRAP_DEBUG=help for possible options > > valgrind MPI wrappers 9291: Try MPIWRAP_DEBUG=help for possible options > > Stringlength = 6 > > ==9291== Invalid read of size 1 > > ==9291== at 0x4C2DBA2: strlen (in > > /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) > > ==9291== by 0x56852D8: length (char_traits.h:267) > > ==9291== by 0x56852D8: std::basic_ostream<char, std::char_traits<char> > > >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, > > std::char_traits<char> >&, char const*) (ostream:562) > > ==9291== by 0x408A39: receive() (mpi.cpp:22) > > ==9291== by 0x408B61: main (mpi.cpp:46) > > ==9291== Address 0xffefff870 is on thread 1's stack > > ==9291== in frame #2, created by receive() (mpi.cpp:8) > > ==9291== > > ==9291== Invalid read of size 1 > > ==9291== at 0x4C2DBB4: strlen (in > > /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) > > ==9291== by 0x56852D8: length (char_traits.h:267) > > ==9291== by 0x56852D8: std::basic_ostream<char, std::char_traits<char> > > >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, > > std::char_traits<char> >&, char const*) (ostream:562) > > ==9291== by 0x408A39: receive() (mpi.cpp:22) > > ==9291== by 0x408B61: main (mpi.cpp:46) > > ==9291== Address 0xffefff871 is on thread 1's stack > > ==9291== in frame #2, created by receive() (mpi.cpp:8) > > ==9291== > > ==9291== Invalid read of size 1 > > ==9291== at 0x60A0FF1: _IO_file_xsputn@@GLIBC_2.2.5 (in /usr/lib/ > > libc-2.23.so) > > ==9291== by 0x6096D1A: fwrite (in /usr/lib/libc-2.23.so) > > ==9291== by 0x5684F75: sputn (streambuf:451) > > ==9291== by 0x5684F75: __ostream_write<char, std::char_traits<char> > > > (ostream_insert.h:50) > > ==9291== by 0x5684F75: std::basic_ostream<char, std::char_traits<char> > > >& std::__ostream_insert<char, std::char_traits<char> > > >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long) > > (ostream_insert.h:101) > > ==9291== by 0x56852E6: std::basic_ostream<char, std::char_traits<char> > > >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, > > std::char_traits<char> >&, char const*) (ostream:561) > > ==9291== by 0x408A39: receive() (mpi.cpp:22) > > ==9291== by 0x408B61: main (mpi.cpp:46) > > ==9291== Address 0xffefff874 is on thread 1's stack > > ==9291== in frame #4, created by receive() (mpi.cpp:8) > > ==9291== > > ==9291== Invalid read of size 1 > > ==9291== at 0x60A100D: _IO_file_xsputn@@GLIBC_2.2.5 (in /usr/lib/ > > libc-2.23.so) > > ==9291== by 0x6096D1A: fwrite (in /usr/lib/libc-2.23.so) > > ==9291== by 0x5684F75: sputn (streambuf:451) > > ==9291== by 0x5684F75: __ostream_write<char, std::char_traits<char> > > > (ostream_insert.h:50) > > ==9291== by 0x5684F75: std::basic_ostream<char, std::char_traits<char> > > >& std::__ostream_insert<char, std::char_traits<char> > > >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long) > > (ostream_insert.h:101) > > ==9291== by 0x56852E6: std::basic_ostream<char, std::char_traits<char> > > >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, > > std::char_traits<char> >&, char const*) (ostream:561) > > ==9291== by 0x408A39: receive() (mpi.cpp:22) > > ==9291== by 0x408B61: main (mpi.cpp:46) > > ==9291== Address 0xffefff873 is on thread 1's stack > > ==9291== in frame #4, created by receive() (mpi.cpp:8) > > ==9291== > > ==9291== Invalid read of size 2 > > ==9291== at 0x4C2F9C0: __GI_memcpy (in > > /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) > > ==9291== by 0x60A0F3A: _IO_file_xsputn@@GLIBC_2.2.5 (in /usr/lib/ > > libc-2.23.so) > > ==9291== by 0x6096D1A: fwrite (in /usr/lib/libc-2.23.so) > > ==9291== by 0x5684F75: sputn (streambuf:451) > > ==9291== by 0x5684F75: __ostream_write<char, std::char_traits<char> > > > (ostream_insert.h:50) > > ==9291== by 0x5684F75: std::basic_ostream<char, std::char_traits<char> > > >& std::__ostream_insert<char, std::char_traits<char> > > >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long) > > (ostream_insert.h:101) > > ==9291== by 0x56852E6: std::basic_ostream<char, std::char_traits<char> > > >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, > > std::char_traits<char> >&, char const*) (ostream:561) > > ==9291== by 0x408A39: receive() (mpi.cpp:22) > > ==9291== by 0x408B61: main (mpi.cpp:46) > > ==9291== Address 0xffefff870 is on thread 1's stack > > ==9291== in frame #5, created by receive() (mpi.cpp:8) > > ==9291== > > ==9291== Invalid read of size 1 > > ==9291== at 0x4C2F9F8: __GI_memcpy (in > > /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) > > ==9291== by 0x60A0F3A: _IO_file_xsputn@@GLIBC_2.2.5 (in /usr/lib/ > > libc-2.23.so) > > ==9291== by 0x6096D1A: fwrite (in /usr/lib/libc-2.23.so) > > ==9291== by 0x5684F75: sputn (streambuf:451) > > ==9291== by 0x5684F75: __ostream_write<char, std::char_traits<char> > > > (ostream_insert.h:50) > > ==9291== by 0x5684F75: std::basic_ostream<char, std::char_traits<char> > > >& std::__ostream_insert<char, std::char_traits<char> > > >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long) > > (ostream_insert.h:101) > > ==9291== by 0x56852E6: std::basic_ostream<char, std::char_traits<char> > > >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, > > std::char_traits<char> >&, char const*) (ostream:561) > > ==9291== by 0x408A39: receive() (mpi.cpp:22) > > ==9291== by 0x408B61: main (mpi.cpp:46) > > ==9291== Address 0xffefff874 is on thread 1's stack > > ==9291== in frame #5, created by receive() (mpi.cpp:8) > > ==9291== > > Hallo > > ==9291== > > ==9291== HEAP SUMMARY: > > ==9291== in use at exit: 96,351 bytes in 247 blocks > > ==9291== total heap usage: 15,020 allocs, 14,773 frees, 13,362,383 bytes > > allocated > > ==9291== > > ==9291== LEAK SUMMARY: > > ==9291== definitely lost: 9,154 bytes in 39 blocks > > ==9291== indirectly lost: 4,008 bytes in 22 blocks > > ==9291== possibly lost: 0 bytes in 0 blocks > > ==9291== still reachable: 83,189 bytes in 186 blocks > > ==9291== suppressed: 0 bytes in 0 blocks > > ==9291== Rerun with --leak-check=full to see details of leaked memory > > ==9291== > > ==9291== For counts of detected and suppressed errors, rerun with: -v > > ==9291== ERROR SUMMARY: 14 errors from 6 contexts (suppressed: 0 from 0) > > ==9290== > > ==9290== HEAP SUMMARY: > > ==9290== in use at exit: 96,351 bytes in 247 blocks > > ==9290== total heap usage: 15,018 allocs, 14,771 frees, 13,370,045 bytes > > allocated > > ==9290== > > ==9290== LEAK SUMMARY: > > ==9290== definitely lost: 9,154 bytes in 39 blocks > > ==9290== indirectly lost: 4,008 bytes in 22 blocks > > ==9290== possibly lost: 0 bytes in 0 blocks > > ==9290== still reachable: 83,189 bytes in 186 blocks > > ==9290== suppressed: 0 bytes in 0 blocks > > ==9290== Rerun with --leak-check=full to see details of leaked memory > > ==9290== > > ==9290== For counts of detected and suppressed errors, rerun with: -v > > ==9290== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) > > > > _______________________________________________ > > users mailing list > > us...@open-mpi.org <javascript:;> > > Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/users > > Link to this post: > > http://www.open-mpi.org/community/lists/users/2016/03/28617.php > > >