如何使用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);
}
答案 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);
}