如何将中间输出保存到多级管道上的图像中?
How to save intermediate outputs into images on a multi-stage pipeline?
假设我有类似
的计算
Image resultA, resultB;
Func A, B, C, D, E;
Var x, y;
A(x,y) = C(x,y) * D(x,y);
B(x,y) = C(x,y) - D(x,y);
E(x,y) = abs(A(x,y)/B(x,y));
resultA(x,y) = sqrt(E(x,y));
resultB(x,y) = 2.f * E(x,y) + C(x,y);
如何定义 AOT 计划以便我可以节省 resultA
和 resultB
?
E(x,y)
对于resultA
和resultB
的计算是通用的。
提前致谢
如果结果在所有维度上大小相同,您可以return一个元组:
result(x, y) = Tuple(resultA, resultB);
如果它们的大小不一样,可以将它们添加到管道中,管道可以编译为return多个函数的过滤器。
参见:
https://github.com/halide/Halide/blob/master/test/correctness/multiple_outputs.cpp
假设我有类似
的计算Image resultA, resultB;
Func A, B, C, D, E;
Var x, y;
A(x,y) = C(x,y) * D(x,y);
B(x,y) = C(x,y) - D(x,y);
E(x,y) = abs(A(x,y)/B(x,y));
resultA(x,y) = sqrt(E(x,y));
resultB(x,y) = 2.f * E(x,y) + C(x,y);
如何定义 AOT 计划以便我可以节省 resultA
和 resultB
?
E(x,y)
对于resultA
和resultB
的计算是通用的。
提前致谢
如果结果在所有维度上大小相同,您可以return一个元组:
result(x, y) = Tuple(resultA, resultB);
如果它们的大小不一样,可以将它们添加到管道中,管道可以编译为return多个函数的过滤器。
参见:
https://github.com/halide/Halide/blob/master/test/correctness/multiple_outputs.cpp