我正在测试opencv源代码树中某些样本的性能,具体取决于是否使用了卤化物。
令人惊讶的是,如果使用卤化物进行计算,性能会更差:
我按照this tutorial中的说明编译了halide和opencv。 opencv代码是从master branch of the opencv git repository下载的。
我使用示例文件'resnet_ssd_face.cpp'和'squeezenet_halide.cpp'测试了性能。在这两种情况下,我都会在调用'forward'之前包含其中一个代码行,以激活或停用卤化物:
net.setPreferableBackend(DNN_BACKEND_HALIDE); // use Halide
net.setPreferableBackend(DNN_BACKEND_DEFAULT); // NOT use Halide
在调用“前进”功能后,使用此代码测量时间:
std::vector<double> layersTimings;
double freq = cv::getTickFrequency() / 1000;
double time = net.getPerfProfile(layersTimings) / freq;
std::cout << "Time: " << time << " ms" << std::endl;
教程中是否遗漏了什么?是否应该使用不同的参数编译Halide? p>
我的设置是:
OS: Linux (Ubuntu 16.04)
CPU: Intel(R) Core(TM) i5-4570 CPU @ 3.20GHz
GPU: nVidia GeForce GT 730 (Driver Version: 384.90)
Cuda: CUDA Version 9.0.176
答案 0 :(得分:2)
考虑到Dmitry Kurtaev的评论并在OpenCV GitHub帐户中查找wiki,我发现a page其中包含了比较不同方法的基准(我错过了教程中的链接)。< / p>
此外,还有merge request,其中包含类似的基准。
在两者中,时间测量显示使用Halide的性能比使用原始c ++方法更差。
我可以假设Halide集成处于早期阶段。此外,作为Zalman Stern注释,Halide调度是一项正在进行的工作,opencv的dnn模块中的原始优化可能比包含的Halide调度更准确。
我希望这些措施可能会在OpenCV的未来版本中发生变化,但就目前来说,这就是性能。
答案 1 :(得分:1)