home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #18 / NN_1992_18.iso / spool / comp / lang / fortran / 3024 < prev    next >
Encoding:
Internet Message Format  |  1992-08-13  |  46.1 KB

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