如果 OpenCV 的 Cuda 扩展不可用,请使用 CPU 回退
Use CPU fallback if OpenCV's Cuda extensions are not available
在我的代码中,我试图利用可能存在的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。
相关文章:
- 什么时候最好在子进程中使用 CPU 或 I/O 密集型代码 [ C++ ]
- 如果不是多个语句,请使用 if 语句
- Clang-CL 警告 strnicmp 已弃用,请使用 ISO C 并C++符合标准的名称_strnicmp
- 如果输入缓冲区不为空,请使用getchar.()检测Ctrl+d
- Tensorflow如何默认使用CPU核心
- 强制 Dlib python 仅使用 CPU 支持进行安装;在具有 Cuda 和所有内容的 GPU 机器上
- 如果 (QString.contains()) 不能正常工作,请使用 temp bool 变量进行更正
- 如果两个字符串是字谜,请使用unordered_map确定它们
- 使用SEND()之前,请使用Select()检查套接字
- 在编写平台依赖代码时,请使用constexpr代替宏
- 如果元组足够大,请使用sfinae启用方法
- 无法使用CPU后端使用TensorFlow AOT编译创建最终二进制文件
- 使用带有boost::program_options的多个源时,请使用最后一个存储值,而不是第一个存储值
- 特征错误:请使用密码保护您的最小值
- 要在不使用cout的情况下打印某些内容,请使用printf或puts()
- 在指定模板类之前,请使用模板类
- 在Fedora 20 x86_64上编译32位Linux应用程序时,请使用SNDFILE库
- C++类型擦除,请使用 std::function 捕获单个类的多个方法
- 对于几乎相似的内容,请使用qml文件
- 如果 OpenCV 的 Cuda 扩展不可用,请使用 CPU 回退