Comments on the MPI-3.0 draft document ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ These comments use http://meetings.mpi-forum.org/mpi3.0_draft_2.pdf as a reference. They were assembled by Gilbert Brietzke and Reinhold Bader, both HPC support staff members at Leibniz Supercomputing Centre (LRZ), Garching, Germany (www.lrz.de). (A) General: The Fortran extended interop specification is referenced in many places as "TR29113" or "TR 29113". Due to ISO requirements the denotation has been changed to "Technical Specification". Hence I suggest replacing both the two above by "TS 29113" (adding the space where necessary). (B) Specific corrections: References to the August 2 MPI-3 draft are given in the form [pXXX:a{-b}], meaning "page XXX line a {to line b}". Note that the focus of this proofreading was on the Language Interoperability section; it is therefore rather probable that even obvious problems in other newly developed sections were missed. [p83:16-17] Move "efficiently" to before "transfer" [p417:24] The mpi_f08 interface for MPI_WIN_SET_INFO is missing [p417:44] The mpi_f08 interface for MPI_WIN_GET_INFO is missing [p423:48] The example heading should be moved to p424 (layout) [p445:45] Delete ", in general" (duplicated words) [p535:23] Replace "implictly" by "implicitly" (typo) [p542:27-28] Replace "compatiblty" by "compatibility" (typo) [p561:2] May want to use "preprocessor" since the document usually does not hyphenate [p568:16] Replace "typeas" by "type as" (typo) [p570:42] Presumably, "mpiargenumtype" must read "the argument /enumtype/"? [p575:34] Replace "reseting" by "resetting" (typo) [p599:32] Replace "17.1.2 and" by "17.1.2. It". Reason: two "ands" in the subsequent sentence. [p599:36] Replace "highly recomended" by "highly recommended" (typo). [p600:25] Replace "exist with each" by "exist for each" (wording). [p602:37] Replace "Technical Report" by "Technical Specification". [p604:18] Replace "Fortran constaints" by "Fortran constraints" (typo) [p604:20] Replace "Onother" by "Another" (typo). [p604:22] Replace "copyin" by "copy-in" (typo). [p605:21] Italicize "Furthermore" (layout). [p605:22] Italicize "because" (layout). [p606:10] Replace "too many" by "many" (wording). [p606:22] Replace "such implicit" by "that implicit" (wording). [p606:31] "(or similar)": This rather softens the requirement of being able to use the same libary implementation underneath. If there are restrictions here, they should be listed somewhere. If there are no substantial restrictions, I suggest replacing "the same (or similar)" by "essentially the same". [p611:7] After "argument passing", add "mechanism". [p611:13] "most groups": This does not appear to be a precisely defined term, so perhaps a definition should be provided. Two lines later, one also finds the term "routine group". [p611:40] Reword "MPI identifiers are ... characters" to "Disambiguation of MPI identifiers requires a significantly higher number of characters than the limit of six specified by Fortran 77." [p611:44] Replace "b the MPI" by "by the MPI" (typo). [p616:2] Replace "there is still one" by "there still exists a" (wording). [p616:3-4] Reword the sentence "It is helpful when ..." to "Observation of these rules by the MPI application developer is especially recommended for backward ..." [p616:13] Replace "IO" by "I/O" (notation used elsewhere in document). [p616:19] Replace "calling MPI operations" by "invoking MPI procedures" (wording improvement). [p616:23] Replace "also when" by "also if" (wording). [p616:27] Delete "Fortran 2008" (unnecessary when referring to the TS) [p616:30] Replace "apply when the" by "apply if the" [p616:31] Replace "i.e," by "i.e.," (typo) [p616:34] Move comma after "types" to after the braces (just before "variables") [p616:37] Replace "inidicating" by "indicating" (typo) [p617:13] Replace "is a no operation" by "has no executable statements" (wording improvement) [p617:38] Replace "need not to be" by "need not be" [p618:16] Replace "to communicate using numeric intrinsic types" by "for handling communication buffers of numeric intrinsic type" (wording improvement) [p626:5] Replace "to the standard" by "to this standard" (disambiguate from Fortran standard), and "clarify the standard" by "clarify it". [p626:36] Replace "can't be usefully used in" by "cannot be used from" (wording improvement) [p627:30] Replace "INCLUDE mpif.h" by "INCLUDE 'mpif.h'" [p629:2] Replace "released" by "release" [p629:3] Replace "an MPI wait" by "the MPI_WAIT" (example should be specific). [p629:8] Replace "inside of the" by "inside the" [p632:42] Replace "extensions" by "extension" [p632:46] Replace "elements of a derived type" by "components of a derived type", and "the array elements" by "subsequent elements of an array of a derived type". [p633:1-2] The referenced user advice does not seem to exist, at least not on the page given here. [p633:4-6] The meaning of this sentence is not clear to me. [p633:1-6] Since the point discussed here seems rather specific to the example, one should either omit this whole paragraph, or add some words that make it clearer that any user-defined padding strongly depends on the type definition as well as the Fortran implementation (including compiler switches that influence padding). For portability reasons, I favor the former. [p633:10] Replace "components may exist" by "components must exist" [p633:12] Replace "padding as it may fit" by "padding as it sees fit" [p633:45] Replace "problems may only" by "problems can" (possibly followed by "exclusively"). [p634:35] Replace "the finish of" by "completion of" [p635:17] Replace "in each blocking ... operation" by "for both blocking and non-blocking communication calls, as well as for parallel file I/O operations" [p635:26] Replace "which hides ... involved" by "that hides the actual variables involved in the communication" (wording improvement) [p636:20] "variable [] buf": the braces indicate a layout problem - the line terminates too early. [p636:28] Replace "be solved in a portable way" by "can be portably solved" (wording improvement). [p636:28-32] The sentence "Application writers ... are used" appears to be grammatically incorrect. The minimal fix would be to add an "if " before "datatype handles" (in line 31). [p636:43] Replace "may involve different" by "may incur various" (wording improvement). [p636:46-48], [p637:35] Replace "The methods ... impact on performance" by "The performance impact of using MPI_F_SYNC_REG is expected to be low, that of using module variables or the ASYNCHRONOUS attribute is expected to be low to medium, and that of using the VOLATILE attribute is expected to be high or very high." (wording improvement, delete a duplicate sentence). Comment: this assumes a high-quality ASYNCHRONOUS implementation. If a vendor implements ASYNCHRONOUS via VOLATILE, the above assessment of the performance impact is not correct. [p637:42] Replace "tells the compiler" by "informs the compiler" [p638:10-11] Replace "The TR 29113 ... N1869)" by "Section 5.4.2 of the TS 29113 specifies" (remove reference to a specific draft) [p638:21] Between "dependent. " and "Asynchronous" insert a paragraph spacing. Reason: TS 29113 also has a new paragraph here. [p638:34] Replace "communication completed" by "communication has completed" [p638:39] Replace "disjunct" by "disjoint" [p639:36] Replace "the subsequent access to buf are" by "any subsequent access to buf is" (grammar and wording improvement) [p639:38] After "Example 17.1", delete the comma. [p640:11] After "modification problem", delete the comma. [p640:33] Replace "posibilities" by "possibilities" [p640:35] Replace "according to" by "in accordance with" [p640:40] Replace "already mentioned" by "previously mentioned" [p640:44] Replace "the compiler cannot" by "it cannot" (repetitive) [p641:6] Delete "(Poorly Performing)". The attribute itself does perform what it is designed for, and the performance impact is described in the following text. [p641:7-8] After "the properties needed", add " to avoid register optimization or code movement problems"; replace "it may" by "it will". After "buffer or variable.", add "On many modern systems, the performance impact will be large because not only register, but also cache optimizations will not be applied. Therefore, use of the VOLATILE attribute to enforce correct execution of MPI programs is discouraged." [p641:26] After "page 641", add "also" [p641:40-41] Layout of lines is bad (too short). [p641:48],[p642:30-31] Replace "then this ... received data" by "this implies overwriting the section of buf that serves as a receive buffer in the nonblocking MPI call and is therefore likely to interfere with asynchronously received data." [p642:32] After "Note", delete the comma. [p642:39] After "collective operations", delete "with" [p642:41] before "subsection", add "the" (see also next edit) [p642:42] Replace "in Section" by "of Section"; delete "on page 634" (two page numbers for one reference appear confusing) [p642:44-45] Replace "numerical read accesses" by "local references" (the rule also applies to non-numerical entities) [p643:6] Replace "numerical code" by "code fragments" (wording improvement) [p643:7-11] The text "Note also ... cache optimizations" seems out of place here; it should be removed and at most a reference to the section "The Fortran VOLATILE attribute" should be placed here. See also the edit [p641:7-8] above. [p643:12] The meaning of the sentence "Instead of ... problem" is unclear. The whole following section (lines 12-32) appears to refer to the use of ASYNCHRONOUS, so should be moved to the line following [p642:36]. If it is decided to keep it here, at least the unintelligible first sentence should be reworded to make it clear we're returning to the ASYNCHRONOUS discussion. [p643:14] Replace "IO" by "I/O". Delete "sets of". [p643:23] Replace "is available" by "becomes available", and "later version" by "future edition". [p643:27] Replace "disjunct" by "disjoint" [p644:5] Replace "by way of" by "by indirection on" [p644:10-11] Replace "the nonblocking operations are" by "a nonblocking operation is" [p645:38] Replace "send" by "sent" [p648:1] The sentence "Use of ... ability." could be made superfluous if the Fortran interfaces for MPI_Init and MPI_Init_thread are overloaded with an additional specific, say MPI_Init(argc, argv, ierror) BIND(C) INTEGER :: argc TYPE(C_PTR) :: argv INTEGER, OPTIONAL :: ierror provided the MPI implementation is able to ensure that the correct information is transferred through this interface, for example via an auxiliary call that constructs the entities argc and argv using the Fortran-provided command line facilities. [p648:29] Replace "INTEGER field" by "INTEGER component" (terminology) [p652:48] After "detail", remove the comma [p655:38,39] Before "Fortran", add "(deprecated)", twice [p660:9] Move "in Fortran" to before "must be" [p660:11-13] The sentence "(Caveat: ... is better ...)" replicates what is already said in [p654:17+] and therefore should be removed or replaced by a backward reference. [p682:18] and [p684:25] Replace "extend" by "extent", twice (typo) [p789:22] Replace "Errata to" by "Fixes to Errata in" [p789:28,39,43], [p790:1,5,10] Replace "errata" by "erratum" (singularize) [p790:16] Delete "MPI-2.2 errata in" (MPI-2.2 already referenced later in the sentence) [p790:32] Replace "compatiblty" by "compatibility" (typo) [p791:25] Replace "for the use of matching probe" by "to enable matching of a probe" [p792:41] After "passive target", add "communication" [p793:35-36] Replace "The Fortran alignments ... derived types" by "The alignments of Fortran derived types are implementation dependent; therefore it is recommended to use BIND(C) derived types for communication via MPI" ("base types" appears to be incorrect in this context) [p793:37] Replace "should be communicated" by "is to be used as a choice buffer in a communication call" [p793:38] Replace "creates" by "create"; move "applies" to after "additionally" [p794:16-17] Replace "C-pointer" by "C pointers", "a with" by "with a", and remove hyphen in "Cray-pointer" [p794:19] Replace "have been deprecated since MPI-3.0" by "are considered deprecated in MPI-3.0" [p794:27] Remove the comma before "e.g." [p794:29] Replace "meaning of the ASYNCHRONOUS attribute were" by "semantics of the ASYNCHRONOUS attribute is" [p794:44] Replace "with BIND(C)" by "that have the BIND(C)"; after "attribute", add "; user-written callbacks must be modified if the mpi_f08 module is used" [p806:8-15] There exist two references to TS 29113 where one should be sufficient. Since the most recent draft N1917 has successfully concluded the DTS vote, there will at most be minor changes before the final document is published; therefore referencing that draft should be sufficient. I suggest replacing the above lines by: "[41] International Organization for Standardization, ISO/IEC/SC22/WG5 (Fortran), Geneva, TS 29113: Further Interoperability of Fortran with C, 2012. Successfully balloted DTS at ftp://ftp.nag.co.uk/sc22wg5/N1901-N1950/N1917.pdf." (+ pages that reference this citation).