在函数返回的 Func 中设置输入

Setting inputs in Func returned from function

本文关键字:设置 输入 Func 函数 返回      更新时间:2023-10-16

我有一个返回Func的函数,我想设置定义为ImageParam的输入缓冲区。我似乎无法从使用此类功能的 github 存储库中找到教程/测试。我可以使用生成器在 AOT 中编译,然后将另一个程序链接到它,但我确信在同一实例中有一种更快的方法可以做到这一点,而无需重新编译......我似乎找不到正确的方法!

这是我使用的代码段:

//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本身中提取输入参数......

您的解决方法不是作弊,我将其称为通过引用传递的 in 参数,而不是通过 out 参数。预期用途是:

   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(...);

这非常接近于仅使用生成器。