遍历每个Op, 在遍历Op时,判断Op的输入tensor是否位于rec_tbl
中, 如果yes,判断ref_cnt是否>=1, 如果yes,则ref_cnt–,表示输
入tensor的引用数降低1个。
如果ref_cnt等于0,表示生命周期已结束,后面的tensor可以复用它的地址空间。
在给每个Op的output tensor分配时,先check是否可以复用EOL的
tensor地址,check思路,遍历rec_tbl, 需要同时满足如下5个条件才
能reuse:
对应的tensor不在hold_edges内
对应tensor的地址不在in_using_addr内
对应tensor已EOL
对应tensor的地址空间>=当前tensor所需空间
当前OP的输入tensor地址不能与对应tensor的地址相同(某些Op最终运算结果不正确,reshapeOP例外)
给当前Op的output tensor分配gmem, 如果step2显示可以reuse,就reuse.否则在ddr中新开辟gmem.
调整当前Op的input tensor的生命周期,确认它是否位于hold_edges内, 如果yes, 则在rec_tbl中寻找,检查它的ref_cnt是否为0,
如果yes,则把它从hold_edges中删除,并且把它的addr从in_using_addr中删除,意味着这个input tensor生命周期已结束,地址空间已释放。