Как правильно назвать эту функцию сортировки в x10? - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь отсортировать массив в x10 с помощью qsort ().

Сначала я писал последовательный код, поэтому проблем не было.Теперь я пытаюсь распараллелить мой код.Теперь мне нужно запустить эту функцию сортировки из разных мест.

public def qsort_cmp_idx(var a:Long,var b:Long):Int
{
 if(item_order(a)<item_order(b)) return x10.lang.Int.operator_as(-1);
  else if (item_order(a)>item_order(b))
   return x10.lang.Int.operator_as(1);
  else return x10.lang.Int.operator_as(0);
}

x10.util.RailUtils.qsort(jump,jt,jump_siz-1,(i:Long,j:Long)=>qsort_cmp_idx(i,j));

item_order - это Rail [Long] в месте 0, а jump - это Rail [Long] в каком-то другом месте x.

Каков наилучший способ добиться этого?

1 Ответ

0 голосов
/ 02 января 2019

В вашем фрагменте кода функция qsort_cmp_idx, которая будет работать на месте x, нуждается в доступе к данным (направляющая item_order) на месте 0. В X10 действие может получить доступ только к данным в месте, где оно выполняется в данный момент.Поэтому вам нужно либо (a) скопировать в item_order в Place x перед вызовом qsort, либо (b) использовать конструкцию at в qsort_cmp_idx, чтобы временно перейти в Place 0 для доступа к item_order.Весьма вероятно, что вариант (а) является наилучшим подходом, потому что переход с места x на место 0 при каждой операции сравнения в qsort будет очень медленным.

...