算子开发时Kernel直调结果正确,Aclnn调用结果出错
收藏回复举报
算子开发时Kernel直调结果正确,Aclnn调用结果出错
t('forum.solved') 已解决
发表于2024-10-31 22:52:45
0 查看

最近使用Atlas200IDKA2进行算子开发,使用Kernel直调时结果正确,但使用Aclnn时输出结果错误,看起来像是只进行到了compute函数的前一部分操作就把结果输出了,现已用aclnn调用做出以下尝试。

1.在compute函数最后循环几次dumptensor操作,最终输出结果正确。

2.减少上述dumptensor操作的循环次数,结果只有前面一部分能计算正确,后面一部分又是错误结果(如最上面所述的那种看起来compute函数运行到一半的结果)。

3.不减少dumptensor的循环次数,而是把每个dumptensor中打印数据的个数减少,结果也不正确(错误形式同2,只有前面一部分结果正确)。

4.将compute函数中的所有操作删去,只对输入的inputtensor进行一次标量Adds+1操作,结果输出还是inputtensor,并没有加1。但是在这个Adds函数后面加一个dumptensor全打印,最终结果又正确了。

5.设置一个较大的workspace,不加任何dumptensor操作,输出结果和最开始不加dumptensor操作时一样,输出的所有元素结果都出错。

本次算子开发涉及到的inputtensor元素个数量级为千万,数据类型是float,想请教一下从以上描述中可以看出大概是哪方面的问题吗,主要疑问还是在于(1)第一点的操作后所有结果正确,(2)第二点减少循环次数后只有部分结果正确和(3)第四点,compute中只使用一个Adds函数也需要一次dumptensor操作才能使输出结果正确。这三点令我十分疑惑。万分感谢!

我要发帖子