C++ 在OpenCV和Nvidia Jetson TK1中使用GPU流 我几周前就已经获得了英伟达JTSON TK1,同时我尝试使用CPU和GPU,因此使用流类。通过一个简单的测试,我意识到它没有做我认为应该做的事情,我可能用错了,或者可能是一个编译器选项

C++ 在OpenCV和Nvidia Jetson TK1中使用GPU流 我几周前就已经获得了英伟达JTSON TK1,同时我尝试使用CPU和GPU,因此使用流类。通过一个简单的测试,我意识到它没有做我认为应该做的事情,我可能用错了,或者可能是一个编译器选项,c++,opencv,gpu,C++,Opencv,Gpu,在发布此问题之前,我查看了此链接以获取答案: 这是我的密码: #include <stdio.h> #include <iostream> #include "opencv2/core/core.hpp" #include "opencv2/features2d/features2d.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include

在发布此问题之前,我查看了此链接以获取答案:

这是我的密码:

#include <stdio.h> 
#include <iostream>   
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/gpu/gpu.hpp"
#include <time.h> 

using namespace cv;
using namespace std;
using namespace gpu;    


int main(int argc,char** argv)    
{    
 unsigned long AAtime=0, BBtime=0;  
gpu::setDevice(0);
gpu::FeatureSet(FEATURE_SET_COMPUTE_30);
Mat host_src= imread(argv[1],0);
GpuMat gpu_src, gpu_dst;

Stream stream;

gpu_src.upload(host_src);

AAtime = getTickCount(); 
blur(gpu_src, gpu_dst, Size(5,5), Point(-1,-1), stream);

//Cpu function
int k=0;
for(unsigned long long int j=0;j<10;j++)
for(unsigned long long int i=0;i<10000000;i++)
 k+=rand(); 

stream.waitForCompletion();
Mat host_dst;
BBtime = getTickCount();  
 cout<<(BBtime - AAtime)/getTickFrequency()<<endl;
gpu_dst.download(host_dst);

 return 0;  

}   
为了编译,我使用了以下命令:"g++-Ofast-mfpu=neon-funsafe数学优化-fabi version=8-Wabi-std=c++11-march=armv7-a testStream.cpp-fopenmp-lopencv_core-lopencv_imgproc-lopencv_highgui-lopencv_高gui-lopencv-calib3d-lopencv-contrib-lopencv_功能2d-lopencv-flann-lopencv-lopencv-gpu-lagen-lopencv-lopencv-lopencu遗产-lopencv-lopencv-ml-jdv-obetect-lopencu照片拼接-lopencv_superres-lopencv_video-lopencv_videostab-o gpuStream“有些可能是多余的,我在没有它们的情况下尝试过,它也会这样做


我错过了什么?谢谢你的回答:)

碰巧你还在做这件事,你有没有用nvprof评测过这个程序?它会显示GPU内核运行的时间、它们运行的流等等。
CudaMem host_src_pl(Size(900, 1200), CV_8UC1, CudaMem::ALLOC_PAGE_LOCKED); // My image is 1200 by 900
CudaMem host_dst_pl;
Mat host_src= imread(argv[1],0);
host_src = host_src_pl;
//rest of the code