在 x10 中调用此排序函数的正确方法是什么?
What is the correct way to call this sorting funtion in x10?
我正在尝试使用 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是Place 0的Rail[Long],jump是其他Place x的Rail[Long]。
实现此目标的最佳方法是什么?
在您的代码片段中,qsort_cmp_idx 函数将在地点 x 运行 需要访问地点 0 的数据(item_order 轨道)。在 X10 中,activity只能访问当前所在Place的数据运行。因此,您需要 (a) 在调用 qsort 之前将 item_order 复制到 Place x 或 (b) 在 qsort_cmp_idx 中使用 at 结构暂时转移到 Place 0 以访问 item_order。很可能选项 (a) 是最好的方法,因为在 qsort 中的每个比较操作中从 Place x 转移到 Place 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是Place 0的Rail[Long],jump是其他Place x的Rail[Long]。
实现此目标的最佳方法是什么?
在您的代码片段中,qsort_cmp_idx 函数将在地点 x 运行 需要访问地点 0 的数据(item_order 轨道)。在 X10 中,activity只能访问当前所在Place的数据运行。因此,您需要 (a) 在调用 qsort 之前将 item_order 复制到 Place x 或 (b) 在 qsort_cmp_idx 中使用 at 结构暂时转移到 Place 0 以访问 item_order。很可能选项 (a) 是最好的方法,因为在 qsort 中的每个比较操作中从 Place x 转移到 Place 0 会非常慢。