VS2010 + CUDA7.5 + GPU编译OpenCV2.4.9
2017-02-20 23:12
696 查看
opencv2.4.9调用GPU报错
OpenCV Error:Gpu
API call<invalid device symbol>in unknown function…
WIN7 + VS2010 + CUDA7.5 + CMake3.0.2
Cmake 重新编译opencv之后,显示编译成功。
代码:num_devices= cv::gpu::getCudaEnabledDeviceCount();
返回 num_devices 个数为1.
但是运行测试代码以及opencv自带的gpu
sample时会报错.
OpenCV Error:Gpu API call<invalid device symbol>in unknown function…
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/10/e5a8019babd530789f301bac01ea7920)
问题分析:
这是由于编译好的CUDA不支持本机GPU的原因,本机GPU型号为GeForce GT 602,计算能力为2.1(关于gpu型号对应的计算能力,参考https://developer.nvidia.com/cuda-gpus),而Cmake编译的时候,由于"CUDA_GENERATION"
= Kepler. 所以默认生成的计算能力为3.0和3.5 。所以在调用opencv的GPU函数时会出现Gpu API call<invalid devicesymbol>in unknown function….的错误。
解决方案:
将"CUDA_GENERATION"= Auto.或者"CUDA_GENERATION" = Fermi.
测试运行成功:
测试代码:
[cpp] view
plain copy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
#include <opencv2/opencv.hpp>
#include <opencv2/gpu/gpu.hpp>
using namespace cv;
using namespace cv::gpu;
int main()
{
int num_devices = cv::gpu::getCudaEnabledDeviceCount();
if(num_devices <= 0)
{
std::cerr<<"There is no device. "<<std::endl;
return -1;
}
std::cerr<<"getCudaEnabledDeviceCount NUM :"<<num_devices<<std::endl;
cv::Mat srcImage = cv::imread("M:\\work\\Pic\\cityWu.jpg");
cv::Mat dstImage;
cv::gpu::GpuMat d_srcImage;//upload image to GPU
cv::gpu::GpuMat d_dstImage;
d_srcImage.upload(srcImage);
cv::gpu::GpuMat dst;
dst.create(d_srcImage.size(),CV_8UC1);
cv::gpu::cvtColor(d_srcImage, d_dstImage, CV_BGR2GRAY);
d_dstImage.download(dstImage);
cv::imshow("RGB",srcImage);
cv::imshow("gray",dstImage);
cv::waitKey(0);
return 0;
}
运行结果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/10/c31f29e0f291df18c0ba122cc34048c7)
序曲:
由于我的电脑GPU型号为NVIDIA GeForce GT 620,计算能力为2.1, (查看计算能力 网址)
首先我将"CUDA_GENERATION"= Auto,编译,生成。
但是在OpenCV.sln中生成opencv_core时,会报错,错误为:
1. CMakeError at cuda_compile_generated_bf_knnmatch.cu.obj.cmake:206 (message):
>C:\ProgramFiles (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(151,5):error MSB6006: “cmd.exe”已退出,代码为 1。
即会有一个生成失败。
为了解决这个错误,
我将"CUDA_GENERATION" = Fermi.
将CUDA_ARCH_BIN 设为2.0 2.1
将CUDA_ARCH_PTX清空,编译,生成。
然后,在OpenCV.sln中生成opencv_core,生成成功!!!
将我的错误以及改正过程贴出来,希望遇到同样情况的你,可以有所帮助!
切记:一定要注意查找好本机GPU的类型和计算能力,再生成相应的CUDA.
参考文章:
http://stackoverflow.com/questions/22823186/opencv-gpu-mat-hanging
https://developer.nvidia.com/cuda-gpus
http://blog.csdn.net/wangyaninglm/article/details/39997113
OpenCV Error:Gpu
API call<invalid device symbol>in unknown function…
WIN7 + VS2010 + CUDA7.5 + CMake3.0.2
Cmake 重新编译opencv之后,显示编译成功。
代码:num_devices= cv::gpu::getCudaEnabledDeviceCount();
返回 num_devices 个数为1.
但是运行测试代码以及opencv自带的gpu
sample时会报错.
OpenCV Error:Gpu API call<invalid device symbol>in unknown function…
问题分析:
这是由于编译好的CUDA不支持本机GPU的原因,本机GPU型号为GeForce GT 602,计算能力为2.1(关于gpu型号对应的计算能力,参考https://developer.nvidia.com/cuda-gpus),而Cmake编译的时候,由于"CUDA_GENERATION"
= Kepler. 所以默认生成的计算能力为3.0和3.5 。所以在调用opencv的GPU函数时会出现Gpu API call<invalid devicesymbol>in unknown function….的错误。
解决方案:
将"CUDA_GENERATION"= Auto.或者"CUDA_GENERATION" = Fermi.
测试运行成功:
测试代码:
[cpp] view
plain copy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
#include <opencv2/opencv.hpp>
#include <opencv2/gpu/gpu.hpp>
using namespace cv;
using namespace cv::gpu;
int main()
{
int num_devices = cv::gpu::getCudaEnabledDeviceCount();
if(num_devices <= 0)
{
std::cerr<<"There is no device. "<<std::endl;
return -1;
}
std::cerr<<"getCudaEnabledDeviceCount NUM :"<<num_devices<<std::endl;
cv::Mat srcImage = cv::imread("M:\\work\\Pic\\cityWu.jpg");
cv::Mat dstImage;
cv::gpu::GpuMat d_srcImage;//upload image to GPU
cv::gpu::GpuMat d_dstImage;
d_srcImage.upload(srcImage);
cv::gpu::GpuMat dst;
dst.create(d_srcImage.size(),CV_8UC1);
cv::gpu::cvtColor(d_srcImage, d_dstImage, CV_BGR2GRAY);
d_dstImage.download(dstImage);
cv::imshow("RGB",srcImage);
cv::imshow("gray",dstImage);
cv::waitKey(0);
return 0;
}
运行结果:
序曲:
由于我的电脑GPU型号为NVIDIA GeForce GT 620,计算能力为2.1, (查看计算能力 网址)
首先我将"CUDA_GENERATION"= Auto,编译,生成。
但是在OpenCV.sln中生成opencv_core时,会报错,错误为:
1. CMakeError at cuda_compile_generated_bf_knnmatch.cu.obj.cmake:206 (message):
>C:\ProgramFiles (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(151,5):error MSB6006: “cmd.exe”已退出,代码为 1。
即会有一个生成失败。
为了解决这个错误,
我将"CUDA_GENERATION" = Fermi.
将CUDA_ARCH_BIN 设为2.0 2.1
将CUDA_ARCH_PTX清空,编译,生成。
然后,在OpenCV.sln中生成opencv_core,生成成功!!!
将我的错误以及改正过程贴出来,希望遇到同样情况的你,可以有所帮助!
切记:一定要注意查找好本机GPU的类型和计算能力,再生成相应的CUDA.
参考文章:
http://stackoverflow.com/questions/22823186/opencv-gpu-mat-hanging
https://developer.nvidia.com/cuda-gpus
http://blog.csdn.net/wangyaninglm/article/details/39997113
相关文章推荐
- Win7下,VS2010 + CUDA7.5 + GPU 重新编译OpenCV2.4.9(二)
- Win7下,VS2010 + CUDA7.5 + GPU 重新编译OpenCV2.4.9(一)
- win7 + VS2010 + CUDA7.5 编译OPENCV2.4.9 报错:CMake Error at cmake/OpenCVUtils.cmake:433 (string):
- cuda5.5/6.0 + opencv 2.4.9 vs2010 编译opencv GPU模块
- 编译cuda版本的opencv——cuda7.5+opencv2.4.9+vs2013
- Win10编译OpenCV2.4.9+CUDA7.5的方法
- CUDA6.5+VS2010+OpenCV2.4.9的环境搭建过程
- windows7 64位机上配置支持GPU版(CUDA7.5)的OpenCV2.4.13操作步骤
- Ubuntu16.05+CUDA8下编译OpenCV错误 [...cuda_compile_generated_gpu_mat.cu.o] Error 1
- windows7 64位机上配置支持GPU版(CUDA7.5)的OpenCV2.4.13操作步骤
- [转][linux(ubuntu14.04)+GPU+cuda6.5+caffe+openCV2.4.9+matlab2013b+python2.7的新手配置转]
- VS2010重编译OpenCV2.4.9 用于调试源代码
- 编译Opencv的GPU,利用CUDA加速
- 重新编译Opencv:Opencv3.2.0+CUDA7.5+VS2013+Cmake3.8+Quadro K620显卡+Win7系统
- 如何编译OpenCV-2.3.x/OpenCV-2.4.x使其支持GPU-CUDA高速运算?
- VS2010重编译OpenCV2.4.9 用于调试源代码
- 【配置】vs13+opencv2.4.9+cuda6.5+64位win7编译配置
- Windows7+VS2012下64位OpenCV3.0+CUDA7.5的编译和部署
- linux(ubuntu14.04)+cuda7.5+caffe+openCV2.4.9+matlab+cudnn新手配置
- Win10 下Cmake编译配置 Opencv3.1 + Cuda7.5 + VS2013