Tencent / ncnn

ncnn is a high-performance neural network inference framework optimized for the mobile platform
Other
20.35k stars 4.16k forks source link

释放显卡接口出错 #1207

Closed qinxianyuzi closed 5 years ago

qinxianyuzi commented 5 years ago

代码如下: const char* imagepath = "1.jpg";// argv[1]; cv::Mat m = cv::imread(imagepath, CV_LOAD_IMAGE_COLOR); while (true) { ncnn::create_gpu_instance(); std::vector cls_scores; ncnn::Net squeezenet; squeezenet.use_vulkan_compute = 1; squeezenet.load_param("mobilenet2.param"); squeezenet.load_model("mobilenet2.bin");

    ncnn::Extractor ex = squeezenet.create_extractor();
    ex.set_light_mode(true);
    ex.set_num_threads(1);
    ncnn::Mat in = ncnn::Mat::from_pixels_resize(m.data, ncnn::Mat::PIXEL_BGR, m.cols, m.rows, 96, 112);
    ex.input("data", in);
    ncnn::Mat out;
    ex.extract("prob", out);
    ncnn::destroy_gpu_instance();
}
system("pause");
return 0;

程序跑完第一轮直接奔溃,无法循环第二次。而我把ncnn::Net squeezenet; 到ex.extract("prob", out);封装到一个函数里面,却可以循环,但内存会泄漏。有人遇到这样的情况吗?谢谢

nihui commented 5 years ago
ncnn::create_gpu_instance();
ncnn::destroy_gpu_instance();

这是全局调用一次的接口,不要放在循环里反复调用 ncnn::Net 析构必须在 ncnn::destroy_gpu_instance() 之前完成

qinxianyuzi commented 5 years ago

@nihui 了解了,谢谢