在C+中初始化卤化物缓冲区+; 我试图用C++ 1D数组初始化Halide Buffer。考虑到其他一些在线帖子,这是我目前得到的: Image<float> in(Buffer(type_of<float>(), size_x, 0, 0, 0, NULL, in_ptr)); Image-in(缓冲区(type_of(),size_x,0,0,0,NULL,in_ptr)); 其中,InPtR是指向C++数组的指针。 当我运行此命令时,会出现以下错误:

在C+中初始化卤化物缓冲区+; 我试图用C++ 1D数组初始化Halide Buffer。考虑到其他一些在线帖子,这是我目前得到的: Image<float> in(Buffer(type_of<float>(), size_x, 0, 0, 0, NULL, in_ptr)); Image-in(缓冲区(type_of(),size_x,0,0,0,NULL,in_ptr)); 其中,InPtR是指向C++数组的指针。 当我运行此命令时,会出现以下错误:,c++,buffer,halide,C++,Buffer,Halide,错误:“(”标记之前缺少模板参数 图像输入(缓冲区(type_of(),padded_size*(jb+1),0,0,0,NULL,d_-in)) 因此,我将代码更改为: Image-in(缓冲区(type_of(),size_x,0,0,0,NULL,in_ptr)); 但这与任何构造函数都不匹配,但我找不到任何关于如何初始化缓冲区的好文档 P>是否有可能这样做?我如何使用C++ 1D或2D数组初始化卤化物缓冲区? 最近发生的缓冲类型改变,这就是为什么你在网上发现的东西是没有用的。 flo

错误:“(”标记之前缺少模板参数 图像输入(缓冲区(type_of(),padded_size*(jb+1),0,0,0,NULL,d_-in))

因此,我将代码更改为:

Image-in(缓冲区(type_of(),size_x,0,0,0,NULL,in_ptr));

但这与任何构造函数都不匹配,但我找不到任何关于如何初始化缓冲区的好文档


<> P>是否有可能这样做?我如何使用C++ 1D或2D数组初始化卤化物缓冲区?

最近发生的缓冲类型改变,这就是为什么你在网上发现的东西是没有用的。

float my_数组[10];
Halide::Buffer buf(my_数组);//根据类型推断大小

float*我的指针=。。。
Halide::Buffer buf(my_指针,10);//接受指针和一些大小
2D的工作原理与此类似:

float my_array[30][20]
Halide::Buffer<float> buf(my_array); // Makes a 20x30 array
float my_数组[30][20]
卤化物::Buffer buf(my_数组);//构成20x30数组
或同等地

float *my_pointer = ...
Halide::Buffer<float> buf(my_pointer, 20, 30); 
float*我的指针=。。。
卤化物::缓冲区buf(my_指针,20,30);

这两个构造函数都不复制数据-它们只是引用现有阵列。

对于最新的卤化物,您可能需要:

缓冲区我的缓冲区(in_ptr,size_x);

这将创建指向\u ptr中的
my\u buffer
。模板参数中的1是维度数量。对于较大数量的维度,在通过预填充内存时,可能还必须指定跨距。(以上假设\u ptr
中指向的数据
密集排列,即每个元素的索引比\u ptr
中的前一个索引大一个)


这方面的语法最近发生了变化,但其目的是使使用更简单、更一致。

是否有一个构造函数可以复制数据而不是指向数组?您可以强制复制到设备
buf.copy\u到设备(halide\u opencl\u device\u interface())
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);