2013-07-29 188 views
3

我有2個OpenCL內核,run_kernelapply_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循環,排入內核在我的命令隊列。顯然這不是正確的做法。我將如何做到這一點,以便兩個內核能夠共享數據?

回答

1

該問題最終是不相關的;我偶然在apply_kernel中使用了一個2索引的全局工作大小,當我只想要1時,所以拋出了NaN,

1

通過它的聲音,您希望能夠將run_kernel的重要輸出附加到d_vertexBuffer的末尾。您可以使d_vertexBuffer大到足以存儲正常輸入值(vertexBufferSize)加上run_kernel輸出中的額外頂點。 run_kernel將其對於apply_kernel重要的部分輸出複製到d_vertexBuffer以上的部分上面vertexBufferSize

+0

問題是'd_vertexBuffer'包含'float4'元素,我需要編輯每個元素用於兩個內核的每次迭代的元素。如果我在每一次迭代中都要加入新的元素,它會變得不合理。 –