local Tensor无producer时被读取触发device侧断言#
问题现象描述#
在算子编写过程中,如果local Tensor仅创建但未写入,就在loop内被读取,编译/执行到设备路径时可能触发设备侧断言或异常。典型报错如下:
ASSERTION FAILED: WORKSPACE_ITER_INVALID
Root[...] incast ... slotIndex ... read from empty address.
该现象通常对应读取到的slot没有producer,即Tensor对应slot未被任何operation写入。
最小示例(语义示意):
def kernel(x):
t = pypto.tensor((1,), pypto.DT_FP32, "t")
for i in range(n):
_ = t[0]
可能原因#
local Tensor(如t)仅被创建,但在被读取前没有任何写操作(如切片赋值、move、assemble或其他能建立producer的写入),导致读取路径访问到空地址并触发断言。
处理步骤#
可采用以下任一方式规避:
在读取前先对local Tensor执行有效写入(例如切片赋值、
move、assemble等),确保其存在producer。将该local Tensor写在loop内,作为loop内Tensor使用,使其在当前loop作用域内,PyPTO内存管理策略会为其申请内存地址。