【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