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...