linux - X10 - 多地点的段错误

标签 linux segmentation-fault x10-language

我是 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/

相关文章:

python - 如何故意导致Errno 23 ENFILE

android - SIGNAL 11 SIGSEGV 崩溃 Android

x10-language - X10中 'async'之前或之后的 'for'有什么区别?

c - 使用结果 float 时 SSE SIMD 段错误

linux - 如何编译 x10 示例?

linux - 一个月中每一天的两次之间的日期值

linux - 发行版维护者(即 Ubuntu、Fedora)使用什么工具进行构建/依赖管理?

c - 查找本地子网上所有可用的计算机

c++ - 在 snprintf 中调用 strlen 期间调用 backtrace_symbols_fd() 有时会挂起