我想指出使用OpenMP的串行和並行程序之間的區別。我從事科學Linux工作。 這是一個簡單的程序,執行和和乘法,然後求和結果。我無法優化並行化程序
我使用函數omp_get_wtime()
來檢查執行時間,結果是並行化的部分運行速度比串行部分慢。 我認爲問題在於這種情況,因爲兩個線程都進入了交換機,這增加了執行時間。 我希望第一個線程產生總和,第二個線程進行乘法運算,以加速最終結果。你可以幫我嗎?
在我使用該程序的開頭:
#define NUM_THREADS 2
...
omp_set_num_threads(NUM_THREADS);
這是程序:
double a,b,c,d,g,timer,timer2;
printf("Insert 2 numbers \n"); cin >> a; cin >> b;
timer = omp_get_wtime();
c = a+b;
d = a*b;
g = c+d;
printf("the result is: %f\n\n",g);
printf("time: %f seconds\n\n",omp_get_wtime()-timer);
timer2 = omp_get_wtime();
#pragma omp parallel
{
switch (omp_get_thread_num())
{
case 1: c=a+b;
case 2: d=a*b;
}
}
g = c+d;
printf("parallel time: %f seconds\n\n",g,omp_get_wtime()-timer2);
注意:這裏測量的大部分時間都用在了第一個printf語句中 – enobayram 2012-02-04 12:31:40
還要注意:即使switch語句可能會比計算更昂貴(除非它至少被優化),而不是提及測量(以及在線程上的工作分配)。所以,你真的只是測量任何東西,但計算所需的時間(順便說一句,你最後的'printf'被打破)。試圖計算不需要數千個時鐘週期的計算通常是非常沒有意義的(並且對於openmp是有益的,您可能需要至少數以萬計的操作) – Grizzly 2012-02-06 01:51:38