【问题标题】:Opencv acceleration with CUDA in C++在 C++ 中使用 CUDA 进行 Opencv 加速
【发布时间】:2020-10-08 07:56:01
【问题描述】:

我是 HPC 学生,我使用 OpenCV 函数和 C++ 进行项目编码。我必须并行代码以获得高性能,所以我决定使用 CUDA 加速。我对以下内容感到困惑……

  1. 为了获得高性能,仅使用 CUDA 就足够了吗?
  2. 我可以将 OpenCV::GPU 或 OpenCV::CUDA 与 Cuda GPU 一起使用吗?
  3. OpenCV::GPU 和 OpenCV::CUDA 有什么不同?

【问题讨论】:

    标签: c++ opencv gpu


    【解决方案1】:
    1. 只有拥有 NVIDIA 卡才能使用 CUDA 编程。仅当您进行并行处理时,才会使用通用 GPU 硬件的功能。
      例如,如果您正在处理图像,则图像的每个像素都有单独的操作。然后 GPU 编程有助于节省计算时间。

      在您的应用程序中,第二个像素输入取决于第一个像素输入。然后它更好地在 CPU 本身中运行您的应用程序。同样,从 CPU 到 GPU 和 GPU 到 CPU 的数据传输也会影响性能。编码时需要小心。

    2 & 3. OpenCV2 版本语法为 cv::gpu,而 OpenCV3 版本语法为 cv::cuda。这取决于您使用的 opencv 版本。

    【讨论】:

    • 非常感谢您的回答,实际上我正在研究图像本地化并且我有Nvidia卡,所以我只想知道是否可以在我的应用程序中同时使用cuda和opencv::cuda。
    • 是的。这应该不是问题。
    • 我还有一个问题,拜托。对于我的项目,我需要使用 MinGW 编译 CPU 代码,并在将每个薄链接在一起之后使用 MSVC 编译器打开::cuda,所以你知道如何在 cmakelists.txt 上做到这一点吗?
    • CUDA 代码将由 nvcc 编译器编译。以下是您在 CMakeList 中可能需要的一些代码。 if (CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS "-O3 -Wall") set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -std=c++11") endif() set(CUDA_HOST_COMPILER "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe") 用两个编译器(mingw 和 msvc)编译一个应用程序,我从来没有(教过)听说过。
    • 我对此有点困惑,这是我第一次在 Windows 中构建项目,我将尝试澄清问题:我有一个顺序代码:这是由:c++(MinGW )+OpenCV+Qt+cmake 我的任务是并行化代码(移植到 GPU):所以我决定使用 Cuda(内核),经过研究我发现我也可以使用 opencv::Cuda 来并行化 OpenCV 函数。现在:我不知道如何在我的应用程序中同时使用 (Cuda kernels ) 和 (Opencv::cuda)。你有什么建议?
    猜你喜欢
    • 2011-11-23
    • 2018-09-15
    • 2016-11-07
    • 2022-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 2019-07-11
    相关资源
    最近更新 更多