[mpich-discuss] question in MPI_Info_get
Junchao Zhang
jczhang at mcs.anl.gov
Tue Feb 3 22:41:41 CST 2015
I still feel the standard obscures the case. Passing a buffer (value) and
the length of the buffer (valuelen) is easier for programmers.
The Fortran interface "CHARACTER(LEN=valuelen), INTENT(OUT) :: value" is
clearer in this regard.
--Junchao Zhang
On Tue, Feb 3, 2015 at 5:33 PM, Thakur, Rajeev <thakur at mcs.anl.gov> wrote:
> I guess it may have been defined that way because in Fortran strings are
> not null-terminated. The definition in the standard allows the same value
> to be returned/passed in valuelen in both C and Fortran.
>
> Rajeev
>
> On Feb 3, 2015, at 5:28 PM, Junchao Zhang <jczhang at mcs.anl.gov>
> wrote:
>
> > OK, I guess MPI standard wants to have this kind of code.
> >
> > int valuelen;
> > MPI_Info_get_valuelen(..., &valuelen,...);
> > int buflen = valuelen + 1;
> > char* value = (char *)malloc(buflen);
> > MPI_Info_get(..., valuelen, value, ...);
> >
> > Though, from a user's point of view, I fell better if it was
> MPI_Info_get(..., buflen, value, ...), that is, using buflen to specify the
> length of buffer I pass to MPI.
> >
> >
> > --Junchao Zhang
> >
> > On Tue, Feb 3, 2015 at 4:26 PM, William Gropp <wgropp at illinois.edu>
> wrote:
> > Thanks. Yes, I believe this is a bug. The implementation of
> MPI_Info_get in MPICH passes valuelen to the internal copy routine, yet it
> is clear that the definition in the standard for MPI_Info_get, it should
> pass valuelen+1 (it should also check for the error return code from the
> internal routine and return a value MPI error code if the buffer is too
> small.
> >
> > Bill
> >
> > On Feb 1, 2015, at 12:13 AM, Hajime Fujita <hfujita at uchicago.edu> wrote:
> >
> >> Hello,
> >>
> >> I came across some question about a behavior of MPI_Info_get in MPICH.
> >>
> >> If I knew the size of the value, what should I pass to MPI_Info_get as
> `valuelen`?
> >> Suppose I have 3-byte value in the info object, and I allocate 4-byte
> buffer including a space for null-termination. Then I think I should
> specify 3 as valuelen to retrieve the whole value, as the MPI-3
> specifications says
> >> "In C, valuelen should be one less than the amount of allocated space
> to allow for the null terminator.”
> >>
> >> However, when I run the attached program in MPICH 3.1.1, I get:
> >> $ ./test
> >> key found: vaule=va # The last character ‘l’ is missing
> >>
> >> If I specify `sizeof(buff)` as valuelen, it shows “val” correctly.
> >>
> >> So apparently MPICH thinks valuelen includes null terminator.
> >> Am I missing anything, or any misunderstanding here?
> >>
> >>
> >> Thank you in advance,
> >> Hajime
> >>
> >> --
> >> Hajime Fujita
> >> Postdoctoral Scholar, Large-Scale Systems Group
> >> Department of Computer Science, The University of Chicago
> >> http://www.cs.uchicago.edu/people/hfujita
> >> _______________________________________________
> >> discuss mailing list discuss at mpich.org
> >> To manage subscription options or unsubscribe:
> >> https://lists.mpich.org/mailman/listinfo/discuss
> >> <test.c>
> >
> >
> > _______________________________________________
> > discuss mailing list discuss at mpich.org
> > To manage subscription options or unsubscribe:
> > https://lists.mpich.org/mailman/listinfo/discuss
> >
> > _______________________________________________
> > discuss mailing list discuss at mpich.org
> > To manage subscription options or unsubscribe:
> > https://lists.mpich.org/mailman/listinfo/discuss
>
> _______________________________________________
> discuss mailing list discuss at mpich.org
> To manage subscription options or unsubscribe:
> https://lists.mpich.org/mailman/listinfo/discuss
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mpich.org/pipermail/discuss/attachments/20150203/f0aa43f4/attachment.html>
-------------- next part --------------
_______________________________________________
discuss mailing list discuss at mpich.org
To manage subscription options or unsubscribe:
https://lists.mpich.org/mailman/listinfo/discuss
More information about the discuss
mailing list