1

我对 X10 语言完全陌生,我尝试了以下代码,但在使用多个 Place 时出现分段错误。运行 X10 的 Monte Carlo 样本时,我遇到了同样的错误。我在 Core i7 2Ghz 处理器上的 64 位 Debian Linux 上使用 X10 版本 2.3。

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 函数发送参数时。

任何帮助是极大的赞赏。

4

1 回答 1

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故障有很多原因...

于 2013-04-18T06:40:57.900 回答