gpt4 book ai didi

chapel - 尝试使用 forall 循环对矩阵中的所有元素求和时遇到错误

转载 作者:行者123 更新时间:2023-12-01 10:49:18 25 4
gpt4 key购买 nike

在尝试将矩阵中的所有元素相加时,我在使用 forall 循环时不断收到错误,但我不确定为什么使用 for 循环可以正常工作。

这里是错误:

error: illegal lvalue in assignment

代码:

config const size = 10;
var grid : [1..size, 1..size] real;
var sum : real = 0;

//for user input
for i in 1..size do
for j in 1..size do
grid[i,j] = read(uint(8));

forall i in 1..size {
forall j in 1..size {
sum += grid[i,j]; //error here
}
}

最佳答案

编译器阻止您在 sum 上进行数据竞争。如果您的代码被允许,则外部和内部 forall 循环的多次迭代将在不同步的情况下同时更新同一个变量。因此,编译器会强制循环体中的 sum 成为外部 sum 的只读快照。这种机制称为“forall intents”。在 online documentation 中进行了讨论.

如果您打算将矩阵中的所有元素相加,那么 chpl-erific 方法是:

const sum = + reduce grid;

也可以对您的代码进行其他变体,具体取决于您想要完成的任务。

旁白:在二维空间上使用单个 forall 效率更高,例如:

forall (i,j) in {1..size,1..size}//{1..size,1..size} 是一个“域”

或者,更好的是:

forall (i,j) in grid.domain

关于chapel - 尝试使用 forall 循环对矩阵中的所有元素求和时遇到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59382657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com