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)
перед петлей.