如何将结构中的数组传递给内核?

时间:2018-06-21 13:42:17

标签: c++ opencl

我需要向内核输出一个结构数组,其中将存在一个数组。但是最后,数据有点正确,但是从某种程度上来说是错误的。 我在主机上有此代码

struct myStruct
{
    int a;
    double b;
    double c[5];
};

myStruct *result = new myStruct[countOptim];

for (int i = 0; i < countOptim; i++)
{
    result[i].a = 5;
    result[i].b = 11.5;
    for (int j = 0; j < 5; j++)
    {
        result[i].c[j] = j;
    }
}

// Make kernel
Kernel kernel(program, "vector_add");

Buffer bufferResult = Buffer(context, CL_MEM_READ_WRITE, countOptim * sizeof(myStruct));

queue.enqueueWriteBuffer(bufferResult, CL_TRUE, 0, countOptim * sizeof(myStruct), result);


kernel.setArg(0, bufferResult);


// Run the kernel on specific ND range
NDRange global(countOptim);
queue.enqueueNDRangeKernel(kernel, NULL, global);

此代码在内核上

struct myStruct
{
    int a;
    double b;
    double c[];
};
typedef struct myStruct myStruct;

__kernel void vector_add(__global myStruct *result) 
{


   // Get the index of the current element to be processed
   int id = get_global_id(0);

   printf("a - %d, b - %f, c[0] - %f",result[id].a, result[id].b, result[id].c[0]);
}

在控制台中显示此 enter image description here

问题可能出在内存中

Okey,可以通过在内核中指定数组的大小来固定。但是在内核中不设置数组大小就可以吗?

0 个答案:

没有答案