有没有办法将两个输入图像堆叠到Halide Generator中的单个4维缓冲区中?

时间:2019-09-25 21:12:24

标签: c++ halide

我的生成器管道中有两个输入图像(rgb)。每个图像都要经过自定义裁剪,然后调整为NxNx3图像的大小。生成器Output<Buffer<float>> {"batch", 4}; // (N, N, 3 ,2)和我设置的输出

batch(x, y, c, batch_size) = cast<float>(0); 
batch(x, y, c, 0) = image_1_resized(x, y, c);
batch(x, y, c, 1) = image_2_resized(x, y, c);

但是当我去编译它时,它会出现段错误(我无法获取有用的调试信息)。如果我尝试这样做:

clamped_image_1 = BoundaryConditions(image_1_resized, 0 ,{{0, N}, {0, N});

batch(x, y, c, batch_size) = cast<float>(0); 
batch(x, y, c, 0) = image_1_resized(x, y, c);
batch(x, y, c, 1) = clamped_image_1(x + 10, y, c);

它可以编译并运行良好。我很好奇,我想用Halide来实现什么目标?

1 个答案:

答案 0 :(得分:2)

与其将其作为多阶段功能进行操作,不如尝试使用select在单个阶段中填充不同的渠道。

批处理(x,y,c,n)= select(n == 0,image_1_resize(x,y,c),image_2_resize(x,y,c));

然后您可以通过绑定和展开n来安排它,而卤化物将删除分支:

batch.bound(n,0,2).unroll(n);