At the global scope, parallel variables must be declared using regions, as shown above. However, parallel variables that are local to a procedure can be defined using only their rank. This gives the procedure the flexibility to accept parallel parameters of any region of the appropriate rank. Below, the procedures Double and Swap are defined for two-dimensional parallel arrays, as indicated by the two empty sets of regions bounds that are separated by a comma.
procedure Double (X : [,] float) : [,] float;
begin
return X * 2;
end;
procedure Swap (var X,Y : [,] float);
var Temp : [,] float;
begin
Temp := X;
X := Y;
Y := Temp;
end;
. . .
[east of R] Double(A);
[west of R] Double(A);
[R] Swap (A, B);
Note that there are two concepts at work here. First, a parameter that
is rank-defined can take any variable of the same rank as its actual
parameters. Second, return values and local parallel arrays assume the
size of the region scope that is specified at the call site.