[英]openMP histogram comparison
我正在研究比較圖像直方圖,購買計算相關性,交集,ChiSquare和其他一些方法的代碼。 這些功能的一般外觀彼此非常相似。
通常我使用pthreads,但這次我決定使用openMP構建小型原型(由於它簡單),看看我會得到什么樣的結果。
這是通過相關性進行比較的示例,除了單行openMP循環之外,代碼與串行實現相同。
double comp(CHistogram* h1, CHistogram* h2){
double Sa = 0;
double Sb = 0;
double Saa = 0;
double Sbb = 0;
double Sab = 0;
double a, b;
int N = h1->length;
#pragma omp parallel for reduction(+:Sa,Sb,Saa,Sbb,Sab) private(a ,b)
for (int i = 0; i<N;i++){
a =h1->data[i];
b =h2->data[i];
Sa+=a;
Sb+=b;
Saa+=a*a;
Sbb+=b*b;
Sab+=a*b;
}
double sUp = Sab - Sa*Sb / N;
double sDown = (Saa-Sa*Sa / N)*(Sbb-Sb*Sb / N);
return sUp / sqrt(sDown);
}
有沒有更多方法可以使用openMP加速此功能?
謝謝!
PS:我知道最快的方法就是比較多個線程中不同的直方圖對,但這不適用於我的情況,因為一次只有2個直方圖可用。
測試四核機器
我有一點不確定性,在較長時間運行openmp似乎比串行更好。 但是如果我只是將它與單個直方圖進行比較並在使用時間內測量時間,那么串行速度大約是20倍。
我想openmp在看到外部循環時會進行一些優化。 但在一個真正的解決方案中,我將在直方圖比較之間有一些代碼,我不確定它是否會以相同的方式運行。
OpenMp需要一些時間來設置並行區域。 這種開銷意味着您需要注意開銷不大於通過設置並行區域獲得的性能。 在你的情況下,這意味着只有當N達到一定數量時才會打開MP加速計算。
您應該考慮減少openMP調用總數的方法,例如是否可以在此函數外部設置並行區域,以便您可以並行比較不同的直方圖?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.