0

我正在尝试使用 qsort() 对 x10 中的数组进行排序。

首先我正在编写顺序代码,所以没有问题。现在,我正在尝试并行化我的代码。现在我需要从不同的地方运行这个排序功能。

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 是地点 0 的 Rail[Long],而 jump 是其他地点 x 的 Rail[Long]。

实现这一目标的最佳方法是什么?

4

1 回答 1

0

在您的代码片段中,将在地点 x 运行的 qsort_cmp_idx 函数需要访问地点 0 的数据(item_order Rail)。在 X10 中,活动只能访问其当前运行的地点中的数据。因此,您需要 (a) 在调用 qsort 之前将 item_order 复制到 Place x 或 (b) 使用 qsort_cmp_idx 中的 at 构造临时转移到 Place 0 以访问 item_order。选项 (a) 很可能是最好的方法,因为在 qsort 中的每个比较操作中从 Place x 转移到 Place 0 会非常慢。

于 2019-01-02T18:04:55.313 回答