Dear Ralph, thanks for the suggest, but doesn't solve the problem :( The warning still exists.
2012/1/27 Ralph Castain <r...@open-mpi.org> > I suspect that valgrind doesn't recognize that MPI_Allgather will ensure > that hostname_recv_buf is filled prior to calling strcmp. If you want to > eliminate the warning, you should memset hostname_recv_buf to 0 so it has a > guaranteed value. > > On Jan 27, 2012, at 6:21 AM, Gabriele Fatigati wrote: > > Hi Jeff, > > yes, very stupid bug in a code, but also with the correction the problem > with Valgrind in strcmp remains: > > ==21779== Conditional jump or move depends on uninitialised value(s) > ==21779== at 0x4A0898C: strcmp (mc_replace_strmem.c:711) > ==21779== by 0x400BA8: main (all_gather.c:28) > ==21779== > ==21779== Conditional jump or move depends on uninitialised value(s) > ==21779== at 0x4A0899A: strcmp (mc_replace_strmem.c:711) > ==21779== by 0x400BA8: main (all_gather.c:28) > ==21779== > ==21779== Conditional jump or move depends on uninitialised value(s) > ==21779== at 0x4A089BA: strcmp (mc_replace_strmem.c:711) > ==21779== by 0x400BA8: main (all_gather.c:28) > > > Do you have the same warning with Valgrind? Localhost name is something > like "node343" "node344" and so on. > > > 2012/1/27 Jeff Squyres <jsquy...@cisco.com> > >> I see one problem: >> >> gethostname(local_hostname, sizeof(local_hostname)); >> >> That should be: >> >> gethostname(local_hostname, max_name_len); >> >> because sizeof(local_hostname) will be sizeof(void*). >> >> But if that's what you were intending, just to simulate a small hostname >> buffer, then be aware that gethostname() will not put a \0 after the >> string, because it'll copy in sizeof(local_hostname) characters and then >> stop. >> >> Specifically, the man page on OS X says: >> >> The gethostname() function returns the standard host name for the >> current >> processor, as previously set by sethostname(). The namelen argument >> specifies the size of the name array. The returned name is >> null-termi- >> nated, unless insufficient space is provided. >> >> Hence, MPI is transmitting the entire 255 characters in your source array >> (regardless of content -- MPI is not looking for \0's; you gave it the >> explicit length of the buffer), but if they weren't filled with \0's, then >> the receiver's printf will have problems handling it. >> >> >> >> On Jan 27, 2012, at 4:03 AM, Gabriele Fatigati wrote: >> >> > Sorry, >> > >> > this is the right code. >> > >> > 2012/1/27 Gabriele Fatigati <g.fatig...@cineca.it> >> > Hi Jeff, >> > >> > The problem is when I use strcmp on ALLGather buffer and Valgrind that >> raise a warning. >> > >> > Please check if the attached code is right, where size(local_hostname) >> is very small. >> > >> > Valgrind is used as: >> > >> > mpirun valgrind --leak-check=full --tool=memcheck ./all_gather >> > >> > and openmpi/1.4.4 compiled with "-O0 -g" >> > >> > Thanks! >> > >> > 2012/1/26 Jeff Squyres <jsquy...@cisco.com> >> > I'm not sure what you're asking. >> > >> > The entire contents of hostname[] will be sent -- from position 0 to >> position (MAX_STRING_LEN-1). If there's a \0 in there, it will be sent. >> If the \0 occurs after that, then it won't. >> > >> > Be aware that get_hostname(buf, size) will not put a \0 in the buffer >> if the hostname is exactly "size" bytes. So you might want to double check >> that your get_hostname() is returning a \0-terminated string. >> > >> > Does that make sense? >> > >> > Here's a sample I wrote to verify this: >> > >> > #include <stdio.h> >> > #include <string.h> >> > #include <mpi.h> >> > #include <stdlib.h> >> > >> > #define MAX_LEN 64 >> > >> > static void where_null(char *ptr, int len, int rank) >> > { >> > int i; >> > >> > for (i = 0; i < len; ++i) { >> > if ('\0' == ptr[i]) { >> > printf("Rank %d: Null found at position %d (string: %s)\n", >> > rank, i, ptr); >> > return; >> > } >> > } >> > >> > printf("Rank %d: Null not found! (string: ", rank); >> > for (i = 0; i < len; ++i) putc(ptr[i], stdout); >> > putc('\n', stdout); >> > } >> > >> > int main() >> > { >> > int i; >> > char hostname[MAX_LEN]; >> > char *hostname_recv_buf; >> > int rank, size; >> > >> > MPI_Init(NULL, NULL); >> > MPI_Comm_rank(MPI_COMM_WORLD, &rank); >> > MPI_Comm_size(MPI_COMM_WORLD, &size); >> > >> > gethostname(hostname, MAX_LEN - 1); >> > where_null(hostname, MAX_LEN, rank); >> > >> > hostname_recv_buf = calloc(size * (MAX_LEN), (sizeof(char))); >> > MPI_Allgather(hostname, MAX_LEN, MPI_CHAR, >> > hostname_recv_buf, MAX_LEN, MPI_CHAR, MPI_COMM_WORLD); >> > for (i = 0; i < size; ++i) { >> > where_null(hostname_recv_buf + i * MAX_LEN, MAX_LEN, rank); >> > } >> > >> > MPI_Finalize(); >> > return 0; >> > } >> > >> > >> > >> > On Jan 13, 2012, at 2:32 AM, Gabriele Fatigati wrote: >> > >> > > Dear OpenMPI, >> > > >> > > using MPI_Allgather with MPI_CHAR type, I have a doubt about >> null-terminated character. Imaging I want to spawn node names where my >> program is running on: >> > > >> > > >> > > ---------------------------------------- >> > > >> > > char hostname[MAX_LEN]; >> > > >> > > char* >> hostname_recv_buf=(char*)calloc(num_procs*(MAX_STRING_LEN),(sizeof(char))); >> > > >> > > MPI_Allgather(hostname, MAX_STRING_LEN, MPI_CHAR, hostname_recv_buf, >> MAX_STRING_LEN, MPI_CHAR, MPI_COMM_WORLD); >> > > >> > > ---------------------------------------- >> > > >> > > >> > > Now, is the null-terminated character of each local string included? >> Or I have to send and receive in MPI_Allgather MAX_STRING_LEN+1 elements? >> > > >> > > Using Valgrind, in a subsequent simple strcmp: >> > > >> > > for( i= 0; i< num_procs; i++){ >> > > if(strcmp(&hostname_recv_buf[MAX_STRING_LEN*i], >> local_hostname)==0){ >> > > ... doing something.... >> > > } >> > > } >> > > >> > > raise a warning: >> > > >> > > Conditional jump or move depends on uninitialised value(s) >> > > ==19931== at 0x4A06E5C: strcmp (mc_replace_strmem.c:412) >> > > >> > > The same warning is not present if I use MAX_STRING_LEN+1 in >> MPI_Allgather. >> > > >> > > >> > > Thanks in forward. >> > > >> > > -- >> > > Ing. Gabriele Fatigati >> > > >> > > HPC specialist >> > > >> > > SuperComputing Applications and Innovation Department >> > > >> > > Via Magnanelli 6/3, Casalecchio di Reno (BO) Italy >> > > >> > > www.cineca.it Tel: +39 051 6171722 >> > > >> > > g.fatigati [AT] cineca.it >> > > _______________________________________________ >> > > users mailing list >> > > us...@open-mpi.org >> > > http://www.open-mpi.org/mailman/listinfo.cgi/users >> > >> > >> > -- >> > Jeff Squyres >> > jsquy...@cisco.com >> > For corporate legal information go to: >> > http://www.cisco.com/web/about/doing_business/legal/cri/ >> > >> > >> > _______________________________________________ >> > users mailing list >> > us...@open-mpi.org >> > http://www.open-mpi.org/mailman/listinfo.cgi/users >> > >> > >> > >> > -- >> > Ing. Gabriele Fatigati >> > >> > HPC specialist >> > >> > SuperComputing Applications and Innovation Department >> > >> > Via Magnanelli 6/3, Casalecchio di Reno (BO) Italy >> > >> > www.cineca.it Tel: +39 051 6171722 >> > >> > g.fatigati [AT] cineca.it >> > >> > >> > >> > -- >> > Ing. Gabriele Fatigati >> > >> > HPC specialist >> > >> > SuperComputing Applications and Innovation Department >> > >> > Via Magnanelli 6/3, Casalecchio di Reno (BO) Italy >> > >> > www.cineca.it Tel: +39 051 6171722 >> > >> > g.fatigati [AT] cineca.it >> > <all_gather.c>_______________________________________________ >> > users mailing list >> > us...@open-mpi.org >> > http://www.open-mpi.org/mailman/listinfo.cgi/users >> >> >> -- >> Jeff Squyres >> jsquy...@cisco.com >> For corporate legal information go to: >> http://www.cisco.com/web/about/doing_business/legal/cri/ >> >> >> _______________________________________________ >> users mailing list >> us...@open-mpi.org >> http://www.open-mpi.org/mailman/listinfo.cgi/users >> > > > > -- > Ing. Gabriele Fatigati > > HPC specialist > > SuperComputing Applications and Innovation Department > > Via Magnanelli 6/3, Casalecchio di Reno (BO) Italy > > www.cineca.it Tel: +39 051 6171722 > > g.fatigati [AT] cineca.it > <all_gather.c>_______________________________________________ > users mailing list > us...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/users > > > > _______________________________________________ > users mailing list > us...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/users > -- Ing. Gabriele Fatigati HPC specialist SuperComputing Applications and Innovation Department Via Magnanelli 6/3, Casalecchio di Reno (BO) Italy www.cineca.it Tel: +39 051 6171722 g.fatigati [AT] cineca.it