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