2014-11-21 92 views
2

我怎樣才能使這個數組總和並行使用OpenMP? 什麼應該分享,什麼應該是私人的?如何使用OpenMP並行化此數組總和?

這裏是陣列和的代碼..

main()   
{   
    int a[10], i, n, sum=0;  

    printf("enter no. of elements"); 
    scanf("%d",&n); 
    printf("enter the elements"); 

    for(i=0;i<n;i++)  
     scanf("%d",&a[i]); 

    for (i=0;i<n;i++) 
     sum=sum+a[i]; 

    for(i=0;i<n;i++) 
     printf("\n a[%d] = %d", i, a[i]); 

    printf("\n sum = %d",sum); 

} 

回答

5

你應該減量使用這樣的:

#pragma omp parallel for reduction (+:sum) 
for (i=0;i<n;i++) 
    sum=sum+a[i]; 
0

退房此代碼。

#include <stdio.h> 
#include <stdlib.h> 
#include <omp.h> 
void main() 
{ 
    int sum=0; 
    int lsum=0; 
    int A[8]={1,2,3,4,5,6,7,8}; 

    #pragma omp parallel private(lsum) 
    { 
     int i; 
     #pragma omp for 
      for (i=0; i<8; i++) 
      { 
       lsum = lsum +A[i]; 
      } 
     #pragma omp critical 
      { 
      sum+=lsum; 
      } 
    } 
    printf("%d/n", sum); 

}