home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1993 #3 / NN_1993_3.iso / spool / comp / parallel / 3086 < prev    next >
Encoding:
Text File  |  1993-01-28  |  57.1 KB  |  1,542 lines

  1. Newsgroups: comp.parallel
  2. Path: sparky!uunet!destroyer!gatech!hubcap!fpst
  3. From: lusk@donner.mcs.anl.gov (Rusty Lusk)
  4. Subject: (long) minutes of Message-Passing Interface Standards meeting
  5. Message-ID: <1993Jan28.142838.24858@hubcap.clemson.edu>
  6. Apparently-To: comp-parallel@uunet.uu.net
  7. Sender: usenet@antares.mcs.anl.gov
  8. Reply-To: lusk@donner.mcs.anl.gov (Rusty Lusk)
  9. Organization: Argonne National Laboratory, Chicago, Illinois
  10. Date: Wed, 27 Jan 1993 23:04:03 GMT
  11. Approved: parallel@hubcap.clemson.edu
  12. Lines: 1528
  13.  
  14.  
  15.  
  16.           Minutes of the Message Passing Interface Standard Meeting
  17.               Dallas, January 6-8, 1993
  18.  
  19. The MPI Standards Committee met in Dallas on January 6-8, 1993, at the Bristol
  20. Suites Hotel in North Dallas.
  21.  
  22. This was the third meeting of the MPI committee, but the first following the
  23. format used by the High Performance Fortran Forum.  There were both general
  24. meetings of the committee as a whole and meetings of several of the
  25. subcommittees.  Because interest in the Point-to-Point communications and the
  26. Collective communications was so general, these met as committees of the
  27. whole.
  28.  
  29. No formal decisions were taken at this meeting, but a number of straw votes
  30. were taken in the subcommittees.  These are included as part of the reports on
  31. the work of the subcommittees.
  32.  
  33. These minutes were taken by Rusty Lusk (lusk@mcs.anl.gov) with some additions
  34. by Bob Knighten.  Marc Snir's notes on the point-to-point subcommittee
  35. meetings are included here as well.
  36.  
  37. These minutes are quite long.  If you want to see the important topics you can
  38. search for --- and this will quickly the lead to each topic (and a few other
  39. things.)
  40.  
  41.  
  42. January 6
  43. ---------
  44.  
  45. -------------------------------------------------------------------------------
  46.                    General Meeting
  47. -------------------------------------------------------------------------------
  48.  
  49.  
  50. The meeting was called to order by Jack Dongarra at 1:30.
  51.  
  52. Jack Dongarra presented the rules and procedures that had been circulated in
  53. the mailing list.  In general, they say that we intend to operate in very open
  54. fashion, following the example set by the High-Performance Fortran Committee.
  55. He also described the subcommittee structure.  For details, see the mailing
  56. list,
  57.  
  58. A tentative schedule for future meetings was presented, which was amended on
  59. the last day (see there).
  60.  
  61. All meetings will be in Dallas at the Bristol Suites.  Steve Otto will
  62. coordinate the production of the document.  He will obtain a set of LaTeX
  63. macros from the HPF Committee and distribute them to the subcommittee heads.
  64.  
  65. It was suggested by Bob Knighten that the Executive Director arrange for
  66. copies of all pertinent documents be provided at the meetings.  Dennis Weeks,
  67. who is somewhat local (Convex), volunteered to help with the relevant copying.
  68.  
  69. The attendees were:
  70.  
  71.  
  72. Ed Anderson         Cray Research        eca@cray.com
  73. James Cownie         Meiko            jim@meiko.co.uk
  74. Jack Dongarra         UT/ORNL            dongarra@cs.utk.edu
  75. Jim Feeney         IBM-Endicott        feeneyj@gdlvm6.vnet.ibm.com
  76. Jon Flower         ParaSoft            jwf@parasoft.com
  77. Daniel Frye         IBM-Kingston        danielf@kgnvma.vnet.ibm.com
  78. Al Geist         ORNL            gst@ornl.gov
  79. Ian Glendinning         Univ. of Southampton    igl@ecs.soton.ac.uk
  80. Adam Greenberg         TMC            moose@think.com
  81. Bill Gropp         ANL            gropp@mcs.anl.gov
  82. Robert Harrison         PNL            rj_harrison@pnl.gov
  83. Leslie Hart         NOAA/FSL            hart@fsl.noaa.gov
  84. Tom Haupt         Syracuse U.        haupt@npac.syr.edu
  85. Rolf Hempel         GMD            hempel@gmd.de
  86. Tom Henderson         NOAA/FSL            hender@fsl.noaa.gov
  87. C. T. Howard Ho         IBM Almaden        ho@almaden.ibm.com
  88. Steven Huss-Lederman SRC            lederman@super.org
  89. John Kapenga         Western Michigan Univ.     john@cs.wmich.edu
  90. Bob Knighten         Intel SSD            knighten@ssd.intel.com
  91. Bob Leary         SDSC            leary@sdsc.edu
  92. Rik Littlefield         PNL            rj_littlefield@pnl.gov
  93. Rusty Lusk         ANL            lusk@mcs.anl.gov
  94. Barney Maccabe       Sandia                     abmacca@cs.sandia.gov
  95. Phil McKinley         Michigan State        mckinlehy@cps.msu.edu
  96. Chuck Mosher         ARCO            ccm@arco.com
  97. Dan Nessett         LLNL            nessett@llnl.gov
  98. Steve Otto         Oregon Graduate Institute   otto@cse.ogi.edu
  99. Paul Pierce         Intel            prp@ssd.intel.com
  100. Peter Rigsbee         Cray Research        par@cray.com
  101. Ambuj Singh         UC Santa Barbara        ambuj@cs.ucsb.edu
  102. Marc Snir            IBM                        snir@watson.ibm.com
  103. Robert G. Voigt         NSF            rvoigt@nsf.gov
  104. David Walker         ORNL            walker@msr.epm.ornl.gov
  105. Dennis Weeks         Convex            weeks@convex.com
  106. Stephen Wheat         Sandia NL            srwheat@cs.sandia.gov
  107.  
  108.  
  109. -------------------------------------------------------------------------------
  110.              Point-to-point subcommittee
  111. -------------------------------------------------------------------------------
  112.  
  113. Mark Snir called the meeting to order at 1:40 p.m.  It adjourned at 4:10 p.m.
  114. It resumed the following morning at 9:10 a.m. and adjourned at 4:15 p.m.
  115.  
  116.  
  117. Marc Snir began by summarizing the decisions that we have to make:
  118.  
  119. * which operations?
  120.    send
  121.    receive
  122.    channels?
  123.    sendreceive?
  124.    info arguments
  125.    operations on queues
  126.    probe?
  127.  
  128. * operation modes
  129.    sync
  130.    async
  131.    local and/or global termination 
  132.    interrupt-driven?
  133.  
  134. * message types (data types)
  135.    structure of data in core
  136.    buffer packing
  137.  
  138. * send-receive matching
  139.    type  (We later decided to call this "tag".)
  140.    sender?
  141.  
  142. * correctness criteria (See Marc Snir's paper in handouts)
  143.  
  144. * heterogeneous operations
  145.  
  146. * name space
  147.    how processes are addressed
  148.    flat?
  149.    structured?  implicit/explicit
  150.  
  151. * error handling
  152.  
  153. * interaction with threads, interrupt handlers, remote signalling
  154.  
  155. * special operations for high performance
  156.    ready receiver?
  157.  
  158. * process startup
  159.    
  160. * syntax/style (The plan is to postpone this for this meeting.)
  161.  
  162. We will prioritize this list and then go through them one by one.
  163. (The priorities assigned were more or less in the order listed above.)
  164.  
  165. Two preliminary questions were then discussed:
  166.  
  167.   A.  Must we worry about multithreaded environments?
  168.  
  169.       James Cownie pointed out that threads were coming, in almost all new
  170.       systems. Most systems have threads now.  It was proposed that a process,
  171.       which could send and receive messages, should be an address space, so
  172.       that individual threads would not be (MPI-) addressable.
  173.  
  174.   B.  What about signals?
  175.  
  176.       Paul Pierce suggested that we discuss signals first: do we want to
  177.       support send/receive from interrupt handlers?
  178.  
  179.  
  180. These two questions were then discussed at length.  Dealing with threads
  181. argues against the notion of "last message", since that implies state is
  182. maintained by the system.  There was general agreement that "state" was a `
  183. bad thing, but arguments in favor of state are:
  184.  
  185.   Sometimes one doesn't want all of the information available after an
  186.     operations, so it shouldn't be returned.
  187.   Having lots of arguments to calls is bad, especially inout arguments.
  188.  
  189. Ways to avoid state are:
  190.  
  191.   Structures could be returned
  192.   Return individual arguments
  193.   Return tag to do queries on (but they one needs to free it.)
  194.   Additional out arguments (OK in Fortran 90, but not in C or f77)
  195.   User passes in storage to be used (so he knows the address), and MPI
  196.     provides inquiry functions
  197.  
  198. [For more details, see Jim Cownie's mail message of January  4, 1993
  199. entitled: Multifarious]
  200.  
  201. There was a general agreement that system state decreases portability and
  202. manageability, and we should decrease it when we can.  James Cownie said that
  203. We need a reentrant style, and Mark Snir suggested that we try to make all
  204. function calls reentrant.  When queried no one in the group objected to trying
  205. to make all the functions that are introduced in MPI reentrant.
  206.     
  207. Now we began going through the above-mentioned major topics.
  208.  
  209. Which Operations?
  210. ----- ----------
  211.  
  212. We have send and receive.  How about send-receive (also called shift)?  It can
  213. be efficiently implemented, and buffer can be reused.  There was a discussion
  214. of the "two-body" send-receive (exchange) and the "three-body" version
  215. (ring-shift).  Variations include those in which the send-buffer is required
  216. to be the same as the received- buffer and those in which is is required to be
  217. disjoint from the receive-buffer.
  218.  
  219. Al Geist: We should focus on *required* operations.  Steve Otto replied that
  220. send-receive *is* a required operation.  Using "exchange" can help avoid
  221. deadlock.
  222.  
  223. It was agreed that there was no consensus on these issues and it was decided
  224. to defer this to the collective communication subcommittee.
  225.  
  226.  
  227. Operation Modes
  228. --------- -----
  229.  
  230. The next topic that Marc Snir raised for discussion was when do send and
  231. receive return.  Marc described several options:
  232.  
  233. For send:
  234.   1) return as soon as possible
  235.   2) return when send-buffer is clear
  236.   3) return when the corresponding receive has completed
  237.  
  238. For receive:
  239.   1) return as soon as possible
  240.   2) return when the receive-buffer is full
  241.  
  242. "Receive has completed" means "when the user knows".  In other words, when the
  243. sender has returned from send, the receiver has returned from receive.
  244.  
  245. There was a general discussion about whether 3) was necessary?  dangerous?
  246. Robert Harrison said he believed that 3) was the minimal version that
  247. was truly portable.  Steve Otto pointed out that 3) is CSP-like.  Rusty Lusk
  248. said that 3) would be easier to prove things about than the others.  Adam
  249. Greenberg and Paul Pierce pointed out that neither TMC nor Intel have
  250. implemented an operation depending on the behavior of the receiver.
  251.  
  252.  
  253. A straw vote was taken and the vote was 17-3 in favor of having 3) as an
  254. option. 
  255.  
  256. Marc Snir pointed out that in his original proposal send returns a handle and
  257. the status of the handle is then tested for completion of the send operation,
  258. and asked if this is this desirable.
  259.  
  260. There was general agreement that something of this sort was desirable, but a
  261. variety of alternatives were mentioned  It was pointed out that sometimes one
  262. wants to wait on multiple outstanding operations.
  263.  
  264. Al Geist prefers separating "wait" into "sendwait" and receivewait" for code
  265. readability.
  266.       
  267. Bill Gropp suggested that instead of using handles, one could supply a routine
  268. to be called when an operation completes.
  269.  
  270. James Cownie:  "This gets really hairy in Fortran".
  271.  
  272. There was a discussion of probing multiple outstanding receives:
  273. If the receives return handles,
  274.  
  275.    h1 = recv( ... )
  276.    h2 = recv( ... )
  277.  
  278. wait ( h1 or h2) ?
  279. wait ( h1 and h2 ) is not needed.
  280.  
  281. Jame Cownie proposed that we supply an operations to *wait* on a vector of
  282. handles, which would return  one of those that have succeeded.  It would
  283. return the handle, not the status.
  284.  
  285. A straw vote as taken on this proposal, which passed 17 - 0.
  286.  
  287. So we have:
  288.  
  289.   status (handle)
  290.   wait   (array of handles)
  291.  
  292. The send specifies what completion of send means.  Handles need to be freed.
  293.  
  294. It was pointed out the only the existence of such an operation has been
  295. decided, the semantics are yet unspecified - e.g. issues such as fairness or
  296. what wait returns when several complete are not yet specified.
  297.  
  298. There was a long discussion of cancellation of send and receive.  It was
  299. observed that there are serious implementation problems because of race
  300. conditions, freeing resources, etc.
  301.  
  302. A straw poll was taken on including cancel in the initial MPI.  It failed 7-19.
  303.  
  304. This was the end of the Wednesday afternoon point-to-point meeting.
  305.  
  306.  
  307. January 7
  308. ---------
  309.  
  310. The point-to-point subcommittee (now a Committee of the Whole) resumed at
  311. 9:15 a.m. on Thursday morning.
  312.  
  313. Marc Snir opened the meeting and summarized the progress so far:
  314.  
  315.   3 ways in which send can terminate
  316.   sendreceive postponed
  317.   no cancel of incomplete send operation
  318.   status and wait (successful status accomplishes same as wait)
  319.  
  320. We did not get to:
  321.  
  322.   channels (the idea of trying to bind as soon as possible as many parameters
  323.             as possible, so that they can be reused.)
  324.   probe
  325.   readyreceive
  326.  
  327. Marc noted that channels and readyrecv address similar issues.  Probably want
  328. only one of these.  Do we want either?
  329.  
  330. Rolf Hempel observed that we don't need channels - can depend on operating
  331. system to cache the connection information when doing synchronous
  332. communication.  Adam Greenberg replied: NO! Want to be able to do this all at
  333. user level without "smart" OS.
  334.  
  335. Channel creation and use might look like:
  336.  
  337.   handle = send_init( ... )
  338.   start(handle)
  339.   wait(handle)
  340.   free(handle)
  341.  
  342. This is an intermediate point between bundled send/receive and full
  343. named channels.  Indeed there are many intermediate points based on
  344. various early bindings.
  345.  
  346. Is there enough experience to justify a standard?  Bob Knighten observed that
  347. there has been substantial experience with channels on the iWarp system.
  348.  
  349. There was next a discussion of the ready-receiver semantics proposed by Lusk
  350. and Gropp in the handouts.  Steve Huss-Lederman said that such operations
  351. could make a difference of as much as 25% for matrix multiplication on the
  352. Delta.  Some doubt was expressed about the universality of this optimization.  
  353.  
  354. Question of use of readyrecv by naive users again.  Cownie mentions
  355. experience again.  Greenberg: facilities for efficiency should not
  356. make it difficult to write correct programs.  Wheat: Don't penalize
  357. users who do understand and can take advantage of efficient procedures.
  358. General back and forth discussion.
  359.  
  360. Two straw votes were taken:
  361.  
  362. Ready-receiver operations passed 13 - 10
  363. Channels passed 19 - 2  (Marc Snir will write up a detailed proposal)
  364.   
  365.  
  366. The next topic discussed was the probe operation.  Do we want such an
  367. operation, and if so, what should be its semantics?
  368.  
  369. Probing must "lock" the message that it finds, else the information returned
  370. by the probe may be unreliable.  (Consider the multithreaded environment.)
  371. Bill Gropp pointed out that probe is often used to find out the length of a
  372. message so that a buffer of the appropriate size can be allocated.  Marc Snir
  373. pointed out that this is a problem with the November document, that we need to
  374. know the length of a message ahead of time.  Jon Flowers suggested the need
  375. for a blocking probe.
  376.  
  377. What is needed is to probe and then to receive the message found via the
  378. probe:
  379.  
  380.   handle = probe(params)
  381.   . . .
  382.   recv(handle)
  383.   release(handle)
  384.  
  385. Marc Snir pointed out that the handle serves as a lock on the message.
  386. James Cownie pointed out that while we agreed to not have a cancel for a send,
  387. we do need to be able to cancel receives, since an outstanding receive is
  388. permission for the system to write in the user's address space, which is a
  389. permission the user may want to revoke.
  390.  
  391. A straw vote was taken on the existence of some form of probe, and it passed
  392. 25 to 0.
  393.  
  394.  
  395. Send-Receive Matching
  396. ------------ --------
  397.  
  398. The next topic is the matching of send and receive.  Currently we have to
  399. discuss matching on:
  400.  
  401.   tag
  402.   sender
  403.   group id
  404.   context id
  405.  
  406. We will also need to discuss the name space issue for messages.
  407.  
  408. Here are three proposals for the predicate that determine whether a message
  409. matches a particular receive:
  410.  
  411.  1) simple matching on fields
  412.  2) more general, with mask, etc.
  413.  3) user defined function
  414.  
  415. Adam Greenberg said that at TMC: A user defined function is used by the
  416. system whenever a message is received by a node to decide if it is to actually
  417. be received by the application.  The parameters to the user defined receive
  418. predicate are tag and group.
  419.  
  420. Issue: If most information is encoded in the tag, then the tag protocol must
  421. be understood by all users involved in writing a particular application.
  422. True, but not a serious problem.  Best to identify small class of specific
  423. matching parameters (e.g. group) and use tag for everything else.
  424.  
  425. James Cownie pointed out that the matching function, if not too complicated,
  426. can (and is, on many systems) done by special communications processors.
  427. There was further discussion of the difficulties of having the system call
  428. user code for screening messages.  Paul Pierce pointed out that receipt of a
  429. message by the hardware is a crucial point for performance.  
  430.  
  431. There was general discussion of alternative approaches to getting at least
  432. some of this.  The question of need for this generality was also raised.  TMC
  433. has a user who wants and uses his own predicate function.
  434.  
  435. Possibilities: (a) select on mask for fields (including a don't care);
  436. (b) simple static logical operations on fields; (c) user defined 
  437.  
  438. (b) might be  match =  AND (( message(i) = pattern(i) ) OR mask(i))
  439.                       fields
  440.  
  441. A straw vote was taken on whether to pursue allowing user-defines predicates.
  442. It was decided 26-1 not to allow user-defined functions for this purpose.
  443.  
  444. (b) deferred until a proposal is available.
  445.  
  446.  
  447.  
  448. Marc Snir summarized that matching by tag is generally agreed on and that this
  449. is not the only item for selection.  After some discussion, matching by sender
  450. was also generally agreed on.  So now, how do we identify a sender?
  451.  
  452. Rusty Lusk spoke in favor of a flat name space, so that processes could be
  453. addressed independently of group, etc.  There ensued a general discussion of
  454. groups, contexts, and the name space.  It was pointed out that the name space
  455. expected by send could be flat and groups could be implemented by a function
  456. that converted any structured name into a flat integer id.
  457.  
  458. Other proposals were to to have name=(rank,gid) with the restriction that this
  459. name be usable only within the given group (gid) and the sender must be a
  460. member of this group.  By default the group would be ALL.  Other alternatives
  461. mentioned were name=(rank,ALL)=pid and name=(pid,context).
  462.  
  463. This led to a general discussion of context and the relation to groups.
  464.  
  465. Marc Snir pointed out that we could have
  466.  
  467. pid
  468. pid,context
  469.  
  470. in which context did not change the meaning of pid.  Paul Pierce said that
  471. tags and contexts should be separated since they need to be handled in
  472. different ways.  Marc Snir pointed out that there should be no "don't care"
  473. on context.  
  474.  
  475. There was a discussion of servers that can process "any" message.
  476. This also led into discussion of flat name space vs. hierarchical
  477. name space where we would have pid(group, rank) function.  
  478.  
  479. Can use context to define groups, but there are other uses as well.
  480. Why groups as well as context?  What is the difference between
  481. context and groups?  
  482.  
  483. Cownie:  Context is just another integer used in the same manner as
  484. tag.  
  485.  
  486. Not quite - it is reserved, but what is the meaning of "reserved"?
  487.  
  488. Greenberg was concerned about connecting send/receive behavior with groups.
  489.  
  490. Snir: Suppose a users wants to have two independently written subroutines that
  491. use the usual rank notation.
  492.  
  493. Wheat: Similarly want to use rank notation when partitioning machine.
  494.  
  495. Snir: Both contexts and groups are nice, but do we need both?
  496.  
  497. Gropp: Problem with mixing two applications both of which use 0-based
  498. indexing will need a larger common name space when they need to communicate.
  499.  
  500. There was a general discussion of the cost of contexts.  Cownie observed that
  501. context is cheap if only used to distinguish code - obtain a unique context id
  502. for the code by means of the "one-dollar random number generator": each author
  503. obtains a one-dollar bill, copies the serial number, and then burns the bill.
  504. But in general context is not cheaper than groups.
  505.  
  506. Someone asked about spawning additional processes while program is running?
  507.  
  508. Various people raised the question: If use name=(pid,context), does context
  509. change the meaning of the pid (i.e. is pid context {or gid or ???} relative.)
  510.  
  511. There was some discussion of message registration.  Paul Pierce observed that
  512. tag vs. context is only matter of registration.  He wants to divorce tag and
  513. context for safety.  This implies that one cannot use wild card for selecting
  514. on context.
  515.  
  516. Various people noted difficulties with mixing tag and context.
  517.  
  518. Adam Greenberg offered: Proposal - always separate tag and context.  Have a
  519. context, NONE, so that pid with context NONE is unmodified, but with other
  520. contexts the pid may be relative.  [NONE, GLOBAL, BASE]
  521.  
  522.   tag, context
  523.    - must match on context
  524.  
  525. Several people noted that there are two very different uses of context -
  526. identification of distinct code and identification of a group of processors.
  527. There is state, even distributed state, associated with remapping of
  528. processors with groups.
  529.  
  530. POSSIBLE FIELDS FOR SEND/RECEIVE:
  531.  
  532.   tag     context                    id     group
  533.           - no wild card                    - set of processes
  534.           - registration management         - receive only from group
  535.                                             - managed by system
  536.  
  537. Marc Snir asked whether we could agree on what would be carried with a
  538. message: 
  539.  
  540.   tag
  541.   context  (like tag, except no wild card; management to be determined)
  542.  
  543.  
  544. Two straw votes were taken:
  545.   Having contexts passed unanimously.
  546.   Having the context *not* modify the process id passed unanimously.
  547.  
  548.  
  549. Groups
  550. ------
  551.  
  552. Three alternatives:
  553.  
  554.   no groups  (use send(pid(group, rank), ...) instead)
  555.   group as explicit parameter in operations
  556.   use contexts to implement groups
  557.  
  558. The basic difference is:  do we want to be able to select on group?
  559.  
  560. Straw vote:
  561.  
  562. yes: 10  no:11  on the capability of selecting by group.
  563.  
  564. (Thursday lunch occurred here)
  565.  
  566.  
  567. Message Data Types
  568. ------- ---- -----
  569.  
  570. WHAT IS A BUFFER?
  571.  
  572.   (Language bindings are going to be important here.)
  573.  
  574. There are many options to consider:
  575.  
  576. a) contiguous bytes (non-controversial)  General agreement that 0-length
  577.    messages should be allowed.
  578.  
  579. b) contiguous buffers of other (implementation specific?) units?
  580.  
  581. b) stride?  (parameters: base-address, element-length, stride, 
  582.                          number-of-elements)
  583.  
  584. c) basic data types?
  585.  
  586. d) arbitrary structures?
  587.  
  588. e) How will we specify data to be communicated in a heterogeneous environment?
  589.  
  590. f) iovec structures (array of pointers and lengths, as in un*x iovec for
  591.    reads and writes)
  592.  
  593. Marc Snir pointed out that one possibility is to have separate pack/unpack
  594. routines and then just send contiguous buffers.  Rusty Lusk pointed out that
  595. this requires a copy that may be unnecessary on certain machines.
  596.  
  597.  
  598. Two choices - pack scattered buffer and send OR send scattered
  599. buffer.  If the second, then may need a pack that produces the
  600. descriptor of a scattered buffer to be used by the send scattered
  601. buffer.
  602.  
  603. Straw poll:  Use IOVEC type send.  Passed 18-1
  604.  
  605. Basic data types were deferred.
  606.  
  607. Marc Snir observed that up to this point, a message is a set of bytes in
  608. storage, but now we are about to consider more meanings:
  609.  
  610.   message = sequence of *values*
  611.  
  612. Should we use the same calls for homogeneous and heterogeneous calls?  Can
  613. we have a fast homogeneous implementation of the heterogeneous calls?  Bill
  614. Gropp pointed out that the current testbed implementation does this.
  615.  
  616. SEND vs. SENDCHAR, SENDREAL, . . .
  617.   To be compliant with F77 need to have at least SENDCHAR for
  618. correctness (and this is a real issue, e.g. on VAX.)  Strictly need to
  619. have different for each basic data type (but in practice this is not
  620. an issue.)  But for other than CHARACTER there is also an efficiency
  621. issue.
  622.  
  623.   1.  F77 conformance
  624.   2.  Special problem of CHARACTER
  625.   3.  Performance
  626.   4.  Heterogeneity (?)
  627.  
  628. Postpone to language binding discussion.
  629.  
  630. This led into the issue of the general problem of converting types
  631. between languages and machines!  This in turn led to a discussion of
  632. XDR (and mention of other systems such as NDR, ...)  XDR supports the
  633. basic types (INT, REAL, COMPLEX, CHAR, etc.), array constructors,
  634. pack/unpack routines, etc.
  635.  
  636. Do we use the same calls for homogeneous and heterogeneous systems?
  637. Can we have a fast implementation of heterogeneous procedures for a
  638. homogeneous system?
  639.  
  640. What about a "message envelope" that specifies the environmental
  641. aspects of messages (e.g. heterogeneity features such as XDR.)
  642.  
  643. When we talk about heterogeneity, do we expect MPI libraries from
  644. different vendors on different machines to cooperate?  
  645.  
  646. Include general SEND as SENDBYTES?
  647.  
  648. Agreed that do not want SEND in homogeneous to require type
  649. information needed for heterogeneous environment.
  650.  
  651. There was a discussion of whether we have to pick an interchange format, for
  652. example XDR.  There seemed to be some agreement that we do (as MPI
  653. implementations from different vendors have to be able to communicate with one
  654. another), but no vote was taken.
  655.  
  656.  
  657. Error Handling
  658. ----- --------
  659.  
  660. The main issue here is whether an error detected by an MPI routine should
  661. result in the calling of an error-handler or return of a return code.  Other
  662. issues are how much of error handling should be standardized as opposed to
  663. implementation-dependent, and how much user control there should be over
  664. error-handling.
  665.  
  666. There are two types of error environments - soft (recoverable) and hard
  667. (unrecoverable).  In a soft error environment there is the opportunity for
  668. cleanup on the part of both the "application" and the system, while in the
  669. hard error environment the system will cleanup and terminate the application.
  670.  
  671.  
  672. Choices:
  673.   An mpi routine always returns (though it may return with an error code.)
  674.   An mpi routine may call an exception handler
  675.  
  676. There may be a default exception handler and there could be a user-installable
  677. one as well.
  678.  
  679. Library writers may want to handle errors differently from how a user program
  680. wants to handle them (or have them handled by the system).
  681.  
  682. Robert Harrison described the error modes used in TCGMSG and p4:  A process
  683. has a user-settable state that determines whether an error should result in
  684. a (hopefully) graceful takedown of the program or in a error return code.
  685.  
  686. Paul Pierce described the Intel method which uses two syntactically distinct
  687. classes of functions. For one class an error results in a message being
  688. printed and the process in which the error occurred terminating.  For the other
  689. class an error code is set.
  690.  
  691. There was some discussion of the problem of maintaining state in a
  692. multithreaded environment.
  693.  
  694. Two straw votes were taken:
  695.   Do we want a version of MPI that calls an exception handler:  yes: 23 no: 0
  696.   Do we want a version with return codes:  yes: 19  no: 1
  697.  
  698. Specific discussion of modes or "shadow" routines was deferred.
  699.  
  700.  
  701. Correctness Criteria
  702. ----------- --------
  703.  
  704. This concerns defining what is a correct implementation of MPI
  705.  
  706. An assumption that had to be restated several times during the meeting is that
  707. MPI assumes a reliable underlying communication system, i.e. MPI does NOT
  708. address what happens if that fails.
  709.  
  710. Two specific topics are order of messages and resource bounds.
  711.  
  712. There was discussion about whether order preservation is required; that is,
  713. for messages from one process to another, messages are received in the order
  714. they are sent.  Maintaining message ordering is troublesome, but seems
  715. essential for conveniently writing reliable portable programs.  But then comes
  716. the question of what exactly this means, particularly with multithreaded
  717. processes!  What is the effect of probe on the ordering of messages?
  718.  
  719.  
  720. Straw vote in favor of requiring order preservation: yes: 23 no: 4
  721.  
  722. On the issue of correctness with regard to resource exhaustion, Marc Snir
  723. suggested the following example:
  724.  
  725.             Process 1      Process 2
  726.             ---------      ---------
  727.             send to 2      send to 1
  728.             recv           recv
  729.  
  730. What should an implementation be required to do with this program?
  731.  
  732. On the CM-5 this will always deadlock.  On Intel and Meiko machines this will
  733. "usually" work (but how does one specify exactly when it will work.)  Exchange
  734. is an even nastier case.
  735.  
  736.  
  737. ------------------------------------------------------------------------------
  738. Summary of both Wednesday and Thursday point-to-point subgroup meetings
  739. by Marc Snir
  740.  
  741. 1. Multithreaded systems and signal handlers.
  742. Should these be of concern to us?
  743.  
  744. No vote was taken, but the general feeling was that we should try to define
  745. the various communication calls so that they do not rule out the case where
  746. the communicating process is multithreaded.  The implications seems to be that
  747. all calls should be made reentrant, and the communication subsystem is, from
  748. the view-point of the application code, stateless.  (With one with one obvious
  749. exception, namely that due to posted receive or send buffers, and perhaps
  750. additional exceptions having to do with global "modes", like error handling
  751. mode.
  752.  
  753. 2. Small or large library?
  754.  
  755. No vote taken.  The general feeling is that we should provide many options for
  756. the advanced programmer that wants to optimize code (otherwise, all
  757. "interesting" codes will use non-portable features, but set the syntax so that
  758. the use that uses only the "core" functions need not be burdened by the
  759. availability of advanced options.
  760.  
  761. 3. What functions?
  762.  
  763. Clearly, SEND and RECEIVE 
  764.  
  765. General sentiment that a combined send-receive would be nice ("most used
  766. function on CM"), but discussion postponed until we have a proposed
  767. definition: Do we we want an exchange (source=dest), or a 3-body function
  768. (source != dest), or allow for both? do we want send_buffer identical to
  769. receive_buffer, or disjoint from receive_buffer, or allow arbitrary overlap
  770. between the two?  What attributes are shared by sent message and received
  771. message, if at all?
  772.  
  773. WAIT, STATUS and PROBE functions, and persistent handles are discussed later.
  774.  
  775. 4. What modes?
  776.  
  777. We want blocking and nonblocking sends and receives (blocking -- returns when
  778. operation terminated; nonblocking -- returns as soon as possible and a
  779. different call is needed to terminate the operation).
  780.  
  781. We want synchronous and asynchronous modes (Synchronous -- operation
  782. terminated when terminated at all participating nodes.  Asynchronous --
  783. operation terminated when terminated at the calling node; e.g. a send
  784. terminates asynchronously when the sender buffer can be reused.  Please let me
  785. know if you dislike this terminology and prefer something like "local" and
  786. "global".)  The vote went 17-2 toward having a synchronous SEND (completes
  787. when RECEIVE has completed, i.e. when the corresponding WAIT has returned, or
  788. STATUS has returned successfully.)
  789.  
  790. We did not discuss whether we want all 4 combinations of blocking-nonblocking
  791. and synchronous-asynchronous, or just 3 (blocking synchronous, blocking
  792. asynchronous and nonblocking asynchronous).  We did not discussed explicitly,
  793. but "kind of assumed" that any SEND mode can match any RECEIVE mode.
  794.  
  795. 5.  How does one complete a nonblocking operation?
  796.  
  797. The SEND and RECEIVE nonblocking operations return a handle that can be used
  798. to query for completion.  WAIT(handle) blocks until operation completed;
  799. STATUS(handle) returns as soon as possible, and returns an indication for
  800. successful completion.  In addition, these operations return information on
  801. completed RECEIVES: tag, message length, etc.  for the received message.  The
  802. information is returned in a structure provided by the caller.  After return
  803. of a WAIT or successful return of a STATUS the operation handle is freed; the
  804. system has no more information on the completed operation, and has freed all
  805. associated resources.
  806.  
  807. A more complex WAIT is needed, that waits for the completion of one out of
  808. several pending operations.  Proposed syntax is WAIT(array_of_handles) that
  809. returns information on which operation succeeded and its parameters (voted 17
  810. to 0).
  811.  
  812. No CANCEL operation -- Once a SEND or RECEIVE is posted, it must complete.
  813. (Voted 19 to 7.  Some peoples asked to reconsider at least canceling posted
  814. RECEIVEs, even if posted SENDs must complete).
  815.  
  816. 6. Additional operations
  817.  
  818. "ready-receive" SEND.  SEND with a promise that a matching RECEIVE is already
  819. posted (A program where such SEND occurs with no preceding matching RECEIVE is
  820. erroneous and, hopefully, the implementation detects this error.)   The
  821. justification is "it exists on some machine" and "it can improve performance by
  822. 25% on Delta".  Accepted by 13 against 10.
  823.  
  824. Persistent handles.  Created by SEND_INIT(params) (resp RECV_INIT(params).  can
  825. now be repeatedly used to send/receive messages with these parameters, and then
  826. explicitly destroyed.  Supported by 19 against 2.
  827.  
  828. PROBE.  Allows probing for messages available to receive.  Justification -
  829. "provides a mechanism to allocate memory to a message of unknown length,
  830. before it is received".  The proposed mechanism is PROBE(params) that returns
  831. a lock to a matching message if there is a matching message that can be
  832. received.  This message is now locked and can only be received using this
  833. lock.  This was voted 25 to 0.  Some level of uncertainty whether we should
  834. also allow to unlock without receiving (why should one want to do this?)
  835.  
  836. 7.  What is the buffer argument in SENDs and RECEIVEs?
  837.  
  838. A message is a sequence of values, and as a particular case which is of most
  839. interest for homogeneous systems, and for which the syntax ought be simpler, a
  840. message is a sequence of bytes.  There are various ways of specifying this
  841. sequence of bytes.
  842.  
  843. a. Contiguous message:  Starting address and length
  844.  
  845. b. Regular stride message: Starting address, number blocks, length of blocks,
  846. stride.  Voted with no opposition.
  847.  
  848. c. IOVEC: a list of entries, each of which describes a type a or type b 
  849. message.  Voted 18 against 1.
  850.  
  851. There was no discussion on a concrete proposal for typed messages, short of
  852. agreement that there should be such.   The standard is not going to propose a
  853. concrete encoding of typed messages, and a concrete mechanism for message
  854. exchange in heterogeneous systems.
  855.  
  856. 8.  Matching of SENDs and RECEIVEs.
  857.  
  858. A SEND operation associates with a message the following attributes.
  859. a.  Sender id.
  860. b. Tag
  861. c. Context
  862.  
  863. The idea of associated a group id, too, was rejected 11 to 10.
  864.  
  865. The RECEIVE criterion is a Boolean predicate on these attributes of the form.
  866. (SENDER_ID = param1) and (TAG = param2) and (CONTEXT = param3).
  867. Don't cares are allowed for sender_id and tag, but not for context.
  868. Sender_id is determined by system, in the obvious manner, and is absolute (not
  869. relative to a group or a context). Tag is under sender control.
  870. Context is under sender control, but a yet to be determined mechanism is used
  871. to allocate valid context values to processes so as to prevent conflicts.
  872. All this was approved with no opposition.  The idea of allowing the user to
  873. provide its own Boolean function as a receive predicate was rejected 26 to 1
  874. (Reason:  "hard to do if the matching is done by a communication coprocessor".)
  875.  
  876. 9.  Error handling
  877.  
  878. a. We need a version of MPI where errors generate exceptions (user program
  879. halts when an error is detected in an MPI call, or a specific exception
  880. handling mechanism is invoked).  Voted 19 to 1.
  881.  
  882. b.  we need to provide a version of MPI where calls return error codes, and do
  883. not cause exceptions, whenever possible.  Voted 23 to 0.
  884.  
  885. 10.  Ordering of messages
  886.  
  887. Messages sent from the same source to the same destination "arrive in the order
  888. they where sent".  Voted 23 to 0.  The exact implications in terms of order in
  889. which RECEIVEs can occur has to be worked out.  It was pointed out that this
  890. condition may be somewhat hard to define in a multithreaded environment.
  891.  
  892. End of Marc Snir's summary
  893.  
  894. ---------------------------------------------------------------------------
  895.             Collective Communication Subcommittee
  896. ---------------------------------------------------------------------------
  897.  
  898. The Collective Communication Subcommittee was called to order by Al Geist at
  899. 4:30 p.m. on Wednesday.  It continued until 6:40 p.m. when there was a break
  900. for dinner.  The meeting resumed at 8:25 p.m. and finally adjourned at 10:10
  901. p.m.
  902.  
  903. Al Geist introduced this as the first meeting, since no real discussion
  904. on groups and collective communication took place in Minneapolis.  One
  905. goal of this committee is to maintain consistency with the point-to-point 
  906. operations.  Any discussion of groups necessarily involves this subcommittee.
  907.  
  908. Collective communication operations can be constructed out of the
  909. point-to-point primitives, but are desired because
  910.  
  911.   they can be implemented efficiently
  912.   they are convenient for programmers.
  913.  
  914. The committee then went through the set of collective communication primitives
  915. that had been proposed by Al Geist during the email discussions.
  916.  
  917. Broadcast:  info = MPI_BCAST(buf,bytes,tag,gid,root)
  918.  
  919. On return, contents of buf for root is in buf for all processes.  Al Geist
  920. pointed out that the group id here is explicit.  Root has to be a member of
  921. the group.
  922.  
  923. It was at this point that the committee decided that it would use the word
  924. "tag" for message type from now on to distinguish it from "type", which will
  925. now always mean type of data.
  926.  
  927. Marc Snir pointed out that for consistency with point-to-point operations,
  928. there should be both local termination (the operation returns when the local
  929. process has done its part) and global termination (the operation returns when
  930. all processes have finished their participation) versions.
  931.  
  932. There followed a discussion of the fact that the point-to-point committee
  933. seems to be adopting many different versions of send and receive, and that
  934. total compatibility will require many different versions of broadcast.
  935.  
  936. There was a discussion of the reason for the tag parameter in the
  937. call.  It is needed to disentangle multiple broadcasts occurring at
  938. approximately the same time.  Paul Pierce described how the system can do this
  939. by generating sequence numbers.  Others argued that the tag was useful for the
  940. programmer in any case, particularly for verifying program correctness.
  941.  
  942.  
  943. Marc Snir argued that there is a problem (because of the intuition that bcast
  944. provides barrier)
  945.  
  946.   1            2                3
  947. send(3)         bcast           rec(don't care)
  948. bcast        send(3)         bcast
  949.                     rec(don't care)
  950.  
  951. Note that 3 may receive from 2 before 1, i.e. no barrier.
  952.  
  953. Al Geist replied that we need barrier, but broadcast is NOT a barrier.
  954.  
  955. James Cownie initiated a general discussion of whether broadcasts could be
  956. received by general receives.  This would make it simpler to inherit some of
  957. the point-to-point semantics.  Al Geist said that broadcast should be
  958. consistent with the other collective operations, all of which are symmetric.
  959.  
  960. Paul Pierce suggested we specify collective communication routines in terms of
  961. model P-P implementation. This has consequences in terms of what options can
  962. be supported.
  963.  
  964. Marc Snir pointed out that one can't actually specify collective communication
  965. in terms of point-to-point operations because they need dynamically-allocated
  966. additional space.
  967.  
  968. It was decided to postpone a straw vote on whether all processes participating
  969. in a broadcast should do "broadcast" or only the root should "broadcast" and
  970. the others should "receive" because of concern about remaining issues, e.g.
  971. different varieties of recieves.
  972.  
  973. The discussion of "error code" was deferred until the issue is settled in the
  974. Point-to-point communication subcommittee.
  975.  
  976.  
  977. MPI_GATHER:  (see mail archives for details)
  978.  
  979. It was proposed to have a version in which each participant contributes a
  980. different amount of information (a general "concatenate" function).
  981.  
  982. Issues raised: How handle the situation where the number of bytes on each
  983. processor is different.  How specify the type of data?  For example one needs
  984. to know the size of the data type for various purposes, e.g. when doing
  985. recursive bisection.
  986.  
  987.  
  988. MPI_GLOBAL_OP:  (see archives for definition)
  989.  
  990. This does not include the data types.  There was a discussion of how the
  991. forwarding processors know where to break buffers if the data type is not
  992. specified.  Paul Pierce suggested that we should separate the case of
  993. user-defined combining operations from the system ones, which could be
  994. optimized.
  995.  
  996. Robert Harrison suggested that the buffer be specified as (#items, length) at
  997. least for the user-defined operations.  (Tag would be retained) Someone noted
  998. that "bytes" would be different on each processor in the heterogeneous case.
  999.  
  1000.  
  1001. Back to GATHER.  Many agreed that the interface should be changed, but no
  1002. proposal was offered.
  1003.  
  1004. Straw vote on having separate general concatenation, to go along with the
  1005. gather operation:  yes: 18  no: 0
  1006.  
  1007.  
  1008. MPI_SYNCH
  1009.  
  1010. There was general agreement that "BARRIER" would be a better name.  James
  1011. Cownie suggested that a tag argument would be helpful for debugging.
  1012.  
  1013. There was also some discussion of failure of such a barrier, e.g. because some
  1014. node fails.  It was agreed that this was not a problem peculiar to this
  1015. particular function.  One individual nonetheless argued strongly for some kind
  1016. of timeout for the barrier.
  1017.  
  1018.  
  1019. Groups
  1020. ------
  1021.  
  1022. gid = MPI_MKGRP (list of processes)
  1023.  
  1024. There was much discussion of the format of the process list.  As defined MKGRP
  1025. defines a group as a subset of a pre-existing group.  One alternative would be
  1026. to allow creating a group consisting of processes from a number of other
  1027. groups.  (NB Identification of processes is unspecified.  This is a task for
  1028. the Point-to-point Communication Subcommittee.)
  1029.  
  1030. MKGRP provides an implicit barrier among the processes joining the group.
  1031.  
  1032. There are a number of problems about making sure that gid is uniform and known
  1033. across the system.  This is an efficiency issue.
  1034.  
  1035. Should it be possible to SEND to a (gid,rank) pair?  Marc argued that one
  1036. should do Point-to-point communication only within a group, not between
  1037. groups.
  1038.  
  1039. Note that groups are constant - cannot add or delete members from a
  1040. group.  Also group creation is a barrier for the processes that are
  1041. part of the group.  This raises the question of how the processes
  1042. joining the group know that they are joining.
  1043.  
  1044. What is utility of groups? Certainly at present the only commonly used
  1045. group is ALL.
  1046.  
  1047. MPI_FREEGRP(gid)
  1048. MPI_GRPSIZE
  1049. MPI_MYRANK
  1050.  
  1051. There was a general discussion of how group id's would be generated.  Also a
  1052. discussion of the mapping information: How to map back from my_rank and gid to
  1053. rank in ALL?  (In order to actually do a SEND.)
  1054.  
  1055. -----
  1056. At this point the group broke for dinner
  1057. -----
  1058.  
  1059. The continuation after dinner was an informal general discussion.  There were
  1060. some general question about experience from Al Geist to Paul Pierce.
  1061.  
  1062. Adam Greenberg expressed interest in discussing channels.  Channels are seen
  1063. as an early binding, (Curryification) of various of the SEND/RECV functions
  1064. which offer a number of gains in efficiency.
  1065.  
  1066. There was a discussion of Fortran language bindings (F77, F90, HPF) of MPI.
  1067. It was agreed by those knowledgable in the area that there are no special
  1068. issues in regard to HPF.
  1069.  
  1070. Steve Wheat discussed the Sandia implementation of channels on the Ncube.
  1071. Sounds very similar to iWarp channels except that they are dynamic in
  1072. creation.
  1073.  
  1074. Jim Cownie noted that global-ops are going to result in non-determinism
  1075. in numeric routines.
  1076.  
  1077. Jim also elaborated on Meiko's BAD experience with ready_receive function -
  1078. lots of user problems.  Commonly user's try it on small problems and it works
  1079. and speeds up.  But then on large problems things erratically break and the
  1080. user bitches.
  1081.  
  1082. Paul Pierce noted that this is essentially Intel's force type and the Intel
  1083. experience has not been so bad.  In particular it is harder to use and does
  1084. not generally work easily on small problems.
  1085.  
  1086. Cownie: In general what to do when a ready_receive fails?  No
  1087. reasonable way to raise error.  Response: Use a signal.  Cownie:
  1088. GAACK!  This is implementation and not viable on all systems.
  1089.  
  1090. John Kapenga listed six collective communication issues that he considers
  1091. particularly important.  [Missed the list]
  1092.  
  1093. Other desirable collective communication features that were mentioned:
  1094. global-exchange; all-to-all communication.
  1095.  
  1096. What are criteria for including?  Proposal: Difficulty of implementation;
  1097. frequency of use; efficiency gain
  1098.  
  1099. John Kapenga asked about 2-D and 3-D mesh operations - e.g. shifts?
  1100.  
  1101. Adam Greenberg said this should be left to compilers.  John: No Way!  Adam
  1102. argued that the compiler can recognize opportunity to avoid memory copies.
  1103. Unless that same facility is available to user the compiler can do much
  1104. better.
  1105.  
  1106. The group adjourned at 10:10 p.m.
  1107.  
  1108. ---------------------------------------------------------------------------
  1109.                Topologies Subcommittee
  1110. ---------------------------------------------------------------------------
  1111.  
  1112. The Topologies Subcommittee was called to order by Rolf Hempel at 4:00 on
  1113. Wednesday.  It lasted until dinner.
  1114.  
  1115. ---------------------------------------------------------------------------
  1116.                  Other Subcommittees
  1117. ---------------------------------------------------------------------------
  1118.  
  1119. The other subcommittees (Introduction, Formal Semantics, Environmental
  1120. Enquiry, Language Binding) met informally after dinner on Wednesday.
  1121.  
  1122. ---------------------------------------------------------------------------
  1123.             Meeting of the Whole Committee
  1124. ---------------------------------------------------------------------------
  1125.  
  1126. Thursday, January 7, 4:30
  1127.  
  1128. The Agenda for the rest of the meeting was presented:
  1129.  
  1130.   Introduction subgroup report
  1131.   Collective-communications subgroup report
  1132.   Process Topology subgroup report
  1133.   Environmental Inquiry subgroup report
  1134.   Formal Language subgroup report
  1135.   Language Binding subgroup report
  1136.   Profiling (Jim Cownie)
  1137.   Dates for future meetings
  1138.  
  1139.  
  1140.  
  1141. Report of the Introduction Subcommittee:
  1142. ------ -- --- ------------ ------------
  1143.  
  1144. Jack Dongarra presented the results of the subcommittee meeting that took
  1145. place Wednesday night.  This is essentially the draft that has been available
  1146. from netlib for the last six weeks.  There was some on-the-fly editing by the
  1147. group at large.
  1148.  
  1149.  
  1150. The goal of the Message Passing Interface simply stated is to
  1151. develop a *de facto* standard for writing message-passing programs.
  1152.  
  1153. As such the interface should establishing a practical, portable, efficient,
  1154. and flexible standard for message passing.
  1155.  
  1156.  
  1157. Goals
  1158. -----
  1159.  
  1160.   Design an application programming interface (not necessarily for compilers
  1161.   or a system implementation library).
  1162.  
  1163.  
  1164.   Allow efficient communication: Avoid memory to memory copying and allow
  1165.   overlap of computation and communication and offload to communication
  1166.   coprocessor, where available.
  1167.  
  1168.   Allow (but not mandate) extensions for use in heterogeneous environment.
  1169.  
  1170.   Allow convenient C, Fortran 77, Fortran 90, and C++ bindings for interface.
  1171.  
  1172.   Provide a reliable communication interface.
  1173.     User need not cope with communication failures.
  1174.     Such failures are dealt by the underlying communication subsystem.
  1175.  
  1176.   Define an interface that is not too different from current practice,
  1177.   such as PVM, Express, P4, etc.
  1178.  
  1179.   Define an interface that can be quickly implemented on many
  1180.   vendor's platforms, with no significant changes in the underlying
  1181.   communication and system software.
  1182.  
  1183.  
  1184.   The interface should not contain more functions than are really necessary.
  1185. (Based on the latest count of send/receive variants, this drew a large laugh
  1186. from the crowd.)
  1187.  
  1188.   Focus on a proposal that can be agreed upon in 6 months.
  1189.  
  1190. Added:  Semantics of the MPI should be programming language independent.
  1191.  
  1192. Who Should Use This Standard?
  1193. --- ------ --- ---- ---------
  1194.  
  1195.   This standard is intended for use by all those who want to write portable
  1196.   message-passing programs in Fortran 77 and/or C.
  1197.  
  1198.  
  1199.   This includes individual application programmers, developers of software
  1200.   designed to run on parallel machines, and creators of higher-level
  1201.   programming languages, environments, and tools.
  1202.  
  1203.  
  1204.   In order to be attractive to this wide audience, the standard must provide a
  1205.   simple, easy-to-use interface for the basic user while not semantically
  1206.   precluding the high-performance message-passing operations available on
  1207.   advanced machines.
  1208.  
  1209.  
  1210. What Platforms Are Targets For Implementation?
  1211. ---- --------- --- ------- --- ---------------
  1212.  
  1213.   The attractiveness of the message-passing paradigm at least partially
  1214.   stems from its wide portability.  
  1215.  
  1216.   Programs expressed this way can run on distributed-memory multiprocessors,
  1217.   networks of workstations, and combinations of all of these.
  1218.  
  1219.   In addition, shared-memory implementations are possible.
  1220.  
  1221.   The paradigm will not be made obsolete by architectures combining the shared-
  1222.   and distributed-memory views, or by increases in network speeds.
  1223.  
  1224.  
  1225.   It thus should be both possible and useful to implement this standard on a
  1226.   great variety of machines, including those ``machines" consisting of
  1227.   collections of other machines, parallel or not, connected by a communication
  1228.   network. 
  1229.  
  1230. It was agreed that explicit remarks that MPI is intended to be usable with
  1231. multithreaded processes and with MIMD (not just SPMD) programs should be added
  1232. somewhere.
  1233.  
  1234.  
  1235. What Is Included In The Standard?
  1236. ---- -- -------- -- --- ---------
  1237.  
  1238. The standard includes:
  1239.  
  1240.   Point-to-point communication in a variety of modes, including modes
  1241.   that allow fast communication and heterogeneous communication
  1242.  
  1243.   Collective operations
  1244.  
  1245.   Process groups
  1246.  
  1247.   Communication contexts
  1248.  
  1249.   A simple way to create processes for the SPMD model
  1250.  
  1251.   Bindings for both Fortran and C
  1252.  
  1253.   Support for Process Topologies
  1254.  
  1255. In addition
  1256.  
  1257.   A model implementation
  1258.  
  1259. and
  1260.  
  1261.   A formal specification.
  1262.  
  1263. will be provided.
  1264.  
  1265.  
  1266. It was proposed that explanation and rationale for the standard would also be
  1267. provided as would sample programs and a validation suite.  This is getting
  1268. very ambitious.
  1269.  
  1270. Jim Cownie also wants wrappers available for use by, for example, profiling.
  1271. The suggestion is to provide "name shift", e.g. __MPI_SEND, etc. so the
  1272. profiler can have MPI_SEND call __MPI_SEND after doing whatever is useful for
  1273. profiling.
  1274.  
  1275.  
  1276. What Is Not Included In The Standard?
  1277. ---- -- --- -------- -- --- ---------
  1278.  
  1279. The standard does not specify:
  1280.  
  1281.  
  1282.   Explicit shared-memory operations
  1283.   Operations that require more operating system support than is currently
  1284.     standard; for example, interrupt-driven receives, remote execution,
  1285.     or active messages
  1286.   Program construction tools
  1287.   Debugging facilities
  1288.   Tracing facilities
  1289.  
  1290.  
  1291. Features that are not included can always be offered as extensions by specific
  1292. implementations.
  1293.  
  1294.  
  1295.  
  1296.  
  1297. Report of the Collective Communication Subcommittee:
  1298. ------ -- --- ---------- ------------- ------------
  1299.  
  1300. Al Geist summarized the meeting that took place Wednesday afternoon (described
  1301. above). 
  1302.  
  1303. Global functions beyond those discussed by the subcommittee, such as all2all
  1304. or total_exchange, await written proposals.
  1305.  
  1306. The (whole) committee added that Fortran 90 and HPF would be a good place to
  1307. look for more combining functions (other than max, min, sum, etc.)
  1308.  
  1309. It was agreed that a way to supply user-supplied functions would be useful.
  1310.  
  1311. Issues mentioned include: What is a group?  How are groups formed?  Are group
  1312. elements addressable, if so how?  Are groups ordered (e.g. for prefix/suffix
  1313. operations)?  Group always an ordered subset of the ALL group?
  1314.  
  1315. Partitioning?  Connection with virtual topologies?  This will be
  1316. discussed when topology group reports.
  1317.  
  1318.  
  1319. Friday, January 8
  1320. ------  ------- -
  1321. Jack Dongarra called the meeting to order at 9:00.
  1322.  
  1323. Report of the Process Topologies Subcommittee:
  1324. ------ -- --- ------- ---------- ------------
  1325.  
  1326. Rolf Hempel reported on the meeting held Wednesday afternoon:
  1327.  
  1328. Motivation:
  1329.  
  1330.   Applications have structures of processes
  1331.   Most natural way to address processes
  1332.   Processor topology is valuable to user
  1333.   Creation of subgroups is a natural way to implement topologies
  1334.  
  1335. Draft proposal for MPI functions in support of process topologies (by Rolf
  1336. Hempel) is in the handout bundle.  The subcommittee made some changes to the
  1337. draft. 
  1338.  
  1339. What functions should MPI contain?
  1340.  
  1341.   specification of logical process structure
  1342.   lookup functions for process id's
  1343.   clean interface to other parts of MPI (process groups)
  1344.  
  1345. What should it not contain?
  1346.  
  1347.   any reference to particular hardware architectures
  1348.   algorithms for mapping of processes to processors
  1349.  
  1350. If it does this, the user program will be portable, but will contain full
  1351. information for processes mapping at the logical level.
  1352.  
  1353. Claim:  The use of process topologies is not an obstruction to quick
  1354. implementation of MPI, since the first implementation can make random
  1355. assignments. 
  1356.  
  1357. A process topology is assigned to a process group.  Copying groups can be used
  1358. to overlay different topologies on the same processes.  All processes in a
  1359. group call the topology definition function.
  1360.  
  1361. Inquiry functions provide the translation of logical process location to
  1362. process id.
  1363.  
  1364. Supported Topologies:
  1365.  
  1366.   General graph structure:
  1367.     For each process, define the complete set of neighbors for each node.
  1368.  
  1369.     In principle this is sufficient as it covers all topologies.  But it is
  1370.     not scalable as all processes have knowledge of all others.  we should
  1371.     investigate a scalable version.
  1372.  
  1373. However, important special cases should be treated explicitly, because regular
  1374. structures can be specified in a scalable way easier to implement the mapping
  1375. they cover a large number of applications.
  1376.  
  1377. A special case:  Cartesian structures
  1378.   grids/tori
  1379.   hypercube is a special case
  1380.   Support for creation of subgroups for regular structures will be useful.
  1381.  
  1382. Special treatment for trees?  deferred
  1383.  
  1384. User-defined topology definition functions?  deferred
  1385.   It will be necessary for the inquiry functions to provide information on the
  1386.   hardware topology, so that a user can provide his own mapping function.
  1387.  
  1388. Marc Snir: We need to consider consistency of mapping alignments, for example
  1389. an octtree for image processing with a grid structure.
  1390.  
  1391. Al Geist: What is connection between group and topology.  Recall that a group
  1392. is a linear *ordered* array which is a kind of topology.
  1393.  
  1394. General discussion of copying topologies and groups Proposal is to have at
  1395. most one topology per group so can use group id as name for topology.  This is
  1396. reason that there must be a group copy.
  1397.  
  1398. David Walker: We need closer coordination between the collective communication
  1399. subcommittee and the topology subcommittee, since groups are central to both.
  1400.  
  1401.  
  1402. Report of the Environmental Enquiry Subcommittee:
  1403. ------ -- --- ------------- ------- ------------
  1404.  
  1405. Bill Gropp reported that the Environmental Enquiry subcommittee needs to wait
  1406. and get a better picture of what MPI will contain.  
  1407.  
  1408. Jon Flower again asked for cpu_time.  This was discussed, and we were reminded
  1409. that these were more-or-less rejected at the Minneapolis meeting as not being
  1410. part of MPI.  Standardization should come from POSIX.
  1411.  
  1412. Marc Snir:  Part of the subcommittee's job should be to decide *what* can be
  1413. enquired about as well as how it will be done.
  1414.  
  1415. There was general discussion about inquiring about both MPI parameters and
  1416. implementation parameters.  Also if parameter *setting* as well as enquiry
  1417. should be supported.  (Buffer pool sizes, for example).
  1418.  
  1419. Jon Flower also asked about system hints.  He suggested it should be possible
  1420. to tell the system about implementation specific tuning in a system
  1421. independent way.
  1422.  
  1423.  
  1424.  
  1425. Report of the Formal Specification Subcommittee:
  1426. ------ -- --- ------ ------------- ------------
  1427.  
  1428. Rusty Lusk reported the committee was without its chairman, Steven Zenith,
  1429. but that it viewed its mission as to try to formalize what the other
  1430. subcommittees decide on.  It will probably use CSP, for lack of experience
  1431. with any other formal specification language.  
  1432.  
  1433. Bob Knighten suggested that the subcommittee look into LIS (Language
  1434. Independent Specification) that POSIX defined in order to separate semantics
  1435. from language bindings.
  1436.  
  1437.  
  1438. Report on MPI -1 (minus one)
  1439. ------ -- ------ -----------
  1440.  
  1441. James Cownie presented an MPI anti-specification.  Ya hadda be there, but in
  1442. case you weren't or just want to be reminded, here is a transcription of Jim's
  1443. slides.  
  1444.  
  1445.                           MPI -1  (Jim Cownie)
  1446.  
  1447. In the spirit of LPF (Low Performance Fortran)
  1448.  
  1449.    *  Bindings ONLY for    Mathematica
  1450.                   Occam
  1451.                            ML
  1452.  
  1453.    *  No function take arguments or returns result
  1454.  
  1455.    *  Point to Pointless communication
  1456.  
  1457.    *  1024 different sends
  1458.       NO receives
  1459.  
  1460.    *  Full support for 0 dimensional topologies
  1461.  
  1462.    *  User data in a message limited to 1 byte (of 6 data types)
  1463.       BUT 1 KByte of TAG, CONTEXT
  1464.  
  1465.    *  Informal semantics - Formal Syntax
  1466.  
  1467.    *  All groups are contexts
  1468.  
  1469.    *  All contexts are groups
  1470.  
  1471.    *  Non blocking wait
  1472.  
  1473.    *  Non blocking barrier
  1474.  
  1475.    *  All user programs are unsafe & erroneous, they therefore do all
  1476.       their work in the exception handler.
  1477.  
  1478.  
  1479. ---------------------------------------------------------------------------
  1480.  
  1481. A Profile/Instrumentation subgroup was formed with Jim Cownie as chairman.
  1482.  
  1483. Steve Otto, as general editor, will contact subgroup chairmen to begin
  1484. discussion of editing concerns.
  1485.  
  1486. Discussion of meeting format.  The following was proposed as a format for
  1487. subsequent meetings, based on the experience with this meeting.
  1488.  
  1489. Wed. afternoon:   point-to-point
  1490. Wed. night:       all subcommittees other than pt-to-pt and collective comm.
  1491. Thurs. morning:   collective communication
  1492. Thurs. afternoon: subcommittee reports
  1493. Fri. afternoon:   subcommittee reports
  1494.  
  1495. Meeting Dates:
  1496.  
  1497. It was decided to moved the next two meetings up a week from when they were
  1498. tentatively scheduled.
  1499.  
  1500. The next meeting will be Feb 17-19.
  1501. The next one after that will be Mar 31-Apr 2
  1502.  
  1503. The currently-scheduled May 19-21 and June 30-July 2 meetings may also be
  1504. moved up as well.  Note that July 2 will be a holiday in the United States.
  1505.  
  1506. ______________________________________________________________________
  1507.  
  1508.  
  1509. Anyone is welcome to participate in the MPI process by joining one of the
  1510. discussion groups by email, or by attending meetings.
  1511.  
  1512. The following mailing lists have been set up.
  1513.  
  1514.    mpi-comm@cs.utk.edu          Whole committee
  1515.    mpi-intro@cs.utk.edu         Introduction subcommittee
  1516.    mpi-pt2pt@cs.utk.edu         Point-to-point communication subcommittee
  1517.    mpi-collcomm@cs.utk.edu      Collective communication subcommittee
  1518.    mpi-ptop@cs.utk.edu          Process topology subcommittee
  1519.    mpi-lang@cs.utk.edu          Language binding subcommittee
  1520.    mpi-formal@cs.utk.edu        Formal language description subcommittee
  1521.    mpi-envir@cs.utk.edu         Environment inquiry subcommittee
  1522.    mpi-context@cs.utk.edu       Contexts subcommittee
  1523.    mpi-profile@cs.utk.edu       Profiling subcommittee
  1524.  
  1525. All mail will be collected and can be retrieved by sending email to
  1526. netlib@ornl.gov and in the mail message typing:
  1527. send mpi-intro from mpi
  1528. send mpi-comm from mpi
  1529. etc.
  1530. Initially try:
  1531.  
  1532.   send index from mpi
  1533.   send mpi-newcomers from mpi
  1534.  
  1535. Information on the next meeting is available in the file mpi-intro on netlib.
  1536.  
  1537. If you would like to added to a mailing list or join this effort
  1538. send email to walker@cs.utk.edu
  1539.  
  1540.  
  1541.  
  1542.