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

您的循环变量是双精度的,请尝试更改代码,使其使用整数:

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

我猜这是因为你的循环计数器是 a floator double。尝试使用积分计数器。

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