【问题标题】:X10 - Segmentation fault with multi-PlacesX10 - 多地点的分段错误
【发布时间】:2013-02-21 20:02:15
【问题描述】:

我对 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);
        }
}

只有在我向计数函数发送参数时才会发生这种情况。

非常感谢任何帮助。

【问题讨论】:

    标签: linux segmentation-fault x10-language


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多