我正在开发一个需要大量OpenCL代码的项目.我正在使用OpenCV的ocl模块来更快地开发我的项目,但有些功能没有实现,我将不得不编写自己的OpenCL代码.
我的问题是:将数据从Mat和/或oclMat传输到cl_mem数组的最快最便宜的方法是什么.重写一下,有没有一种很好的方法可以从oclMat或Mat中传输或排队(clEnqueueWriteBuffer)数据?
目前,我正在使用for循环从Mat读取数据(或从oclMat下载然后使用for循环),然后将其排队.结果证明这是昂贵的,因此我的问题.
感谢任何看到这个问题的人:)
计算主机-设备互连中实现的内存带宽。
如果您获得约 60% 或更多的最大带宽,则您无需执行任何操作,内存传输将尽可能快。但是,如果您的带宽结果低于理论最大值的 55% - 60%,请尝试使用多个命令队列进行解锁操作(不要忘记最后同步)。另外,请注意平均图像大小。小数据传输通常具有较大的开销率。
如果您的设备使用共享内存,请使用内存映射而不是读/写,这可能会大大节省时间。如果设备有自己的内存,请应用固定内存技术,该技术在 NVIDIA OpenCL 最佳实践指南中有详细描述。
| 归档时间: |
|
| 查看次数: |
2613 次 |
| 最近记录: |