как распараллелить эту функцию - PullRequest
1 голос
/ 02 ноября 2011

У меня есть функция, которая отнимает много времени, и она выглядит так, поскольку значение n очень большое

sum=0; for(i=0;i<n;i++)
{
     a=func(i,b);
     c=func(i,a);
     sum+=c;  
}

Возможно ли распараллелить этот цикл с помощью openMp?

1 Ответ

4 голосов
/ 02 ноября 2011

Вот краткий путь:

int sum = 0;

#pragma omp parallel for reduction(+:sum)
    for(i = 0; i < n; i++){
        int a = func(i,b);
        int c = func(i,a);
        sum += c;
    }

Вот более длинный (но более гибкий) способ:

int sum = 0;

#pragma omp parallel
    {
        int local_sum = 0;

#pragma omp for
        for(i = 0; i < n; i++){
            a = func(i,b);
            c = func(i,a);
            local_sum += c;
        }

#pragma omp critical
        {
            sum += local_sum;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...