【问题标题】:How to parallelize this array sum using OpenMP?如何使用 OpenMP 并行化这个数组总和?
【发布时间】:2015-01-19 06:54:27
【问题描述】:

如何使这个数组总和使用 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);

}

【问题讨论】:

    标签: c arrays parallel-processing openmp


    【解决方案1】:

    你应该像这样使用归约:

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

    【讨论】:

    • 鉴于 i 在别处定义,不应该将其标记为私有以避免竞争条件吗?
    【解决方案2】:

    查看此代码。

    #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);
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      相关资源
      最近更新 更多