用C++初始化Halide Buffer

B.M*_*.Md 1 c++ buffer halide

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

Image<float> in(Buffer(type_of<float>(), size_x, 0, 0, 0, NULL, in_ptr));
Run Code Online (Sandbox Code Playgroud)

其中in_ptr是指向我的C++数组的指针.当我运行这个时,我收到以下错误:

错误:在'('token image in in(Buffer(type_of(),padded_size*(jb + 1),0,0,0,NULL,d_In))之前缺少模板参数;

所以我将我的代码更改为:

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

但这与任何构造函数都不匹配,但我找不到有关如何初始化Buffer的任何好文档.

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

小智 6

最近缓冲区类型已更改,这就是您在线查找的内容无效的原因.要创建指向数组的缓冲区,请使用以下两个构造函数之一:

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

2D类似地工作:

float my_array[30][20]
Halide::Buffer<float> buf(my_array); // Makes a 20x30 array
Run Code Online (Sandbox Code Playgroud)

或等效地,

float *my_pointer = ...
Halide::Buffer<float> buf(my_pointer, 20, 30); 
Run Code Online (Sandbox Code Playgroud)

这些构造函数都不会复制数据 - 它们只是引用现有数组.