【问题标题】:OpenCV CUDA API very slow at the first callOpenCV CUDA API 在第一次调用时非常慢
【发布时间】:2021-02-01 20:12:51
【问题描述】:

我正在使用cuda::resize 调整图像矢量的大小(在 GpuMat 中)

它显示第一次调用大约需要 15 毫秒,其余的只需要大约 0.3 毫秒。所以想问问有没有办法缩短第一次通话的时间。

这是我的代码(简化):

for (int i = 0; i < num_images; ++i)
    {
        full_img = v_GpuMat[i].clone(); // vGpuMat is vector of images in cuda::GpuMat
        seam_scale = 0.4377;
        cuda::resize(full_img, img, Size(), seam_scale, seam_scale, INTER_LINEAR);
    }

非常感谢。

【问题讨论】:

标签: opencv cuda


【解决方案1】:

CUDA 设备内存分配和将数据从设备复制到主机(反之亦然)非常慢。请尝试分配内存并在主循环之外加载数据。克隆矩阵每次都会分配新的设备内存,尝试使用复制数据而不是克隆它应该会加快您的代码速度。

【讨论】:

    【解决方案2】:

    在 Nvidia-Visual-Profile 中检查结果后,我发现它是 cudaLaunchKernel 大约需要 20 毫秒,并且只会在第一次调用。

    如果您必须像我一样制作一个连续的过程,那么其中一个解决方案可能是在您处理自己的任务之前进行试运行。对于这个示例,使cuda::resize 退出循环要快得多。

    【讨论】:

    • 你能评论一下这个 Nvidia Visual Profile
    猜你喜欢
    • 2023-03-13
    • 2013-07-08
    • 2017-04-23
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 2017-01-24
    • 2018-03-31
    • 1970-01-01
    相关资源
    最近更新 更多