C,pgcc - 自动并行化“不可数”

时间:2011-03-19 16:17:41

标签: c pgcc

我使用这个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中所有值的doint部分和。然后我从它做了PI值。但这不是问题,问题是,当我使用pgcc自动并行化时,我设置了多个进程,但是当我编译程序时,我被告知“循环没有矢量化/并行化:不可数”。我已经尝试了一切,但仍然没有改变。有任何想法吗?感谢

2 个答案:

答案 0 :(得分: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;
        }
}

答案 1 :(得分:2)

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

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