I assume :
I have this in the main:
if(!CreateMemObjects(context,memObjects,tableauObjet,F))
{
Cleanup(context,commandQueue,program,kernel,&memObjects[0]);
return 1;
}
errNum = clSetKernelArg(kernel,0,sizeof(cl_mem),&memObjects[0]);
errNum |= clSetKernelArg(kernel,1,sizeof(cl_mem),&memObjects[1]);
errNum |= clSetKernelArg(kernel,1,sizeof(cl_mem),&memObjects[2]);
errNum |= clSetKernelArg(kernel,1,sizeof(cl_mem),&memObjects[3]);
and in the function, i wrote :
int CreateMemObjects(cl_context context, cl_mem memObjects[4], knapSack *tableauObjet, int *F)
{
int nbElement1 = nbElement;
memObjects[0] = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
sizeof(knapSack) * nbElement, tableauObjet, NULL);
memObjects[1] = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
sizeof(int) * capacityMax, F, NULL);
memObjects[2] = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
sizeof(int), &nbElement1, NULL);
memObjects[3] = clCreateBuffer(context, CL_MEM_READ_WRITE,
sizeof(int), NULL, NULL);
if(memObjects[0] == NULL ||memObjects[1] == NULL ||memObjects[2] == NULL ||memObjects[3] == NULL )
{
printf("Error creating memory objects."");
return 0;
}
return 1;
}
and in the .cl file I wrote :
__kernel void knapSack_kernel(__global knapSack *tableauObjet, __global int *F, int nbElement, __global int *resultat)
Does it looks right?