Hello,

I'm using valgrind 3.11.0 with openmpi 1.10.2. Distribution is Arch, valgrind 
is properly built with MPI support.

I compile with:

mpicxx -std=c++11 -g -O0 -Wall mpi.cpp 

and execute:

LD_PRELOAD=/usr/lib/valgrind/libmpiwrap-amd64-linux.so mpirun -n 2 valgrind 
./a.out

Valgrind reports a number of invalid reads and I have no idea why it is so or 
whether they are false positives...

I appreciate any help!

Thanks,
Florian


CODE mpi.cpp

#include <mpi.h>
#include <iostream>
#include <string>

using namespace std;


void receive(int rankSender) {
  int length = 0;
  MPI_Status status;
  MPI_Probe(rankSender, 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,
           rankSender,
           0,
           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(0);
  }
  MPI_Finalize();
  return 0;
}



VALGRIND OUTPUT

% LD_PRELOAD=/usr/lib/valgrind/libmpiwrap-amd64-linux.so mpirun -n 2 valgrind 
./a.out
==11513== Memcheck, a memory error detector
==11513== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==11513== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==11513== Command: ./a.out
==11513== 
==11514== Memcheck, a memory error detector
==11514== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==11514== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==11514== Command: ./a.out
==11514== 
valgrind MPI wrappers 11514: Active for pid 11514
valgrind MPI wrappers 11514: Try MPIWRAP_DEBUG=help for possible options
valgrind MPI wrappers 11513: Active for pid 11513
valgrind MPI wrappers 11513: Try MPIWRAP_DEBUG=help for possible options
Stringlength = 6
==11514== Invalid read of size 1
==11514==    at 0x4C2DBA2: strlen (in 
/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11514==    by 0x56852D8: length (char_traits.h:267)
==11514==    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)
==11514==    by 0x408A3C: receive(int) (mpi.cpp:22)
==11514==    by 0x408B69: main (mpi.cpp:46)
==11514==  Address 0xffefff860 is on thread 1's stack
==11514==  in frame #2, created by receive(int) (mpi.cpp:8)
==11514== 
==11514== Invalid read of size 1
==11514==    at 0x4C2DBB4: strlen (in 
/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11514==    by 0x56852D8: length (char_traits.h:267)
==11514==    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)
==11514==    by 0x408A3C: receive(int) (mpi.cpp:22)
==11514==    by 0x408B69: main (mpi.cpp:46)
==11514==  Address 0xffefff861 is on thread 1's stack
==11514==  in frame #2, created by receive(int) (mpi.cpp:8)
==11514== 
==11514== Invalid read of size 1
==11514==    at 0x60A0FF1: _IO_file_xsputn@@GLIBC_2.2.5 (in 
/usr/lib/libc-2.23.so)
==11514==    by 0x6096D1A: fwrite (in /usr/lib/libc-2.23.so)
==11514==    by 0x5684F75: sputn (streambuf:451)
==11514==    by 0x5684F75: __ostream_write<char, std::char_traits<char> > 
(ostream_insert.h:50)
==11514==    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)
==11514==    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)
==11514==    by 0x408A3C: receive(int) (mpi.cpp:22)
==11514==    by 0x408B69: main (mpi.cpp:46)
==11514==  Address 0xffefff864 is on thread 1's stack
==11514==  in frame #4, created by receive(int) (mpi.cpp:8)
==11514== 
==11514== Invalid read of size 1
==11514==    at 0x60A100D: _IO_file_xsputn@@GLIBC_2.2.5 (in 
/usr/lib/libc-2.23.so)
==11514==    by 0x6096D1A: fwrite (in /usr/lib/libc-2.23.so)
==11514==    by 0x5684F75: sputn (streambuf:451)
==11514==    by 0x5684F75: __ostream_write<char, std::char_traits<char> > 
(ostream_insert.h:50)
==11514==    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)
==11514==    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)
==11514==    by 0x408A3C: receive(int) (mpi.cpp:22)
==11514==    by 0x408B69: main (mpi.cpp:46)
==11514==  Address 0xffefff863 is on thread 1's stack
==11514==  in frame #4, created by receive(int) (mpi.cpp:8)
==11514== 
==11514== Invalid read of size 2
==11514==    at 0x4C2F9C0: __GI_memcpy (in 
/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11514==    by 0x60A0F3A: _IO_file_xsputn@@GLIBC_2.2.5 (in 
/usr/lib/libc-2.23.so)
==11514==    by 0x6096D1A: fwrite (in /usr/lib/libc-2.23.so)
==11514==    by 0x5684F75: sputn (streambuf:451)
==11514==    by 0x5684F75: __ostream_write<char, std::char_traits<char> > 
(ostream_insert.h:50)
==11514==    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)
==11514==    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)
==11514==    by 0x408A3C: receive(int) (mpi.cpp:22)
==11514==    by 0x408B69: main (mpi.cpp:46)
==11514==  Address 0xffefff860 is on thread 1's stack
==11514==  in frame #5, created by receive(int) (mpi.cpp:8)
==11514== 
==11514== Invalid read of size 1
==11514==    at 0x4C2F9F8: __GI_memcpy (in 
/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11514==    by 0x60A0F3A: _IO_file_xsputn@@GLIBC_2.2.5 (in 
/usr/lib/libc-2.23.so)
==11514==    by 0x6096D1A: fwrite (in /usr/lib/libc-2.23.so)
==11514==    by 0x5684F75: sputn (streambuf:451)
==11514==    by 0x5684F75: __ostream_write<char, std::char_traits<char> > 
(ostream_insert.h:50)
==11514==    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)
==11514==    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)
==11514==    by 0x408A3C: receive(int) (mpi.cpp:22)
==11514==    by 0x408B69: main (mpi.cpp:46)
==11514==  Address 0xffefff864 is on thread 1's stack
==11514==  in frame #5, created by receive(int) (mpi.cpp:8)
==11514== 
Hallo
==11514== 
==11514== HEAP SUMMARY:
==11514==     in use at exit: 96,351 bytes in 247 blocks
==11514==   total heap usage: 15,025 allocs, 14,778 frees, 13,362,600 bytes 
allocated
==11514== 
==11514== LEAK SUMMARY:
==11514==    definitely lost: 9,154 bytes in 39 blocks
==11514==    indirectly lost: 4,008 bytes in 22 blocks
==11514==      possibly lost: 0 bytes in 0 blocks
==11514==    still reachable: 83,189 bytes in 186 blocks
==11514==         suppressed: 0 bytes in 0 blocks
==11514== Rerun with --leak-check=full to see details of leaked memory
==11514== 
==11514== For counts of detected and suppressed errors, rerun with: -v
==11514== ERROR SUMMARY: 14 errors from 6 contexts (suppressed: 0 from 0)
==11513== 
==11513== HEAP SUMMARY:
==11513==     in use at exit: 96,351 bytes in 247 blocks
==11513==   total heap usage: 15,023 allocs, 14,776 frees, 13,370,262 bytes 
allocated
==11513== 
==11513== LEAK SUMMARY:
==11513==    definitely lost: 9,154 bytes in 39 blocks
==11513==    indirectly lost: 4,008 bytes in 22 blocks
==11513==      possibly lost: 0 bytes in 0 blocks
==11513==    still reachable: 83,189 bytes in 186 blocks
==11513==         suppressed: 0 bytes in 0 blocks
==11513== Rerun with --leak-check=full to see details of leaked memory
==11513== 
==11513== For counts of detected and suppressed errors, rerun with: -v
==11513== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
florian@asaru ~/scratch (git)-[master] % 



------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users

Reply via email to