我试图将resize app从卤化物存储库中从内联声明转换为生成器。一切似乎都很好,除了这个:
Func clamped = BoundaryConditions::repeat_edge(input);`
在原始代码中,input
被声明为ImageParam input(Float(32), 3)
。在我的生成器中,我已将其翻译为:Input<Func> input { "input", Float(32), 3 }
。然后,我以与原始代码完全相同的方式声明clamped
。编译时,我收到此错误:
Halide.h:15202:50: error: no member named 'dim' in 'Halide::GeneratorInput<Halide::Func>'
object_bounds.push_back({ Expr(func_like.dim(i).min()), Expr(func_like.dim(i).extent()) });
~~~~~~~~~ ^
有没有办法在BoundaryConditions::repeat_edge
上创建Input<Func>
?
答案 0 :(得分:1)
Input<Func>
的想法是,在将生成器组合在一起时,可以使用另一个Func
进行实例化。 (例如,一个生成器的输出可能是另一个生成器的输入,所有连接的生成器的图形被编译为单个Halide程序。)问题是Funcs
没有像Buffers
这样的固定边界。因此,人们不能要求(例如)Func
的宽度。
对于设计为始终与具体存储器一起使用的发电机,可以使用输入。要在输入上施加边界条件,需要将边界作为显式参数传递给生成器。例如。与其他Inputs
一样。
答案 1 :(得分:1)
有一个缓冲区&lt;&gt;用它。 (在您的情况下可能是缓冲区,请尝试一下)。
struct MyGen : Generator<MyGen> {
Input<Buffer<>> dim_only_input_buffer{ "dim_only_input_buffer", 3 };
...
};
我碰到了类似的东西,你可以在这个github issue
中看到更多相关信息