gpt4 book ai didi

chapel - 使用 block 分发遇到 Unresolved 访问错误

转载 作者:行者123 更新时间:2023-12-05 00:44:43 25 4
gpt4 key购买 nike

我在尝试使用 Block 分发版进行编译时遇到了错误。
这是错误:

error: unresolved access of '[BlockDom(3,int(64),false,unmanaged DefaultDist)] real(64)' by '[int(64), int(64)]'
use Random, BlockDist;

config const size = 10;
const Space = {1..size, 1..size};

const gridSpace: domain(2) dmapped Block(boundingBox=Space);
var grid: [gridSpace] real;
var grid2: [gridSpace] real;
var grid3: [gridSpace] real;

fillRandom(grid);
fillRandom(grid2);

forall i in gridSpace do {
forall j in gridSpace do {
forall k in gridSpace do {
grid3[i,j] += grid[i,k] * grid2[k,j]; //error here
}
}
}

最佳答案

当使用单个索引迭代 Chapel 中的多维域时,该索引将具有 index type域的。在上面的示例中,分布式域 gridSpace是一个二维域,因此使用单个索引对其进行迭代将产生 2 个整数的元组。

例如,

var dom = {1..2, 1..2};
for idx in dom {
writeln(idx); // index type is (int, int)
}

将打印:
(1, 1)
(1, 2)
(2, 1)
(2, 2)

使用 Chapel 1.19.0 编译您的示例时遇到的错误是:
error: unresolved access of '[BlockDom(2,int(64),false,unmanaged DefaultDist)] real(64)' by '[2*int(64), 2*int(64)]'

这告诉我们,我们正试图用 2 个 2 整数元组 ( [BlockDom(2,int(64),false,unmanaged DefaultDist)] ) 索引实数 ( real(64) ) 的块分布二维数组 ( [2*int(64), 2*int(64)] )。

您可以更正上述示例的一种方法是显式迭代每个维度:
forall i in gridSpace.dim(1) {
forall j in gridSpace.dim(2) {
forall k in gridSpace.dim(1) {
grid3[i,j] += grid[i,k] * grid2[k,j];
}
}
}

但是,请注意,最内层循环将进行多次迭代,尝试添加到 grid3 的相同索引中。同时,造成数据竞争。

您可以通过使内循环串行来消除此数据竞争:
forall (i,j) in gridSpace {
for k in gridSpace.dim(2) {
grid3[i,j] += grid[i,k] * grid2[k,j];
}
}

或者,您可以使用 + reduction处理内循环求和:
forall (i,j) in gridSpace {
grid3[i,j] = + reduce (grid[i,..]*grid2[..,j]);
}

我注意到上面的代码还有另外两个问题:
  • gridSpace只定义了类型,没有值,所以实际上是一个空的分布式域。您可以通过将其初始化为 Space 来解决此问题。 :
  • const gridSpace: domain(2) dmapped Block(boundingBox=Space) = Space;

    Distributions primer更多例子。
  • doforall 中不需要上面循环。 do仅在为循环体的单表达式省略花括号时才需要,例如
  • for i in dom do writeln(i);

    for-loops guide想要查询更多的信息。

    关于chapel - 使用 block 分发遇到 Unresolved 访问错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59370594/

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