2015-10-08 30 views
1

在我的代码中,我试图利用可能存在的支持cuda的GPU的功能。虽然此代码在具有cuda可用的计算机上运行良好(并且OpenCV已通过cuda支持进行编译),但是我遇到了将CPU执行后备的麻烦。即使建设失败,因为我使用的进口如果OpenCV的Cuda扩展不可用,请使用CPU后退

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

未找到。我对C++程序架构非常了解。我将如何建模我的代码以支持这种后备功能?

回答

2

如果您正在实施回退功能,则可能需要在运行时切换到回退功能。但是,您收到编译器错误消息的事实表明您正在使用不同的标志进行编译。在一般情况下,你可能想是这样的:

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

或者,你可以建立两个共享库有一个和一个没有CUDA和加载您需要根据HasCuda()之一。但是,如果您的二进制文件很大并且遇到内存问题,那么该方法才有意义。

可能需要在初始化Cuda的启动代码中具有类似的块。