pointers - How to fix clSetKernelArg error CL_INVALID_MEM_OBJECT in Haskell OpenCLRaw? -


i trying use opencl using haskell. write simple program converting working 1 in c. appears work well, when assign memory object kernel parameters, fails cl_invalid_mem_object error. don't know fix because use same calls in c program , there works:

the programsource opencl code

programsource :: string programsource = "__kernel void duparray(__global float *in, __global float *out ){  int id = get_global_id(0); out[id] = 2*in[id]; }" 

and initializacion works until call of clsetkernelarg fails just (errorcode (-38))

-- test opencl input  <- newarray ([0,1,2,3,4] :: [cfloat])  right mem_in <- clcreatebuffer mycontext (memflagsjoin [clmemreadonly,clmemcopyhostptr]) (4*5) (castptr input) right mem_out <- clcreatebuffer mycontext clmemwriteonly (4*5) nullptr print (mem_in,mem_out) right program <- clcreateprogramwithsource mycontext programsource print program  err <- clbuildprogram program [mydeviceid] "" buildprogramcallback nullptr print err  right kernel <- clcreatekernel program "duparray" print kernel  kaerr0 <- clsetkernelarg kernel 0 (fromintegral.sizeof $ mem_in) (castptr mem_in) kaerr1 <- clsetkernelarg kernel 1 (fromintegral.sizeof $ mem_out) (castptr mem_out) print (kaerr0,kaerr1) 

i'm using openclraw, several modifications put on https://github.com/zhensydow/openclraw

i found need pass direction of mem buffer pointer, no pointer itself. rigth way call clsetkernelarg:

dir_mem_in <- (malloc :: io (ptr mem))  poke dir_mem_in mem_in kaerr0 <- clsetkernelarg kernel 0 (fromintegral.sizeof $ mem_in) (castptr dir_mem_in) dir_mem_out <- (malloc :: io (ptr mem))  poke dir_mem_out mem_out kaerr1 <- clsetkernelarg kernel 1 (fromintegral.sizeof $ mem_out) (castptr dir_mem_out) print (kaerr0, kaerr1) 

Comments

Popular posts from this blog

c# - SharpSVN - How to get the previous revision? -

c++ - Is it possible to compile a VST on linux? -

url - Querystring manipulation of email Address in PHP -