1
我正在試圖學習OpenMP,瞭解我正在編寫的程序。對於它的一部分,我試圖實現一個函數來查找大型數組的平均值。這裏是我的代碼:OpenMP平均值數組
double mean(double* mean_array){
double mean = 0;
omp_set_num_threads(4);
#pragma omp parallel for reduction(+:mean)
for (int i=0; i<aSize; i++){
mean = mean + mean_array[i];
}
printf("hello %d\n", omp_get_thread_num());
mean = mean/aSize;
return mean;
}
但是,如果我運行代碼它比順序版本運行速度慢。同樣對於我得到的打印聲明:
hello 0
hello 0
這對我沒有多大意義,不應該有4個hellos?
任何幫助,將不勝感激。
在你發佈的代碼中沒有任何「hello」,所以目前還不清楚應該有多少。無論如何,什麼是'aSize'?如果它很小,那麼它並不奇怪,它是緩慢的;與啓動線程相關的開銷,並且除非您有足夠的數據來提高使用OpenMP的速度,否則開銷將佔據主導地位。 –
嗨,對不起,我意外刪除了打印行,我更新了我的代碼並將其放回。aSize是2000000,所以我認爲這應該足夠大。 – user2320239
對於剛剛添加的行,您應該只能得到一個'hello'。它是'for'循環之後的,這是你並行化的唯一東西,所以它只能由'0'線程運行。然而,它看起來是你打電話給你的功能兩次,所以它打印出來兩次。 –