0

我有一个返回 a 的函数,Func我想设置定义为ImageParams 的输入缓冲区。我似乎无法从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作为输出参数传递,如下所示:

ImageParam p;
create_func(&p);
p.set(input);

但这看起来像作弊不是吗?如果可能的话,我真的很想从Func自身中提取输入参数......

4

1 回答 1

1

您的解决方法不是作弊,我称之为通过引用传递的 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(...);

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

于 2017-03-20T20:40:28.203 回答