c++ - 在 C++ 中初始化 Halide 缓冲区

标签 c++ buffer halide

我正在尝试使用 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/

相关文章:

halide - Halide 索引是行优先、列优先还是混合?

halide - 使用增强型生成器的双边网格生成器类

c++ - 从迭代器推导出模板函数返回类型的值类型

c++ - 我应该在构造函数初始化列表中使用列表初始化吗?

c++ - Makefile包含错误

将 Char 缓冲区转换为短裤数组

linux - 如何从内核中的 UDP 读取缓冲区中删除数据包?

c++ - shared_ptr 到数组

javascript - 将 Blob 数据转换为 javascript 或 Node 中的原始缓冲区

c++ - Halide 可变域减少