我正在尝试将卤化物存储库中的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()) });
~~~~~~~~~ ^有没有办法在Input<Func>上创建BoundaryConditions::repeat_edge
发布于 2017-07-13 03:24:03
有,请将Buffer<>与其关联。(在您的情况下,可能是一个缓冲区,请尝试一下)。
struct MyGen : Generator<MyGen> {
Input<Buffer<>> dim_only_input_buffer{ "dim_only_input_buffer", 3 };
...
};我遇到了类似的东西,你可以在这个github issue中看到更多关于这方面的信息
发布于 2017-07-13 01:30:31
Input<Func>的想法是,当将生成器组合在一起时,它可以用另一个Func实例化。(例如,一个生成器的输出可能是另一个生成器的输入,所有连接的生成器的图形被编译为单个Halide程序。)问题是Funcs没有像Buffers那样的固定界限。因此一个人不能要求(例如)Func的宽度。
对于被设计为总是与具体内存一起使用的生成器,可以使用输入。要在输入上施加边界条件,需要将边界作为显式参数传递给生成器。例如作为其它Inputs。
https://stackoverflow.com/questions/45061567
复制相似问题