【发布时间】:2014-02-16 20:37:07
【问题描述】:
我正在做一个需要大量 OpenCL 代码的项目。我正在使用 OpenCV 的 ocl 模块来更快地开发我的项目,但是有一些功能没有实现,我将不得不编写自己的 OpenCL 代码。
我的问题是:将数据从 Mat 和/或 oclMat 传输到 cl_mem 数组的最快和最便宜的方法是什么。重新措辞一下,有没有一种好方法可以从 oclMat 或 Mat 传输或入队(clEnqueueWriteBuffer)数据?
目前,我正在使用 for 循环从 Mat 读取数据(或从 oclMat 下载,然后使用 for 循环),然后将其入队。事实证明这是昂贵的,因此我的问题。
感谢任何看到这个问题的人:)
【问题讨论】:
-
嗨,这对我有用。假设 x 是一个用“1”初始化的 oclMat。 oclMat x(100, 100, CV_32FC1, 标量 (1)); clSetKernelArg(kernel, 0, sizeof(cl_mem), (void *)&x.data);这对我有用,我通过挖掘 OpenCV 中给出的 ocl 代码得到了这个想法。如果您认为这里可能出现问题,请告诉我。谢谢!!
-
这是正确的使用方法。您甚至没有使用另一个缓冲区,而是直接使用原始 oclMat 缓冲区。当您将其缓冲区用于其他目的时,请注意不要使用原始 oclMat。