[Mpi-comments] Comments on MPI 3.0 draft 2
Jeremiah Willcock
jewillco at osl.iu.edu
Sat Aug 18 19:13:41 CDT 2012
These are in reference to the draft at
<URL:http://meetings.mpi-forum.org/mpi3.0_draft_2.pdf>. Thank you for
considering them.
-- Jeremiah Willcock
General:
The line numbers do not match the lines of text; my comments are best
estimates of which line each line of text is on.
[post 3.0] It might be worthwhile to create a document of "performance
expectations," basing it on papers such as
<URL:http://www.mcs.anl.gov/~thakur/papers/qualityofmpi.pdf>,
<URL:http://www.unixer.de/publications/img/datatype-performance.pdf>, and
<URL:http://www.mcs.anl.gov/uploads/cels/papers/2008/P1500.pdf>. This may
or may not be normative, but maybe you can have a defined
"self-consistently performing" status for MPI implementations that meet
the standard and satisfy these extra requirements.
[cosmetic] In many code samples, non-matching curly quotes are used and
look unusual. A solution for that is at
<URL:http://stackoverflow.com/questions/1662037/how-to-write-programming-code-containing-the-character-in-latex>;
it may be easy to apply globally without needing to change each individual
quotation mark.
Front matter:
The change log starting on page iii does not have a title. How much of
that material is redundant with sections 1.2-1.6?
On page iii line 18, there should be a comma after "Operations".
On page iv lines 6-8, that text seems very obsolete (not correct for the
current standard).
On page xix line 11, part of the table title is black, while the rest are
blue.
On page xxviii line 20, "award" should be "awards" and the numbers do not
usually have number signs before them. The same issue appears on page xxx
lines 36-37.
On page xxviii line 29, "frontmatter" should be "front matter".
Chapter 1:
On page 1 line 24, the comma should be after "which" instead of before.
Also, "methods" being in that list may no longer be relevant.
On page 1 line 44, "coprocessor" should be "coprocessors".
On page 3 line 16, there should be a comma after "e.g.".
On page 3 line 46, the comma should be before the closing quotation mark.
On page 5 line 35, "Info" should be lowercase.
Chapter 2:
On page 9 line 16, why does the MPI 3.0 document still compare itself to
MPI 1?
On page 9 line 18, "vs" needs a period.
On page 10 line 34, there should be a comma after "OUT".
On page 11 line 30, there should be a comma after "i.e.".
On page 12 line 9, there should not be a comma after "portable".
On page 13 line 43, there should not be a comma after "C".
On page 15, should the MPI version constants be in the first list (of
compile-time constants)?
On page 18, the font in the table is smaller than the rest of the text or
other tables in the standard.
On page 19 line 14, the restriction on use of MPI_* names should also
apply to preprocessor macros, namespaces in C++, types, and other things.
On page 19 line 44, "executing their own code" might be better as "each
executing its own code". Is this text trying to say that MPI is not a
SIMD model? That is not clear from those two sentences (that the
executables may or may not be identical, but the processes always have
different control flow).
Chapter 3:
The top of page 24 refers to "parameters" to mean what chapter 1 said
would be referred to as "arguments" to avoid confusion with Fortran.
On page 25 lines 36-38, there need to be commas after "MPI_REAL4",
"MPI_INTEGER1", and "MPI_INTEGER2".
On page 27 line 43, there should not be a space after the ellipsis.
On page 29 lines 35-36, the list of valid values omits "MPI_PROC_NULL" (so
does the corresponding list for sends).
On page 31 line 32, should "receive" be "send"?
On page 31 lines 38-39, it might be good to have a similar thread safety
warning about probe and iprobe that is on line 33 about other message
passing libraries.
On page 32 line 9, there should be a comma after "comm".
On page 33 line 22, the last comma should be a colon.
On page 33 line 48, the example header should be on the same page as the
code.
On page 34 line 32, "bound" should be "bounds".
On page 36 line 3, "logical or" should be "logical, and".
Is the buffer required to be a valid pointer (not NULL, for example) when
using count=0 for sends and/or receives?
On page 40 line 39, did you want the "should" to be "must", at least under
MPI_THREAD_MULTIPLE? Or is that too strong of a constraint on user-mode
threading implementations?
On page 44 line 43, "C++" should be removed.
On page 44 line 45, the comma should be before the closing single quote.
On page 46 line 1, doesn't MPI_BSEND_OVERHEAD come into play here as well?
This paragraph suggests that MPI must be able to use the full user buffer,
while that is contradicted by page 46 line 40.
Page 47 lines 46-48 seem unclear to me -- is that paragraph an "advice to
users" that says that an implementation might delay completing standard
sends until the corresponding receives are posted but it isn't required
to? The "may not" wording can also be read to mean that the send is not
allowed to complete until the receive is finished, which is not what was
intended.
On page 56 line 30, the text seems to require background progress (sends
progressing even if MPI is not called). I know that has been a disputed
issue in the past, but is that the desired behavior?
On page 57 line 11 and further on, when count = 0 for a multiple
completion operation, are the arrays passed in guaranteed to not be
touched by the MPI implementation (and thus they can be NULL)? I think
this was implied before, but isn't explicit.
On page 57 line 46, there is an extra space after "request".
On page 60 line 31, it might be good to put "in the same manner" after
"handled".
On page 62 lines 30-34 (and example 3.16 on page 63), doesn't that text
contradict the discussion on the mailing list about fairness issues (and
the lack of fairness guarantees in MPI)? Also, that text looks like it
should be under MPI_WAITSOME, not MPI_TESTSOME.
Are the handles passed in to the multiple-completion routines required to
be distinct? I.e., can I have the same active handle at two different
positions in the input array, and if so, what happens?
Does MPI_*PROBE have the same non-overtaking rules as receives (in terms
of matching the first message sent of those that could match the probe
operation)? Page 67 lines 27-38 says that (although possibly not
normatively since it's in "advice to implementors"), but the
non-overtaking section doesn't. Does that rule apply to MPI_IMPROBE as
well (if I do two MPI_IMPROBES that each match two messages from the same
sender, the order the probes get the messages must be the same as the send
order even if I don't do MPI_MRECV before doing the next improbe)? How do
those rules interact with MPI_CANCEL on MPI_IMRECV-created requests?
Is there a reason that there are not non-blocking versions of MPI_SENDRECV
and MPI_SENDRECV_REPLACE? The second one, in particular, is not trivial
to emulate using only a single isend/irecv pair.
Chapter 4:
On page 83 line 23, "communication" should be "communications".
On page 83 line 34, "shape and size" should be "shapes and sizes".
On page 84 line 42, "sizeof" should be inside \mathit.
On page 84 line 45, where does "i" come from? Is the extent rounded to a
multiple of k_i, or is the upper bound rounded (these differ when lb is
not aligned)? If extent is rounded, the +eps term should be moved to the
computation of extent, not ub, unless that definition of ub is used
somewhere else.
On page 95, why does MPI_TYPE_CREATE_SUBARRAY use zero-based indexing for
Fortran; I believe many other places in MPI use one-based array indices
when called from Fortran, even if they use zero-based indices from C.
Also, is there a version of MPI_TYPE_CREATE_SUBARRAY that allows strided
indexing in the dimensions (MPI_TYPE_CREATE_DARRAY looks more limited)?
On page 103 line 18, MPI_ADDRESS has now been removed, not just
deprecated.
Is offsetof a valid way to get displacements within C structs to use with
MPI (rather than creating an object of that type and calling
MPI_GET_ADDRESS on it and its individual fields)?
Wouldn't MPI_TYPE_SIZE and a way to "flatten" an MPI datatype into a
datatype with the same primitive elements but sequential in memory (or
using MPI_PACKED) be better than MPI_TYPE_TRUE_EXTENT for the example on
page 108 line 29?
On page 110 line 24, there should be a comma after "e.g.".
On page 111 line 42, there is some odd space at the end of the line.
On page 112 line 7, there shouldn't be a space after "datatype".
On page 112 lines 11-14, should there be an MPI_TYPE_FREE added as well?
On page 115 line 44, it seems odd that adding MPI_BOTTOM to a valid
address gives a valid address, since that allows me to create a valid
address MPI_BOTTOM * n + v where n is nonnegative and v is a valid
address.
On page 128 line 32, example 4.18 uses "class" as a field name, which
makes it impossible to compile with a C++ compiler.
Chapter 5:
If there are going to be MPI_Count versions of datatype functions, would
it at least be possible to have a version of MPI_Alltoallw that uses
MPI_Aint for displacements? It seems like that was an oversight before,
since byte offsets from MPI_BOTTOM are intended as arbitrary addresses.
Chapter 12:
Did the extended generalized request proposal from "Extending the MPI-2
Generalized Request Interface" by Latham et al not get accepted into MPI
3.0?
Chapter 16:
On page 597 lines 20-21, "language neutral" should be hyphenated.
On page 597, line 43, "ion" should be "on".
On page 598 line 22, "prototyes" should be "prototypes" in the subsection
title.
On page 598, tables 16.2 and 16.3 still list C++ bindings.
Chapter 17:
It may be too late to change this, but "typeclass" is an unfortunate name
to use in MPI since it refers to a specific language feature in Haskell
and some other functional languages.
On page 600 line 18, "INCLUDE mpif.h" is missing the single quotes that
are used in other places.
On page 600 line 27, do you want to still mention "C/C++ header files" now
that the C++ bindings have been removed?
On page 600 line 47, do you want to require Fortran 2008 support for all
MPI implementations that have any Fortran support at all? What does that
mean on platforms that have older Fortran compilers but not Fortran 2008
support at the compiler level?
On page 601 line 32, should "feature" be "features"?
On page 603 line 2, the period should be before the closing double quote
(in American English).
On page 604 lines 14-15, should the single quotes be double quotes?
On page 604 line 18, "constaints" should be "constraints".
On page 604 line 36, "With MPI_SUBARRAYS_SUPPORTED==.TRUE." might be
better as "When MPI_SUBARRAYS_SUPPORTED is defined as .TRUE.".
On page 605 lines 21-23, the italicization of the quotation seems
incorrect (although I don't know what the source of the quote had
italicized).
On page 606 lines 16 and 18, "wrong" might read better as "incorrect".
On page 606 line 41, the equation should be in math mode.
On page 607 line 29 and on page 608 line 6, "BIND(C)" should be in the
code font.
On page 608 line 19, "and" should be removed.
On page 608 lines 24 and 25, "MPI" and "PMPI" use different fonts; this
may be a typo.
On page 608 line 35, "achieved" should be "available".
On page 608 line 38, "implement" should be "implementation".
On page 609 lines 1-7, the advice to implementors is hard to read (the
first sentence in particular is very long).
On page 609 line 10, "notifying" should be "indicating".
On page 609 line 33, "MPI_Address" is one of the functions marked as
removed in MPI 3.0, so it should not be listed there.
On page 610 line 36, should the linker names be in the code font?
On page 611 line 3, "non optional" should be "non-optional".
On page 611 lines 9-10, "compiler" should be "compilers", and the "the"
before "C" can be removed.
On page 611 lines 16-17, the formatting is strange (extra spaces between
names).
On page 611 line 44, "b" should be "by".
On page 611 line 48, "MPI_Address" has been removed in MPI 3.0.
On page 612 line 14, the hyphen should be an en dash (denoting a range).
On page 612 lines 37 and 42, "S1", "S2", and "S3" are not in sans serif
font like they are elsewhere on the page.
On page 613 line 30, the hyphen between the MPI version numbers should be
an en dash. Also, why is the MPI 3.0 standard discussing implementing
older versions?
On page 614 lines 14-15, isn't the second line redundant with the first
one?
On page 615 line 29, the single quotes should be double quotes.
On page 616 line 14, "IO" should be "I/O".
On page 616 line 45, the subsection title should not have a hyphen before
"synchronization".
On page 617 lines 13-14, why not just say that the routine must be written
in an implementation-specific way that achieves the listed behavior,
rather than specifying a particular requirement about the compiler's
knowledge of the routine's body?
On page 617 lines 31-32, the single quotes should be double quotes.
On page 618 line 2, there should be a comma after "LOGICAL".
On page 618 line 8, there should be a comma after "COMPLEX".
On page 618 lines 21-22, should the section title referred to be in
quotes?
On page 619 line 33 and other places, should "external32" be in the code
font?
On page 621 line 37, there should be commas after "Double" and "8".
On page 622 line 14, there should be a comma after "MPI_UNPACK_EXTERNAL".
On page 624 line 3, "sizeof" is built in to the language as syntax; it is
not a function.
On page 626 line 13, there is extra space after "90".
On page 626 line 40, the hyphen between the MPI versions should be an en
dash.
On page 627 line 4, should "KIND" be in the code font?
On page 627 line 30, "mpif.h" may need to be in single quotes.
On page 627 line 39, "module" should be "modules".
On page 628 lines 34-42, does that mean that users are allowed to modify
send buffers during Fortran nonblocking communications (since the
implementation is required to act as if it made a copy of the user data
when the operation began)? The "Displacements in" sentence on lines 38-39
is also confusing; does that mean that datatypes need to be created using
different displacements in Fortran than in C (even if they are
structurally identical)? This reading conflicts with page 653, but is
reasonable from the text on 628.
On page 629 line 2, "comminication" should be "communication".
On page 629 line 21, there should not be a space after the ellipsis.
On page 629 lines 44 and 45, the single quotes should be double quotes.
On page 632 line 27, should the comment be indented to match the one two
lines later?
On page 632 line 42, "extensions" should be "extension".
On page 633 line 9, there should be a comma before "e.g.".
On page 633 line 12, "as it may fit" sounds odd.
On page 633 lines 47 and 48, the section titles should be in the normal
text font.
On page 634 line 17, the subsection title has extra space after "and".
On page 634 line 20, "block" should be in the text font.
On page 634 line 41, "be" should be "have been".
On page 635 line 7, there should be spaces after the second two "copy"s.
On page 635 line 9, should "send" be "CALL send"?
On page 635 lines 13 and 16, there should not be spaces around the
slashes.
On page 635 line 26, there should be a comma after "MPI_RECV".
On page 636 line 36, because of interprocedural optimization, it may not
be possible for a user routine to have the same behavior as MPI_F_SYNC_REG
without resorting to compiler-specific techniques, and thus it may not be
good to recommend doing. The same thing applies to page 640 lines 15-36
and page 642 line 48.
On page 637 line 39, should the "ASYNCHRONOUS" in the title be in the code
font?
On page 639 line 47, the headings should be moved to the same page as the
code.
On page 640 line 33, "posibilities" should be "possibilities".
On page 643 line 38, "Automatic garbage collection implementation" should
be "An implementation with automatic garbage collection".
On page 644 line 5, "&" should be in the code font.
On page 647 line 4, remove "applications" from before "library".
On page 648 line 22, is there some reason that the conversion functions
still take integers on the Fortran side and not the handle types? Is that
just a compatibility issue?
On page 648 line 26, "int" should be in the code font.
On page 648 lines 38-39, shouldn't passing in MPI_COMM_NULL in Fortran
return the C value of MPI_COMM_NULL (and never something else), and the
behavior be unspecified for passing in an invalid communicator? The same
applies to lines 43-44. Do other predefined communicators need to map to
the C versions of their predefined values (MPI_COMM_SELF -> MPI_COMM_SELF,
not something else equivalent to it)?
On page 655 line 3, "stdargs" is not a standard term; use "variable-length
argument list" instead.
On page 655 line 21, the sentence there does not end with a period (the
one on "etc." does not count).
On page 655, "address valued" and "integer valued" should have hyphens
when used as adjectives.
On page 656 line 9, "identical" should be "identically".
On page 657 line 48, the header of the example should be on the same page
as the code.
On page 658 line 47, "val" should be either sans-serif or in the code
font. Some other things in that paragraph might need to be changed as
well.
On page 659 line 22, "extra state" should be hyphenated in the subsection
title if it is in the text.
On page 661 line 16, "int" should be in the code font.
Annex A:
On page 674 lines 41-47, don't those constants have particular,
standard-specified values (not just arbitrary definitions)?
On page 676 lines 10-15, are those values required to be defined as macros
that expand to integral values? Thus, they can't have "const int" or
"unnamed enum" types, but must be macros.
On page 678 line 48 and some places on 679, "module" should be "modules".
On page 685, what are the language bindings for the info keys and values
supposed to be?
The C prototypes for functions (throughout the standard, but especially
here) don't end with semicolons like prototypes actually do in C.
On page 693 lines 45-46, shouldn't MPI_COMM_DUP_FN (and the others in
A.2.4 that are just signatures but not defined by MPI) be moved to section
A.1.3 with the other user-defined function prototypes?
Annex B:
On page 789 line 28, "errata" is plural, so it should probably be
"erratum". There seem to be other places in Annex B with this error as
well.
On page 789 line 39, the opening quotation mark is backwards.
Section B.1 mentions various C++ bindings to things as having been
corrected in MPI 3.0, while actually all of those bindings were removed
(see page 790 lines 5-6 for an example).
On page 790 line 7, the second comma should be inside the quotation marks.
On page 792 line 40, "one-sided" should be lowercase.
On page 793 line 7, there should be a comma after "==".
On page 794 line 17, "a with" should be "with a".
On page 794 line 26, "solution" should be "solutions".
Index:
Page 811 lists now-removed C++ bindings.
The function index starting on page 818 sometimes lists the same function
twice on the same page (see MPI_ALLTOALLV for an example with page 170).
On page 824, should individual PMPI functions be on the function list?
Should mpiexec and mpirun?
More information about the mpi-comments
mailing list