我正在尝试使用 C++ 一维数组初始化 Halide Buffer。鉴于网上的一些其他帖子,这是我到目前为止所得到的:
Image<float> in(Buffer(type_of<float>(), size_x, 0, 0, 0, NULL, in_ptr));
其中 in_ptr 是指向我的 C++ 数组的指针。 当我运行它时,出现以下错误:
error: missing template arguments before ‘(’ token Image 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));
但这也不匹配任何构造函数,但我找不到任何关于如何初始化缓冲区的好文档。
甚至可以做这样的事情吗?如何使用 C++ 一维或二维数组来初始化 Halide 缓冲区?
最佳答案
Buffer 类型最近发生了变化,这就是为什么您在网上找到的东西没有用的原因。要创建指向数组的缓冲区,请使用以下两个构造函数之一:
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);
这些构造函数都不复制数据 - 它们只是引用现有数组。
关于c++ - 在 C++ 中初始化 Halide 缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39779149/