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

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