Openmp 'shared' недействителен для p #pragma omp - PullRequest
1 голос
/ 28 марта 2012

Привет, я получаю странную ошибку

#include <omp.h>
#define N 1000

main ()
{

int i, nthreads;
int chunk = 10;
float a[N], b[N], c[N], d[N];
double result =0;

#pragma omp parallel 
{

nthreads = omp_get_num_threads();
printf("no of threads %d", nthreads);

#pragma omp for  shared(a,b,c,d,result) private(i)  schedule(static,chunk) // line 18
for (i=0; i < N; i++){
  a[i] = i * 1.5;
  b[i] = i + 22.35;
}

#pragma omp barrier

#pragma omp for schedule(static,chunk) shared(a,b,c,d,result) private(i)  reduction(+:result)   // line 26
for(i=0; i < N; i++){
result = result + (a[i]+b[i]);
}

}
printf("value is %f", result);

}

В соответствии с прагмой openmp для правил, shared разрешен, но здесь я получаю ошибку компиляции просто потому, что я использую shared здесьМожет кто-нибудь, пожалуйста, помогите мне.

test2.c:18: error: ‘shared’ is not valid for ‘#pragma omp for’
test2.c:26: error: ‘shared’ is not valid for ‘#pragma omp for’

1 Ответ

2 голосов
/ 03 августа 2012

Из комментариев к вашему вопросу я понимаю, что фиксированный код должен выглядеть так:

#include <omp.h>
#define N 1000

main ()
{

    int i, nthreads;
    int chunk = 10;
    float a[N], b[N], c[N], d[N];
    double result =0;

    #pragma omp parallel shared(a,b,c,d,result) private(i)
    {

        nthreads = omp_get_num_threads();
        printf("no of threads %d", nthreads);

        #pragma omp for schedule(static,chunk) // line 18
        for (i=0; i < N; i++){
          a[i] = i * 1.5;
          b[i] = i + 22.35;
        }

        #pragma omp barrier

        #pragma omp for schedule(static,chunk) reduction(+:result)   // line 26
        for(i=0; i < N; i++){
            result = result + (a[i]+b[i]);
        }

    }
    printf("value is %f", result);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...