作者在做一个深度学习相关的Demo,基础代码是Caffe自带的classification.cpp,控制台模式下处理速度正常,但是移植到GUI程序中,处理速度变得非常慢。
- 处理速度慢,慢的原因是没有使用GPU,而是使用的CPU进行处理;
- 作者在GUI程序的界面线程中启动了一个处理线程(继承自QThread)用于图像分类,在处理线程中new了一个Classifier类(其构造函数中调用了Caffe::set_mode(Caffe::GPU))的指针,然后调用相关的函数完成图像分类,结果并没有实现Caffe::set_mode(Caffe::GPU)的效果(也就是处理速度慢)。后来作者在处理线程的处理函数中增加了Caffe::set_mode(Caffe::GPU),问题解决(处理速度和控制台模式一致)。
结合网络上搜集的信息(这里和这里),总结原因:多线程程序中,Caffe::set_mode(Caffe::GPU)需要在处理线程中调用,否则除了调用了Caffe::set_mode(Caffe::GPU)的线程会使用GPU进行处理外,其他线程还是使用CPU处理。