... array1
The distributed arrays are orthogonal to the sequential arrays of the base language--we deliberately keep them completely separate.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... array2
For a sequential dimension the result of rng(r) is a member of the subclass CollapsedRange.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... as3
The expression x[0] is ``pure syntax'' in HPJava. There is no Java type associated with a location and no way to store a location value in a variable. The only named locations in HPJava are the bound locations scoped by overall (and at--see section 7). Besides group restrictions, expressions like x[0] can legally appear as array section subscripts or in the header of an at construct.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... array4
We can relax this restriction slightly by adding rules for identifying locations in certain closely related ranges. For example it is very natural to regard the locations in a subrange to be a subset of the locations in the parent range.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... is5
As a matter of definition, for a shifted location $\mbox{\tt p} / (\mbox{\tt i} \pm \mbox{\em expression}) \equiv
\mbox{\tt p} / \mbox{\tt i}$. The rationale is that a shifted location is supposed to find an array element in the same process as the original location (albeit that the element could be in a ghost region).
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... loops6
Both examples would probably lead to inefficient translated code anyway, because various other computations associated with element reference cannot be lifted out of loops.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... header7
We emphasize that the problem here is not with appearance of conditional code in general inside an overall construct--it is only with use of conditional code to mask element references otherwise forbidden by range-checking considerations.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...8
Dependence of the array expression on field variables (effectively global variables) may frustrate this analysis, if method calls also appear inside the loops.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...apg9
The variable apg is not a conventional Java global variable. It is more closely akin to the this expression of Java. It will be passed to HPJava-aware methods through a hidden argument.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... property10
Examples of methods that do not respect coherence include functions like MPI_Comm_rank, which return results intrinsically dependent on process id.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.