home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #18 / NN_1992_18.iso / spool / comp / parallel / 1911 < prev    next >
Encoding:
Text File  |  1992-08-13  |  46.2 KB  |  1,021 lines

  1. Newsgroups: comp.parallel
  2. Path: sparky!uunet!gatech!hubcap!fpst
  3. From: chk@rice.edu (Charles Koelbel)
  4. Subject: July HPFF minutes, part 1 of 2
  5. Message-ID: <1992Aug14.121103.3716@hubcap.clemson.edu>
  6. Apparently-To: comp-parallel@ncar.ucar.edu
  7. Originator: chk@erato.cs.rice.edu
  8. Keywords: HPFF, High Performance Fortran, minutes
  9. Sender: news@rice.edu (News)
  10. Reply-To: chk@rice.edu (Charles Koelbel)
  11. Organization: Rice University
  12. Date: Thu, 13 Aug 1992 23:37:39 GMT
  13. Approved: parallel@hubcap.clemson.edu
  14. Lines: 1005
  15.  
  16.  
  17.                               
  18.                      HPFF Meeting Notes
  19.                               
  20.                               
  21.                       July 23-24, 1992
  22.              Washington, DC - Hyatt Crystal City
  23.                 Notes taken by Chuck Koelbel,
  24.                  with help from Bob Knighten
  25.  
  26. Executive Summary
  27.  
  28.   This was the fourth meeting of the High Performance
  29. Fortran Forum working group. It was held immediately after
  30. the International Conference on Supercomputing in
  31. Washington, DC, where a Birds-of-a-Feather session
  32. introducing the language was also held. The effort is mostly
  33. on schedule for presenting a document at the Supercomputing
  34. '92 conference.
  35.   Some of the more important decisions made at this meeting
  36. included:
  37.      Adoption of the proposal for REALIGN and
  38.        REDISTRIBUTE made at the last meeting, except
  39.        for the sections regarding subroutine linkage,
  40.        COMMON blocks, and ALLOCATABLE arrays. This
  41.        proposal contained the basic explicit remapping
  42.        capabilities within a single subprogram.
  43.      Adoption of the proposal for sequence association
  44.        in the presence of distributed arrays made at
  45.        the last meeting. The proposal essentially
  46.        disallows sequence association for distributed
  47.        actual arguments.
  48.      Guy Steele and Rich Shapiro's proposal for
  49.        managing distributed dummy arguments in
  50.        subprograms was accepted as a first reading.
  51.        The major point of the proposal was to disallow
  52.        the redistribution of an actual argument
  53.        through a subroutine call, although the
  54.        argument could be temporarily remapped within
  55.        the subroutine.
  56.      Chuck Koelbel and David Loveman's proposal for a
  57.        FORALL statement and construct was accepted
  58.        with minor revisions on first reading. These
  59.        statements are not intended as a general
  60.        "parallel loop" or as a general parallel
  61.        construct; instead, they allow assignments to
  62.        multiple array elements, in somewhat the same
  63.        way as array assignments and WHERE constructs
  64.        in Fortran 90.
  65.      Guy Steele's proposal for an INDEPENDENT assertion
  66.        applied to DO loops was accepted as a first
  67.        reading. The directive is an assertion
  68.        providing more information to the compiler; if
  69.        properly used, it does not change the semantics
  70.        of the program where it appears. Work is
  71.        proceeding to apply the assertion to other
  72.        language constructs.
  73.      A large number of new standard library routines
  74.        and intrinsics was approved as a first reading.
  75.        These functions perform tasks useful for data-
  76.        parallel computing, including prefix
  77.        accumulations, new reduction functions, and
  78.        system inquiry functions. Discussion continues
  79.        on whether these functions are sufficiently
  80.        common to merit their inclusion or simply as
  81.        standard library functions.
  82.   Dates and agendas for future HPFF meetings are as
  83. follows:
  84.      September 9-11 Storage Association, Subroutine
  85.                     Linkage for Distributions,
  86.                     Pointers and ALLOCATABLE Array
  87.                     Distributions, FORALL, DO
  88.                     INDEPENDENT (all second
  89.                     readings);
  90.                     Local Subroutines, Intrinsic
  91.                     Functions, Fortran 90 Subset,
  92.                     FORALL INDEPENDENT, Parallel I/O
  93.                     (all first readings)
  94.      October 21-23  Local Subroutines, Intrinsic
  95.                     Functions, Fortran 90 Subset,
  96.                     FORALL INDEPENDENT, Parallel I/O
  97.                     (all second readings); Tentative
  98.                     approval of draft for
  99.                     Supercomputing '92 Tutorial
  100.      December 9-11  Approval of Final Draft
  101.  
  102.  
  103. HPFF Documents
  104.  
  105.   The following documents related to HPFF are available by
  106. anonymous FTP from titan.cs.rice.edu in the public/HPFF
  107. directory. Additions since the June meeting are marked with
  108. a plus sign (+).
  109.      announce.*  HPFF Announcement and Call For
  110.        Participation
  111.      archives    Directory containing the HPFF mailing
  112.        group archives. (All files are updated
  113.        nightly.)
  114.        + hpff           All messages sent to
  115.           hpff@rice.edu
  116.        + hpff-core      All messages sent to hpff-
  117.           core@rice.edu
  118.        + hpff-distributeAll messages sent to distribution
  119.           subgroup
  120.        + hpff-f90       All messages sent to
  121.           Fortran 90 subgroup
  122.        + hpff-forall      All messages sent to
  123.           FORALL subgroup
  124.        + hpff-format    All messages sent to
  125.           editorial subgroup
  126.        + hpff-intrinsicsAll messages sent to
  127.           intrinsics subgroup
  128.        + hpff-io        All messages sent to I/O
  129.           subgroup
  130.      database    The HPFF mailing list
  131.      handouts    Directory containing handouts from the
  132.        HPFF meetings
  133.        apr    Subdirectory containing April meeting
  134.           handouts
  135.           ALL       Concatenation of the other files in this
  136.             subdirectory
  137.           Distribute  Proposal for data distribution
  138.             model by the distribution subgroup
  139.           FORALL    Proposals and discussion from
  140.             the FORALL and local subroutines
  141.             subgroup
  142.           Fortran90 Storage association proposal by
  143.             the Fortran 90 subgroup
  144.           Pointer     Discussion of Fortran 90
  145.             pointers by the F90 subgroup
  146.           Subroutine  Discussion by the Subroutine
  147.             interfaces subgroup
  148.        june   Subdirectory containing all June
  149.           meeting handouts
  150.           ALL            Concatenation of the other
  151.             files in this subdirectory
  152.           Association      Storage and Sequence-
  153.             Association Proposal
  154.           COMMON-Kennedy Distributing COMMON Blocks
  155.             Proposal (Ken Kennedy)
  156.           COMMON-Meltzer Distributing COMMON Blocks
  157.             Proposal (Andy Meltzer)
  158.           Distribute.tex   Data Distribution Proposal
  159.             (Guy Steele)
  160.           FORALL-Loveman.tex  FORALL construct
  161.             proposal (David Loveman)
  162.           FORALL-Wu      FORALL construct proposal
  163.             (Min-You Wu)
  164.           Intrinsics          Intrinsics Proposal
  165.             (Rob Schreiber)
  166.           Subset         Fortran 90 Subset Proposal
  167.        + july   Subdirectory containing all July
  168.           meeting handouts
  169.           + ALL.shar       Shar file containing all
  170.             other files
  171.           + Anti-FORALL.tex   Arguments against the
  172.             FORALL construct (Alan Karp)
  173.           + Pro-FORALL     Arguments in favor of the
  174.             FORALL construct (Rich Shapiro)
  175.           + Critique.tex   Critique of HPF
  176.             distributions (Barbara Chapman and Hans
  177.             Zima)
  178.           + Distribute.tex    Data distribution
  179.             proposal (Guy Steele)
  180.           + FORALL.tex        FORALL proposal (David
  181.             Loveman and Chuck Koelbel)
  182.           + Original-Storage  Sequence and Storage
  183.             Association proposal, beginning of
  184.             meeting
  185.           + Final-Storage     Sequence and Storage
  186.             Association proposal, as finally
  187.             presented (F90 group)
  188.           + IO.tex         Parallel I/O proposal
  189.             (Marc Snir)
  190.           + Independent.tex     INDEPENDENT proposal
  191.             (Min-You Wu)
  192.           + Intrinsics        Intrinsics proposal
  193.             (Rob Schreiber)
  194.           + Local-Subr.tex    Local Subroutine
  195.             proposal (Marc Snir)
  196.           + MIMD         MIMD support proposal
  197.             (Clemens-August Thole)
  198.      minutes     Directory containing minutes of past
  199.        HPFF meetings
  200.        jan-minutes   Summary of the first HPFF
  201.           meeting
  202.        jan-proposals Point-by-point comparison of
  203.           language proposals at first HPFF meeting
  204.        mar-minutes   Summary of HPFF meeting, March
  205.           9-10, Dallas
  206.        apr-minutes   Summary of HPFF meeting, April
  207.           23-24, Dallas
  208.        europe-minutesSummary of European Workshop
  209.           on High Level Programming Models for
  210.           Parallel Architectures
  211.        june-minutesSummary of HPFF meeting, June 9-
  212.           10, Dallas
  213.        + july-minutesSummary of HPFF meeting, July
  214.           23-24, Washington
  215.      papers    Directory containing papers related to
  216.        HPFF. (Note that these are not intended as
  217.        formal drafts, but rather as supporting
  218.        documents.)
  219.        convex.*    Slides for Convex presentation
  220.        fd.*     Fortran D language specification
  221.        fd-over.*   Fortran D project overview
  222.        fd-sc91.*Fortran D compilation paper
  223.           (presented at Supercomputing '91)
  224.        hpf.ps      DEC HPF language specification
  225.        + hpff-europe.ps "High Performance Fortran:
  226.           A Perspective" by Brian Wylie, Michael
  227.           Norman, and Lyndon Clarke (University of
  228.           Edinburgh)
  229.        + merlin.ps "Techniques for the Automatic
  230.           Parallelisation of 'Distributed Fortran
  231.           90'" by John Merlin (University of
  232.           Southhampton)
  233.        mpp.ps   Cray MPP Fortran language
  234.           specification
  235.        tmc      Position paper by Thinking Machines
  236.           on HPFF
  237.        vf.*     Vienna Fortran language
  238.           specification
  239.        vf-over.*   Vienna Fortran language overview
  240.      welcome     "Welcome to HPFF" message, including
  241.        instructions for using anonymous FTP and
  242.        joining mail lists.
  243. See the README file in the main directory for information on
  244. file extensions and compressed files.
  245.   Public comment on any of the proposals is welcome. Please
  246. address your remarks to the appropriate email list (see the
  247. "welcome" file for a list of these groups).
  248.  
  249. Detailed Meeting Notes
  250.  
  251. Attendees
  252.  
  253. Robbie Babb (Oregon Graduate Institute), Barbara Chapman
  254. (University of Vienna), Marina Chen (Yale University), Alok
  255. Choudhary (Syracuse University), James Cownie (Meiko), Rich
  256. Fuhler (Lahey), Peter Highnam (Schlumberger), Maureen
  257. Hoffert (Hewlett Packard), Hidetoshi Iwashita (Fujitsu
  258. Labs), Ken Kennedy (Rice University), Bob Knighten (Intel),
  259. Chuck Koelbel (Rice), Dave Loveman (DEC), Piyush Mehrotra
  260. (ICASE), Andy Meltzer (Cray Research), Ken Miura (Fujitsu
  261. America), Prakash Narayan (SunPro, Sun Microsystems), Tin-
  262. Fook Ngai (HP), Edwin Paalvast (Technical University,
  263. Delft), Rex Page (Amoco), Jean-Laurent Philippe (Archipel),
  264. David Presberg (Cornell), J. Ramanujam (Louisiana State
  265. University), P. Sadayappan (Ohio State University), Rony
  266. Sawdayi (Applied Parallel Research), Randy Scarborough
  267. (IBM), Rich Shapiro (Thinking Machines Corporation),
  268. Margaret Simmons (Los Alamos National Laboratory), Marc Snir
  269. (IBM), Guy Steele (TMC), Kate Stewart (IBM Canada), Richard
  270. Swift (MasPar), Clemens-August Thole (GMD, St. Augustin),
  271. Joel Williamson (Convex), Min-You Wu (SUNY Buffalo), Mary
  272. Zosel (Lawrence Livermore National Laboratory)
  273.  
  274. Memorable self-introductions
  275.  
  276.   Margaret Simmons, substituting for the honeymooning Ralph
  277. Brickner, signed the attendance sheet "virtual Ralph
  278. Brickner".
  279.   Dave Loveman identified himself as being "from the newly-
  280. CEO-ed DEC".
  281.  
  282. HPF Europe Report
  283.  
  284.   Clemens-August Thole gave a brief report on developments
  285. in Europe related to HPFF. The HPF Europe group held a
  286. meeting June 23 in Brussels which included attendees from
  287. many major companies and universities on the continent. The
  288. topics of discussion included
  289.      Discussion of data distribution at subroutine
  290.        boundaries: Most of the points made there are
  291.        covered in the current proposal, thanks to
  292.        strong European contributions to the mailing
  293.        list discussion.
  294.      Parallel I/O: Peter Brezany from the University of
  295.        Vienna presented the results of experiments in
  296.        Vienna Fortran showing that special treatment
  297.        of distributed arrays in file I/O could have
  298.        significant advantages. James Cownie presented
  299.        a programmer interface approach to the same
  300.        problem.
  301.      MIMD support and message passing: Clemens-August
  302.        Thole and Delces Watson presented their ideas
  303.        on adding this support to HPF. The goal is to
  304.        allow concurrent execution of everything in a
  305.        program without resort to local subroutines.
  306.        Such support would require messages as a part
  307.        of the language, not restricted to local
  308.        subroutines. The group plans to propose these
  309.        features for the second round of HPFF after the
  310.        core language discussed in the US has been
  311.        adopted.
  312.      Indirect mapping arrays: Presented by Hans Zima,
  313.        these were seen as an important feature for
  314.        supporting irregular computations. They will
  315.        also be proposed for later versions of HPF, but
  316.        not for the current draft.
  317. The next European meeting will be held September 21.
  318. Interested parties should contact Clemens-August Thole for
  319. details.
  320.   Another European meeting  may be possible after
  321. Supercomputing '92 to disseminate information about HPF.
  322. This remark started a short discussion of ways that High
  323. Performance Fortran could be publicized. Ken Kennedy wanted
  324. to disseminate as much information as possible at SC '92,
  325. thus getting as much input as possible for the final draft
  326. approval. Some felt that SC 92 would be too late for this (a
  327. topic that would recur later). It was generally agreed that
  328. a full draft would be needed in October, well in advance of
  329. Supercomputing '92. Ken asked if HPFF could arrange for
  330. European feedback. Clemens Thole suggested either a special
  331. event or a presentation at a planned Esprit meeting at
  332. Brussels; although he did not know of any conferences in the
  333. near future, he did promise to check on that as a third
  334. possibility. He noted that US participation at such an event
  335. would be important for image.
  336.  
  337. Data Distribution: REALIGN and REDISTRIBUTE
  338.  
  339.   Guy Steele next led a short discussion of the REALIGN and
  340. REDISTRIBUTE statements. The proposal had not changed since
  341. the last meeting, and there had been little objection to it
  342. in the electronic discussions. The major objection raised
  343. was that the declaration (without the !HPF$ directive)
  344.           REALIGNABLE A
  345. could also be parsed as
  346.           REAL IGNABLEA
  347. This is not a problem in the current language, because
  348. REALIGNABLE is a structured comment; it does, however,
  349. conflict with the goal of eventually adding the HPF
  350. extensions to Fortran simply by removing the comment
  351. headings. Three fixes were proposed:
  352.      1. Always take the longest possible keyword when
  353.        there is an ambiguity.
  354.      2. Change the spelling of the HPF attributes to
  355.        RE_ALIGN and RE_ALIGNABLE.
  356.      3. Add significant blanks to Fortran, at least in
  357.        this case.
  358. The group had a slight preference to the first alternative,
  359. and the proposal was amended appropriately. In a vote taken
  360. just after dinner, the forum formally accepted the REALIGN
  361. and REDISTRIBUTE features, with possible changes in syntax
  362. to remove the parsing ambiguity allowed if a new proposal
  363. emerged. The final vote was 15 in favor, 3 against, and 3
  364. abstentions.
  365.   Discussion of data distribution in subroutines and
  366. ALLOCATABLE arrays was deferred until later, to give Guy a
  367. chance to make up overhead slides.
  368.  
  369. Official HPF Subset
  370.  
  371.   (This section is mostly taken from Bob Knighten's notes,
  372. as mine were wiped out by an ill-timed battery failure.)
  373.   Mary Zosel next took a few straw polls regarding proposed
  374. features for the High Performance Fortran subset.
  375.   The first question was 'Should procedure-less modules be
  376. a part of the HPF official subset?" The full group vote was
  377. 15 yes, 9 no, and 13 abstain. Vendors, in a separate count,
  378. voted 4 yes, 4 no, and 7 abstain. The intent was to limit
  379. the form and content of INTERFACE blocks to provide explicit
  380. interfaces and satisfy requirements for explicitly
  381. interfaces (useful for handling some distribution scoping
  382. issues) but not user-defined operators, overloaded operators
  383. or generic interfaces. Some vendors claimed that the most
  384. difficult part of modules was the naming features, so
  385. restricting them to remove procedures was not an advantage.
  386.   The next question was "Should `entity-oriented' (in
  387. previous meeting notes, `object-oriented') declarators using
  388. attributes in type declaration statements be part of the HPF
  389. official subset?" The vote was 19 yes, 8 no, and 10 abstain.
  390. Mary noted that this form was already defined in the
  391. distribution directives.
  392.   Taking the negative, the next question was "Should HPF
  393. not include free-form source in the official subset?" The
  394. vote was 23 yes, 0 no, and 10 Abstain. The group agreed that
  395. long variable names and a few other features of the free-
  396. form source were needed for HPF, but these had been approved
  397. separately already.
  398.   Mary noted that the first reading of the subset
  399. definition will be at the next meeting, and the only
  400. features under consideration for inclusion were those she
  401. had just asked for votes on. She asked anybody with any
  402. other items from Fortran 90 that should be added to the
  403. subset to contact the F90 subgroup soon.
  404.   After the first set of polls was taken, a short
  405. discussion of the form of the subset started. Rex Page
  406. raised the issue of whether the HPF subset should include
  407. all new HPF features. The arguments in favor claimed that
  408. any subsetting diminished the impact of HPF. Arguments
  409. opposed to this stressed the importance of quick
  410. implementations which might be delayed by overly-ambitious
  411. HPF features. Mixed into this discussion was a suggestion of
  412. an HPF "superset" that might include proposed HPF features
  413. that were not adopted; another approach suggested was to
  414. have a "Journal of Fortran Development" that could document
  415. these suggestions. A very informal poll found the majority
  416. in favor of including all of the new features in the subset
  417. at this point in the meeting. (See the Intrinsics section
  418. for later views on this matter.) Consideration of an HPF
  419. superset was deferred until December, when it would be
  420. clearer what features were accepted and what (if anything)
  421. was not.
  422.  
  423. Data Distribution: Subroutine Interfaces
  424.  
  425.   After a one-hour break to produce slides and otherwise
  426. handle logistics, Guy Steele presented the subroutine
  427. interface proposal. This was the first reading for the
  428. proposal, and thus it will be formally voted on at the next
  429. meeting. The main goal of the document was to define the
  430. behavior of distributed arrays when used as actual arguments
  431. to subprograms, and to define the meaning of dummy arguments
  432. which have explicit data distributions.
  433.   The presentation started with a definition and two design
  434. decisions:
  435.      *  Two identically declared processor arrangements
  436.        are "similar". (Here, "identically declared"
  437.        refers only to the arrangements' shape, not the
  438.        names used. Some question remains about whether
  439.        arrangements with differing lower bounds are
  440.        similar, which will be cleared up in the final
  441.        draft.)
  442.      *  Two identically declared and implicitly
  443.        distributed TEMPLATEs will be similar, and
  444.        distributed in the same way onto similar
  445.        processor arrangements.
  446.      *  Two TEMPLATEs will also be similar if explicitly
  447.        distributed onto similar processor arrangements
  448.        in the same way.
  449. The purpose of these definitions was to support later
  450. proposal features. The objection was raised that an
  451. application may want two same-sized arrays to be dissimilar,
  452. to which the response was that the proposal only applied to
  453. TEMPLATE constructs. Chuck Koelbel  noted that this did not
  454. solve the problem, since implicitly declared TEMPLATEs from
  455. equal-sized (and not explicitly distributed) arrays would be
  456. similar. Rich Shapiro got the proposal out of that corner by
  457. suggesting that the distribution restrictions only applies
  458. to explicitly declared TEMPLATES. In any case, Guy pointed
  459. out that the intent was to make sure identically declared
  460. TEMPLATEs are aligned.
  461.   Guy advanced to his next slide.
  462.      *  TEMPLATES  declared in different scoping units
  463.        are distinct (but may be similar).
  464.      *  Note: TEMPLATES cannot appear in COMMON blocks,
  465.        so the only way to share a template among
  466.        several program units is to use Fortran 90
  467.        modules.
  468.      *  Returning from a subprogram causes locally
  469.        declared TEMPLATES to become undefined. (That
  470.        is, there is no SAVE for TEMPLATES.)
  471. To clarify the difference between TEMPLATES that are similar
  472. and those that are equivalent, Guy used the following
  473. analogy: "Any two pennies are similar in the sense that you
  474. can spend the in the same way. They are equivalent you put
  475. one on railroad track and the other one gets squished." The
  476. intent of these rules is to define a lifetime of TEMPLATES.
  477. Guy pointed out that this was not the only possibility, but
  478. was a convenient one. It may, however, have some problems
  479. for pointers.
  480.   Guy then moved on to his next slide, demonstrating
  481. several options for subroutine linkage.
  482.      Declarations:
  483.           SUBROUTINE FOO(A)
  484.           TEMPLATE T
  485.           REAL A(:)
  486.      Option 1:
  487.           !HPF$ ALIGN WITH T :: A
  488.        The actual argument (or a copy) is forcibly
  489.        realigned with T on entry to the routine.
  490.      Option 2:
  491.           !HPF$ ALIGN WITH * :: A
  492.        The dummy argument is aligned with a TEMPLATE
  493.        which is similar to (a copy of) the actual's.
  494.      Option 3:
  495.           !HPF$ ALIGN WITH *T :: A
  496.        The dummy is aligned with T; program is
  497.        nonconforming if this is not true of the
  498.        actual.
  499.      Option 4:
  500.        If a dummy has no explicit align attribute the
  501.        compiler chooses a default of the form
  502.           ALIGN with T
  503.        for some T, or
  504.           ALIGN with *
  505.        but not
  506.           ALIGN with *T
  507.   The full set of rules is laid out in the draft proposal,
  508. available by FTP. The limitation on option 4 derives from
  509. the fact that the *T form disallows certain actual arguments
  510. to be passed to the corresponding parameter. Much discussion
  511. followed. Rich Fuller objected to certain forms of T,
  512. particularly optional arguments. Guy amended the proposal to
  513. disallow both optional and keyword arguments. The key
  514. requirement intended was that the resulting mapping (i.e.
  515. both alignment and distribution) be expressible in HPF.
  516. Clemens-August Thole and Marc Snir argued this was not true
  517. for array arguments with inherited mappings (option 2);
  518. Chuck Koelbel and Rich Shapiro answered that specific case,
  519. and Guy Steele requested that any counterexamples be
  520. presented off-line.
  521.   The theme of the next slide was that "Nasty aliasing is
  522. forbidden".
  523.           MODULE FOO
  524.           REAL A(10,10)
  525.           REALIGNABLE, REDISTRIBUTABLE A
  526.           END
  527.           PROGRAM MAIN
  528.           <INTERFACE BLOCK FOR SUB>
  529.           CALL SUB(A(1:5,3:9))
  530.           END
  531.           SUBROUTINE SUB(B)
  532.           USE FOO
  533.           REAL B(:,:)
  534.           REDISTRIBUTE A ! ILLEGAL
  535.           REALIGN B   ! ILLEGAL
  536.           END
  537. In general, remapping is not allowed in HPF whenever
  538. assignment is not allowed (i.e. when it reveals
  539. aliases).James Cownie claimed that the example breaks this
  540. rule because B is redistributed on entry to SUB. Guy Steele
  541. responded that explicit and implicit remappings are
  542. different, and the above statement only applies to explicit
  543. operations. The intent is to steer as far as possible from
  544. aliasing problems. A final restriction along these lines was
  545. that COMMON arrays may not be REALIGNABLE, since that would
  546. allow remapping by aliasing again.
  547.   After a short break, Rex Page raised the question "What
  548. are we trying to do in HPF? Support linear memory
  549. programming styles or evolve Fortran forward?" His point was
  550. that many of the points raised in the distribution work, and
  551. which would be raised in the storage association proposal,
  552. were attempts to retain compatibility with a memory model
  553. that does not fit modern machines. Ken Kennedy responded
  554. that this point -- compatibility versus flexibility -- keeps
  555. recurring, and the forum has generally sided with as much
  556. compatibility as possible. Randy Scarborough noted that
  557. Fortran 90 MODULES cause the same or similar problems, so we
  558. have to address them anyway. Regardless, a straw poll was
  559. taken for this case over whether the subcommittee should
  560. keep trying to solve the non-modules problem. By a 16-3
  561. margin, the group voted to continue with the work.
  562.  
  563. Data Distribution: ALLOCATABLE Arrays
  564.  
  565.   After a short break, Guy continued with his presentation.
  566. The next part addressed distributing dynamically allocated
  567. arrays; as before, this was a first reading for this
  568. proposal.
  569.      *  A POINTER or ALLOCATABLE variable may not have
  570.        the ALIGN attribute.
  571.      *  Instead, alignment is specified at ALLOCATE time
  572.        (This also goes for the DISTRIBUTION).
  573.      *  Three syntax variants are proposed:
  574.        Syntax 1:
  575.           allocate( p(100) )
  576.           !HPF$ distribute a(block)          ! attached
  577.           declarations
  578.        Syntax 2:
  579.           allocate( p(100) )
  580.           !HPF$ redistribute a(block)   ! even if a is not
  581.           distributable
  582.        Syntax 3:
  583.           allocate( p(100) )
  584.           !HPF$ allocate( a(100), distribute(BLOCK) )
  585.   The following discussion started by noting that all three
  586. proposals have problems, in that they each break at least
  587. one rule followed elsewhere in the language. David Presberg
  588. noted that the proposal broadened the distributions possible
  589. in any case (because the programmer can use general
  590. expressions, not just specification expressions, as
  591. arguments to BLOCK and CYCLIC).
  592.   Piyush Mehrotra proposed another option: Make the
  593. distribution an attribute of the variable, declared when the
  594. variable is declared. This disallows allocating arrays with
  595. different distributions to the same variable, but that can
  596. be fixed by making those arrays REDISTRIBUTABLE or
  597. REALIGNABLE.
  598.   Rich Fuhler started a tangent discussion by asking "In
  599. general, are programmers forced to keep an ALLOCATE
  600. statement on one line?" in the current syntax proposals. Guy
  601. Steele replied that the directives applied to statements,
  602. not proceeding lines, and "Yes, you can write visually
  603. confusing things this way." Rich Fuhler then proposed
  604. allocating a POINTER WITH a TEMPLATE, or aligning with
  605. another POINTER. Guy pointed out (sorry, no pun intended)
  606. that POINTERS as such don't have TEMPLATES. Rich Shapiro
  607. noted that of all the United Technologies codes he checked,
  608. only 2 or 3 need ALIGNS, but lots need DISTRIBUTE
  609. directives. Guy asked if Rich was saying we don't need
  610. TEMPLATES? Rich emphatically answered "No"; TEMPLATES are
  611. really needed in certain fine grain routines taking 99% of
  612. the time in some programs. He argued instead for concise
  613. syntax for the most common case, but retaining capabilities
  614. for other uses.
  615.   Returning to the ALLOCATE syntax, Peter Highnam remarked
  616. that syntax 1 and 2 are hacks, but 3 is the future because
  617. it brings distribution into the right place. Joel Williamson
  618. worried that the maintenance problem is a headache if there
  619. are separate comments. James Cownie commented that Piyush
  620. Mehrotra wants one declaration for the whole routine, and
  621. thought Rich Shapiro was missing this. Joel Williamson
  622. remarked that he couldn't see Piyush's proposal, but thought
  623. it had the least astonishment value. Clemens-August Thole
  624. modified the unseen proposal to make HPF directives
  625. additions at the end of a statement, and several other
  626. variations were suggested. Richard Swift wondered what
  627. happened if ALLOCATE fails, and claimed this was a mark
  628. against option 2 and in favor of syntax 3 or Piyush's
  629. proposal. Guy Steele thought it was strange to distribute
  630. something that doesn't' exist yet, but others noted that the
  631. system needs the distribution to do ALLOCATE, else it
  632. doesn't know the memory requirements. David Presberg
  633. concluded that we need to bite the bullet and invent some
  634. new keywords; this met with the usual resistance to language
  635. additions.
  636.   Ken Kennedy called for a point of order "This is the
  637. first reading of this proposal, so it is not essential to
  638. get the spelling details right today." The key, he claimed,
  639. was whether the group liked the idea of attaching align to
  640. allocate, or favored another approach. Maureen Hoffert
  641. pointed out that the arguments so far pointed toward adding
  642. to the ALLOCATABLE attribute. This effectively supported
  643. Piyush Mehrotra's proposal. Clemens-August Thole proposed
  644. leaving the issue for next working group meeting, and was
  645. greeted by general applause. Ken, however, wanted to at
  646. least take a straw poll to guide the subgroup.
  647.   After some further discussion, it was agreed that the
  648. basic issue was whether to allow "static" distribution of
  649. ALLOCATABLE objects at all, or to always attach the mapping
  650. to the ALLOCATE statement. The first question was whether
  651. multiple mappings of ALLOCATABLE should be treated as a
  652. special case of REALIGN; it passed 17 to 6 with 10 abstains.
  653. The next question was whether ALLOCATABLE arrays could be
  654. distributed once statically (19 in favor) versus being
  655. defined at the point of allocation (7 in favor, with 7 more
  656. abstains).
  657.   After that series of votes, the group broke for a well-
  658. deserved "banquet" of soup and sandwiches.
  659.  
  660. FORALL and INDEPENDENT
  661.  
  662.   After dinner, Chuck Koelbel presented the FORALL subgroup
  663. proposal. This was a first reading; the majority of it will
  664. be voted on at the next meeting. The proposal had three
  665. parts: the FORALL statement, the INDEPENDENT assertion, and
  666. LOCAL subroutines; Chuck presented the first two, and Marc
  667. Snir was to present the last one.
  668.   The first slide introduced the single-statement FORALL.
  669. Chuck prefaced the discussion by clarifying that FORALL is
  670. not to be considered as a general-purpose "parallel loop,"
  671. but rather as a construct for making simultaneous
  672. assignments to array elements. In this respect, FORALL is
  673. very similar to Fortran 90 array assignments, rather than
  674. (for example) the PCF DOALL. This position was reached in
  675. email discussions after it became clear that a deterministic
  676. parallel construct was desired, and there was great
  677. disagreement on any functionality more elaborate than this.
  678. FORALL is a new statement to be added to the language; it
  679. cannot be treated as a directive, because it changes the
  680. semantics of the statements within it.
  681.      *  Syntax
  682.        FORALL (forall-triplet-spec-list [, scalar-
  683.           mask] ) forall-assignment
  684.        forall-triplet-spec as in CM Fortran (i.e. a
  685.           subscript triplet assigned to an index
  686.           variable)
  687.        forall-assignment must assign to an array
  688.           element or section
  689.      *  Constraints
  690.        Triplet bounds and strides cannot depend on
  691.           other indices
  692.        Mask can depend on the indices
  693.        Array elements cannot be assigned more than
  694.           once
  695.        Side effects in forall-assignment cannot
  696.           affect other instantiations (i.e.
  697.           computations with other index values)
  698.        Side effects in left-hand side and right-hand
  699.           side cannot interfere in the same
  700.           instantiation
  701. There was relatively little discussion, most of it asking
  702. about details of the reasoning about constraints. The side
  703. effect constraints are identical in spirit to the
  704. constraints on Fortran 90 array assignments; compilers need
  705. not check them (as they are undecidable properties, this
  706. seems for the best). The independence of triplet bounds was
  707. originally in the Fortran 8X proposal; it allows the bounds
  708. to be computed in any order, and also makes the task of
  709. scalarization somewhat easier. No statements are allowed in
  710. the FORALL body except assignments. Andy Meltzer proposed
  711. allowing CALL statements as well; this was debated later.
  712. The slide on the interpretation of the single-statement
  713. FORALL produced more comment
  714.      1. Evaluate all bounds and strides in the
  715.        triplets, in any order. (This produces the
  716.        valid set of index values.)
  717.      2. Evaluate the mask for each combination of
  718.        values in the valid set. (This produces the
  719.        active set of index values.) These evaluations
  720.        may be done in any order
  721.      3. Evaluate the right-hand side for each element
  722.        of the active set. These evaluations may be
  723.        done in any order.
  724.      4. Assign the computed values to their
  725.        corresponding right-hand sides. These
  726.        assignments can be performed in any order.
  727. Rich Fuhler questioned whether the definition of active set
  728. was consistent with Fortran 90 array expressions,
  729. particularly in the case of WHERE masks applied to intrinsic
  730. function evaluations. Fortran 90 experts in the audience
  731. thought that it was, but asked him to prepare a
  732. counterexample off-line if he had doubts. There was some
  733. discussion whether the evaluation of functions in right-hand
  734. sides following these rules would be generally identical to
  735. Fortran 90 array assignments. A consensus eventually
  736. developed that there were two appropriate analogies: user
  737. functions returning arrays, which are executed once, and
  738. intrinsic elemental functions, which are executed once for
  739. each element. The semantics given were consistent with
  740. elemental functions, satisfying the group. In general, it
  741. was agreed by the group that wherever possible the FORALL
  742. interpretation should match the array assignment
  743. interpretation.
  744.   The next two slides proposed the block FORALL (also known
  745. as the multi-statement FORALL). This was again proposed as a
  746. complex set of assignments rather than a general-purpose
  747. parallel loop.
  748.      Syntax
  749.        FORALL (forall-triplet-spec-list [, scalar-
  750.        mask] )
  751.          forall-body-list
  752.        END FORALL
  753.        forall-body must be an assignment, array
  754.           assignment, WHERE, or nested FORALL
  755.      Constraints
  756.        Individual assignment statements (always the
  757.           bottom-level statement) have the same
  758.           restrictions as in single-statement
  759.           FORALLs
  760.        Masks, bounds, and stride expressions in
  761.           nested statements cannot have inter-
  762.           instantiation side effects
  763.        Inner FORALLs cannot redefine outer FORALL
  764.           index names
  765. Again, the syntax produced little argument. In general,
  766. answers were the same as for the single-statement FORALL.
  767. The inter-instantiation side effects on masks, bounds, and
  768. strides were meant to refer to interference with the same
  769. (lexical) statement, not with other statements. The
  770. interpretation slide drew more discussion.
  771.      1. Compute outer FORALL bounds and strides. (This
  772.        produces the outer valid set.)
  773.      2. Compute the outer FORALL mask. (This produces
  774.        the outer active set.)
  775.      3. Execute each body statement in turn for all
  776.        elements of the outer active set.
  777.        *  Assignments and array assignments are
  778.           interpreted as for single-statement
  779.           FORALLs
  780.        *  WHERE statements compute masks for all outer
  781.           active set elements, then execute masked
  782.           array assignments for each assignment
  783.           nested within them.
  784.        *  FORALL generates an inner valid set (i.e.
  785.           bounds and strides) from the outer active
  786.           set, then generates an inner active set
  787.           (i.e. mask) from the inner valid set.
  788.           Given this set, apply these rules
  789.           recursively to evaluate the statement(s)
  790.           nested in the inner FORALL; that is,
  791.           evaluate one statement at a time using the
  792.           (inner) active set.
  793. The intent was to make the interpretation of a block FORALL
  794. equivalent to a series of single-statement FORALLs. The
  795. major exceptions to this intent were somewhat more general
  796. indexing spaces (because inner FORALL bounds can refer to
  797. outer indices, triangular and ragged arrays are possible).
  798. Evaluation of nested masks is also more fully defined, since
  799. Fortran does not have a short-circuit evaluation of logical
  800. expressions. All references to nested WHERE statements
  801. implicitly include the WHERE-ELSEWHERE construct. WHERE
  802. within a FORALL has the same restrictions as in ordinary
  803. code, in particular its mask must be an array mask, and the
  804. nested assignments must be array assignments rather than
  805. ordinary assignments. (Extending WHERE to allow scalar masks
  806. and assignments was discussed in the mailing list and
  807. rejected as changing the language syntax and semantics.)
  808. Several "are these equivalent" examples of block FORALL were
  809. given, which didn't necessarily clarify the issues due to
  810. possible error conditions in the mask expressions and
  811. similar nastiness. Some ambiguities in the draft,
  812. particularly in regards to whether function evaluations (and
  813. their side effects) were atomic or not, were raised and will
  814. be fixed in the next draft.
  815.   The final FORALL slide concerned function calls in FORALL
  816. statements.
  817.      Function calls are allowed in FORALL subject to
  818.        the following conditions:
  819.        *  Side effects cannot affect values computed
  820.           by the same statement in other
  821.           instantiations
  822.        *  Side effects cannot affect other
  823.           subexpressions in the same statement on
  824.           the same instantiation
  825.      John Merlin proposed user-defined ELEMENTAL
  826.        functions; these were not adopted
  827. John Merlin's ELEMENTAL functions were designed to constrain
  828. what was allowed in functions to prevent side effects and
  829. avoid random access to distributed memory structures. They
  830. were not adopted because there was still intense discussion
  831. over particular features allowed in them, not because there
  832. was a fundamental resistance to the idea. David Loveman
  833. pointed out that these constraints were consistent with both
  834. the earlier FORALL constraints and with the Fortran 90
  835. constraints on array assignments. (This had indeed been one
  836. of the primary considerations in developing them.) ELEMENTAL
  837. functions had been dropped from Fortran 90 for requiring too
  838. much support from an already large language. Andy Meltzer
  839. took this opportunity to again propose CALL statements
  840. within FORALL, arguing that certain subroutines acted in
  841. effect as very complex series of assignments. For example,
  842. values might be computed for three related quantities
  843. simultaneously. Rex Page argued that such subroutines were
  844. better handled by returning a structure than using multiple
  845. OUT arguments. Others felt that CALL was against the spirit
  846. of elemental assignment as FORALL was currently defined. Guy
  847. Steele, however, pointed out that MVBITS (a Fortran 90
  848. intrinsic) operated precisely as an assignment, and was
  849. extremely important for certain applications run by secret
  850. government agencies. He felt that allowing at least that one
  851. case in FORALL would be well worth the trouble.
  852.   Chuck's final slide concerned the INDEPENDENT directive.
  853. This was intended as an assertion to give the compiler more
  854. information, not as a new language statement.
  855.      Syntax
  856.           !HPF$ INDEPENDENT
  857.           !HPF$ INDEPENDENT(i,j,k)
  858.      Interpretation
  859.        A user assertion that no iteration (of a DO)
  860.           or combination of index values (of a
  861.           FORALL) assigns to a location read or
  862.           written by another iteration / combination
  863.           of values
  864.        Does not change the semantics of the
  865.           construct if the assertion is true
  866.        Not standard conforming if the assertion is
  867.           false. The compiler can take any action it
  868.           deems necessary, including executing the
  869.           programmer.
  870. This is a strong assertion, but equivalent to the PCF DOALL
  871. (without private variables or explicit synchronization).
  872. After some discussion, it was decided to drop INDEPENDENT
  873. applied to FORALL from immediate consideration, as there was
  874. concern that its meaning was different from the INDEPENDENT
  875. DO case. Clemens-August Thole spoke in favor of introducing
  876. an interpretation of INDEPENDENT applied to other statement
  877. types, and this suggestion was taken under consideration by
  878. the subgroup. Limitations of the current INDEPENDENT were
  879. pointed out, including that it disallowed reductions and
  880. scalars used as temporaries in the loop. PRIVATE variables
  881. were suggested, much to the dismay of those who remembered
  882. the PCF meetings. The question was raised whether DO
  883. INDEPENDENT was a general parallel loop; it was decided that
  884. in its present form it was not, because no synchronization
  885. or communication was possible.
  886.   At this point, Chuck Koelbel was ready to turn the floor
  887. over to Marc Snir's LOCAL subroutine proposal. In the
  888. interest of continuity, it was decided to finish discussion
  889. of FORALL and INDEPENDENT first. Marc agreed after being
  890. promised a chance to present his proposal before the end of
  891. the meeting; Ken Kennedy said he would be the next topic
  892. that night.
  893.   Marina Chen began the discussion by asking, "What about
  894. Alan Karp's comments?" This was in reference to a recent --
  895. and very vocal -- discussion on the mailing list, in which
  896. Karp claimed that FORALL was unnecessary because it could
  897. always be simulated by DO loops and temporary arrays. (His
  898. comments, and some of the responses to them, were
  899. distributed as handouts, and can be found in the FTP
  900. archives.) Rich Shapiro, although he was one of the
  901. staunchest defenders of FORALL, tried to present Karp's
  902. views fairly based on an extended discussion they had had.
  903. Karp was correct that DO INDEPENDENT and temporary arrays
  904. suffice to provide the functionality. It could similarly be
  905. argued that DO is unnecessary because GOTO can be used to
  906. construct loops, although the analogy is not really fair to
  907. the anti-FORALL camp. Karp's next criticism was that FORALL
  908. is dangerous because statements in it have different
  909. semantics. For example, the statement
  910.           A(I) = A(I) + A(I-1)
  911. has a markedly different affect inside DO and FORALL loops;
  912. one is a prefix sum operation, while the other is a shift
  913. and add. Rich admitted this was a problem, particularly in
  914. block FORALLs, but was willing to accept it for the other
  915. benefits of FORALL. Finally, Karp gave an example of a
  916. computation that was much clearer when written without
  917. FORALL than with it; Rich countered with a different example
  918. that was much longer without FORALL. As Rich put it,
  919. "Readability is in the eye of the beholder". Having both
  920. examples suggested to several people that both constructs
  921. (FORALL and DO INDEPENDENT) were needed.
  922.   Clemens-August Thole argued that FORALL is not intuitive,
  923. since the HPFF group itself took so long to agree on its
  924. semantics. Rich Shapiro noted that Fortran 90 has other
  925. nonintuitive features, such as SUM under a WHERE (see
  926. previous discussion of FORALL); he reiterated that
  927. programmers will make mistakes, but the benefits when FORALL
  928. is used correctly outweigh the bugs. Dave Loveman opined
  929. that the real danger in this discussion was that we knew too
  930. much about FORALL; some of the group expected a "parallel
  931. loop" and were trying to force FORALL into that mold. Ken
  932. Kennedy asked which is the greater oxymoron: "Trust the
  933. user" or "Trust the compiler"? Marc Snir emphasized the main
  934. point regarding FORALL, that HPF was introducing a new
  935. construct not related to the data mapping it was supposed to
  936. do, and opposed FORALL on those grounds. Peter Highnam
  937. responded that FORALL was correcting brain-dead compilers.
  938. Others mentioned that it corrected an omission of Fortran
  939. 90. A short digression reviewed of why FORALL had been
  940. dropped from F90 (to simplify the language), and noted the
  941. usefulness of the Fortran Journal of Development (an F90
  942. appendix for a time) in documenting these features. Marina
  943. Chen noted that if FORALL was not included, then
  944. implementations would start to diverge, and Richard Swift
  945. chimed in that users want this functionality.
  946.   Joel Williamson brought up the question of whether FORALL
  947. must be part of the HPF subset, or as he put it "Is this
  948. decision all or nothing?" Ken Kennedy recommended voting to
  949. accept it first, and later move to put it in the subset if
  950. the group felt that was appropriate. He referred to the
  951. earlier straw poll that restricted the subset to a Fortran
  952. 90 subset. There was general agreement to resolve whether to
  953. put FORALL in the subset next time.
  954.   A series of straw polls was then started.
  955.      Should HPF have at least the single-statement
  956.        FORALL? Yes 28, No 4, Abstain 4
  957.        Should HPF leave FORALL  out if it could be
  958.           in a superset? Yes 2
  959.        Should FORALL be in HPF but not in the
  960.           official subset? 15
  961.        Should FORALL be in the official subset? 16
  962.        Abstain from the subset/superset votes 5
  963.      Should HPF have a block FORALL with at least the
  964.        following features (with the currently proposed
  965.        semantics  in each case)?
  966.      Only assign & unmasked array assign?  18 yes 7 no
  967.        9 abstain
  968.        WHERE? Yes 16, No 6, Abstain 13
  969.        FORALL and WHERE? Yes 13,  No 8, Abstain 15
  970.        (Jokes regarding voting for "none of the
  971.           above" and/or Ross Perot had been building
  972.           for some time; this vote brought them out
  973.           in force, too many to record.)
  974.      Should CALL be allowed in FORALL (under the same
  975.        restrictions as functions regarding side
  976.        effects)? This vote was delayed pending the
  977.        next, more fundamental, issue.
  978.      Should function calls in FORALL be required to
  979.        have no side effects except to return a single
  980.        value? Yes 15, No 12, Abstain 8
  981.        That made subroutine calls much less
  982.           interesting by themselves.
  983.      Should HPF allow CALL in FORALL if side effects
  984.        are later allowed? Yes 7, No 14, Abstain 12
  985.      Should HPF include the INDEPENDENT assertion for
  986.        DO loops? Yes 27, No 2, Abstain 5
  987.        Ken Kennedy's immediate reaction was "We
  988.           should run this for President!"
  989. An attempt was made to poll on INDEPENDENT for FORALL, with
  990. the intended meaning that no location written for one
  991. combination of index values is read or written for another
  992. combination. Other meanings, including assertions that
  993. synchronization conditions between statements could be
  994. relaxed, were also proposed. The group finally postponed
  995. discussion of the issue, since it was well after 10:00pm.
  996. They agreed to resume at 9:00 the next morning.
  997.   In the morning, Min-You Wu presented another example of a
  998. possible use of INDEPENDENT in FORALL.
  999.           a = 0
  1000.           forall ( i=2:n, a(i-1)=0 )
  1001.             a(i) = 1
  1002.           end forall
  1003. His question was, "Does INDEPENDENT cover the mask
  1004. expression of a FORALL?" Using this and examples from a
  1005. proposal he had e-mailed earlier, he argued for INDEPENDENT
  1006. blocks to control synchronization operations in FORALL.
  1007. Piyush Mehrotra and Ken Kennedy pointed out that INDEPENDENT
  1008. for FORALL was not defined yet, and recommended considering
  1009. these issues in the FORALL subgroup. Clemens-August Thole
  1010. agreed, noting again that there is no reason to restrict
  1011. INDEPENDENT to FORALL and DO statements.
  1012.  
  1013. Local Subroutines
  1014.  
  1015.   Marc Snir then began his presentation of LOCAL
  1016. subroutines (as Ken Kennedy said, "only 12 hours after
  1017.  
  1018.  
  1019.  
  1020.  
  1021.