ReplicatedDist¶
Usage
use ReplicatedDist;
or
import ReplicatedDist;
Warning
ReplicatedDist is unstable and may change in the future
- record replicatedDist : writeSerializable¶
This
replicatedDist
distribution causes a domain and its arrays to be replicated across the desired locales (all the locales by default). An array receives a distinct set of elements - a “replicand” - allocated on each locale.In other words, a replicated-distributed domain has an implicit additional dimension - over the locales, making it behave as if there is one copy of its indices per locale.
Consistency among the replicands is not preserved automatically. That is, changes to one replicand of an array are never propagated to the other replicands by the distribution implementation. If desired, consistency needs to be maintained by the user.
When accessing a replicated domain or array from a locale not in the set of target locales, an error is reported if bounds-checking is on; undefined behavior occurs if it is off.
Otherwise, only the replicand on the current locale is accessed when referring to the domain or array.
Example
const Dbase = {1..5}; // A default-distributed domain const Drepl = Dbase dmapped new replicatedDist(); var Abase: [Dbase] int; var Arepl: [Drepl] int; // Only the current locale's replicand is accessed Arepl[3] = 4; // Only the current locale's replicand is accessed forall (b,r) in zip(Abase,Arepl) do b = r; Abase = Arepl; // Access other locales' replicand with the replicand(loc) method Arepl.replicand(Locales[1]) = Arepl;
See the Replicated Distribution primer for more examples of the Replicated distribution.
Initializer Arguments
The
replicatedDist
initializer is defined as follows:proc replicatedDist.init( targetLocales: [] locale = Locales, purposeMessage: string = "used to create a replicatedDist")
The optional
purposeMessage
may be useful for debugging when the initializer encounters an error.Limitations
Only rectangular domains are presently supported.