我是 X10 语言的新手,我尝试了以下代码,但在使用多个 Place 时遇到了段错误。当在多个地方运行 X10 的蒙特卡洛样本时,我遇到了同样的错误。我在 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);
}
}
只有当我向计数函数发送参数时才会发生这种情况。
非常感谢任何帮助。
最佳答案
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
效率更高,因为这不会在当前位置创建单独的事件。
你确定在蒙特卡洛积分样本上是同样的错误吗?段错误有很多原因......
关于linux - X10 - 多地点的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15011158/