gpt4 book ai didi

chapel - 如何在 Chapel 中有效地分散分布式数组元素?

转载 作者:行者123 更新时间:2023-12-03 23:41:07 24 4
gpt4 key购买 nike

考虑以下分散操作:

var A : [DomA] EltType;
var Indices : [DomA] IndexType;
var B : [DomB] EltType;

[(iSrc, iDst) in zip(DomA, Indices)] B[iDst] = A[iSrc];
域分布的地方。做这个的最好方式是什么?特别是,是否有一种简单的方法来聚合消息以避免发送许多小消息(假设 sizeOf(EltType) 很小)?

最佳答案

Chapel 团队正在积极致力于聚合,它被广泛用于 Arkouda ,但目前没有对聚合的内置支持。见 https://github.com/chapel-lang/chapel/issues/16963有关当前工作的更多信息。
如果您想尝试当前的聚合器,您可以从 https://github.com/chapel-lang/chapel/tree/993f9bd/test/studies/bale/aggregation 复制 AggregationPrimitives.chpl 和 CopyAggregation.chpl。 .
您的主循环将如下所示:

forall (iSrc, iDst) in zip(DomA, Indices) with (var agg = new DstAggregator(EltType)) {
agg.copy(B[iDst], A[iSrc]);
}
或者也许更清洁一点:
forall (iDst, a) in zip(Indices, A) with (var agg = new DstAggregator(EltType)) {
agg.copy(B[iDst], a);
}
这些聚合器应该在您的非聚合环路上提供显着的性能加速:在 Cray Aries 网络上提高 2-3 倍,在 InfiniBand 网络上提高约 1000 倍,在商用以太网上提高约 5000 倍或更多。
从长远来看,聚合器将成为标准库的一部分,在许多情况下,包括您的示例,编译器应该能够判断聚合是安全/合法的并自动使用它。

关于chapel - 如何在 Chapel 中有效地分散分布式数组元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65744758/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com