2

これをforループで使用します。これは、自動的に並列化する必要があり、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で自動並列化を使用する場合、プロセスの数を設定しますが、プログラムをコンパイルするときに「ループがベクトル化/並列化されていません:カウントできません」と言われます。私はすべてを試しましたが、それでも変化はありません。何か案は?ありがとう

4

2 に答える 2

3

ループ変数は double です。整数を使用するようにコードを変更してみてください。

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;
        }
}
于 2011-03-19T16:24:10.353 に答える
2

これは、ループカウンターがまたはであるためだと思いfloatますdouble。積分カウンターを使用してみてください。

int step;
for (step = 0; step < 100000; step++) {
   // determine x from step
   ...
}
于 2011-03-19T16:22:52.000 に答える