Created by: zhaoyang-star
【问题】
- 开启
memory_optimize_pass
情况下,当使用同一个predictor
,循环执行多次Run
时,第一次Run
结果正常,第二次及之后Run
出的结果有 diff; - 如上问题在 mobilenetv1 等其他模型上均存在;
- 关闭
memory_optimize_pass
情况下,多次Run
结果正确。
【原因】
- 开启
memory_optimize_pass
情况下,模型中的第一个 layout 为ImageDefault
的 output (cl image shape <896,112>) 复用了模型中最后一个layout 为ImageDefault
的 output (cl image shape <1792,56>) 的内存空间,但是实际上这两个 output 的内存空间并不能被复用。
【解决方法】
- 修改 memory 层的 OpenCL 内存空间分配函数
ResetLazyImage2D
,原则是保证当前空间的 image 宽度和高度分别是模型中使用ImageDefault
类型的所有 output tensor 对应 image 宽度和高度的最大值。