【opencv基础】代码优化加速相关


1. 浮点数据定点化;

cv::Mat tmp1 = values * 1000000;
tmp1.convertTo(tmp1, CV_32SC1);
cv::Mat tmp2 = this->weights * 1000000;
tmp2.convertTo(tmp2, CV_32SC1);
cv::Mat tmp(tmp1.rows, tmp2.cols, CV_64FC1);
tmp = tmp1 * tmp2 / 1000000000000.0f;
tmp.convertTo(tmp, CV_32FC1);
View Code

opencv中cv::Mat数据矩阵乘法,需要各个数据的类型是一样的,且需要注意数据溢出问题,以及矩阵乘法支持Mat矩阵的数据类型(type)只能是 CV_32FC1、 CV_64FC1、 CV_32FC2、 CV_64FC2 这4种类型中的其中一种。定点化一般指的是两个浮点数据转换为整形数据相乘,这样才能加速,而我们的转换过程矩阵乘法一直都是浮点数据相乘,所以对加速没用,甚至会增加额外的转换过程的耗时。

2. 使用eigen库运算;

3. 使用加速优化的编译选项;

使用浮点运算;使用neon;可以使用不同的架构选项、ARM选项等等;

QMAKE_CXXFLAGS += -march=armv8 -mfloat-abi=hard -mfpu=vfpv4-d16 -mfpu=neon

4. 使用多线程;

注意互斥锁和信号量;

5. 使用多核并行编程;

openmp

 

 

参考

1. eigen;

2. GNU_GCC;

3. openmp_MSDN;

4. openmp_example_smallpt;

5. openmp_org;

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM