我有一个返回Func
的函数,我想设置定义为ImageParam
s的输入缓冲区。我似乎无法从使用此类功能的github repo中找到教程/测试。我可以使用生成器在AOT中编译,然后将另一个程序链接到它,但我确信在没有重新编译的情况下,在同一个实例中有更快的方法可以做到这一点......我似乎无法找到正确的方法!< / p>
这是我使用的代码:
//header
Func create_func();
//usage
Func f = create_func();
Buffer<uint8_t> input; //initialized somewhere
Buffer<uint8_t> output0; //initialized somewhere
Buffer<uint8_t> output1; //initialized somewhere
f.in(0).set(input); // I need to set the buffer here right?
f.realize({output0, output1});
编辑:我发现了一个“解决方法”,这意味着我将对ImageParam
的引用作为out参数传递,如下所示:
ImageParam p;
create_func(&p);
p.set(input);
但是,这似乎是作弊不是吗?如果可能,我真的想从Func
本身提取输入参数......
答案 0 :(得分:1)
你的解决方法不是作弊,我称之为参考传递的参数,而非参数。预期用途是:
ImageParam input;
Func output = create_func(input);
... later
input.set(some_actual_image);
output.realize(...);
如果您只是将某些对象的输入公开为可设置的属性,那么您可以这样做:
struct MyPipeline {
ImageParam input1, input2;
Func output;
MyPipeline() {
output(x, y) = ...
}
};
MyPipeline p;
p.input1.set(foo);
p.output.realize(...);
这非常接近使用Generator。