如何使用OpenMP并行化这个数组和?

时间:2014-11-21 07:19:10

标签: c arrays parallel-processing 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);

}

2 个答案:

答案 0 :(得分:11)

你应该像这样使用减少:

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

答案 1 :(得分: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);

}