我正在将Halide用于C ++代码库的某些部分。我有一个AoT编译函数,它评估一个元组值的Func,所以它被编译为buffer_t结构作为函数的输入(现在它被编译为halide_buffer_t)。在我调用库的.cpp文件中,我将这些buffer_t值定义如下:
result1.host = (uint8_t*)result_cpp_array;
result1.elem_size = sizeof(float);
result1.stride[0] = 1;
result1.min[0] = 2;
result1.min[1] = 2;
result1.min[2] = 2;
result1.stride[1] = size_x + 1;
result1.stride[2] = (size_y + 1) * (size_x + 1);
result1.extent[0] = size_x - 3;
result1.extent[1] = size_y - 3;
result1.extent[2] = size_z - 3;
int error = function_aot_halide(/*list of inputs*/, &result1, /*other results similar to result1*/);
我有这部分代码将缓冲区映射到我想要存储结果的c ++数组,而且我还需要min和extent的值来让函数实现部分数组而不是整个阵列。 这适用于旧版本的Halide,但它不适用于新的卤化物缓冲区。使用新缓冲区实现做同样事情的最佳方法是什么?
答案 0 :(得分:1)
你应该使用Halide::Runtime::Buffer
,除非你有充分的理由不这样做(比如有限或没有C ++支持。)由于你的数据没有紧密包装,你必须向{{1}解释}。
Buffer