我对X10语言完全陌生,我尝试了以下代码,但在使用多个Place时出现了分段错误。当我用一个以上的Place运行X10的蒙特卡罗样本时,我也会得到同样的错误。我在酷睿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函数发送参数时才会发生这种情况。
非常感谢您的帮助。
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故障有很多原因。。。