在函数

时间:2017-03-20 17:26:23

标签: c++ halide

我有一个返回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本身提取输入参数......

1 个答案:

答案 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。