Chapelメモ - 4

dmapな配列

Chapelで普通に配列を宣言すると、單一ロケール上の配列ができる。共有メモリ上の普通の配列といふことだ。
しかしPGAS處理系を名乘る以上、(假想的な)分散メモリ上にデータを配置することも可能である。こんなふうに書けばいい。

const Space = [1..width, 1..width];
var D: domain(2) dmapped Block(Space) = Space;
var A: [D] int;

これで一辺の長さがwidthの二次元配列が定義できる。

ちなみに動的なdmapの宣言?について

上でBlock(Space)のようにbounding boxを入れて宣言しないといけないが、これを宣言時ではなくて実行時にしたかつたんだけど、どうも出來ないやうだ。なので、ラッパースクリプトでwidthを調べて宣言してやることにした。

速度面の注意

次のコードは全く同一の結果を得る筈である。

// with iterator loop
for a in A do a += 1;
// with index loop
for i in D do A(i) += 1;

しかし、實際の複數ロケール環境における實行速度は壓倒的に後者が速い。これは注意が必要である。