Ich arbeite an einem Projekt, das viel OpenCL-Code benötigt. Ich verwende OpenCVs OCL-Modul, um mein Projekt schneller zu entwickeln, aber es sind einige Funktionen nicht implementiert und ich muss meinen eigenen OpenCL-Code schreiben.Daten von Mat/oclMat zu cl_mem übertragen (OpenCV + OpenCL)
Meine Frage ist das: Was ist die schnellste und billigste Möglichkeit, Daten von Mat und/oder oclMat zu einem cl_mem-Array zu übertragen. Um dies neu zu formulieren, gibt es eine gute Möglichkeit, Daten von oclMat oder Mat zu übertragen oder in die Warteschlange zu stellen (clEnqueueWriteBuffer)?
Momentan verwende ich eine for-Schleife, um Daten von Mat zu lesen (oder von oclMat herunterzuladen und dann for-Schleifen zu verwenden) und dann in die Warteschlange zu stellen. Dies stellt sich als kostspielig heraus, daher meine Frage.
Dank an alle, die diese Frage :)
Hallo, hier ist etwas, das für mich funktionierte. Angenommen, x ist ein mit "1" initialisierter oclMat. oclMat x (100, 100, CV_32FC1, Skalar (1)); clSetKernelArg (Kernel, 0, sizeof (cl_mem), (void *) & x.data); Dies funktionierte für mich und ich bekam diese Idee, indem ich den OCL-Code in OpenCV durchforstete. Bitte lassen Sie es mich wissen, wenn Sie denken, dass hier etwas schief gehen könnte. Vielen Dank!! – ponderingfish
Das ist der richtige Weg, es zu benutzen. Sie verwenden nicht einmal einen anderen Puffer, sondern direkt den ursprünglichen oclMat-Puffer. Seien Sie vorsichtig, das ursprüngliche oclMat nicht zu verwenden, während Sie seinen Puffer für andere Zwecke verwenden. – DarkZeros
Danke @DarkZeros! – ponderingfish