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

Output values to buffers of different sizes

本文关键字:缓冲区 输出      更新时间:2023-10-16

我需要将 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 });

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

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

像这样:

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 });