2017-05-05 5 views
1

私は私がどのように見えるべきだと思いますいくつかのコードがあります。基本的に、私は他のnumLocales - 1のロケールからのデータの複数のスライスを取得しようとしています複数のドメインを格納するオブジェクトを作成できますか?

on Locales[0] { 
    var slice: domain(1) = {0..#widthOfLocaleMatrix}; 
    on Locales[1] { 
    slice(0) = A.localSubdomain(); 
    } 
    var localSlice: [slice(0)] int = A[slice(0)]; 
} 

を。他のすべてのロケールのlocalSubdomainを格納するオブジェクトを作成できますか?私はこれを回避することができると思うが、私は好奇心が強い。

答えて

2

複数のドメインを保存するには、ドメインの配列(または他のドメインのコレクション)を作成する必要があります。具体的には、上記のコードの主な問題点は、一見ドメインにインデックスを作成しようとしていることです(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); 

を:最後に、それが学習したものを出力します

関連する問題