我注意到我收到的一段代码中有一些东西:
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
. 但是,略有不同的是,如果A
不支持并行迭代,forall
表单将生成编译时错误,而[a in A]
表单将退回到串行迭代。
关于这个问题的标题,请注意,这种行为与是否A
分发无关。例如,您也可以编写[i in 1..n]
而不是forall i in 1..n do
即使像这样1..n
的范围从未分布在 Chapel 中。
Chapel 中的数组类型,类似[D] real
地可以理解为“对于 中的所有索引D
,分配类型的元素real
”。