我有2個OpenCL內核,run_kernel
和apply_kernel
,我希望依次完成幾次。 run_kernel
的輸出包含apply_kernel
的一些輸入,但我不確定如何實現此操作。共享OpenCL內核數據
目前,我有一個單一的cl_mem
緩衝區名爲d_vertexBuffer
,我填寫了我想給run_kernel
的數據,並且它正確地完成了它的工作。我設置精氨酸這樣的內核:
error = clSetKernelArg(run_kernel, 0, sizeof(cl_mem), (void*) &d_vertexBuffer);
我已嘗試設置apply_kernel
使用相同d_vertexBuffer
,但我猜這打亂了run_kernel
訪問到它,因爲OpenCL的代碼也越來越爲NaN時,它試圖訪問緩衝區。我設置了apply_kernel
這樣的:
error = clSetKernelArg(apply_kernel, 0, sizeof(cl_mem), (void*) &d_vertexBuffer);
我創建d_vertexBuffer
這樣的:
d_vertexBuffer = clCreateBuffer(context, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR, vertexBufferSize, h_vertexBuffer, &error);
爲了多次運行這些內核,我有一個for
循環,排入內核在我的命令隊列。顯然這不是正確的做法。我將如何做到這一點,以便兩個內核能夠共享數據?
問題是'd_vertexBuffer'包含'float4'元素,我需要編輯每個元素用於兩個內核的每次迭代的元素。如果我在每一次迭代中都要加入新的元素,它會變得不合理。 –