X10 — Ошибка сегментации с несколькими местами

Я совершенно не знаком с языком X10, пробовал следующий код и получаю ошибку сегментации при использовании более одного места. Я получаю ту же ошибку при запуске образца Монте-Карло X10 с более чем одним местом. Я использую X10 версии 2.3 на 64-битном Debian Linux на процессоре Core i7 2Ghz.

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

Это происходит только тогда, когда я отправляю параметр в функцию подсчета.

Любая помощь приветствуется.


person Auxiliary    schedule 21.02.2013    source источник


Ответы (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 имеют много причин...

person Josh Milthorpe    schedule 18.04.2013