输出值到不同大小的缓冲区

时间:2017-03-21 16:00:30

标签: c++ halide

我需要将2个值输出到不同大小的缓冲区。一个是与输入相同的尺寸,另一个是宽度的一半和高度的一半。我想过使用元组,但是因为它迭代了输入大小,所以我超越了界限。这是一个简单的例子:

uint8_t _in[4] = { 1, 2, 3, 4 };
uint8_t _out1[4];
uint8_t _out2[1];

Buffer<uint8_t> in(_in, 2, 2);
Buffer<uint8_t> out1(_out1, 2, 2);
Buffer<uint8_t> out2(_out2, 1, 1);

Var x, y;
Func f;

f(x, y) = {
    in(x,y),
    in(x / 2, y / 2)
};

f.realize({ out1, out2 });

元组不是正确的解决方案吗?

1 个答案:

答案 0 :(得分:2)

使用两个输出Halide::Pipeline构建Funcs并在realize对象上调用Pipeline

像这样:

uint8_t _in[4] = { 1, 2, 3, 4 };
uint8_t _out1[4];
uint8_t _out2[1];

Buffer<uint8_t> in(_in, 2, 2);
Buffer<uint8_t> out1(_out1, 2, 2);
Buffer<uint8_t> out2(_out2, 1, 1);

Var x, y;
Func f1, f2;

f1(x, y) = in(x,y);
f2(x, y) = in(x / 2, y / 2);

Pipeline pipeline({f1, f2});

pipeline.realize({ out1, out2 });