如果 OpenCV 的 Cuda 扩展不可用,请使用 CPU 回退

Use CPU fallback if OpenCV's Cuda extensions are not available

本文关键字:请使用 CPU 回退 OpenCV Cuda 扩展 如果      更新时间:2023-10-16

在我的代码中,我试图利用可能存在的cuda功能GPU的功能。虽然这段代码在cuda可用的计算机上工作得很好(其中OpenCV是用cuda支持编译的),但我在实现回退到CPU时遇到了麻烦。甚至构建也失败了,因为我使用

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

没有找到。对于c++程序架构,我还是个新手。我需要如何建模我的代码来支持这样的回退功能?

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

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

或者,您可以构建两个共享库,一个使用Cuda,一个不使用Cuda,并加载基于HasCuda()所需的库。但是,这种方法只有在二进制文件非常大并且遇到内存问题时才有意义。

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