c - ClEnqueueCopyBuffer with offset 1 -
to optimize kernel need make copy of cl_mem object offset.
count_buffer3[n] = count_buffer[n+1]
is desired result
looking @ specification of clenqueuecopybuffer seems possible simple argument.
cl_int clenqueuecopybuffer ( cl_command_queue command_queue, cl_mem src_buffer, cl_mem dst_buffer, size_t src_offset, size_t dst_offset, size_t cb, cl_uint num_events_in_wait_list, const cl_event *event_wait_list, cl_event *event)
my idea set dst_offset 1. copy_buffer[0] goes copy_buffer[1] in case command looks like:
clenqueuecopybuffer(command_queue, count_buffer, count_buffer3, 1, 0, (incount1 + 1) * sizeof(int), null, null, null);
so want copy count_buffer count_buffer3 offset of 1. result should this:
count_buffer[1] = 2 count_buffer[2] = 12 count_buffer[3] = 26 count_buffer3[1] = 12 count_buffer3[2] = 26
unfortunately, if dst_offset 1 shown in example complete count_buffer3 object contains "0" int values.
if offset 0, copy works fine , both count_buffers identical.
additional information: here init of clmem objects:
cl_mem count_buffer3 = clcreatebuffer(context, cl_mem_read_write, (incount1 + 1) * sizeof(int), null, &err); errwrapper("create buffer", err); cl_mem count_buffer = clcreatebuffer(context, cl_mem_read_write, (incount1+1) * sizeof(int), null, &err); errwrapper("create buffer", err);
i using intel inde update 2 visual studio 2013
am doing sth wrong here, or should copy offset work this?
edit: reduced buffer size 1 , result changes. instead of "0" huge numbers.
example debug:
count_buffer[0] = 0 count_buffer[1] = 31 count_buffer[2] = 31 count_buffer3[0] = 520093696 count_buffer3[1] = 520093696 count_buffer3[2] = 520093696
it improvement "0" values, still wrong. ideas?
thanks answer far!
the offset in bytes. want offset of sizeof count_buffer[0]
, size of (n - 1) * sizeof count_buffer[0]
:
clenqueuecopybuffer( command_queue, count_buffer, count_buffer3, sizeof(cl_int), 0, incount1 * sizeof(cl_int), null, null, null);
Comments
Post a Comment