Hi there. I am new to OpenCL, so I thought I will start by writing a small kernel to see if it works:
// kernel.cl
__kernel void kernel(__global float* ez, int t, int H, int L, int W) {
float ddx, dt;
float fre = 1e9;
int is, js, ks;
ddx = 0.01;
dt = ddx / 6e8;
is = H / 2;
js = L / 2;
ks = W / 2;
float value = sin(2 * M_PI * fre * dt * t);
ez[is * L * W + js * W + ks] = value;
}
My main program main.cpp:
int t = 10;
int H = 100, L = 100, W = 100;
size_t size = H * L * W * sizeof(float);
float *ez = (float *)malloc(size);
// OpenCL context setup and kernel reads skipped
cl_mem ez_mem = clCreateBuffer(context, CL_MEM_READ_WRITE, size, NULL, &err);
CHECK_ERROR(err, "Failed to create buffer for ez");
err = clEnqueueWriteBuffer(queue, ez_mem, CL_TRUE, 0, size, ez, 0, NULL, NULL);
CHECK_ERROR(err, "Failed to write data to buffer ez");
err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &ez_mem);
err |= clSetKernelArg(kernel, 1, sizeof(int), &t);
err |= clSetKernelArg(kernel, 2, sizeof(int), &H);
err |= clSetKernelArg(kernel, 3, sizeof(int), &L);
err |= clSetKernelArg(kernel, 4, sizeof(int), &W);
CHECK_ERROR(err, "Failed to set kernel arguments for kernel()");
The error I got:
$ ./opencl_program
Failed to set kernel arguments for kernel(): -38
I also invoked CHECK_ERROR() after setting up the memory buffer and writing to it, and those did not raise any error. What could be the cause of the issue? Thank you.