複数のドメインを保存するには、ドメインの配列(または他のドメインのコレクション)を作成する必要があります。具体的には、上記のコードの主な問題点は、一見ドメインにインデックスを作成しようとしていることです(slice(0)
) - ドメインはインデックスから値への配列/マップではなく、インデックスセットであることに留意してください。
次のサンプルプログラムでは、配布対象とする分散アレイ(A
)と、所有者を追跡するために使用するドメインアレイ(slicePerLocale
)を作成します。 localSubdomain()
クエリを使用してslicePerLocale
を入力し、各ロケールが所有し、それぞれの要素にあるサブドメインをslicePerLocale
に格納するサブドメインを決定します。
locale 0 owns: {1..5, 1..5}
locale 1 owns: {1..5, 6..10}
locale 2 owns: {6..10, 1..5}
locale 3 owns: {6..10, 6..10}
:10の結果のデフォルトの問題の大きさを持つ4つのロケールでこれを実行する
use BlockDist;
config const n = 10;
var D = {1..n, 1..n} dmapped Block({1..n, 1..n});
var A: [D] real;
var slicePerLocale: [LocaleSpace] domain(2);
coforall loc in Locales do
on loc do
slicePerLocale[loc.id] = A.localSubdomain();
for (loc, slice) in zip(LocaleSpace, slicePerLocale) do
writeln("locale ", loc, " owns: ", slice);
を:最後に、それが学習したものを出力します