Halide :: GeneratorInput <halide :: func>中没有名为dim的成员

时间:2017-07-12 15:12:10

标签: halide

我试图将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>

2 个答案:

答案 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

中看到更多相关信息