爲了優化一個內核,我需要用一個偏移量來創建一個cl_mem對象的副本。ClEnqueueCopyBuffer與偏移量1
count_buffer3[n] = count_buffer[n+1]
是所期望的結果
綜觀ClEnqueueCopyBuffer的說明書它似乎是能夠以簡單的論點。
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)
我的想法是DST_OFFSET設置爲1,所以copy_buffer [0]進入copy_buffer [1] 在我的情況下,命令如下:
clEnqueueCopyBuffer(command_queue, count_buffer, count_buffer3, 1, 0, (inCount1 + 1) * sizeof(int), NULL, NULL, NULL);
所以我想count_buffer複製1. 結果count_buffer3具有偏移應該是這樣的:
count_buffer[1] = 2
count_buffer[2] = 12
count_buffer[3] = 26
count_buffer3[1] = 12
count_buffer3[2] = 26
不幸的是,如果我的DST_OFFSET是1等所示實施例我的完整湊nt_buffer3對象只包含「0」作爲int值。
如果我的偏移量爲0,複製工作正常,並且兩個count_buffers是相同的。
附加信息: 這裏有clmem對象的初始化:
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);
我使用英特爾INDE更新2與Visual Studio 2013
我在這裏做某事錯了,還是應該複製像這樣的抵消工作?
編輯: 我減少了一個緩衝區大小和結果的變化。 而不是所有的「0」我得到一些非常大的數字。從調試
例如:
count_buffer[0] = 0
count_buffer[1] = 31
count_buffer[2] = 31
count_buffer3[0] = 520093696
count_buffer3[1] = 520093696
count_buffer3[2] = 520093696
這是一個進步 「0」 值,但仍然是錯誤的。 有什麼想法?
感謝您的回答!
對於好奇心起見,'520093696 = 31 << 24;'女巫是完全等同於讀8位出在一個32位的int數組偏移。 – DarkZeros