`[<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
."
我在收到的一段代码中注意到了一些东西:
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
."