我想并行计算一些信息并在cobegin
.
更准确地说,我的要求是检索这样的域(和其他非原始类型)
var a,b: domain(1,stridable=true);
cobegin{
a = foo1();
b = foo2();
}
foo3(a,b);
我知道sync/single
类型,但不适用于域。
注意:out
在过程参数中使用也不起作用。
我想并行计算一些信息并在cobegin
.
更准确地说,我的要求是检索这样的域(和其他非原始类型)
var a,b: domain(1,stridable=true);
cobegin{
a = foo1();
b = foo2();
}
foo3(a,b);
我知道sync/single
类型,但不适用于域。
注意:out
在过程参数中使用也不起作用。
为了使编写竞争条件更加明确,并行构造中使用的变量被视为blank
有意传递给函数。对于大多数类型,这意味着它们可以被读取,但不能被写入。
要使变量在并行语句中可修改,您可以使用任务意图子句来赋予它们ref
意图。
cobegin with (ref a, ref b) {
a = foo1();
b = foo2();
}
法定任务意图是ref
、in
、const
和。不支持and意图作为任务意图,因为每个任务都会以未指定的顺序复制一个值,从而导致竞争条件。const in
const ref
out
inout
有关更多详细信息,请参阅Chapel 语言规范的“任务并行和同步”部分中的“任务意图”小节。