pgcc, C - цикл не распараллелен: может быть не выгоден

Я хочу помочь выяснить автоматическое распараллеливание с ошибкой - цикл не распараллелен: может быть не выгодно. Я хочу проверить этот код на распараллеливание, но я не знаю, как сделать код эффективным, чтобы компилятор распараллелил его.

Вот код:

   for (i = 0; i < piece_length; i++) {
       x=(i/(double)piece_length)+piece/(float)2;
      // if(x<=1.0){
           integral=4/(1+x*x);
           sum=sum+integral;
      // }  

    }

Цикл не распараллелен: не может быть полезным

Знаете ли вы, как сделать этот цикл более длительным, чтобы иметь возможность принимать автоматическое распараллеливание?

Спасибо

1 ответ

Решение

Результат, который вы накапливаете в sum зависит от порядка вычисления. Я полагаю, что у pgcc должен быть способ, которым вы можете сказать, что вас не волнуют последствия, которые может иметь переупорядочение. Но как таковой он не может знать и ничего не может распараллелить.

В OpenMp вы бы положили что-то вроде

#pragma omp parallel for reduction(+: sum)

перед петлей.

Другие вопросы по тегам