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

  1. Path: sparky!uunet!sun-barr!cs.utexas.edu!bcm!rice!chk
  2. From: chk@rice.edu (Charles Koelbel)
  3. Newsgroups: comp.lang.fortran
  4. Subject: July HPFF minutes, part 2 of 2
  5. Keywords: HPFF, High Performance Fortran, minutes
  6. Message-ID: <Bsy4Cu.9LA@rice.edu>
  7. Date: 13 Aug 1992 23:38:54 GMT
  8. Sender: news@rice.edu (News)
  9. Reply-To: chk@rice.edu (Charles Koelbel)
  10. Organization: Rice University
  11. Lines: 811
  12. Originator: chk@erato.cs.rice.edu
  13.  
  14.  
  15. starting this discussion." There were 2 proposals for this
  16. functionality in the email list, one from Guy Steele and the
  17. other from Marc. Guy's proposal designed a feature internal
  18. to HPF, while Marc's defined an interface to external
  19. routines, or as Marc put it "really an escape to code
  20. outside HPF." Such a feature is needed because HPF needs to
  21. interact with non-HPF code (SPMD libraries, message-passing
  22. code, etc.). Guy remarked that the two proposals were not in
  23. conflict, although they had different origins and goals.
  24.   Marc's first slide presented conventions enforced by the
  25. HPF compiler on the called external routine.
  26.      INTERFACE blocks for declarations in HPF, marked
  27.        by the keyword LOCAL
  28.      Synchronous transfer of control from HPF to the
  29.        external routine
  30.        All processors call the routine, execute
  31.           cooperatively, and later transfer back
  32.        This proposal does not specify what happens
  33.           in the routine
  34.      Alignment and/or distribution are performed as
  35.        required by the INTERFACE block
  36.        Distributions that the routine expects to
  37.           see, HPF enforces (as for regular
  38.           routines)
  39.        Allow libraries to assume a given
  40.           distribution (otherwise lots of queries
  41.           would be necessary)
  42. Relatively little discussion on this interface was
  43. necessary, immediately mostly just clarifying points on the
  44. original slide. (I smooth out grammar and fix handwriting
  45. for these notes.)
  46.   The next slide placed some requirements on the LOCAL
  47. routine to ensure smooth functioning with HPF, and
  48. mechanisms to access HPF data structures from those
  49. routines.
  50.      *  Requirements from the external routine
  51.        Keep multiple copies of data in a consistent
  52.           state (on return from the routine)
  53.      * . Mechanism for external routine access to HPF
  54.        data structures
  55.        Array descriptors are passed as arguments
  56.           along with data
  57.           These are explicit arguments in the
  58.             external routine, not in the HPF call
  59.             itself
  60.        Intrinsics for use of array descriptors
  61.           Query functions
  62.           Functions to access data using global
  63.             indices
  64. The format of an array descriptor is not specified in the
  65. proposal, just functions for encapsulation of its
  66. operations. These can be supplied as a standard module in
  67. Fortran 90, or by other mechanisms in other languages.
  68.   Marc's next slide had only one point.
  69.      HPF calling conventions and external restrictions
  70.        make sense for both SIMD and MIMD machines;
  71.        does the external data access mechanism also?
  72.        SIMD vendors should check it (the proposal
  73.           was written with MIMD in mind)
  74.   This opened the floor for discussion. Andy Meltzer asked
  75. if SIMD or MIMD style synchronization was assumed in the
  76. LOCAL function. Marc replied that it is a black box
  77. interface so any paradigm can be used internally. He
  78. speculated that EXTERNAL is probably a better name for the
  79. feature. Richard Swift suggested "FOREIGN" as a keyword,
  80. since LOCAL and EXTERNAL already have meanings in Fortran
  81. 90.
  82.   Piyush Mehrotra asked if the external could access
  83. nonlocal data; Marc replied that FETCH and STORE were
  84. defined in the proposal, but the list there was not
  85. exhaustive. Piyush Mehrotra followed by asking if a local or
  86. global index space was used for HPF arguments within the
  87. function, and Marc replied that local was used, with
  88. intrinsics for global indexing operations. Clemens-August
  89. Thole questioned the need for FETCH and STORE at all, saying
  90. that communication could be handled in other (possibly more
  91. efficient) ways for a given machine. Marc said he wanted to
  92. avoid syntax arguments in this talk. Guy Steele asked about
  93. the type declaration for descriptors; Marc admitted that it
  94. was an error in his proposal to omit them.
  95.   Peter Highnam argued that this defined a foreign
  96. interface, so HPF can't say what is on the other side. He
  97. agreed that the functionality of descriptors was needed, but
  98. claimed that we shouldn't do syntax in this forum. Finally,
  99. requiring foreign code to maintain consistency is incorrect
  100. since it cannot be checked. Marc replied that a correct
  101. external routine must have consistency on return, otherwise
  102. the HPF code is in deep trouble. Richard Swift asked if an
  103. external routine can redistribute HPF arrays; Marc replied,
  104. "Not in this proposal." Chuck Koelbel and several others
  105. pointed out that staying consistent with normal routines in
  106. this respect was a very good idea. Mary Zosel commented that
  107. she still can't get to the right library directly with
  108. Marc's proposal, but at least it gives a wrapper layer.
  109.   David Presberg argued that HPF shouldn't try to define
  110. syntax in external routines, just the minimal information
  111. flow over interface. His example was using this feature to
  112. call a C library, where syntax would be problematic at best.
  113. Ken Kennedy took the other side, arguing that it was very
  114. useful to specify the FORTRAN intrinsics to avoid divergence
  115. in compiler extensions. Randy Scarborough used the example
  116. of matrix multiplication to show the usefulness of defining
  117. a module whose only responsibility was partitioning arrays.
  118. Dave Loveman agreed, but claimed that to do this HPF should
  119. give very exact Fortran 90 interface.
  120.   Clemens-August Thole defined 3 layers of intrinsics for
  121. external routines:
  122.      1. How is this array distributed?
  123.      2. FETCH and STORE operations
  124.      3. Pure message passing
  125. He claimed that 1 was clearly needed to program the external
  126. routine, and 3 is being standardized by another group (who
  127. first met at Williamsburg, VA, in April). The remaining
  128. category is 2, which he claimed had too many subtleties to
  129. standardize quickly in this group.
  130.   Barbara Chapman asked if the proposal was assuming array
  131. sections passed as arguments were stored contiguously. The
  132. answer was no; the storage scheme would be hidden in the
  133. descriptor access functions. Rich Shapiro and Marina Chen
  134. argued for keeping the proposal fully general by not
  135. specifying storage structures. Marc Snir said he had tried
  136. to stay mute on this issue, but the proposal may have to
  137. expand the list of intrinsics. Clemens-August Thole pointed
  138. out the importance of overlap areas in scientific
  139. computations. James Cownie claimed that both overlaps and
  140. Marc's proposal do not require contiguous storage, just that
  141. the array descriptors exist so that they can be used. Andy
  142. Meltzer mentioned that more people want to escape to C than
  143. to Fortran 90 due to the availability of C compilers. James
  144. assumed that everyone will have Fortran 90 to C links, and
  145. that these should generalize to the HPF external linkages.
  146. David Presberg noted that external compilers may not adapt
  147. to HPF.
  148.   Guy Steele reiterated that his and Marc's proposals were
  149. not mutually exclusive, and recommended combining them. The
  150. group concurred, and scheduled a first reading of the
  151. combined proposal for the next meeting.
  152.  
  153. Storage and Sequence Association
  154.  
  155.   After the LOCAL subroutine discussion, Ken Kennedy called
  156. for a break so everybody could read the storage and sequence
  157. association proposal (which had been put in final form the
  158. night before, and had copies distributed that morning).
  159. Before splitting up, Mary Zosel announced a couple of
  160. changes to the printed document:
  161.      On page 2, near the bottom, a line of italics
  162.        should be changed to plain text. (Somebody
  163.        quickly asked, "Is this a printing
  164.        discussion?")
  165.      On page 3 and following pages, EDD was undefined;
  166.        it should be "HPF alignment or distribution
  167.        directive." (It was originally "Explicit Data
  168.        Distribution.")
  169. The group agreed that if that was the level of corrections
  170. needed, the proposal must be in good shape. A 20 minute
  171. break began.
  172.   After the break, Ken Kennedy presented the storage
  173. association proposal. This was a first reading of that
  174. proposal, since it had been changed so heavily from the last
  175. meeting. His first pair of slides concerned definitions used
  176. in the proposal.
  177.      *  Aggregate storage sequence: storage in variables
  178.        that are associated by EQUIVALENCE & COMMON
  179.      *  Aggregate variable group: a collection of
  180.        variables whose storage sequences are
  181.        associated to an aggregate storage sequence
  182.      *  Aggregate variable group: a collection of
  183.        variables in an aggregate storage group
  184.      *  A variable is sequential if and only if any one
  185.        of the following hold
  186.        a. It is in a sequential COMMON
  187.        b. It is in an aggregate variable group
  188.        c. It is an assumed size array
  189.        d. It is a component of sequenced type
  190.        d. It is declared sequential
  191.      *  Components: variables and aggregate variable
  192.        groups in COMMON
  193.      *  A COMMON is nonsequential if and only if all of
  194.        the following hold
  195.        a. It is not explicitly declared sequential
  196.        b. Every instance of the COMMON has the same
  197.           number of same-size components
  198.        c. The type, shape, and mapping of any
  199.           explicitly-mapped variable or variable
  200.           group are the same in every program unit
  201.           in which the COMMON occurs
  202. Robbie Babb pointed out that there are lots of possible
  203. conflicts in the COMMON definition, and asked if the default
  204. was sequential or nonsequential. Ken responded that the
  205. issue was dealt with later, but for now assume that
  206. nonsequential is the default. The next slide gave some
  207. examples to illustrate the definitions.
  208.           common /foo/ a(100), b(100), c(100), d(100),
  209.           e(100)
  210.           real x(100), y(150)
  211.           EQUIVALENCE (a(1),y(1)
  212.           aggregate variable groups: (a,b,y), c, d, e, x
  213.           sizes: (a,b,y) = 200, others 100
  214. Piyush Mehrotra asked about inconsistent declarations of
  215. COMMON; Ken replied that they make the COMMON sequential.
  216. The subgroup had decided it was more important to support
  217. consistently-declared COMMONs than full reshaping. David
  218. Presberg noted that implementing full storage association is
  219. a heavy burden on vendors. Piyush claimed that the same
  220. problems happen here, because of EQUIVALENCE. Ken noted that
  221. the effect Piyush wanted could be achieved by just declaring
  222. a totally overlapping variable, which would force the
  223. aggregate groups in all routines to be equivalent. After a
  224. long discussion, Piyush agreed to provide an example of what
  225. he was proposing, since everyone appeared confused.
  226.   Ken's next slide gave the storage association rules for
  227. HPF. In this context, "mappable" means "can be used in an
  228. explicit HPF mapping directive."
  229.      1. A nonsequential array variable is mappable. A
  230.        variable in an aggregate variable group is
  231.        mappable if its storage sequence is totally
  232.        associated (i.e. completely covers) the
  233.        aggregate storage sequence. Only one variable
  234.        in an aggregate variable group may be
  235.        explicitly mapped.
  236.      2. The result variable of an array-valued function
  237.        that is not an intrinsic is a nonsequential
  238.        array.
  239. Ken noted that the only sequential variables that can be
  240. mapped are covering variables; this replaced the capability
  241. of distributing the whole COMMON, as had been done in the
  242. previous proposal. An example was meant to clarify the
  243. rules.
  244.           common /two/ e(10,10), g(10,100,1000), h(100),
  245.           p(100)
  246.           real cover(200)
  247.           EQUIVALENCE (cover(1), h(1))
  248.           align e...    OK, since it is in its own aggregate
  249.           variable group
  250.           align cover...   OK, since it covers the whole of
  251.           its group
  252.           can declare /two/ e(10,10), g(10,100,1000), x(200)
  253.           elsewhere
  254.   The next topic was the sequence association rules. These
  255. had been presented in the same form at the last meeting, and
  256. so this was treated as a second reading.
  257.      1. When an array element or the name of an assumed-
  258.        size array is used as an actual argument, the
  259.        associated dummy must be a scalar or a
  260.        sequential array.
  261.        An array-element designator of a nonsequential
  262.        array may not be associated with a dummy array
  263.        argument
  264.      2. A variable of default type CHARACTER (scalar or
  265.        array) is nonsequential if it conforms to the
  266.        requirements of definition DE-4. The size of a
  267.        nonsequential, explicit-length, CHARACTER dummy
  268.        argument must be the same size as the actual
  269.        argument.
  270. In the discussion, rule 2 was translated as "If you want to
  271. map the arrays, the sizes must match." A short discussion of
  272. assumed-length character strings followed, and the subgroup
  273. will look at that issue some more.
  274.   Returning to the storage association proposal, Piyush
  275. Mehrotra presented his examples for extending the current
  276. proposal.
  277.           common /one/ q(100), r(100), s(100)
  278.           real u(200)
  279.           EQUIVALENCE u(1), q(1)
  280.           u & s are mappable: that's good
  281.           common /two/ f(100) g(100) h(100)
  282.           real p(100)
  283.           EQUIVALENCE p(1) f(50)
  284.           p not mappable, (p,f,g) is an aggregate variable
  285.           group
  286.           common /three/ a(100), b(100), c(100)
  287.           common /three/ d(150), e(50), c(100)    !new
  288.           routine
  289.           c not mappable, but there is no aggregate variable
  290.           group in either routine
  291.           claim: c should be mappable
  292. David Presberg started his response with the claim, "I'm
  293. about to put my foot in my mouth." In COMMON /two/ f and g
  294. are clearly aligned, so h can reasonably be aligned as well.
  295. In COMMON /three/, there are different parameters early in
  296. the sequence, so there is no guarantee that array c can be
  297. treated consistently in a separate compilation system. Ken
  298. Kennedy defended Piyush, claiming that in any reasonable
  299. implementation, if /two/ works, /three/ works as well.
  300. Clemens-August Thole and Pres disagreed, noting that without
  301. SEQUENTIAL (in Fortran 90), there is no guarantee that no
  302. padding is inserted in COMMON. Joel Williamson suggested a
  303. goal for compiling HPF: each array in COMMON acts like its
  304. own COMMON (in the absence of EQUIVALENCE).
  305.   Randy Scarborough claimed that the restrictions placed on
  306. COMMON would mean that HPF needs explicit NOSEQUENTIAL
  307. declarations, otherwise separate compilation cannot check
  308. whether COMMON blocks are declared sequentially. Richard
  309. Swift asked what problem we were trying to solve, to which
  310. Piyush Mehrotra replied COMMON /three/ should be mappable.
  311. After some discussion, Guy Steele asked how far Piyush
  312. wanted to go in applying sequential storage models. Piyush
  313. claimed that the length of arrays should be the only
  314. consideration in defining aggregates. Peter Highnam remarked
  315. that this was getting baroque, at which point Ken asked
  316. Piyush if he were trying to kill the storage association
  317. proposal. Peter continued by asking how to explain this
  318. machinery to users, particularly since modules are coming
  319. and would avoid much of the need for it.
  320.   Ken tried to summarize the discussion so far:
  321.      Piyush Mehrotra doesn't like requiring identical
  322.        declarations of COMMON blocks in order to map
  323.        the arrays.
  324.      Peter Highnam uses this as argument against
  325.        relaxing original rule, based on the difficulty
  326.        of explaining the resulting rules to users.
  327. Marc Snir characterized it as "Piyush wants to rely on
  328. storage association to decide when to break storage
  329. association." Ken commented that his statement was true, but
  330. not a balanced view of the argument. Barbara Chapman stated
  331. that Piyush's ideas are easier to implement than understand,
  332. noting that they are very similar to what is already in
  333. Vienna Fortran. The compiler should be able to figure out
  334. aggregates without explicit EQUIVALENCE statements
  335. everywhere. Randy Scarborough asked what the alternative
  336. was; the only possibility seemed to be that a compiler sees
  337. nonsequential COMMONs, which must be consistent or the
  338. program will break on some machines. Robbie Babb made a
  339. radical proposal: COMMON blocks can be declared as mappable
  340. or not mappable; he was informed that that was the original
  341. proposal, and this was an attempt to get around those
  342. limitations.
  343.   Chuck Koelbel argued against Piyush's brand of storage
  344. association by converting the example to an extreme case:
  345.           common /three/ a(100), b(100), c(100)
  346.           common /three/ d(199), e, c(100)   !new routine
  347.           Can you distribute c now?
  348. He argued that this would be likely to break many machines.
  349. Ken noted that this proposal was just trying to help users
  350. porting large codes with lots of distributions. Don Heller
  351. believed that the coding rule that would come from this
  352. would be to allow only one array per COMMON, to avoid
  353. accidental aliasing. Andy Meltzer noted that the future will
  354. discourage all of this, but Ken replied that this is all for
  355. interim porting problems in the first place. Randy
  356. Scarborough proposed requiring COMMON blocks to be declared
  357. identically to solve many of these problems.
  358.   Richard Swift recalled the history of the proposal: it
  359. started as a very simple proposal, then Ken Kennedy extended
  360. it to allow some useful cases of association, and now we're
  361. talking about extending it again. Ken said he would take it
  362. as a friendly amendment that COMMON blocks must be identical
  363. everywhere they are declared, including EQUIVALENCE
  364. declarations. The discussion shifted somewhat to finding the
  365. right terminology for this. Clemens-August Thole asked why
  366. distinguish the proposal distinguished components from
  367. aggregate variable groups; this was an artifact of how the
  368. sections were written. Randy Scarborough pointed out a
  369. potential problem if no EQUIVALENCE spans a variable in
  370. COMMON, leading to lots of potential technical rewriting.
  371. Marc Snir suggested wording the conditions as an identical
  372. sequence of aggregates (i.e.. as Ken already intended, but
  373. with clarification about what "identical" means). Peter
  374. Highnam claimed that identical is too restrictive, using as
  375. his example
  376.           COMMON /foo/ complx(1000)
  377.           COMPLEX complx
  378.           REAL realx(2000)
  379.           EQUIVALENCE (realx(1),complx(1))
  380. Some questioned why this was considered doing users a favor.
  381. Piyush favored the "identical" restriction, saying that it
  382. at least gave some freedom to programmers.
  383.   After a short discussion of some minor points, the
  384. proposal was brought up for a straw poll as a first reading.
  385. The vote to accept storage association (subject to details
  386. of defining identical COMMON matching) was 26 yes, 1 no, and
  387. 5 abstain.
  388.   The discussion then moved quickly to sequence
  389. association. The first substantial issue opened was whether
  390. assumed-length CHARACTER arguments could be distributed. Ken
  391. Kennedy moved to send this question to the distribution
  392. group, who should consider it in the context of ALIGN WITH
  393. *. Clemens-August Thole asked whether there was a problem
  394. with array sections; since these cannot be sequence
  395. associated, there was not. Rich Shapiro asked if assumed-
  396. size arrays could be distributed, and the issue was again
  397. kicked back to Guy Steele's distribution group.
  398.   Pending clarification of those issues, an official vote
  399. to accept the sequence association proposal was taken. The
  400. proposal passed 20 to 0, with 2 abstentions.
  401.  
  402. Low Performance Fortran
  403.  
  404.   Before moving to lunch Andy Meltzer made his now-
  405. traditional presentation of Low Performance Fortran (LPF).
  406. As he described it, this is another language model "real
  407. similar to HPF." For the attendees, he had the disclaimer
  408. "If you recognize something you think you said in this
  409. presentation, it probably means that you did say it, and I
  410. don't mean any offense by quoting you." After seeing the
  411. first few points, Ken Kennedy remarked, "All I ask is that
  412. you don't circulate this slide"; unfortunately, it was
  413. already too late.
  414.      Low Performance Fortran II
  415.        LPF varieties of FORALL (to be thought of as
  416.           a looping construct)
  417.           FORSOME (triplet-spec [,mask]) stmt
  418.             The set of iterations executed are
  419.                implementation defined
  420.           FORONE (triplet-spec [,mask]) stmt
  421.             Statement is executed once
  422.           FREEFORANY
  423.             Some statement in the program is
  424.                executed
  425.           ONCE_AND_FORALL
  426.             This is the last time the statement is
  427.                executed
  428.           BASKIN_ROBBINS_FORALL
  429.             31 varieties, but you can't see them all
  430.                at once and their descriptions are so
  431.                similar that you can't tell what you
  432.                voted for in the straw poll
  433.           THERE_EXISTS
  434.             Asserts that there is one, but since
  435.                it's an existential statement, it
  436.                doesn't matter
  437.        Pointers
  438.           It is impolite to point
  439.        !LPF$DEPENDS_ON [line #]
  440.           Asserts that the following statement
  441.             depends on line #
  442.        LPF Superset
  443.           Contains addition and multiplication
  444.             (regular LPF makes do with subtraction
  445.             and division)
  446.        TEMPLATES
  447.           Some templates are "much-alike". If you
  448.             want the same thing to happen to much-
  449.             alike TEMPLATES, run them over with the
  450.             same train
  451.        COMMON
  452.           Another name for COMMON is GAUCHE. There
  453.             is only GAUCHE data and dummy arguments
  454.             (called parameters)
  455.        Actual & dummy arguments
  456.           Actuals are copied to a randomly chosen
  457.             PE's memory
  458.           Parameters are hunted for by other PE's &
  459.             copied back
  460.        !LPF$ SOMEONE_ELSES
  461.           Will choose some other application on
  462.             machine and execute it
  463.      LPP Low Performance Pascal (sister group)
  464.        Have decided to go with Ada
  465.        While marginally harder to implement, data
  466.           hiding deemed worth it
  467.        Will retain name to mislead users
  468.      Coming Soon - To a Forum Near You!
  469.        OPF - Obfuscated Performance Fortran
  470.        
  471. Intrinsics
  472.  
  473.   After lunch, Rex Page presented the proposal from the
  474. intrinsics subgroup. The reference document was from Rob
  475. Schreiber (who could not attend the meeting), dated July 22;
  476. there was some expansion from the draft at the last meeting,
  477. but the spirit was the same.
  478.   Rex's first slide treated the difference between
  479. intrinsics and library functions.
  480.      *  Only some procedures should be intrinsics.
  481.      *  A Fortran 90 intrinsic is a procedure that is
  482.        provided as an inherent part of the language
  483.        processor (compiler).
  484.      *  There are two types of intrinsics: those allowed
  485.        in specification expressions and those that are
  486.        not.
  487.      *  We recommend: NUMBER_OF_PROCESSORS and
  488.        PROCESSORS_SHAPE are intrinsics usable in
  489.        specification expressions, and the rest of the
  490.        functions defined here are not intrinsics.
  491. The first point brought up discussion was the significance
  492. of specification expressions: they can be used in
  493. declarations, for example as array bounds. Andy Meltzer
  494. pointed out that for reconfigurable machines or operating
  495. systems that allowed partitioning of processors (that is,
  496. virtually all MIMD machines), the recommendation made
  497. NUMBER_OF_PROCESSORS and PROCESSORS_SHAPE load-time
  498. constants, which has a major implementation impact on
  499. handling symbols. Piyush Mehrotra and Rex clarified that
  500. these functions are inquiries about the physical machine,
  501. not the HPF PROCESSOR grids. Piyush suggested adding options
  502. for distribution inquiry; that was taken under advisement.
  503.   Mary Zosel started a long discussion by asking, "Are we
  504. assuming a static number of processors in HPF?" Chuck
  505. Koelbel came down firmly on both sides of the issue,
  506. pointing out that if the number of processors was not
  507. static, then the distribution patterns as they stand don't
  508. make sense (their definitions require the number of
  509. processors). However, there had been some interest from
  510. other groups in porting HPF to workstation networks or other
  511. situations that allowed (or required) dynamic process
  512. creation. By the end of the discussion, both were sorry they
  513. had brought the issue up. Alok Choudhary claimed that
  514. physical processors are not covered in the rest of the HPF
  515. model. Guy Steele noted that this is at bound of machine-
  516. independent and dependent features, and HPF may be able to
  517. do something with this. Rich Fuhler suggested adding the
  518. constraint that the function must evaluate to a constant if
  519. used in a specification expression context. Marc Snir noted
  520. that there is no way to associate abstract and physical
  521. processors within HPF; Guy replied that HPF does have the
  522. PROCESSOR size constraint (implementations must allow a
  523. processor grid of size NUMBER_OF_PROCESSORS()). Ken Kennedy
  524. recalled awful arguments about this issue in PCF and urged
  525. steering clear of it. Guy Steele observed that when the
  526. NUMBER_OF_PROCESSORS constant is chosen is an implementation
  527. issue, not a language issue. Richard Swift said he liked the
  528. intent, but questioned whether this was the interface we
  529. want.
  530.   Finally, a straw poll was taken: those in favor of
  531. NUMBER_OF_PROCESSORS() as proposed 23, opposed 1, abstain 7.
  532.   The next slide covered the first set of recommended
  533. standard library functions.
  534.      *  Extended MAXLOC/MINLOC
  535.        Add an optional argument to treat the main
  536.           argument as an array of vectors
  537.        Extended function delivers the
  538.           maximum/minimum value for each vector
  539.   The discussion was much briefer than previously. The
  540. first question was whether overloading the function name
  541. forces the extended functions to be intrinsics; quick
  542. reference to the Fortran 90 standard indicated not. Rich
  543. Shapiro noted the extensions give the same semantics as MAX
  544. and MIN, thus fixing a Fortran 90 shortcoming. Returning
  545. briefly to the "intrinsics" question, Marc Snir asked what
  546. the difference was between a standard library and
  547. intrinsics. Richard Swift noted an interface difference,
  548. namely that the programmer must include modules declarations
  549. for libraries (particularly when the function names are
  550. overloaded, as MAXLOC is). Ken Kennedy claimed the
  551. distinction is small, but Marc thought it was important. He
  552. argued that added intrinsics are extending Fortran 90
  553. generally, not just in the areas of data distributions and
  554. parallel computation as HPFF originally intended. Don Heller
  555. suggested that maybe a better design would be to generate
  556. APL functionals in a library rather than new intrinsics. Guy
  557. Steele had two responses: "That's what I thought I was
  558. doing" and "I'm not sure it makes sense to recreate all of
  559. APL in HPF."
  560.   Rex then took a vote on whether some form of this (i.e.
  561. either library functions or intrinsics) should be in HPF. 13
  562. voted yes, 1 voted no, and 10 abstained.
  563.   The next slide covered a new set of functions
  564.      *  Elemental bit inquiries
  565.        POPCNT - Number of 1's in the binary
  566.           representation of an integer
  567.        PARITY - Parity of the binary representation
  568.           of an integer
  569.        LEADZ - Leading 0 bits in the binary
  570.           representation of an integer
  571.        ILEN - Number of bits needed to represent an
  572.           integer
  573. The discussion was very brief. Most of the questions were
  574. answered when Rex pointed out that these are elemental
  575. functions and work like SIN. Several implementors affirmed
  576. that all were needed on many machines (although ILEN can be
  577. constructed from LEADZ). A straw poll on whether these
  578. functions should be included drew 5 yes votes, 0 no votes,
  579. and 16 abstains.
  580.   Yet another slide introduced more functions.
  581.      *  New reductions
  582.        AND - corresponding to the IAND operation
  583.           (bit-wise AND)
  584.        OR - corresponding to the IOR operation (bit-
  585.           wise inclusive OR)
  586.        EOR - corresponding to the NEQV operation
  587.           (bit-wise exclusive OR)
  588.        PARITY - corresponding to the parity
  589.           operation
  590. Again, this just fixed some features (associative and
  591. commutative operations) that had been left out of Fortran
  592. 90. There was no discussion. The straw poll to include these
  593. functions found 13 yes votes, 0 no votes, and 13 abstains.
  594.   The next slide defined a very broad class of functions.
  595.      *  Parallel prefix and suffix operations
  596.        XXX_PREFIX - for any reduction function XXX
  597.           (including the new ones defined above)
  598.        XXX_SUFFIX - for any reduction function XXX
  599.        Each delivers a series of partial reductions
  600.           (sums, products, etc.) of the input array
  601.        The result is defined for all output array
  602.           elements, even when the (optional) mask is
  603.           false
  604.        Reductions are restarted for each segment;
  605.           segments are portions of ARRAY
  606.           corresponding to runs of like values in
  607.           SEGMENT (a LOGICAL array optional
  608.           argument)
  609.        Partial reductions start at the identity
  610.           element for the appropriate operation
  611. The discussion was short, but spirited. Some off by one
  612. details of the SEGMENT feature were referred back to the
  613. proposal. Dave Loveman noted that this creates lots of
  614. functions (particularly when overloading by number of array
  615. dimensions is taken into account), and asked if HPF needed
  616. all of them. Chuck Koelbel asked which ones he wanted to
  617. leave out, and Dave noted that the full set would take
  618. valuable implementation time. Ken Kennedy referred to a
  619. proposal by Demmel (on the mailing list) regarding prefix
  620. operations on 2-by-2 matrix multiplies; Guy Steele wanted
  621. more input, particularly on the numerical aspects, before
  622. recommending those features. Marc Snir noted that all the
  623. functions could be moved to a library by overloading, but
  624. Rex Page noted they were hard to write just due to volume.
  625. Guy claimed that most of the implementation difficulty is in
  626. testing rather than writing. Richard Swift was concerned
  627. about the library size; Andy Meltzer concurred.
  628.   A straw poll was taken on whether to include the prefix
  629. operations in HPF, giving 11 yes votes, 0 no votes, and 19
  630. abstains.
  631.   The next slide extended reductions in another way.
  632.      *  Combining send procedures
  633.        XXX_SEND( SRC, DEST, IDX1, ... )
  634.        XXX is any Fortran 90 or HPF reduction
  635.        CALL SUM_SEND(a,x,v) operates like x(v) =
  636.           x(v) + a but all elements assigned to a
  637.           corresponding to duplicate element in v
  638.           contribute to the final value
  639.        The number of IDX arguments is the rank of
  640.           the destination array
  641.        Source and all IDX arguments are conformable
  642. The intent is to allow parallel accumulations of many
  643. irregularly related array elements in a single call; for
  644. example, one call can compute a histogram. CALL
  645. SUM_SEND(a,x,idx) is equivalent to the following loop:
  646.           DO i = 1, n
  647.             x(idx(i)) = x(idx(i)) + a(i)
  648.           END DO
  649. The discussion was lively. Clemens-August Thole suggested
  650. avoiding the name SEND because of possible conflicts with
  651. message-passing routines; the subgroup agreed to look for a
  652. better term. Piyush Mehrotra asked why these were
  653. subroutines, and not functions; given current syntax and
  654. semantics, they can't be called from FORALL constructs. Guy
  655. Steele saw no strong reason against the function form. Rich
  656. Shapiro noted that the same operations can be done with
  657. FORALLs, but Guy responded that those constructs give the
  658. compiler problems in idiom recognition. Mary Zosel smelled
  659. something extremely important for unstructured mesh problems
  660. in these subroutines, and was greeted with a general
  661. "Right!" from the crowd. Richard Swift noted that HPF now
  662. required lots and lots of library functions (by his count,
  663. over 400 after resolving overloading); David Loveman agreed.
  664. Ken Kennedy asked if HPF needed this support for irregular
  665. computations, given that it doesn't have irregular
  666. distributions. Rich Shapiro replied that these functions are
  667. very useful, even without distributions of any kind. Ken was
  668. still concerned over the interaction of this feature with
  669. others. Richard Swift said his concern was the interface,
  670. not the functionality.
  671.   Guy Steele made two "meta-remarks" to help clarify the
  672. situation. No single one of these functions is vital for HPF
  673. (although each has some real application associated with
  674. it). But he had promised HPF (particularly the intrinsics
  675. group) to give them all the things Thinking Machines had
  676. found useful, so the names, order of arguments, and other
  677. details could be standardized. Andy Meltzer commented that
  678. these libraries take a lot of time to develop, and HPFF
  679. should decide in November whether to include them in the HPF
  680. subset, superset (if any), or whatever.
  681.   With that, a straw poll was taken on whether to include
  682. these functions in HPF. There were 8 yes votes, 0 no votes,
  683. and 21 abstains. Another vote was taken on whether anybody
  684. objected to making these operations functions, finding 0
  685. opposed.
  686.   There was only one slide remaining, and little time left
  687. before the meeting was scheduled to end.
  688.      Sorting functions
  689.        GRADE_UP - Sorts in ascending order
  690.        GRADE_DOWN - Sorts in descending order
  691.        Each delivers a list of subscripts for
  692.           arranging the array in sorted order (i.e.
  693.           a permutation array)
  694.        If optional argument DIM is absent - The
  695.           result has shape
  696.           [size(shape(ARRAY),product(shape(array))]
  697.        If DIM is present - The result has the same
  698.           shape as array, and is sorted along the
  699.           appropriate dimension
  700. Maureen Hoffert asked if sorting was limited to integer and
  701. real arrays. Guy Steele responded that any standard type
  702. with a "less than" operation defined was allowed. Ken
  703. Kennedy suggested sorting could take a comparison function
  704. (like UNIX qsort). Robbie Babb asked what sorting had to do
  705. with High Performance Fortran. Rich Shapiro noted that it is
  706. hard to do parallel sorts (and many other parallel
  707. functions); a good philosophy was to let vendor do it
  708. instead of the applications programmer. Chuck Koelbel noted
  709. that sorting is needed for particle push phases in PIC
  710. algorithms, certainly a high-performance application. The
  711. straw poll on including the sorting functions found 12 yes
  712. votes, 0 no votes, and 16 abstains.
  713.   Richard Swift asked for a poll on the intrinsics vs.
  714. library question. Rich Shapiro noted that most of the
  715. functions proposed were now implemented as calls in the CM
  716. Fortran compiler, but it "doesn't follow the rules" on type
  717. checking in some cases. If there is strong type checking,
  718. the library needs lots more code. Robbie Babb asked if
  719. generic functions help the library situation; Rex Page
  720. wondered if it was legal to overload intrinsics (the
  721. language lawyers believed so) and what the implementation
  722. effects were (no answer). Ken Kennedy wanted a description
  723. of the pros and cons for intrinsics versus libraries before
  724. putting it to a vote, and the group agreed this was wise.
  725.  
  726. Official HPF Subset
  727.  
  728.   After a short break, the group considered the status of
  729. the official HPF subset. The discussion started (rather than
  730. ended) with a straw poll: Given all the new features should
  731. HPFF allow HPF features to be omitted from the official
  732. subset? 22 voted yes, 1 no, and 5 abstained.
  733.   Mary Zosel suggested that each subgroup should propose
  734. what goes into the official subset from the features they
  735. considered. Ken Kennedy recommended that Mary and her group
  736. prepare a proposal to the effect that HPF features can be
  737. out of subset; assuming that passed, future meetings would
  738. allow motions to remove specific features from the subset.
  739. The reasoning behind this was that the group needed to know
  740. what was in the language before deciding what was in the
  741. subset. As Marc Snir pointed out, the argument for removing
  742. features from the language (or subset) is size, so we need
  743. to know how big it is.
  744.  
  745. Editorial Matters
  746.  
  747.   With all the proposals, counter-proposals, and other
  748. discussions on the email lists, Mary Zosel asked whether
  749. somebody could post summaries to the net? Reading all the
  750. HPFF mail is too much. Chuck Koelbel muttered "I know" under
  751. his breath. After a short discussion, in which it was made
  752. clear that such postings would have to be automatic, David
  753. Presberg suggested posting just the mail headings regularly
  754. and directed Chuck to some software that might do this. He
  755. is looking into that possibility.
  756.   Dave Loveman summarized the status of the (proposed) High
  757. Performance Fortran language document. Chuck Koelbel had
  758. proposed two outlines, both of which had the problem that
  759. they required too much writing to transform the proposals
  760. being made into the right form. He had produced a new
  761. outline that would hopefully balance readability and
  762. completeness. In essence, each group would work on its own
  763. chapter, integrated into a single outline. The subgroup
  764. chairs had seen the outline, and most had agreed with the
  765. structure. by next meeting he hoped to get a first draft
  766. from each group and have a full (albeit rough) document
  767. available. Ken Kennedy noted that little effort now will be
  768. worth it later. Mary Zosel asked that he send the whole
  769. outline to the core group, which Dave agreed to do once some
  770. packaging issues had been resolved. Dave and Chuck Koelbel
  771. would collaborate on providing FTP access.
  772.  
  773. Meeting Schedules
  774.  
  775.   The final topic for discussion was the schedule for the
  776. next HPFF meeting, to be held September 9-11 in Dallas. The
  777. topics to be discussed included
  778.      Second readings
  779.        Storage association
  780.        Subroutine linkage for distributed arrays
  781.        Distribution for pointers and allocatable
  782.           arrays
  783.        Intrinsics considered at this meeting
  784.        FORALL
  785.        INDEPENDENT (for DO only)
  786.      First readings
  787.        Local subroutines
  788.        New intrinsic functions
  789.        Fortran 90 subset
  790.        INDEPENDENT (for FORALL and other constructs)
  791.        Parallel I/O
  792. As Ken Kennedy put it, we have lots of work to do. Consensus
  793. was that the usual one-and-a-half day meeting was not
  794. enough. Piyush Mehrotra was the first to suggest extending
  795. the meeting into the afternoon of the last day, and the rest
  796. agreed. After a short discussion of flight availability, the
  797. group decided to run to about 4:00pm on the last day. At
  798. Mary Zosel's suggestion, the subgroup leaders will get
  799. together for dinner the night before to set the meeting
  800. agenda and other details. Marc Snir suggested distributing
  801. the proposal documents for first and second readings at
  802. least one week in advance, in order to speed up the
  803. discussions. Mary Zosel generalized this to distributing the
  804. documents to the hpff-core mailing list, not just the
  805. subgroup lists as had been done in the past.
  806.   Ken Kennedy ended the meeting with a short report on the
  807. HPF Birds-of-a-Feather session held at ICS. About 12
  808. visitors, including Bob Voigt from NSF, had attended that
  809. meeting and provided comments on the language. Ken
  810. particularly mentioned some helpful comments from John Ried.
  811. Most of the questions there had been raised in the
  812. discussions, either in the plenary sessions or in the
  813. subgroups. The next major opportunity for this kind of
  814. feedback appeared to be the workshop at Supercomputing '92,
  815. where the near-final draft of the language will be
  816. distributed. Ken hoped that this would allow a great deal of
  817. feedback before the December HPFF meeting, where the group
  818. would have a chance to reconsider language features that had
  819. been voted as "frozen" so far. Piyush Mehrotra suggested
  820. that HPFF should move the December meeting back, in order to
  821. allow more time for feedback. After some discussion, the
  822. group decided that December 9-11 had no conflicts from
  823. potential attendees; pending checking dates with the Dallas
  824. hotel, the meeting will be rescheduled then.
  825.