Parallel processing 如何使用Chapel中的原子变量设置数组大小?
在执行过程中,我需要设置多个全局和局部参数。全局参数需要具有共享大小。我想这意味着变量,但这对我来说还是个新概念Parallel processing 如何使用Chapel中的原子变量设置数组大小?,parallel-processing,chapel,Parallel Processing,Chapel,在执行过程中,我需要设置多个全局和局部参数。全局参数需要具有共享大小。我想这意味着变量,但这对我来说还是个新概念 var n: atomic int, x: [1..n] real; # a vector of global size proc localDude(){ n +=1; # increase the size of n } 我知道数组将随着域的增长和收缩,但我很难将语义整合在一起。谢谢 所以有几件事 域通过值而不是引用来获取其边界。因此,修改域用来构造其边界的变
var n: atomic int,
x: [1..n] real; # a vector of global size
proc localDude(){
n +=1; # increase the size of n
}
我知道数组将随着
域的增长和收缩
,但我很难将语义整合在一起。谢谢 所以有几件事
恕我直言,您确定并行操作的“原子性”正是您的代码设计策略所依赖的特性吗?操作的(平台)强制原子性的概念通常用于其他一些目的,因此上面概述的想法引起了这些关注。最好是在“破坏性”操作上,比如在许多并行的
n.{add | sub | fetchAdd | fetchSub | write | exchange |··········································。第二个现场示例中介绍的重新分配技巧,为了注入/进一步促进参考变更,可能会稍微强调一点,以便直接吸引善良读者的注意力,不是吗?解决这一问题中关于原子的部分
,原子int
可以通过使用.read()
方法访问其值来定义数组大小,就像普通的int
一样。因此,您可能想要x:[1..n.read()]real
但是@MemorableUserName这里的要点仍然是正确的,更改原子不会更改域,除非您重新分配它。