C, pgcc - автоматическое распараллеливание "не исчисляемо"

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

piece=1.0/100000;
for (t=0.0; t<1.0; t=t+piece){
    x=t+piece/(float)2;
    if(x<=1.0){
        integral=4/(1+x*x);
        sum=sum+integral;
        }
}

Это не частичная сумма для всех значений в интервале 0-1. Тогда я сделал из этого значение PI. Но это не проблема, проблема в том, что когда я использую автоматическое распараллеливание с pgcc, я настраиваю количество процессов, но мне говорят, что "цикл не векторизован / распараллелен: не исчисляется", когда я компилирую свою программу. Я перепробовал все, но без изменений. Есть идеи? Спасибо

2 ответа

Решение

Я предполагаю, что это потому, что ваш счетчик цикла float или же double, Попробуйте использовать встроенный счетчик.

int step;
for (step = 0; step < 100000; step++) {
   // determine x from step
   ...
}

Ваша переменная цикла двойная, попробуйте изменить код, чтобы он использовал целое число:

for (int t = 0; t < 100000; t++) {
    x=(t/100000.0)+piece/(float)2;
    if(x<=1.0){
        integral=4/(1+x*x);
        sum=sum+integral;
        }
}
Другие вопросы по тегам