在 Chapel 中将整数数组高效转换为整数域
Efficient cast of integer array to integer domain in Chapel
我注意到这在 Chapel 中有效。我可以通过将整数数组转换为 domain(int)
来将其转换为集合
var x: [1..4] int = (4,5,6,6);
var d = x : domain(int);
writeln(x);
> {4,6,5}
这非常有用,但我想知道是否存在失败的情况,例如在分布式上下文中。
我使用的另一个功能是在投射到域时对集合进行重复数据删除。
var y = {11,13,15,15};
writeln(y);
> {15,11, 13}
是否有更有效的方法或这是首选方法?我无法为它计时,因为我无法访问足够大的集群 A.T.M。
I'm wondering if there are instances when it will fail, like in a distributed context.
不应该。像这样的行为良好的 Chapel 程序在共享内存和分布式内存执行上下文中应该在功能上是等效的。当然,性能可能会有所不同(好坏取决于数据和计算的分布方式)。
Is there a more efficient way to do this or is this a preferred method?
我怀疑Chapel定义了一个首选的方法,但是这个应该是O(n)(与元素个数成线性关系),所以我觉得应该是合理的,渐近的请讲。我没有尝试在 Chapel 或其他语言中优化此习语的任何直接经验,因此不知道首选方法。
我注意到这在 Chapel 中有效。我可以通过将整数数组转换为 domain(int)
var x: [1..4] int = (4,5,6,6);
var d = x : domain(int);
writeln(x);
> {4,6,5}
这非常有用,但我想知道是否存在失败的情况,例如在分布式上下文中。
我使用的另一个功能是在投射到域时对集合进行重复数据删除。
var y = {11,13,15,15};
writeln(y);
> {15,11, 13}
是否有更有效的方法或这是首选方法?我无法为它计时,因为我无法访问足够大的集群 A.T.M。
I'm wondering if there are instances when it will fail, like in a distributed context.
不应该。像这样的行为良好的 Chapel 程序在共享内存和分布式内存执行上下文中应该在功能上是等效的。当然,性能可能会有所不同(好坏取决于数据和计算的分布方式)。
Is there a more efficient way to do this or is this a preferred method?
我怀疑Chapel定义了一个首选的方法,但是这个应该是O(n)(与元素个数成线性关系),所以我觉得应该是合理的,渐近的请讲。我没有尝试在 Chapel 或其他语言中优化此习语的任何直接经验,因此不知道首选方法。