我想将八叉树的向量传递给OpenCL。 C ++类/结构的基本结构
struct Element
{
//child nodes
unsigned int c[8];
//actual value
Voxel vxl;
};
class Octree
{
vector<Element> elements;
}
我不能简单地将vector<Octree>
传递给OpenCL,也不能使用这样的方法(来自:How to pass and access C++ vectors to OpenCL kernel?):
cl_mem buffer_b = clCreateBuffer(
context, // OpenCL context
CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, // Only read access from kernel,
// copy data from host
sizeof(cl_double) * b.size(), // Buffer size in bytes
&b[0], // Pointer to data to copy
&errorcode);
我的方法是将所有元素放入一个arrray中并使用一系列索引来了解哪些元素属于哪个八叉树。然而,这非常缓慢,也不是一个漂亮的解决方案。
vector<Element> allElements;
vector<unsigned int> indices;
for (int i = 0; i < length(); i++)
{
indices.push_back(allElements.size());
for (int j = 0; j < this->at(i).length(); j++)
{
allElements.push_back(*this->at(i)[j]);
}
}
此代码需要几秒钟(取决于当然有多少个八分圆和元素)才能执行。
那么,我如何将这样的结构传递给OpenCL?必须有办法,对吧?