我正在研究需要大量OpenCL代碼的項目。我正在使用OpenCV的ocl模塊來更快地開發我的項目,但有一些功能沒有實現,我將不得不編寫自己的OpenCL代碼。將數據從Mat/oclMat傳輸到cl_mem(OpenCV + OpenCL)
我的問題是:什麼是從Mat和/或oclMat傳輸數據到cl_mem數組的最快和最便宜的方法。重新措辭這是否有一個很好的方法來傳輸或入隊(clEnqueueWriteBuffer)從oclMat或Mat數據?
目前,我正在使用for-loop從Mat讀取數據(或從oclMat下載,然後使用for-loops),然後將它排入隊列。這是昂貴的,因此我的問題。
感謝任何看到此問題的人:)
嗨,這是對我有用的東西。假定x是用「1」初始化的oclMat。 oclMat x(100,100,CV_32FC1,Scalar(1)); clossKernelArg(kernel,0,sizeof(cl_mem),(void *)&x.data); 這對我有用,我通過挖掘OpenCV中給出的ocl代碼得到了這個想法。請讓我知道你是否認爲這裏可能出現問題。謝謝!! – ponderingfish
這就是使用它的正確方法。你甚至沒有使用另一個緩衝區,而是直接使用原始的oclMat緩衝區。當您將其緩衝區用於其他目的時,請小心不要使用原始的oclMat。 – DarkZeros
謝謝@DarkZeros! – ponderingfish