将包含向量的对象的std :: vector传递给OpenCL

时间:2016-08-01 09:26:24

标签: c++ arrays vector opencl

我想将八叉树的向量传递给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?必须有办法,对吧?

0 个答案:

没有答案