有關域索引如何映射到程序語言環境的具體細節不是由Chapel語言本身定義的,而是由用於聲明域的域映射的實現定義的。在你的問題的評論中,你提到你指的是Block
發行版,所以我會在我的回答(documented here)中專注於此,但請注意,任何其他域映射可能採取不同的方法。
Block
分佈採用可選的targetLocales
參數,該參數允許您指定一組要定位的語言環境及其虛擬拓撲。舉例來說,如果我聲明並填充區域設置的幾個數組:
var grid1: [1..3, 1..2] locale, // a 3 x 2 array of locales
grid2: [1..2, 1..3] locale; // a 2 x 3 array of locales
for i in 1..3 {
for j in 1..2 {
grid1[i,j] = Locales[(2*(i-1) + j-1)%numLocales];
grid2[j,i] = Locales[(3*(j-1) + i-1)%numLocales];
}
}
然後我可以通過他們的targetLocales
參數傳遞給Block
- 分佈式域的幾個實例:
use BlockDist;
config const n = 8;
const D = {1..n, 1..n},
D1 = D dmapped Block(D, targetLocales=grid1),
D2 = D dmapped Block(D, targetLocales=grid2);
每域將其n
行分配到其targetLocales
網格的第一維和其n
列到第二維。我們可以通過聲明對這些領域整數數組和平行分配他們做的每個元素存儲其所屬區域的ID看到這個分配的結果,具體如下:
var A1: [D1] int,
A2: [D2] int;
forall a in A1 do
a = here.id;
forall a in A2 do
a = here.id;
writeln(A1, "\n");
writeln(A2, "\n");
當六個或更多的語言環境中運行(./a.out -nl 6
),則輸出是如下,露出底層的網格結構:
0 0 0 0 1 1 1 1
0 0 0 0 1 1 1 1
0 0 0 0 1 1 1 1
2 2 2 2 3 3 3 3
2 2 2 2 3 3 3 3
2 2 2 2 3 3 3 3
4 4 4 4 5 5 5 5
4 4 4 4 5 5 5 5
0 0 0 1 1 1 2 2
0 0 0 1 1 1 2 2
0 0 0 1 1 1 2 2
0 0 0 1 1 1 2 2
3 3 3 4 4 4 5 5
3 3 3 4 4 4 5 5
3 3 3 4 4 4 5 5
3 3 3 4 4 4 5 5
對於一維targetLocales
陣列,所述文檔說:
如果targetLocales
的排名爲1
,則會使用貪婪啓發式方法重新整理目標語言環境數組,以便它與分佈的排名相匹配,並且每個維度都包含大致相同數量的索引。
例如,如果我們分發到區域設置的一維4元件陣列:
var grid3: [1..4] locale;
for i in 1..4 do
grid3[i] = Locales[(i-1)%numLocales];
var D3 = D dmapped Block(D, targetLocales=grid3);
var A3: [D3] int;
forall a in A3 do
a = here.id;
writeln(A3);
我們可以看出,在目標區域設置形成正方形,如所預期:
0 0 0 0 1 1 1 1
0 0 0 0 1 1 1 1
0 0 0 0 1 1 1 1
0 0 0 0 1 1 1 1
2 2 2 2 3 3 3 3
2 2 2 2 3 3 3 3
2 2 2 2 3 3 3 3
2 2 2 2 3 3 3 3
該文檔故意含糊不清如果1D targetLocales
參數如果不是完美的正方形將被重新塑造,但我們可以通過在域上使用targetLocales()
query來了解在實踐中做了什麼。另請注意,如果未提供targetLocales
陣列,則默認使用整個Locales
陣列(即1D)。由於這兩個事情說明,如果下面的代碼是在六個語言環境中運行:
var D0 = D dmapped Block(D);
writeln(D0.targetLocales());
我們得到:
LOCALE0 LOCALE1
LOCALE2 LOCALE3
LOCALE4 LOCALE5
說明,目前的啓發式我們明確grid1
聲明匹配以上。
您是否介意指出[http://chapel.cray.com/docs/latest/modules/dists/BlockDist.html?highlight=block#module-BlockDist]這部分,您試圖獲得澄清教堂映射過程的解釋?謝謝。 – user3666197
我看了一下block dist模塊 – praveen