我在开发一个较为复杂的Ascend C算子,需要先对输入张量做向量归一化处理,再与另一个矩阵做乘法运算。单独实现向量计算部分和矩阵计算部分时,各自的单元测试都是通过的,但将两者组合在同一个算子中时,结果就出现了异常。具体表现为:归一化后的中间结果看起来是正确的,但后续矩阵乘的输出却完全不对,而且异常程度与输入规模有关,输入越大偏差越明显。我怀疑是中间结果在统一缓冲区(UB)中的存放位置与矩阵计算阶段期望的位置发生了冲突,但由于UB空间紧张,我没法为每个阶段单独分配完全隔离的内存区域。想请教一下各位,在Ascend C中混合使用向量指令和矩阵指令时,如何正确地管理和切换内存视图,避免这种数据错乱的问题?
我在开发一个较为复杂的Ascend C算子,需要先对输入张量做向量归一化处理,再与另一个矩阵做乘法运算。单独实现向量计算部分和矩阵计算部分时,各自的单元测试都是通过的,但将两者组合在同一个算子中时,结果就出现了异常。具体表现为:归一化后的中间结果看起来是正确的,但后续矩阵乘的输出却完全不对,而且异常程度与输入规模有关,输入越大偏差越明显。我怀疑是中间结果在统一缓冲区(UB)中的存放位置与矩阵计算阶段期望的位置发生了冲突,但由于UB空间紧张,我没法为每个阶段单独分配完全隔离的内存区域。想请教一下各位,在Ascend C中混合使用向量指令和矩阵指令时,如何正确地管理和切换内存视图,避免这种数据错乱的问题?