我注意到如果传递流,OpenCV 的函数 cv::cuda::dft
也会同步运行。通常这意味着函数是异步执行的。然而,dft 函数似乎调用了导致同步行为的 cudaFree
。
有没有办法让它异步运行?
最佳答案
问题在于袖口计划的创建和销毁。函数 cv::cuda::dft
会在您每次调用它时执行此操作。当在循环中完成并导致同步调用时,这是非常低效的。目前似乎没有办法创建 dft 过滤器然后多次应用它,因为使用 cudafilters 是可能的,您可以先创建一个过滤器然后将它多次应用于不同的数据。
最后我通过不使用 OpenCV 的 dft 函数而是直接使用 cufft 解决了这个问题。然后我可以在循环之前创建一次计划,在循环内用那个计划做我的 ffts,然后在循环之后销毁它。
关于C++、OpenCV:异步运行 cuda::dft,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36228551/