从现有双精度 C++ 数组创建 Halide::Image 对象

Create a Halide::Image object from an existing double C++ array

我有一个关于围绕定义二维双精度浮点图像的已分配 C++ 数组包装 Halide::Image 对象的问题。

我已经看过了:

C++ array to Halide Image (and back)

这接近于我想做的,但我对 buffer_t 中 buffer_t 的宿主成员的 uint8_t 类型感到困惑,以及您如何处理不是 uint8_t.

我看到在使用 aot 的模糊应用程序中,示例分配了一个卤化物图像,然后将元素复制到这个卤化物图像中。我想这样做,但不支付副本费用。

我不能选择使用 load_image,我需要使用由双 *.

定义的现有的、已经分配的内存
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;
    }
}

buffer_t 的主机字段的 uint8_t* 类型只是指向 any 数据数组的指针。您可以随意将其指向 floatdouble 数组。它基本上是一个 void* 指针,由实际的管道代码重新解释。它的解释是由从它加载的 Halide 程序和 elem_size 字段的组合决定的(例如,对于不同类型的浮点数据,它应该是 sizeof(double)sizeof(float)) .