2017-04-18 22 views
2

我想並行計算一些信息並使用cobegin以外的結果。從Cobegin - Chapel中獲取非原始變量

更確切地說,我的要求是檢索這樣

var a,b: domain(1,stridable=true); 
cobegin{ 
    a = foo1(); 
    b = foo2(); 
} 
foo3(a,b); 

我知道sync/single類型的,但沒有爲工作域的域(以及其他非基本類型)。

注意: 在程序中使用out參數也不起作用。在並行結構中使用

回答

4

爲了使寫作比賽條件更加明確,變量的處理,就像它們傳遞給函數與blank意圖。對於大多數類型,這意味着它們可以被讀取,但不能寫入。

要使變量在並行語句中可修改,您可以使用任務意圖子句給它們ref意圖。

cobegin with (ref a, ref b) { 
    a = foo1(); 
    b = foo2(); 
} 

法定任務意圖是refinconstconst inconst ref。作爲任務意圖,outinout意圖不被支持,因爲每個任務都會以未指定的順序複製一個值,導致競爭條件。

見小節「任務意圖」的Chapel language spec的更多細節的「任務並行和同步」部分。