`[<var> in <distributed variable>]` 是否等同于 `forall`?

Is `[<var> in <distributed variable>]` equivalent to `forall`?

我在收到的一段代码中注意到了一些东西:

var D: domain(2) dmapped Block(boundingBox=Space) = Space;
var A: [D] int;
[a in A] a = a.locale.id;

[a in A]是否等同于forall a in A a = a.locale.id

在大多数情况下,是的。在 Chapel 中,[a in A] expr 可以被认为是 forall a in A do expr 的 shorthand。但是,有一点不同,如果 A 不支持并行迭代,forall 形式将生成 compile-time 错误,而 [a in A] 形式将回退到串行迭代。

关于这个问题的标题,请注意此行为与是否分发 A 无关。例如,您也可以写 [i in 1..n] 而不是 forall i in 1..n do,即使像 1..n 这样的范围从未在 Chapel 中分发过。

Chapel 中的数组类型,如 [D] real 可以类似地读作 "for all indices in D, allocate an element of type real."