2013-01-21 44 views
0
#include <stdio.h> 
#include <omp.h> 
int main() 
{ 
    int i, key=85, tid; 
    int a[100] =  {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33, 34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,6 4,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94 ,95}; 
    #pragma omp parallel num_threads(2) private(i) 
    { 
     tid = omp_get_thread_num(); 
     #pragma omp for 
     for(i=0; i<100; i++) 
      if(a[i] == key) 
      { 
       printf("Key found. Position = %d by thread %d \n",  i+1, tid); 
      } 
    } 
    return 0; 
} 

這裏是我的並行程序..我用了FedoraGCC和系統是雙核... 其實我需要爲線性搜索,比較這兩個串行和並行程序,並證明平行比連續好。爲什麼使用OpenMP進行線性搜索的並行程序比順序線性搜索程序執行時間更長?

我是否需要添加用戶和系統時間來計算順序和並行執行時間(因爲這使用兩個核心)?

請幫我一把。提前致謝。

+1

我認爲你應該做的第一件事是設置你的程序來處理一個更長的列表來搜索。在你的例子中,對於這樣一個簡短的列表,設置並行性的時間成本可能遠遠超過任何好處。 –

+0

我是第二高性能商標。在並行處理中學習的第一件事是評估並行開銷與完成工作量的對比情況。這也意味着必須瞭解不同的並行範例和實現的開銷。在你的情況下,開銷會高出很多倍,這會導致非常糟糕的並行性能。另外'printf'調用可能需要比遍歷整個數組串行更多的時間。 –

回答

0

設置並行環境需要一些時間。嘗試一個更大的陣列。你應該看到加速。

相關問題