【发布时间】:2021-05-24 01:35:55
【问题描述】:
DaCe 带有一种语法,可以让用户定义一个 Map Map 下方是为计算定义的 tasklet 用户。作为计算,我们可以进行标量运算,例如整数加法。
但是,如果我们在该 tasklet 中进行张量(矩阵)运算,例如 A@B 或 A+B,其中 A 和 B 是两个矩阵,DaCe 会报错。
这是引发错误的具体代码 sn-p。您可以尝试运行此示例。
@dace.program
def fusion(A: dace.float32[10, 20], B: dace.float32[10, 20],
out: dace.float32[1]):
tmp = dace.define_local([10, 20], dtype=A.dtype)
tmp_2 = dace.define_local([10, 20], dtype=A.dtype)
for i, j in dace.map[0:10, 0:20]:
with dace.tasklet:
a << (A+A)[i, j]
b >> tmp[i, j]
b = a * a
查看第 16 行,其中有一个矩阵加法 A+A。我相信这是错误的原因。
因此,我想知道,在这种情况下是否允许张量操作? 如果允许,我能知道写这个的正确语法吗? 如果没有,我想知道为什么不支持?
【问题讨论】: