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
中看到更多相关信息
我正在尝试将 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
中看到更多相关信息