c++ - 有没有办法在 Halide Generator 中将两个输入图像堆叠到一个 4 维缓冲区中?

标签 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 可以实现我想要实现的目标?

最佳答案

与其将其作为多阶段函数来执行,不如尝试使用 select 在单个阶段中填充不同的 channel 。

batch(x, y, c, n) = select(n==0, image_1_resized(x, y, c), image_2_resized(x, y, c));

然后你可以通过绑定(bind)和展开 n 来安排它,halide 将删除分支:

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

关于c++ - 有没有办法在 Halide Generator 中将两个输入图像堆叠到一个 4 维缓冲区中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58106594/

相关文章:

c++ - 如何在 C++ 中计算 a/b?

c++ - 在 C++ 中初始化 Halide 缓冲区

C++ 数组到 Halide Image(和返回)

c++ - Halide Jit 编译

halide - 在 Halide 中表达时间步长循环

halide - Halide 索引是行优先、列优先还是混合?

c++ - 比较有符号和无符号整数安全吗?

c++ - 从线程 C++ 循环中定期更改 QML 属性值

c++ - 从函数中存储和返回泛型类型(甚至是 void)

java - 从 c++ (jni) 调用 java 函数根本不起作用