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;
}
}