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

No member named dim in Halide::GeneratorInput<Halide::Func>

我正在尝试将 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()) });
                                   ~~~~~~~~~ ^

有没有办法在 Input<Func> 上创建 BoundaryConditions::repeat_edge

Input<Func> 的想法是,在将生成器组合在一起时,它可能会与另一个 Func 一起实例化。 (例如,一个生成器的输出可能是另一个生成器的输入,并且所有连接的生成器的图形被编译为单个 Halide 程序。)问题是 Funcs 没有像 Buffers 那样的固定边界。因此不能要求(例如)Func.

的宽度

对于设计为始终使用具体记忆的生成器,可以使用输入。要在输入上施加边界条件,边界需要作为显式参数传递给生成器。例如。与其他 Inputs.

有,给它关联一个 Buffer<>。 (在你的情况下可能是 Buffer,试一试)。

 struct MyGen : Generator<MyGen> {
     Input<Buffer<>> dim_only_input_buffer{ "dim_only_input_buffer", 3 }; 
     ... 
  };

我运行进入了类似的东西,你可以在这个github issue

中看到更多相关信息