从现有双精度 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 数据数组的指针。您可以随意将其指向 float
或 double
数组。它基本上是一个 void*
指针,由实际的管道代码重新解释。它的解释是由从它加载的 Halide 程序和 elem_size
字段的组合决定的(例如,对于不同类型的浮点数据,它应该是 sizeof(double)
或 sizeof(float)
) .
我有一个关于围绕定义二维双精度浮点图像的已分配 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 数据数组的指针。您可以随意将其指向 float
或 double
数组。它基本上是一个 void*
指针,由实际的管道代码重新解释。它的解释是由从它加载的 Halide 程序和 elem_size
字段的组合决定的(例如,对于不同类型的浮点数据,它应该是 sizeof(double)
或 sizeof(float)
) .