我需要向内核输出一个结构数组,其中将存在一个数组。但是最后,数据有点正确,但是从某种程度上来说是错误的。 我在主机上有此代码
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]);
}
问题可能出在内存中
Okey,可以通过在内核中指定数组的大小来固定。但是在内核中不设置数组大小就可以吗?