2013-01-21 3 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를 사용한 선형 검색의 병렬 프로그램이 순차 선형 검색 프로그램보다 실행 시간이 더 오래 걸리는 이유는 무엇입니까?

순차 및 병렬 실행 시간을 계산할 때 사용자와 sys 시간을 추가해야합니까 (두 개의 코어를 사용함)?

pls 나를 도와주세요. 미리 감사드립니다.

+1

내가 제일 먼저해야 할 일은 검색에 훨씬 더 긴 목록을 처리하도록 프로그램을 설정하는 것입니다. 귀하가 귀하의 사례에서 제시하는 짧은 목록에 대해 병렬 처리를 설정하는 데 드는 시간 비용은 모든 이익을 훨씬 초과 할 것입니다. –

+0

I 초 고성능 마크. 병렬 처리에서 배워야 할 첫 번째 일은 병렬 처리량이 수행 된 작업량과 어떻게 비교되는지 평가하는 것입니다. 이것은 또한 다른 병렬 패러다임과 구현의 오버 헤드가 무엇인지를 배워야한다는 것을 의미합니다. 귀하의 경우 오버 헤드가 여러 번 높아져서 병렬 성능이 매우 떨어집니다. 또한'printf' 호출은 직렬 배열 전체를 반복하는 것보다 더 많은 시간이 걸릴 것입니다. –

답변

0

병렬 환경을 설정하는 데 약간의 시간이 걸립니다. 훨씬 더 큰 배열을 시도하십시오. 당신은 certanly 속도를 볼해야합니다.