OpenCV中OpenMP的使用

2021-09-22 22:12:54 字數 2208 閱讀 6526

vs2010中呼叫openmp,並新增標頭檔案#include

出處:

#include "stdafx.h"

#include "cv.h"

#include "highgui.h"

#include #include #include #pragma comment(lib,"opencv_core2410d.lib")

#pragma comment(lib,"opencv_highgui2410d.lib")

#pragma comment(lib,"opencv_imgproc2410d.lib")

void edgeopenmp(iplimage *src,iplimage *dst,int thresh) }

void edge(iplimage *src,iplimage *dst,int thresh) }

int main()

}  int _tmain(int argc,_tchar* ar**)  

double end = omp_get_wtime( );  

cout<

cin>>end;  

return 0;  

}  

#include "stdafx.h"

#include#includeusingnamespace std;

//迴圈測試函式

void test()

}int _tmain(int argc,_tchar* ar**)

double end = omp_get_wtime( );

cout

return 0;

}

以上**中紅色字型為新增的**,以上程式是乙個典型的序列程式,經過隨機執行10次,其平均耗時約0.283273s(具體所耗時間跟測試計算機有密切的關係,測試電腦cpu採用core i7 2630qm,4核)。

下面將其轉換成並行程式,只需要在for迴圈加上#pragma omp parallel for即可,如下**(注意紅色部分):

[cpp]view plain

copy

print?

#include "stdafx.h"  

#include

#include 

using namespace std;  

//迴圈測試函式  

void test()  

}  int _tmain(int argc, _tchar* ar**)  

doubleend = omp_get_wtime( );  

cout<

cin>>end;  

return0;  

}  

#include "stdafx.h"

#include#include using namespace std;

//迴圈測試函式

void test()

}int _tmain(int argc, _tchar* ar**)

doubleend = omp_get_wtime( );

cout

return0;

}

同樣,也經過10次隨機的執行,其平均耗時約為0.06358044s,兩種不同執行方式的比較結果如下表所示: 次數

序列並行

10.283382

0.0746704

20.283654

0.0686404

30.283212

0.0536631

40.280234

0.0517737

50.283041

0.0717588

60.283126

0.0524264

70.281881

0.0580316

80.283301

0.0730386

90.284545

0.0745088

100.286353

0.0572926

平均值0.283273

0.06358044

兩種執行方式的結果如下圖所示:

從上面的分析結果可見,採用openmp並行所耗時間僅為序列的22.44%,節約近4.5倍的時間。

OpenCV 中CV IMAGE ELEM 的使用

cv image elem image,elemtype,row,col 其中,image為指標陣列,elemtype為資料的訪問型別,row為影象的高度,範圍 0 height col為影象的寬度,範圍 0 width height cvgetsize image height width cvg...

OpenMP中的任務排程

openmp中,任務排程主要用於並行的for迴圈中,當迴圈中每次迭代的計算量不相等時,如果簡單地給各個執行緒分配相同次數的迭代的話,會造成各個執行緒計算負載不均衡,這會使得有些執行緒先執行完,有些後執行完,造成某些cpu核空閒,影響程式效能。例如以下 int i,j int a 100 100 fo...

OpenMP中的任務排程

openmp中的任務排程 openmp中,任務排程主要用於並行的for迴圈中,當迴圈中每次迭代的計算量不相等時,如果簡單地給各個執行緒分配相同次數的迭代的話,會造成各個執行緒計算負載不均衡,這會使得有些執行緒先執行完,有些後執行完,造成某些cpu核空閒,影響程式效能。例如以下 int i,j int...