我对X10语言完全陌生,我尝试了以下代码,并且在使用多个Place时出现了分段错误。运行带有多个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);
}
}
仅当我将参数发送到计数功能时才会发生这种情况。
非常感谢任何帮助。
答案 0 :(得分: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故障有很多原因......