【问题标题】:Use CPU fallback if OpenCV's Cuda extensions are not available如果 OpenCV 的 Cuda 扩展不可用,请使用 CPU 回退
【发布时间】:2015-10-08 20:41:19
【问题描述】:

在我的代码中,我试图利用可能存在的支持 cuda 的 GPU 的功能。虽然这段代码在有 cuda 可用的计算机上运行良好(并且 OpenCV 是在 cuda 支持下编译的),但我在实现 CPU 的 fallback 时遇到了麻烦。即使构建失败,因为我正在使用的导入

#include "opencv2/core/cuda.hpp"
#include "opencv2/cudaimgproc.hpp"
#include "opencv2/cudaarithm.hpp"

没有找到。关于 C++ 程序架构,我是个新手。我需要如何对代码进行建模以支持这种回退功能?

【问题讨论】:

    标签: c++ opencv cuda


    【解决方案1】:

    如果您正在实施回退,您可能希望在运行时切换到它。但是您收到编译器错误消息的事实表明您正在使用不同的标志进行编译。一般来说,你可能想要这样的东西:

    if (HasCuda()) {
      RunCudaCode(...);
    } else {
      RunCpuCode(...);
    }
    

    或者,您可以构建两个共享库,一个带有 Cuda,一个不带有 Cuda,然后根据 HasCuda() 加载您需要的一个。但是,只有当您的二进制文件很大并且遇到内存问题时,这种方法才有意义。

    您的启动代码中可能需要有一个类似的块来初始化 Cuda。

    【讨论】: