我正在尝试使用C++ 1D数组初始化Halide Buffer。鉴于其他一些在线帖子,到目前为止,这是我得到的:

Image<float> in(Buffer(type_of<float>(), size_x, 0, 0, 0, NULL, in_ptr));

其中in_ptr是指向我的C++数组的指针。
运行此命令时,出现以下错误:



所以我将代码更改为:
Image<float> in(Buffer<float>(type_of<float>(), size_x, 0, 0, 0, NULL, in_ptr));
但这与任何构造函数都不匹配,但是我找不到关于如何初始化Buffer的任何好的文档。

甚至可以做这样的事情吗?如何使用C++ 1D或2D数组初始化Halide缓冲区?

最佳答案

缓冲区类型最近发生了变化,这就是为什么您在网上找不到有用的东西的原因。要创建指向数组的缓冲区,请使用以下两个构造函数之一:

https://github.com/halide/Halide/blob/master/src/runtime/HalideBuffer.h#L631

float my_array[10];
Halide::Buffer<float> buf(my_array); // Infers the size from the type

https://github.com/halide/Halide/blob/master/src/runtime/HalideBuffer.h#L665
float *my_pointer = ...
Halide::Buffer<float> buf(my_pointer, 10); // Accepts a pointer and some sizes

2D的工作原理类似:
float my_array[30][20]
Halide::Buffer<float> buf(my_array); // Makes a 20x30 array

或等效地,
float *my_pointer = ...
Halide::Buffer<float> buf(my_pointer, 20, 30);

这些构造函数均未复制数据-它们仅引用现有数组。

10-08 08:32