2013-02-21 43 views
1

我對X10語言完全陌生,我嘗試了以下代碼,並且在使用多個地點時出現分段錯誤。當運行X10的Monte Carlo樣品時,我遇到了同樣的錯誤,並帶有多個地方。我在Core i7 2Ghz處理器上的64位Debian Linux上使用X10版本2.3。X10 - 多地點的分割錯誤

import x10.util.Timer; 
public class placetest{ 
     public static def main(args: Array[String](1)){ 
       finish for(var i:Int=1;i<=4;i++){ 
         val ii = i; 
         val pk = Place.place(ii); 
         val k = 1; 
         async at(pk) count(k); 
       } 
       Console.OUT.println("Finished"); 
     } 
     public static def count(i:Int){ 
       Console.OUT.println("Test" + i); 
     } 
} 

這隻發生在我向count函數發送一個參數時。

任何幫助,非常感謝。

回答

3

地方X10編號從0到Place.MAX_PLACES,因此然而,它通常是一個壞主意,編寫依賴於地方的特定數字代碼在for循環應該被索引爲

finish for(var i:Int=0;i<4;i++){ 

。更好的是:

finish for (place in Place.places()) { 
    val k = 1; 
    at(place) async count(k); 
} 

這將適用於任何地方。

注意我還切換了async at的訂單 - 使用at(p) async會更有效,因爲這不會在當前位置創建單獨的活動。

你確定這是在蒙特卡羅整合樣本相同的錯誤? Seg故障有很多原因...