Subject: hpff-doc: Comments on Mapping

From: Thomas Brandes <[email-masked]>
Date: Fri, 13 Sep 1996 11:02:12 +0200

---------------------------------------------------------------------------
[email-masked] is a mailing list for HPF 2.0 language specification
authors and editors.  Instructions for adding or deleting yourself from this
list appear at the bottom of this message.
---------------------------------------------------------------------------
In general: this chapter has been improved dramatically and is more clean
            than ever before (thanks for that).

Some smaller comments:

a) syntax

The syntax of DISTRIBUTE allows:

!HPF$ DISTRIBUTE ONTO P :: D1, D2, D3
!HPF$ DISTRIBUTE ONTO P :: D1

but not (is this intention?)

!HPF$ DISTRIBUTE D1 ONTO P

This could  be changed by replacing

<dist-directive-stuff>  :: <dist-format-clause> [ <dist-onto-clause> ]

<dist-attribute-stuff>  :: <dist-directive-stuff> |
                           <dist-onto-clause>

with:

<dist-directive-stuff>  :: <dist-format-clause> [ <dist-onto-clause> ]
                           <dist-onto-clause>

<dist-attribute-stuff>  :: <dist-directive-stuff> 

b) DYNAMIC

On page 30, line 18 there is still DYNAMIC

c) Inconsistency between 2.4 and 7.3

   Section 2.3 (page 24, line 21-30) says

         REAL, DIMENSION(1000) :: LINUS, LUCY
   !HPF$ DISTRIBUTE (BLOCK) :: LINUS, LUCY

   LUCY and LINUS do not have necessary the same mapping because they
   might, dependending on the implementation, be distributed onto 
   differently chosen processor arrangements; so corresponding elements
   of LUCY and LINUS might not reside on the same abstract processor.

   Section 7.3 (page 136) says:

   If an ONTO clause is not specified, a default arrangement is provided
   which is identical for arrays that have identical shapes, bounds, and
   identical explicit mapping directives.

   What is correct ?  The next point definitively argues for the second
   solution.

d) Distribution of global arrays

One point is not quite clear for me. The standard allows:

      SUBROUTINE SUB1 (...)
      COMMON /DATA/ A(N)
!HPF$ DISTRIBUTE A (BLOCK)
      ...
      END 

      SUBROUTINE SUB2 (...)
      COMMON /DATA/ A(N)
!HPF$ DISTRIBUTE A (BLOCK)
      ...
      END 

The distribution is incomplete and the compiler can choice the processor
array to which it will map the array A.

How I can be sure that for separate compilation the compiler will chose
the same distribution? The same problem might come up with distributions
of arrays in MODULEs.

The current definition implies that the processor arrays must be provided.

e) Underspecified mappings

There is now something like underspecified mappings, like the following ones:

!HPF$ DISTRIBUTE ONTO P :: A
!HPF$ DISTRIBUTE (BLOCK,BLOCK) :: A

It should be pointed out more clearly (probably an own subsection).

Furthermore, it must be made clear that underspecified mappings are not
useful (or better not allowed) for global arrays.

The semantic of underspecified mappings for dummy arrays is not quite clear.

!HPF$ DISTRIBUTE ONTO *P :: A
!HPF$ DISTRIBUTE ONTO P :: A
!HPF$ DISTRIBUTE * ONTO P :: A

Is this all the same ? 

f) New Proposal 

With a further e-mail I will put forward a proposal for Mapping  and 
Mapping in Subprogram Calls. Thought it is not full detailed, it might
contain some ideas which could be taken over.

---------------------------------------------------------------------------
To (un)subscribe to this list, send mail to [email-masked].
Leave the subject line blank, and in the body put the line
(un)subscribe <email-address>
---------------------------------------------------------------------------