Hello i'm trying to implement an atomic counter.
I've got information from this post http://www.khronos.org/message_boards/viewtopic.php?t=4520 and the http://www.khronos.org/registry/cl/extensions/ext/cl_ext_atomic_counters_32.txt specification.
The specification says :
The Host initializes the atomic counter by passing a buffer object as an
argument to the kernel. The counter initial value is taken from the first
4 bytes of the buffer object. During the run of the kernel, the global
buffer is not updated by the atomic operations done on the counter. At the
end of the kernel’s run, the updated value of the counter is written to
the buffer object.
but it does not specify the type the buffer needs to have.
So , here's my kernel argements on the host side :
cl_int *p; p = (int *)malloc(sizeof(cl_int)); p = 0; cl::Buffer index( context , CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR , sizeof(cl_int), p); //executing kernel kernel_func3(resultBuffer2, resultBuffer3, count, cl::__local(sizeof(cl_int)*REP*2*64), cl::__local(sizeof(cl_int)*REP*2), resultBuffer2_index, p); cmdqueue.finish();
This compiles but segfaults inside the kernel_func3
i've tried to use the type counter32_t but it just return
counter32_t’ was not declared in this scope
How do i have to initialize to get amd atomic counter to work ?