C, pgcc - автоматическое распараллеливание "не исчисляемо" - PullRequest
2 голосов
/ 19 марта 2011

Я использую это для цикла, который я хочу автоматически распараллеливать, он используется для подсчета числа 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 ]

3 голосов
/ 19 марта 2011

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

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;
        }
}
2 голосов
/ 19 марта 2011

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

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