我有一个关于在已经分配的C ++数组周围包装Halide :: Image对象的问题,该数组定义了一个二维双精度浮点图像。
我已经看过了:
C++ array to Halide Image (and back)
这与我想要做的很接近,但我对halide中buffer_t的主机成员的uint8_t类型以及如何处理非uint8_t的现有图像感到困惑。
我在使用aot的模糊应用程序中看到,该示例分配了Halide图像,然后将元素复制到此卤化图像中。我想这样做,但不用支付副本。
我不能选择使用load_image,我需要处理由double *定义的已经分配的内存。
Image<uint16_t> input(6408, 4802);
for (int y = 0; y < input.height(); y++) {
for (int x = 0; x < input.width(); x++) {
input(x, y) = rand() & 0xfff;
}
}
答案 0 :(得分:1)
uint8_t*
的主机字段的buffer_t
类型只是指向任何数据数组的指针。您可以将其指向float
或double
数组。它基本上是一个void*
指针,可以被实际的管道代码重新解释。它的解释取决于从它加载的Halide程序和elem_size
字段(对于不同类型的浮点数据应该是sizeof(double)
或sizeof(float)
)的组合。